pannenkoek2012 tiene como objetivo completar Super Mario 64 con tan pocas pulsaciones como sea posible del botón A, lo que hace que Mario salte. Cada "prensa A" consta de tres partes:
- Presionando el botón
- Sosteniéndolo por cualquier período de tiempo
- Soltándolo
Vea este video (1:15 - 3:23) para obtener una excelente explicación que incluye la imagen de arriba. (Sin embargo, este desafío no utilizará la terminología de media prensa y presentará obstáculos que requieren la liberación de A).
Tarea:
Dada una secuencia de obstáculos que requieren presionar (P), mantener presionado (H) o soltar (R) el botón A, genera la menor cantidad de presiones necesarias para superarlos en el orden dado. El botón A no se mantiene inicialmente.
Dicho formalmente: dada una cadena S de caracteres PHR
, considere cadenas de forma (PH*R)*
que contengan S como una subsecuencia, y genere el menor número posible de P
's en dicha cadena. O, alternativamente, encuentre el menor número de fragmentos de la forma en P?H*R?
que S se puede dividir.
Ejemplo
Veamos la entrada RHRPHHHR
. El botón A no se mantiene presionado, por lo que para superar el obstáculo inicial es R
necesario presionar el botón y luego soltarlo (presione # 1). A continuación, debemos mantener presionado el botón H
, que nuevamente requiere que primero se presione (presione # 2). Luego, se puede liberar luego para satisfacer el R
posterior. Finalmente, el resto PHHHR
puede satisfacerse presionando una vez (presione # 3) seguido de mantener HHH
y soltar R
. Entonces, el recuento de salida es 3.
Otra forma de verlo es que podemos dividir la cadena de entrada en 3 partes de forma PHH..HHR
donde se pueden omitir las letras.
R
HR
PHHHR
Formato de entrada
La entrada será una lista o cadena de elementos que representan presionar, mantener y soltar como su elección de:
P, H, R
p, h, r
1, 2, 3
0, 1, 2
emparejado en el orden dado. La entrada no estará vacía.
Casos de prueba:
P 1
H 1
R 1
HP 2
RHP 3
HHR 1
PHRH 2
RHRPHHHR 3
HHHHHH 1
PPRRHHPP 6
HPPRHRPRHPPRHPPHRP 12
PRHRHPHHPRRRHPPRHHPPRRRHRHPRPHPRPRHHRPPPRHPRP 28
Tabla de clasificación:
Respuestas:
Retina , 9 bytes
Pruébalo en línea!
fuente
Pyth , 13 bytes
Pruébalo aquí! o Verificar todos los casos de prueba.
Tenga en cuenta que
1
también funciona en lugar de3
.¿Cómo funciona?
Más sobre la expresión regular:
fuente
Jalea , 10 bytes
Una cadena monádica que toma una lista (la
P,H,R : 0,1,2
opción) y devuelve un número entero, el recuento.Pruébalo en línea! o ver el conjunto de pruebas
¿Cómo?
Efectivamente trabaja por conseguir todos los pares adyacentes luego contar cualquier que no son "pares de continuación" (
PR
,PH
,HR
, oHH
) y la adición de uno.Solución anterior de 11 bytes:
Pruébalo en línea! o ver el conjunto de pruebas
¿Cómo?
Funciona como lo anterior, pero de una manera completamente diferente ...
y otro, nuevamente bastante diferente:
(agregue 19 a cada uno, luego para los pares adyacentes realice la exponenciación, módulo por 13, módulo por 2, suma y agregue uno).
fuente
Lote, 69 bytes
Toma la entrada como una lista de parámetros de línea de comando indexados en 0, pero puede usar una lista de letras
p, h, r
en mayúsculas o minúsculas si escribeset /a p=0, h=1, r=2
primero. Explicación:b
mantiene la última entrada (predeterminada2
para liberado) yn
el recuento de prensas. Cada entrada agrega una prensa si la última entrada fue una liberación o la entrada actual es una prensa.fuente
set
puedo establecer múltiples variables a la vez? Útil para saber.set /a
es una evaluación aritmética, por lo que siempre que todas las variables que desee establecer sean numéricas, simplemente puede usar el operador de coma para concatenar las expresiones de asignación.Python 2, 44 bytes
Utiliza P-> 1 H-> 2 R-> 3
fuente
Deorst , 11 bytes
Pruébalo en línea!
Utiliza la expresión regular del Sr. Xcoder
fuente
Japt, 11 bytes
Pruébalo | Verifique todos los casos de prueba
è
cuenta el número de coincidencias del RegEx en la entrada yÉ
resta 1.fuente
Python 2 , 48 bytes
Pruébalo en línea!
Toma
0,1,2
como entrada.fuente
Casco ,
65 bytesPruébalo en línea! La entrada es una lista
0,1,2
(el enlace TIO usa letras para facilitar el copiado de los casos de prueba).Explicación
Utilizo la misma idea general que la respuesta Jelly de Jonathan Allan : dividir las apariciones de los "pares de discontinuidad" PP, HP, RH, RR y RP, y contar los bloques resultantes. En la codificación 0,1,2, estos pares son exactamente aquellos cuyo elemento izquierdo es 2 o el elemento derecho es 0.
fuente
Javascript (ES6), 30 bytes
fuente
Haskell , 36 bytes
Pruébalo en línea!
Utiliza la
0,1,2
codificación.fuente
Jalea , 10 bytes
Pruébalo en línea! o Test suite! (
Robadoprestado de Jonathan.)Alternativa:
Pruébalo en línea!
Jalea , 11 bytes
Guardado 1 byte con ayuda de caird coinheringaahing.
Pruébalo en línea!
fuente
μ
del terceroKotlin , 36 bytes
Embellecido
Prueba
TIO
TryItOnline
fuente
J ,
1817 bytes-1 Gracias a @FrownyFrog
Toma entrada en forma de
0,1,2
. La función auxiliar en TIO convierte los casos de prueba a este formulario.Pruébalo en línea!
La lógica de las comparaciones aún puede ser golfable. Estoy retorciendo mi cerebro en nudos tratando de pensar en declaraciones más equivalentes y más cortas.
Explicación (solución previa)
La única diferencia entre la solución actual y la anterior es cómo se generan las comparaciones. La solución actual compara explícitamente los elementos adyacentes al compensar la matriz y la solución anterior compara los elementos adyacentes al observar infijos de 2.
Esto sería mucho más limpio si dos retenciones no hicieran nada. El código toma infijos de dos y verifica si no son ascendentes y no dos retenciones. Si este es el caso, entonces agregamos uno a nuestra cuenta final. Tenemos que agregar 1 al final ya que de lo contrario estamos apagados (o podría anteponer un
_
valor o cualquier valor mayor que 2).La forma en que comprueba si el infijo es dos retenciones es multiplicando los dos valores y viendo si es uno (dos retenciones son
1 1
).fuente
1+1#.}:(<+:1=*)}.
Es uno más corto.1+1#.0=}.*2-}:
Vim +
wc
, 25 bytes␊
es la tecla de retorno y␘
es Ctrl+XPruébalo en línea!
Explicación
fuente