Emulieren Sie die Eingabe des Professors

8

Emulieren Sie die Eingabe des Professors

Hintergrund

Leider kann der Professor seine Tastatur nicht richtig benutzen: Wann immer er die ShiftTaste benutzen soll , drückt er Caps Lock einmal, bevor er tippt, und macht sich nicht die Mühe, sich selbst zu korrigieren. Wenn zwei oder mehr Tasten in einer Reihe erforderlich sind Shift, drückt er Caps Lockvor der ersten und tut nichts vor den anderen.

Als seine Sekretärin möchte ich diesen Effekt wiederholen, damit die Leute denken, dass er derjenige ist, der auf seine E-Mails antwortet, nicht ich. Er weiß, dass seine Eingabe dumm aussieht, aber es ist ihm egal.

Aufgabe

Schreiben Sie ein Programm, das STDIN oder eine Dateieingabe von Text übernimmt und diesen Text dann so ausgibt, als ob er vom Professor eingegeben worden wäre.

Dies ist Code Golf und Standardlücken sind nicht erlaubt.

Tastaturbelegung

Default:
` 1 2 3 4 5 6 7 8 9 0 - =
   q w e r t y u i o p [ ]
    a s d f g h j k l ; ' #
   \ z x c v b n m , . /

With shift:
¬ ! " £ $ % ^ & * ( ) _ +
   Q W E R T Y U I O P { }
    A S D F G H J K L : @ ~
   | Z X C V B N M < > ?

With caps lock:
` 1 2 3 4 5 6 7 8 9 0 - =
   Q W E R T Y U I O P [ ]
    A S D F G H J K L ; ' #
   \ Z X C V B N M , . /

Beispiel Eingabe / Ausgabe

(Die CapsLockZeile dient nur Ihrem Verständnis und sollte nicht in Ihrem Programm ausgegeben werden.)

Input:    abc ** def ! (ghijkl) mnop
Output:   abc 88 DEF 1 9GHIJKL0 mnop
CapsLock:     *      * *      *       (* means Caps Lock was pressed before this character)

Input:    print("Hello, World!"); sys.exit()
Output:   print92HELLO, world120; SYS.EXIT90
CapsLock:      *        *    *            *

Input:    !ABC!abc!ABC!abc!x!y!z
Output:   1ABC1ABC1abc1abc1X1y1Z
CapsLock: *       *       * * *
Monopol
quelle
3
Ich würde sagen, dass das Gegenteil dieser Aufgabe interessanter wäre :) (dh um seine falsch eingegebenen Mails zu korrigieren)
Optimizer
4
@Optimizer Zu mehrdeutig. Eingang HELLOkönnte „korrigiert“ zu Hello, HEllo, HELloetc.
Geobits
Aber das Richtige wäre Hellonur, wie durch die Groß- und Kleinschreibung (oder feste Regeln für die korrekte englische Schreibweise) definiert
Optimierer
4
@laurencevs Ehrlich gesagt würde ich es lieber als separate Herausforderung sehen :)
Geobits
1
Was für eine Voodoo-Tastatur ist das?
Brandon

Antworten:

5

Python 2 - 269 275 290 318 337

Die Eingabe ist meistens sicher, wenn Sie dreifache Anführungszeichen verwenden:"""print("Hello, World!"); sys.exit()"""

C=D=0
r=''
l,u,c=" `1234567890-=qwertyuiop[]asdfghjkl;'#\\zxcvbnm,./",' \xac!"\xa3$%^&*()_+QWERTYUIOP{}ASDFGHJKL:@~|ZXCVBNM<>?'," `1234567890-=QWERTYUIOP[]ASDFGHJKL;'#\\ZXCVBNM,./"
for h in input():w=h!=' ';U=h in u;C^=w&U&~D;D=U&w;r+=[l,c][C][[l,u][U].find(h)]
print r

Die Codierung scheint nicht viel zu helfen, außer bei den umständlichen Zeichen ¬ und £ (Ich habe versucht, andere Probleme wie dieses zu untersuchen, und ich denke, ich sollte versuchen, Split zu verwenden?) (Es scheint, als würde die Tastatur nicht genug komprimiert um es wert zu machen .decode, etc ...)

Auch Räume saugen.

Anmerkung bearbeiten: Indizierung ist komisch

FryAmTheEggman
quelle
3

PowerShell - 295

Übernimmt Eingaben von der Konsole (Read-Host) und gibt sie an die Konsole aus.

$d=@("``1234567890-=qwertyuiop[]asdfghjkl;'#\zxcvbnm,./ ","``1234567890-=QWERTYUIOP[]ASDFGHJKL;'#\ZXCVBNM,./ ",'¬!"£$%^&*()_+QWERTYUIOP{}ASDFGHJKL:@~|ZXCVBNM<>? ')
((Read-Host).ToCharArray()|%{if($_-eq' '-or$d[2].IndexOf($_)-lt0){$a=0}else{if(!$a){$b=!$b}$a=2}$d[$b][$d[$a].IndexOf($_)]})-join''
puckipedia
quelle