Soy muy vago, así que trato de programar siempre mi microondas con la menor cantidad posible de pulsaciones de botones . Mi microondas tiene los siguientes botones:
- Un botón de "minuto más" que solo se puede presionar primero e implica "iniciar". Puede presionarse varias veces durante varios minutos, pero no agregará un minuto a una hora ingresada manualmente. Salida
+ - Un conjunto de 0-9 botones. La entrada de tiempo es MMSS (es decir, "130" significa 1 minuto y 30 segundos). Los segundos pueden variar de 0 a 99. Entonces "130" y "90" son entradas equivalentes. Obviamente cada minuto es de 60 segundos, incluso si la parte de segundos de la entrada excede 59. Salida
0..9 - Un botón de "inicio" que debe presionarse para encender el microondas si la hora se ingresa manualmente. Salida
S
Mis paquetes de comida especifican el tiempo en MM: SS, por lo que el programa debe aceptar esa entrada.
Ejemplos
- 1:00 es
+(recuerde "minuto más" implica comenzar) - 1:01 es
61S(los segundos pueden exceder 59, pero "minuto más" no funciona junto con los dígitos; creo que este es un defecto de diseño en mi microondas) - 9:00 es
900S(más corto que+++++++++)
code-challenge
optimization
Ben Jackson
fuente
fuente

400So++++?++++gana. :)888Smás corto que928S, pero900Smás corto que860S? Voy a necesitar una geometría precisa de sus botones y cada una de sus posiciones.Respuestas:
APL
APL tiene una mala reputación de que es ilegible, lo cual no es el caso si no se juega al golf.
Las normas:
∇ Microondas; tiempo; segundos; minutos; fmt; ⎕ML ⎕ML ← 3 ⎕ ← 'Ingrese el tiempo (m +: ss)' tiempo ← ⍞ minutos segundos ← ⍎¨ (hora ≠ ':') ⊂hora Minute 'minuto plus' solo se puede usar en minutos enteros ≤ 4 : Si (segundos = 0) ∧ (minutos≤4) ⎕ ← minutos⍴ '+' :Regreso :Terminara si ⍝ Si es posible, guarde una pulsación de tecla usando segundos> 60 ⍝ si minutos es una potencia de diez : Si (minutos> 0) : If ((⌈10⍟mins) = (⌊10⍟mins)) ∧ (segundos <40) ⎕ ← ('BI2'⎕FMT min-1), (⎕FMT segundos + 60),' S ' :Regreso :Terminara si :Terminara si ⍝ Para el requisito de 'movimiento de los dedos' queremos tantos ⍝ de las pulsaciones de teclas posibles para ser de la misma tecla. ⍝ Entonces 888S ipv 928S. : Si secs∊66 77 88 99-60 ⎕ ← ('BI2'⎕FMT min-1), (⎕FMT segundos + 60),' S ' :Regreso :Terminara si ⍝ De lo contrario, solo genera mmssS, no había mejor alternativa. : Si minutos> 0 ⍝ segundos de salida con cero a la izquierda ⎕ ← ('BI2'⎕FMT minutos), (' G⊂99⊃'⎕FMT segundos), 'S' :Más ⍝ solo segundos de salida, no con cero a la izquierda ⎕ ← ('BI2'⎕FMT segundos),' S ' :Terminara si ∇fuente
JavaScript
fuente
Perl
cumple con los requisitos,
pero no es cómo ingresaría los botones (por ejemplo, "860S" frente a "900S")maneja exactamente 60 segundos como un caso especialSalida
fuente
rubí
Observaciones:
ruby program-my-microwave-oven.rby se evalúa una prueba unitaria.ruby program-my-microwave-oven.rb 10:00y escribe960SAlgunas observaciones sobre las reglas (y mi interpretación):
10:00es960S(9 minutos y 60 segundos -> 10 minutos).10:39es999S(9 minutos y 99 segundos -> 10 minutos y 39 segundos).4:00lo prefiere++++(menos movimientos de los dedos)fuente