Digitando, ma a sinistra [chiuso]


14

sfondo

Ti è stato assegnato un compito di prendere appunti per una riunione. Inizi a digitare sul tuo documento Google, ma non hai abbastanza tempo durante la riunione per guardare la tastiera mentre digiti.

Fortunatamente per te, puoi digitare senza guardare la tastiera. Dopo l'incontro, ti rendi conto che tutto ciò che hai digitato era una chiave a sinistra.

La sfida

Per questa sfida, utilizzerai le lettere, i numeri e la barra spaziatrice del layout della tastiera QWERTY.

  • Dato un input di testo (da qualsiasi metodo di input standard), genera il testo risultante, dove ogni carattere viene spostato uno a sinistra sulla tastiera.

    • Per la maggior parte delle lettere, basta guardare la lettera e tradurla nella lettera a sinistra ( cdiventa x, tdiventa r, ecc.).

    • Per la lettera q, traduci in un carattere di tabulazione letterale ( \t).

    • Per la lettera a, abilita il blocco maiuscole, in modo che la maiuscola del resto della stringa sia invertita.

    • Per lettera z, scrivere in maiuscolo la lettera successiva nella stringa.

    • Non è richiesta alcuna traduzione per la barra spaziatrice.

  • Conserva le maiuscole durante la traduzione e fai attenzione al blocco maiuscole (se il blocco maiuscole è abilitato, assicurati che il caso sia l'opposto).

  • Tutti i caratteri nella stringa di input saranno lettere, numeri o uno spazio. Non è possibile includere punteggiatura o altri caratteri.

Casi test

\t è un carattere di tabulazione letterale

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

punteggio

Il punteggio più basso in byte vince. Divertiti!


11
Un rapido riferimento alle righe pertinenti della tastiera QWERTY sarebbe utile e manterrà la sfida autonoma
Jo King

4
I numeri vengono spostati fino alla punteggiatura se prima di loro c'era una "Z"?
ErikF

10
Ma Z corrisponde a spostamento ...?
Corda non correlata

4
Caso di prova suggerito: Azerty->wERT
Jitse

5
Per la lettera z, scrivere in maiuscolo la lettera successiva nella stringa -> significa che dobbiamo preoccuparci solo delle lettere maiuscole e non passare da cifre a simboli? Qual è l'output previsto per 0123456789, a0123456789e z0z1z2z3z4z5z6z7z8z9? (Inoltre, su molte tastiere non QWERTY, 'Caps Lock' funge davvero da 'Shift Lock'. Credo che QWERTY non segua questo schema, ma dovrebbe essere specificato per quelli di noi che non lo conoscono. )
Arnauld,

Risposte:


11

JavaScript (V8) , 271 byte

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

Provalo online! Il mio primo codice JavaScript golf. Potrebbe sicuramente essere più breve, ma penso che questo sia un buon inizio.
Fondamentalmente trova ogni carattere nella kstringa e lo sostituisce con quello precedente, quindi scambia il caso di tutto tra Ao ae rimuove tutte le occorrenze di Zo z(poiché il tasto Maiusc non fa nulla da solo).
Questo dovrebbe essere un normale layout di tastiera QWERTY, ma fammi sapere se no.


Nel tuo link TIO, il zebras=>wveAtest case sembra essere sbagliato. Il primo zdovrebbe causare la estampa di lettere maiuscole w. Da OP: "Per la lettera z, scrivere in maiuscolo la lettera successiva nella stringa".
Night2

@ Night2 Cheers, ho pubblicato prima che OP facesse il chiarimento. Ho pensato che premere una volta il tasto Maiusc non farà nulla.
Matthew Jensen,

5

Python 3 , 211 byte

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'

Provalo online!

Utilizza una stringa di ricerca in cui sono raggruppati il ​​carattere normale e la sua versione modificata in maiuscolo. Per ogni personaggio nell'input, recupererà il personaggio due posizioni a sinistra. Modifica le maiuscole aggiungendo 1(o -1se il carattere corrente è in maiuscolo) al valore di ricerca quando il blocco maiusc XOR è attivo. I numeri non sono influenzati dal modificatore del blocco maiuscole.


2

PHP , 227 byte

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;

Provalo online!

Ho creato una stringa di mappatura ( ~1!2@3#4$5%6^7&8*9(0 qwertyuiopasdfghjklzxcvbnm) che per ogni cifra ha la modalità SHIFT a sinistra e per ogni lettera ha la lettera / chiave alla loro sinistra.

Passo sopra i caratteri di input e per ogni personaggio:

  • Se il carattere è ao A, il flag di blocco maiuscole viene invertito (logicamente no).
  • Se il personaggio è zo Z, il flag di spostamento è impostato su 1.
  • Quando il personaggio non è in aAzZ:
    • Il carattere a sinistra del carattere corrente nella stringa di mappatura è memorizzato in $t.
    • Se il carattere corrente è uno spazio, viene stampato.
    • Se il carattere corrente è una cifra, e se la bandiera di spostamento è 1, $tviene stampata, altrimenti, se la cifra è 1, `viene stampata, se la cifra è 0, 9viene stampata e altrimenti, digit-1viene stampata.
    • Se il carattere corrente è una lettera, in base allo stato della bandierina maiuscola, della bandierina di blocco maiuscole e dell'involucro del carattere corrente (inferiore / superiore), $tviene stampato in lettere minuscole o maiuscole. L'unico caso speciale qui è il carattere di tabulazione, che viene stampato così com'è.
    • Shift flag è sempre riportato alla 0fine.

2

Rosso , 218 byte

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

Provalo online!

Attualmente AaZznon influisce sulle cifre.


Questo non sembra funzionare per'A pear' -> ' OWe'
Jitse,

@Jitse Hmm
Galen Ivanov,

@Jitse Ma in realtà non funziona bene con le cifre, non è del tutto chiaro dall'OP
Galen Ivanov,

2
Sono d'accordo, la sfida è molto ambigua così com'è.
Jitse,

2

C (gcc) , 276 byte

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

Grazie a ceilingcat per -33 byte.

Provalo online!


Suggerisci k^=!(l^7)invece dik=l^7?k:!k
ceilingcat il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.