Печатая, но слева [закрыто]

14

Фон

Вам дали задание делать заметки для встречи. Вы начинаете печатать в своем Google Doc, но у вас недостаточно времени, чтобы посмотреть на клавиатуру во время ввода.

К счастью для вас, вы можете печатать, не глядя на клавиатуру. После встречи вы понимаете, что все, что вы ввели, было одной клавишей слева.

Соревнование

Для этого испытания вы будете использовать буквы, цифры и пробел на раскладке клавиатуры QWERTY.

  • При вводе текста (из любого стандартного метода ввода) выведите результирующий текст, где каждый символ перемещается на клавиатуре слева направо.

    • Для большинства букв просто посмотрите на букву и переведите ее в букву слева ( cстановится x, tстановится rи т. Д.).

    • Для буквы qпереведите буквальный символ табуляции ( \t).

    • Для буквы aвключите заглавные буквы , чтобы заглавная буква остальной части строки была обратной.

    • Для буквы zиспользуйте следующую букву в строке.

    • Для пробела перевод не требуется.

  • Сохраняйте заглавные буквы при переводе и помните о блокировке прописных букв (если включена блокировка прописных букв, убедитесь, что дело обстоит иначе).

  • Все символы во входной строке будут буквами, цифрами или пробелом. Никакие знаки препинания или другие символы не могут быть включены.

Тестовые случаи

\t буквальный символ табуляции

Hello world    -> Gwkki qieks
Code Golf      -> Xisw Fikd
Queried apples -> \tyweuws OOKWA

счет

Самый низкий результат в байтах побеждает. Веселиться!

connectyourcharger
источник
11
Был бы полезен краткий справочник по соответствующим строкам клавиатуры QWERTY, и задача была бы автономной
Джо Кинг,
4
Сдвигаются ли числа к пунктуации, если перед ними стоит буква «Z»?
ErikF
10
Но Z соответствует сдвигу ...?
Несвязанная Строка
4
Предлагаемый тестовый пример: Azerty->wERT
Джитс
5
Что касается буквы z, используйте следующую заглавную букву в строке -> означает ли это, что мы должны заботиться только о заглавных буквах и не переключаться между цифрами и символами? Каков ожидаемый результат 0123456789, a0123456789а z0z1z2z3z4z5z6z7z8z9? (Кроме того, на многих клавиатурах, отличных от QWERTY, «Caps Lock» действительно действует как «Shift Lock». Я считаю, что QWERTY не следует этому шаблону, но его следует указывать для тех из нас, кто не знаком с ним. )
Арно

Ответы:

11

JavaScript (V8) , 271 байт

f=(s,k='~!@#$%^&*()_+`1234567890-=\tQWERTYUIOP{}|\tqwertyuiop[]\\ASDFGHJKL:"\n\\asdfghjkl;\'ZXCVBNM<>?zxcvbnm,./')=>s.replace(/[^ ]/g,c=>k[k.indexOf(c)-1]).replace(/\\([^\\]*)\\?/g,(m,c)=>c.replace(/[a-zA-z]/g,l=>l>'Z'?l.toUpperCase():l.toLowerCase())).replace(/[?']/,"")

Попробуйте онлайн! Мой первый код JavaScript для гольфа. Это определенно может быть короче, но я думаю, что это хорошее начало.
Он в основном находит каждый символ в kстроке и заменяет его на предыдущий, затем меняет регистр всего, что находится между Aили a, и удаляет все вхождения Zили z(так как клавиша Shift сама по себе ничего не делает).
Это должна быть нормальная раскладка клавиатуры QWERTY, но дайте мне знать, если нет.

Мэтью Дженсен
источник
В вашей собственной ссылке TIO zebras=>wveAконтрольный пример кажется неправильным. Первый zдолжен заставить eпечатать заглавные буквы w. От OP: «Для буквы z, заглавная следующая буква в строке.»
Ночь2
@ Night2 Приветствия, я отправил прежде, чем OP сделал разъяснение. Я предполагал, что нажатие клавиши Shift один раз ничего не сделает.
Мэтью Дженсен
5

Python 3 , 211 байт

d=' ~!@#$%^&*()`~1!2@3#4$5%6^7&8*9(0)		qQwWeErRtTyYuUiIoOpPaAsSdDfFgGhHjJkKlLzZxXcCvVbBnNmM  '
c=s=0
for i in input():k=d.find(i);print(end=d[k-2+(c*i.isalpha()^s)*(1-k%2*2)][i in'aAzZ':]);c^=i in'aA';s=i in'zZ'

Попробуйте онлайн!

Использует строку поиска, в которой обычный символ и его измененная смещение версия сгруппированы вместе. Для каждого символа на входе он получит символ в двух местах слева. Изменяет заглавные буквы, добавляя 1(или -1если текущий символ в верхнем регистре) значение поиска, когда активна блокировка XOR caps. На числа не влияет модификатор caps lock.

Jitse
источник
2

PHP , 227 байт

for(;''<$s=$argn[$i++];)$s!=a&&$s!=A?$s!=z&&$s!=Z?($t=$m[stripos($m='~1!2@3#4$5%6^7&8*9(0	qwertyuiopasdfghjklzxcvbnm',$s)-1])+(print$s>' '?$s<A?!$h?$s-1?$s?$s-1:9:'`':$t:($t>=A&&(($s<a)+$h+$c)%2?$t^' ':$t):$s)+$h=0:$h=1:$c=!$c;

Попробуйте онлайн!

Я создал строку сопоставления ( ~1!2@3#4$5%6^7&8*9(0 qwertyuiopasdfghjklzxcvbnm), которая для каждой цифры имеет свой режим SHIFT слева, а для каждой буквы слева - буква / ключ.

Я зацикливаю вводимые символы и для каждого символа:

  • Если символ равен aили A, флаг блокировки прописными буквами меняется на обратный (логически нет).
  • Если символ zили Z, флаг сдвига установлен в 1.
  • Когда персонажа нет в aAzZ:
    • Символ слева от текущего символа в строке отображения хранится в $t.
    • Если текущий символ является пробелом, он печатается.
    • Если текущий символ является цифрой, а если флаг сдвига 1, $tпечатаются, иначе, если цифра 1, `печатается, если цифра 0, 9печатаются и в противном случае, digit-1печатаются.
    • Если текущим символом является буква, в зависимости от состояния флага сдвига, флага заглавных букв и регистров текущего символа (нижний / верхний), $tпечатается нижний или верхний регистр. Единственным частным случаем здесь является символ табуляции, который печатается как есть.
    • Флаг Shift всегда устанавливается 0в конце.
night2
источник
2

Красный , 218 байт

func[t][c: z: 0 rejoin collect[foreach s t[case[find"Aa"s[c: c xor 32]find"Zz"s[z: 32]on
[keep(select/case"  poiuytrewq^-lkjhgfdsamnbvcxzPOIUYTREWQ^-LKJHGFDSAMNBVCXZ0987654321~"s)xor either s <#"Z"[0][c xor z]z: 0]]]]]

Попробуйте онлайн!

В настоящее AaZzвремя не влияет на цифры.

Гален Иванов
источник
Это не похоже на работу'A pear' -> ' OWe'
Jitse
@ Джитс Хмм
Гален Иванов
@Jitse Но на самом деле не очень хорошо работает с цифрами, это не совсем понятно из ОП
Гален Иванов
2
Я согласен, проблема очень двусмысленная, как есть.
Джитс
2

C (gcc) , 276 байтов

i;j;k;h;l;m;n;o;f(char*b){char*c=calloc(m=strlen(b),1),*a=" \tqwertyuiop\aasdfghjkl\nzxcvbnm\tQWERTYUIOP\aASDFGHJKL\nZXCVBNM`1234567890";for(i=k=j=n=0;j<=m;l=a[i=index(a,b[j++])-a-1])k=l^7?k:!k,o=l>64&l<91?a[i-30*k]:l<97?h=i?l^7?l?l^10?l:0:32:0:0:a[i+29*k],o?c[n++]=o:n;b=c;}

Благодаря потолку кошки за -33 байта.

Попробуйте онлайн!

girobuz
источник
Предложить k^=!(l^7)вместоk=l^7?k:!k
потолок кошка