La máquina Enigma es una máquina de cifrado bastante compleja utilizada por los alemanes y otros para cifrar sus mensajes. Es su trabajo implementar esta máquina *.
Paso 1, rotación
Nuestra máquina enigma tiene 3 ranuras para rotores y 5 rotores disponibles para cada una de estas ranuras. Cada rotor tiene 26 posiciones posibles diferentes (de Aa Z). Cada rotor tiene una posición de muesca predefinida :
Rotor Notch
------------
1 Q
2 E
3 V
4 J
5 Z
Al presionar una tecla se producen los siguientes pasos:
- El rotor en la ranura 1 gira
- Si el rotor en la ranura 1 se mueve más allá de su muesca, entonces gira el rotor en la ranura 2.
- Si el rotor en la ranura 2 está en su muesca (pero no solo se movió allí), tanto el rotor 2 como el 3 giran una vez.
Si estamos utilizando rotores 1,3,5 y están en posiciones P,U,Hentonces la secuencia de posiciones es: P,U,H> Q,U,H> R,V,H>S,W,I
Paso 2, sustitución
Cada uno de los rotores realiza una simple sustitución de caracteres. La siguiente es una tabla de cada uno de los rotores en la Aposición:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
--------------------------
1 EKMFLGDQVZNTOWYHXUSPAIBRCJ
2 AJDKSIRUXBLHWTMCQGZNPYFVOE
3 BDFHJLCPRTXVZNYEIWGAKMUSQO
4 ESOVPZJAYQUIRHXLNFTGKDCMWB
5 VZBRGITYUPSDNHLXAWMJQOFECK
R YRUHQSLDPXNGOKMIEBFZCWVJAT
Rotor 1 en posición T es PAIBRCJEKMFLGDQVZNTOWYHXUS, que sustituya la letra Ca I.
Después de que los tres rotores realizan su sustitución, el reflector es golpeado (como se indica Rarriba). Realiza su propia sustitución y luego refleja la señal a través de los rotores. Los rotores realizan una sustitución inversa en orden inverso.
Sustitución inversa significa que, en lugar de sustituir el rotor 1 Acon E, sustituye EconA
Las ranuras están llenas de rotores 1,2,3 todos en posición A. La carta Qsigue el camino a Q>X>V>Mtravés de los rotores. Mrefleja a O, que luego sigue el camino inverso de O>Z>S>S. Por lo tanto, Ase sustituye con S.
De entrada y salida
Ya pasaste:
- Una lista de 3 rotores (como enteros)
- Una lista de 3 posiciones iniciales del rotor (como letras)
- Una cadena que necesita ser encriptada.
Puede suponer que su entrada estará bien formada y que todos los caracteres serán letras mayúsculas, sin espacios.
Debe devolver la cadena encriptada.
Opcionalmente, puede aceptar los rotores, muescas y reflectores como entrada. Para aquellos que no pueden quitar 95 bytes de su puntaje, como95 = ceil(log2(26 letters ^(26*6 rotors +5 notches))/8 bytes)
Casos de prueba
Rotor Position Input Output
4,1,5 H,P,G AAAAAAAAA RPWKMBZLN
1,2,3 A,A,A PROGRAMMINGPUZZLES RTFKHDOVZSXTRMVPFC
1,2,3 A,A,A RTFKHDOVZSXTRMVPFC PROGRAMMINGPUZZLES
2,5,3 U,L,I GIBDZNJLGXZ UNCRACKABLE
Mi implementación se puede encontrar en Github . Lo he probado, pero puedo tener errores en mi implementación (lo que significaría que mis casos de prueba probablemente estén equivocados).
* He tratado de hacer esto lo más preciso posible , pero debido a las variaciones entre máquinas, puedo tener algunos detalles incorrectos. Sin embargo, su tarea es implementar lo que he descrito, incluso si no soy exacto. No incluyo el panel de conexiones por simplicidad
fuente

Respuestas:
Python 3, 403 bytes
Creo que esto está funcionando correctamente. Los rotores le pasaron:
fes la muesca,gson los rotores yhes el reflector.Sin golf:
Creo que esto está funcionando, pero produce una salida diferente, debido a lo que (creo) es un error en la referencia impl.
fuente