Pisanie, ale w lewo [zamknięte]

14

tło

Otrzymałeś zadanie sporządzania notatek na spotkanie. Zaczynasz pisać w Dokumentach Google, ale podczas spotkania nie masz wystarczająco dużo czasu, aby spojrzeć na klawiaturę podczas pisania.

Na szczęście dla Ciebie możesz pisać bez patrzenia na klawiaturę. Po spotkaniu zdajesz sobie sprawę, że wszystko, co wpisałeś, było jednym klawiszem po lewej stronie.

Wyzwanie

Do tego wyzwania użyjesz liter, cyfr i spacji układu klawiatury QWERTY.

  • Biorąc pod uwagę wprowadzanie tekstu (z dowolnej standardowej metody wprowadzania), wypisz wynikowy tekst, w którym każdy znak jest przesuwany na klawiaturze o jeden w lewo.

    • W przypadku większości liter wystarczy spojrzeć na literę i przetłumaczyć ją na literę po lewej stronie ( cstaje się x, tstaje się ritp.).

    • W przypadku litery qprzetłumacz na literowy znak tabulacji ( \t).

    • W przypadku litery awłącz blokadę wielkich liter, aby wielkość liter w pozostałej części łańcucha była odwrócona.

    • W przypadku litery zwielką literę należy wpisać następną literą.

    • Spacja nie wymaga tłumaczenia.

  • Zachowaj wielkie litery podczas tłumaczenia i pamiętaj o Caps Lock (jeśli włączona jest Caps Lock, upewnij się, że przypadek jest odwrotny).

  • Wszystkie znaki w ciągu wejściowym będą literami, cyframi lub spacją. Nie można uwzględniać interpunkcji ani innych znaków.

Przypadki testowe

\t to dosłowny znak tabulacji

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

Punktacja

Najniższy wynik w bajtach wygrywa. Baw się dobrze!

podłącz ładowarkę
źródło
11
Przydatne byłoby szybkie odniesienie do odpowiednich wierszy klawiatury QWERTY i utrzymanie samowystarczalności wyzwania
Jo King,
4
Czy liczby zmieniają się na interpunkcyjne, jeśli przed nimi było „Z”?
ErikF,
10
Ale Z odpowiada przesunięciu ...?
Niepowiązany ciąg
4
Sugerowany przypadek testowy: Azerty->wERT
Jitse
5
W przypadku litery zwielką literą należy wpisać następną literę -> czy to oznacza, że ​​musimy się tylko przejmować dużymi literami i nie musimy przełączać się między cyframi i symbolami? Co znajduje się w oczekiwany wyjście 0123456789, a0123456789i z0z1z2z3z4z5z6z7z8z9? (Poza tym na wielu klawiaturach innych niż QWERTY „Caps Lock” naprawdę działa jak „Shift Lock”. Uważam, że QWERTY nie stosuje się do tego wzoru, ale należy go określić dla tych z nas, którzy go nie znają. )
Arnauld,

Odpowiedzi:

11

JavaScript (V8) , 271 bajtów

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(/[?']/,"")

Wypróbuj online! Mój pierwszy golf JavaScript. Może być zdecydowanie krótszy, ale myślę, że to dobry początek.
Zasadniczo znajduje każdy znak w kciągu i zastępuje go poprzednim, a następnie zamienia wielkość liter między Alub a, i usuwa wszystkie wystąpienia Zlub z(ponieważ klawisz Shift sam nic nie robi).
To powinien być normalny układ klawiatury QWERTY, ale daj mi znać, jeśli nie.

Matthew Jensen
źródło
W twoim łączu TIO zebras=>wveAprzypadek testowy wydaje się nieprawidłowy. Pierwszy zpowinien spowodować ewydrukowanie wielkiej litery w. Od OP: „W przypadku litery zwielką literę należy wpisać wielką literą w ciągu”.
Noc 2
@ Night2 Pozdrawiam, napisałem zanim OP dokonało wyjaśnienia. Zakładałem, że naciśnięcie klawisza Shift raz nic nie da.
Matthew Jensen,
5

Python 3 , 211 bajtów

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'

Wypróbuj online!

Używa łańcucha wyszukiwania, w którym normalny znak i jego wersja modyfikowana przesunięciem są zgrupowane. Dla każdego znaku na wejściu wycofa znak o dwa miejsca po lewej stronie. Zmienia wielkie litery, dodając 1(lub -1jeśli bieżący znak jest pisany wielkimi literami) do wartości odnośnika, gdy aktywna jest blokada klawisza shift XOR. Modyfikator Caps Lock nie wpływa na liczby.

Jitse
źródło
2

PHP , 227 bajtów

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;

Wypróbuj online!

Utworzyłem ciąg odwzorowania ( ~1!2@3#4$5%6^7&8*9(0 qwertyuiopasdfghjklzxcvbnm), który dla każdej cyfry ma tryb SHIFT po lewej, a dla każdej litery ma literę / klawisz po lewej stronie.

Pętlę znaki wejściowe i dla każdego znaku:

  • Jeśli znak to alub A, flaga Caps Lock zostaje odwrócona (logiczne nie).
  • Jeśli znakiem jest zlub Z, flaga przesunięcia jest ustawiona na 1.
  • Gdy postać nie jest w aAzZ:
    • Znak po lewej stronie bieżącego znaku w ciągu odwzorowania jest przechowywany w $t.
    • Jeśli bieżący znak jest spacją, jest drukowany.
    • Jeśli bieżącym znakiem jest cyfra, a flaga przesunięcia jest 1, $tjest drukowana, w przeciwnym razie, jeśli cyfra jest 1, `jest drukowana, jeśli cyfra jest 0, 9jest drukowana, a poza tym digit-1jest drukowana.
    • Jeżeli bieżącym znakiem jest litera, na podstawie statusu flagi shift, flagi caps lock i obudowy bieżącego znaku (dolny / górny), $tdrukowane są małe lub duże litery. Jedynym szczególnym przypadkiem jest tutaj znak tabulacji, który jest drukowany w niezmienionej postaci.
    • Flaga Shift jest zawsze ustawiona z powrotem 0na końcu.
Noc 2
źródło
2

Czerwony , 218 bajtów

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]]]]]

Wypróbuj online!

Obecnie AaZznie wpływają na cyfry.

Galen Iwanow
źródło
To nie wydaje się działać'A pear' -> ' OWe'
Jitse
@Jitse Hmm
Galen Iwanow
@Jitse Ale tak naprawdę nie działa dobrze z cyframi, nie jest całkowicie jasne z OP
Galen Iwanow
2
Zgadzam się, wyzwanie jest bardzo dwuznaczne.
Jitse,
2

C (gcc) , 276 bajtów

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;}

Dzięki pułapowi cat na 33 bajty.

Wypróbuj online!

girobuz
źródło
Zaproponuj k^=!(l^7)zamiastk=l^7?k:!k
ceilingcat