Введення тексту, але зліва [закрито]


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

Оцінка балів

Найнижча оцінка в байтах. Веселіться!


11
Швидкий довідник про відповідні рядки клавіатури QWERTY був би корисним, і виклик не буде мати самостійно
Jo King

4
Чи зміщуються цифри вгору до пунктуації, якщо перед ними було "Z"?
ErikF

10
Але Z відповідає зсуву ...?
Непов’язана струна

4
Пропонований тестовий випадок: Azerty->wERT
Jitse

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. З ОП: "Для літери 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якщо поточний символ є великим регістром) до значень пошуку, коли активовано блокування XS Cap. Число не впливає на модифікатор блокування ковпачків.


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, встановлено прапор shift 1.
  • Коли персонаж не в aAzZ:
    • Символ зліва від поточного символу в рядку відображення зберігається в $t.
    • Якщо поточний символ є пробілом, він друкується.
    • Якщо поточний символ є цифрою, а якщо прапор зсуву 1, $tдрукуються, інакше, якщо цифра 1, `друкується, якщо цифра 0, 9друкуються і в іншому випадку, digit-1друкуються.
    • Якщо поточним символом є лист, заснований на статусі прапора зсуву, $tдрукується прапор блокування та корпус поточного символу (нижній / верхній), у нижньому або верхньому регістрі друкується. Єдиний особливий випадок тут - символ вкладки, який друкується як є.
    • Прапор Shift завжди встановлюється 0в кінці.

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 Але насправді не дуже добре з цифрами, це не зовсім зрозуміло з ОП
Гален Іванов

2
Я погоджуюся, виклик дуже неоднозначний.
Jitse

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 байт.

Спробуйте в Інтернеті!


Запропонувати k^=!(l^7)замістьk=l^7?k:!k
roofcat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.