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 Udebajo 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 0o 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?< ... Qfunciona 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
everyfunción.fuente
%, y>0puede 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
0o1.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 alcanzarUcon energía positiva (o sin energía).Esto generará
0o1.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
0o1como 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
1paratrueo0parafalse. 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:
maxpara cada columna'_/\'a[1, 5, -4](todos los demás caracteres menos de los que'_'están asignados0)Truesi todas las sumas acumuladas desde el comienzo del curso hasta la taza son menores que la velocidad de inicio (de loFalsecontrario).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 lasUmismas cosas si tiene un curso con un máximo local como_//\\\\\UU. 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.cumsuma 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/elseegx+=*n==' ')?1:*n=='\n'?-x:(olc[x]=*n,1. Otro consejo: en C,unsigned intse 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, creobreakporreturn p>0y quitarif p...if"U"==v or p<1si hay un máximo local como_//\\\\\U