Dada una vista lateral de un campo de minigolf y la potencia del swing, determine si la pelota llegará al hoyo.
Un curso tendrá este formato:
____ ____ _
__/ \ / U \
__/ \ / \_
\_/
La pelota comienza directamente antes del primer pedazo de tierra a la izquierda y sigue el contorno del curso hasta llegar al hoyo (una mayúscula U
debajo del nivel actual del suelo). Si llega al agujero, genera un valor verdadero. El poder del swing será la velocidad inicial de la pelota. La bola se mueve al siguiente personaje a la derecha en cada iteración, luego la velocidad se altera dependiendo del personaje en el que se encuentre. Si la velocidad alcanza 0
o menos antes del hoyo, genera un valor falsey.
_
disminuye la velocidad en1
/
disminuye la velocidad en5
\
aumenta la velocidad en4
Los cursos se pueden rellenar opcionalmente con espacios. El poder del swing siempre será un número entero positivo.
No necesita preocuparse de que la pelota vaya demasiado rápido para entrar en el hoyo, rodando hacia atrás o saltando / rebotando en las colinas.
Casos de prueba
Input: 27
____ ____ _
__/ \ / U \
__/ \ / \_
\_/
Output: true
----------
Input: 26
____ ____ _
__/ \ / U \
__/ \ / \_
\_/
Output: false
----------
Input: 1
U
Output: true
----------
Input: 1
_
U
Output: false
----------
Input: 22
/U
/
/
/
\/
Output: true
----------
Input: 999
_ _
\ /
\ /
\ /
U
Output: true
----------
Input: 5
/
/U
Output: false
----------
Input: 9
/\/\/\/\/U
Output: false
----------
Input: 16
_/\ _
\ __ /\/\/\ /
\ / \ / \ /
\__/ \ / \____________ _/
\_/ U
Output: true
Este es el código mini-golf, ¡la respuesta más corta en bytes gana!
fuente
\_/
) con los siguientes pasos: dividir en una matriz de líneas, rotar, aplanar, eliminar espacios.\/\/\/\/\/
es un curso más eficiente que__________
.Respuestas:
Pyth, 27 bytes
Demostración
Este código hace algo muy inteligente y nada seguro para escribir
X
. Compruébalo a continuación.Explicación:
fuente
Q
? Es decir, ¿el último ejemplo podría causar algunos problemas?< ... Q
funciona como una comparación numérica hasta el agujero, no una rebanada. Después del agujero, todo lo que importa es que el resultado sea verdadero.Haskell,
111109 bytesEjemplo de uso:
Cómo funciona:
Editar: @ user81655 encontró 2 bytes para guardar. ¡Gracias!
fuente
Ruby,
10487 caracteresEjecución de muestra:
fuente
Japt, 38 bytes
Try it here!
¡Golpeando a CJam!
Explicación
Básicamente toma la entrada de la cadena, la gira 90 grados en el sentido de las agujas del reloj, elimina espacios y líneas nuevas, elimina el agujero y todo lo que está detrás, y se divide a lo largo de los caracteres. Luego verifica si la pelota llega a cero o menos usando la
every
función.fuente
%
, y>0
puede ser reemplazada por¬
, ya que el sqrt de un número no positivo siempre es falso (0 -> 0
,-1 -> NaN
).CJam,
4039 bytesLa entrada tiene el poder en la primera línea y el curso comienza en la segunda línea. La salida es
0
o1
.Pruébalo aquí.
Explicación
fuente
Retina,
82817774686768 bytesPruébalo en línea
>
s, por ejemplo, 4 es>>>>\n
. (¿Es esto legal?)+`(?<=(.)*) (?=.*¶(?<-1>.)*(.))
$2
- aplanar el curso - reemplazar espacios con el personaje debajo de ellos.Después de esta etapa, los datos se verán así:
Podemos ignorar todo después del primero
U
, no llegaremos allí de todos modos.>
representan un paso que se nos permite dar, o la energía restante.\
con cuatro>
: una pendiente nos da energía adicional.>_
o>>>>>/
hasta que no quede ninguno._
s y/
s consumen energía.^>*U
: verifique si podemos alcanzarU
con energía positiva (o sin energía).Esto generará
0
o1
.Otra opción de cierre con
9179 bytes es:Pruébalo en línea
Este es el mismo enfoque pero con un grupo de equilibrio en lugar de un reemplazo contencioso.
Estoy seguro de que ambos pueden jugar más golf, por lo que cualquiera de ellos puede terminar más corto.
fuente
0
o1
como el dígito si eso no incurre en bytes adicionales.ES6, 117 bytes
Sin golf:
Editar: Guardado 4 bytes gracias a ՊՓԼՃՐՊՃՈԲՍԼ.
fuente
JavaScript (ES6),
108107106 bytesEsta es la solución que se me ocurrió cuando creé el desafío.
Explicación
Toma el poder como un número y el curso como una cadena. Devoluciones
1
paratrue
o0
parafalse
. El curso debe estar relleno de espacios.Prueba
fuente
Python (3.5)
169160bytesUna solución recursiva sin la función de transposición (zip)
Sin golf
c por supuesto, p para potencia, v para velocidad, h para altura
Uso
fuente
Pyth, 35 bytes
Explicación
fuente
Ruby, 85 caracteres
Respuesta de @ manatwork adaptada
fuente
JavaScript,
266263244 bytesSin golf
Uso
fuente
Java, 219 bytes
Acoplar el curso, porque la coordenada y no importa, desafortunadamente Java no tiene un recorte vertical. Tampoco tiene una transposición de cadena.
Iterar sobre el curso aplanado y realizar un seguimiento de la velocidad de la pelota.
fuente
Octava,
111110 bytesExplicación:
max
para cada columna'_/\'
a[1, 5, -4]
(todos los demás caracteres menos de los que'_'
están asignados0
)True
si todas las sumas acumuladas desde el comienzo del curso hasta la taza son menores que la velocidad de inicio (de loFalse
contrario).Aquí hay un caso de prueba que ya había desarrollado similar al segundo propuesto por @Erwan y un par de resultados:
Y aquí está el primer caso de prueba:
fuente
"//_U\\\\\\\_
el resultado es incorrecto, ya que no elimina el carácter después de lasU
mismas cosas si tiene un curso con un máximo local como_//\\\\\U
U
. Eso es lo que(1:find(m==85))
hace; toma subarreglos desde el primer índice hasta la ubicación deU
. Revisaré su caso de prueba con un par de velocidades iniciales y me pondré en contacto con usted.cumsum
a una variable intermedia y luego usarlo para la comparación finalall(v>tmp(1:find(m==85)))
.C, 629 bytes
Sin golf:
Básicamente, solo hago una pasada para convertir la cadena de entrada para que se ajuste a todo en una línea, luego
fuente
if
/else
egx+=*n==' ')?1:*n=='\n'?-x:(olc[x]=*n,1
. Otro consejo: en C,unsigned int
se puede escribirunsigned
, ahorrando 4 bytes de inmediato.Python,
212201188143 bytesGran parte del crédito por esta iteración de este script es para @Erwan, quien me dio un enfoque completamente diferente para probar y algunos consejos que me ahorraron 55 bytes al final.
No es recursivo, por lo que debe ser sustancialmente diferente de la otra solución de Python.
Ungolfed un poco:
fuente
o=[''.join(x).split()[0] for x in zip(*c.split('\n'))]
que ganan 40 bytes, creobreak
porreturn p>0
y quitarif p...
if"U"==v or p<1
si hay un máximo local como_//\\\\\U