Tippen, aber links [geschlossen]


13

Hintergrund

Sie haben die Aufgabe erhalten, sich Notizen für ein Meeting zu machen. Sie beginnen mit der Eingabe in Ihrem Google Text & Tabellen-Dokument, haben jedoch nicht genügend Zeit, während des Meetings auf Ihre Tastatur zu schauen, während Sie tippen.

Glücklicherweise können Sie tippen, ohne auf Ihre Tastatur zu schauen. Nach dem Meeting stellen Sie fest, dass alles, was Sie eingegeben haben, eine Taste links war.

Die Herausforderung

Für diese Herausforderung verwenden Sie die Buchstaben, Zahlen und die Leertaste des QWERTZ-Tastaturlayouts.

  • Geben Sie bei einer Texteingabe (mit einer beliebigen Standardeingabemethode) den resultierenden Text aus, wobei jedes Zeichen auf der Tastatur um eins nach links verschoben wird.

    • Schauen Sie sich für die meisten Buchstaben einfach den Buchstaben an und übersetzen Sie ihn in den Buchstaben auf der linken Seite ( cwird x, twird rusw.).

    • Für Buchstaben qübersetzen Sie in ein literales Tabulatorzeichen ( \t).

    • aAktivieren Sie für Buchstaben die Feststelltaste, damit die Groß- und Kleinschreibung für den Rest der Zeichenfolge umgekehrt wird.

    • zGroßschreiben Sie für Buchstaben den nächsten Buchstaben in der Zeichenfolge.

    • Für die Leertaste ist keine Übersetzung erforderlich.

  • Behalten Sie die Groß- und Kleinschreibung bei, während Sie übersetzen, und achten Sie auf die Feststelltaste (wenn die Feststelltaste aktiviert ist, stellen Sie sicher, dass der umgekehrte Fall vorliegt).

  • Alle Zeichen in der Eingabezeichenfolge sind Buchstaben, Zahlen oder Leerzeichen. Keine Interpunktion oder andere Zeichen können enthalten sein.

Testfälle

\t ist ein wörtliches Tabulatorzeichen

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

Wertung

Die niedrigste Punktzahl in Bytes gewinnt. Habe Spaß!


11
Ein kurzer Überblick über die relevanten Zeilen der QWERTZ-Tastatur wäre nützlich und würde die Herausforderung in sich geschlossen halten
Jo King

4
Werden Zahlen zur Interpunktion verschoben, wenn vor ihnen ein "Z" stand?
ErikF

10
Aber Z entspricht Verschiebung ...?
Unabhängiger String

4
Vorgeschlagener Testfall: Azerty->wERT
Jitse

5
zGroßschreiben Sie für Buchstaben den nächsten Buchstaben in der Zeichenfolge -> bedeutet das, dass wir uns nur um die Großschreibung von Buchstaben kümmern müssen und nicht zwischen Ziffern und Symbolen wechseln müssen? Was ist der erwartete Ausgang für 0123456789, a0123456789und z0z1z2z3z4z5z6z7z8z9? (Außerdem fungiert die Feststelltaste auf vielen Nicht-QWERTZ-Tastaturen tatsächlich als Umschaltsperre. Ich glaube, dass QWERTZ diesem Muster nicht folgt, aber es sollte für diejenigen von uns angegeben werden, die nicht damit vertraut sind. )
Arnauld

Antworten:


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

Probieren Sie es online! Mein erster JavaScript Code Golf. Es könnte definitiv kürzer sein, aber ich denke, das ist ein guter Anfang.
Im Grunde findet es jedes Zeichen in der kZeichenkette und ersetzt es durch das vorherige, vertauscht dann den Fall von allem zwischen dem Aoder aund entfernt alle Vorkommen von Zoder z(da die Umschalttaste nichts für sich tut).
Dies sollte ein normales QWERTZ-Tastaturlayout sein, aber lassen Sie es mich wissen, wenn nicht.


In Ihrem eigenen TIO-Link zebras=>wveAscheint der Testfall falsch zu sein. Die erste zsollte bewirken e, dass ein Großbuchstabe gedruckt wird w. Von OP: " zGroßschreiben Sie für Buchstaben den nächsten Buchstaben in der Zeichenfolge."
Night2

@ Night2 Cheers, ich habe vor OP die Klärung vorgenommen. Ich bin davon ausgegangen, dass das einmalige Drücken der Umschalttaste nichts bewirkt.
Matthew Jensen

5

Python 3 , 211 Bytes

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'

Probieren Sie es online!

Verwendet eine Suchzeichenfolge, in der das normale Zeichen und seine umschaltmodifizierte Version zusammengefasst sind. Für jedes Zeichen in der Eingabe wird das Zeichen zwei Stellen links abgerufen. Ändert die Großschreibung durch Hinzufügen 1(oder -1wenn das aktuelle Zeichen in Großbuchstaben geschrieben ist) zum Suchwert, wenn die Umschalt-XOR-Feststelltaste aktiviert ist. Zahlen werden vom Feststelltasten-Modifikator nicht beeinflusst.


2

PHP , 227 Bytes

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;

Probieren Sie es online!

Ich habe eine Zuordnungszeichenfolge ( ~1!2@3#4$5%6^7&8*9(0 qwertyuiopasdfghjklzxcvbnm) erstellt, die für jede Ziffer links den UMSCHALT-Modus und für jeden Buchstaben den Buchstaben / die Taste links davon enthält.

Ich durchlaufe Eingabezeichen und für jedes Zeichen:

  • Wenn das Zeichen aoder ist A, wird die Feststelltaste umgekehrt (logisch nicht).
  • Wenn das Zeichen zoder ist Z, wird das Umschalt-Flag auf gesetzt 1.
  • Wenn der Charakter nicht in ist aAzZ:
    • Das Zeichen links vom aktuellen Zeichen in der Zuordnungszeichenfolge wird in gespeichert $t.
    • Wenn das aktuelle Zeichen ein Leerzeichen ist, wird es gedruckt.
    • Wenn aktuelle Zeichen eine Ziffer ist, und wenn Shift - Flag 1, $tgedruckt wird, sonst, wenn Ziffer ist 1, `wird gedruckt, wenn Ziffer ist 0, 9gedruckt wird und ansonsten digit-1gedruckt wird.
    • Wenn das aktuelle Zeichen ein Buchstabe ist, werden basierend auf dem Status des Umschalt-Flags, des Feststelltastens und der Groß- / Kleinschreibung des aktuellen Zeichens (Groß- / Kleinschreibung) $tgedruckt. Der einzige Sonderfall ist das Tabulatorzeichen, das so gedruckt wird, wie es ist.
    • Das Umschalt-Flag wird immer 0am Ende zurückgesetzt.

2

Rot , 218 Bytes

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

Probieren Sie es online!

Betrifft AaZzderzeit keine Ziffern.


Dies scheint nicht zu funktionieren'A pear' -> ' OWe'
Jitse

@Jitse Hmm
Galen Ivanov

@Jitse Funktioniert aber wirklich nicht gut mit Ziffern, es ist nicht ganz klar aus dem OP
Galen Ivanov

2
Ich stimme zu, die Herausforderung ist so wie sie ist sehr vieldeutig.
Jitse

2

C (gcc) , 276 Bytes

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

Vielen Dank an Ceilingcat für -33 Bytes.

Probieren Sie es online!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.