Emular la escritura del profesor

8

Emular la escritura del profesor

Antecedentes

Desafortunadamente, el profesor no puede usar su teclado correctamente: cada vez que debe usar la Shifttecla, presiona Caps Lock una vez antes de escribir y no se molesta en corregirse. Si hay dos o más teclas seguidas que requieren Shift, presiona Caps Lockantes de la primera y no hace nada antes que las demás.

Como su secretario, quiero replicar este efecto para que la gente piense que él es el que responde a sus correos electrónicos, no yo. Sabe que su escritura parece estúpida, pero no le importa.

Tarea

Escriba un programa que tome STDIN o la entrada de un archivo de texto, y luego emita ese texto como si hubiera sido escrito por el Profesor.

Este es el código de golf , y las lagunas estándar no están permitidas.

Diseño del teclado

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 , . /

Ejemplo de entrada / salida

(La CapsLocklínea está ahí para su comprensión y no debe aparecer en su programa)

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: *       *       * * *
monopolo
fuente
3
Yo diría que lo contrario de esta tarea sería más interesante :) (es decir, para corregir sus correos incorrectamente)
Optimizer
44
@Optimizer Demasiado ambiguo. De entrada HELLOpodría ser "corregida" a Hello, HEllo, HELlo, etc.
Geobits
Pero lo correcto sería Hellosolo, según lo definido por el caso de palabras (o las reglas fijas de la carcasa correcta en inglés)
Optimizer
44
@laurencevs Sinceramente prefiero verlo como un desafío separado :)
Geobits
1
¿Qué tipo de teclado vudú es este?
Brandon

Respuestas:

5

Pitón 2 - 269 275 290 318 337

La entrada es mayormente segura si usa comillas triples:"""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

La codificación no parece ayudar mucho, excepto con los caracteres incómodos ¬ y £ (he intentado ver otros problemas como este y creo que debería tratar de usar dividir?) (No parece que el teclado se comprima lo suficiente para que valga la pena .decode, etc ...)

Además, los espacios apestan.

Nota de edición: la indexación es extraña

FryAmTheEggman
fuente
3

PowerShell - 295

Toma la entrada de la consola (Read-Host) y las salidas a la consola.

$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
fuente