Historia de fondo
Conoce a mi amigo Jimmy:
/o\
Jimmy es un pequeño personaje al que le gusta estar parado en plataformas. Aquí está Jimmy parado de manera segura en una plataforma:
/o\
-------------
Ahora, Jimmy tiene un buen sentido del equilibrio, por lo que puede pararse con seguridad con una pierna fuera de la plataforma, así:
/o\
-------------------
Aunque si se para con dos o más partes del cuerpo fuera de la plataforma, se caerá. Ambos son ejemplos en los que Jimmy caerá:
/o\ /o\
---------- ----------------------
El reto
Su desafío es escribir un programa para determinar, dada una cadena con la plataforma y la posición de Jimmy, si Jimmy puede pararse en la plataforma sin caerse.
Entrada: Dos líneas que muestran la posición de Jimmy y la posición de la plataforma debajo de él. Esto puede ser de dos entradas separadas, una sola entrada o una matriz de algún tipo.
- Puede recibir información a través de cualquier forma razonable, incluidas las funciones y la información estándar. Solo recurra a la codificación rígida si su idioma no admite los otros métodos de entrada.
Salida: los valores booleanos verdadero y falso, o los enteros 1 o 0 para representar verdadero / falso respectivamente.
- El valor booleano se basa en si Jimmy puede permanecer en la plataforma o no: verdadero si Jimmy puede permanecer en la plataforma o falso si se cae.
El tamaño de la plataforma es arbitrario y se puede cambiar a voluntad. Su programa debería explicar eso.
La plataforma no puede tener una longitud de cero, y la plataforma debe estar completa (sin agujeros en la plataforma).
Recuerde que Jimmy se cae cuando dos partes de su cuerpo cuelgan de la plataforma. Una parte del cuerpo es un personaje ASCII de su cuerpo.
No se requiere el espacio en blanco al final de la plataforma, pero su programa debe tener en cuenta ambas situaciones, donde hay espacio en blanco después de la plataforma y donde no lo hay.
Tenga en cuenta las lagunas estándar que están prohibidas.
Casos de prueba
/o\ ✔️ TRUE
-------------
/o\ ✔️ TRUE
----------
/o\ ❌ FALSE
------------------
/o\ ❌ FALSE
-------
/o\ ❌ FALSE
-
Tanteo
Este es el código golf , por lo que gana el conteo de bytes más bajo.
Tabla de clasificación
Puede ver la tabla de clasificación para esta publicación expandiendo el widget / fragmento a continuación. Para que su publicación se incluya en las clasificaciones, necesita un encabezado ( # header text
) con la siguiente información:
El nombre del idioma (finalícelo con una coma
,
o guión-
), seguido de ...El recuento de bytes, como el último número que aparece en su encabezado.
Por ejemplo, JavaScript (ES6), 72 bytes
es válido, pero Fortran, 143 bytes (8-bit)
no es válido porque el recuento de bytes no es el último número en el encabezado (su respuesta se reconocerá como 8 bytes; no aproveche esto).
<!-- Run the snippet to see the leaderboard. Report any bugs to @xMikee1 on Github --> <iframe src="https://xmikee1.github.io/ppcg-leaderboard/?id=187586" width="100%" height="100%" style="border:none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe><style>html,body{margin:0;padding:0;height:100%;overflow:hidden}</style>
Respuestas:
Jalea , 6 bytes
Pruébalo en línea!
Explicación:
fuente
S
suma las columnas en lugar de las filas? : S Si miraba la wiki correctamente, el código hace:n⁶
verificar para cada personaje que no es igual a un espacio (es decir['/o\\', ' -'] -> [[1,1,1],[0,1]]
);S
lista de suma (pero por alguna razón esto suma columnas en lugar de filas ... así[[1,1,1],[0,1]] -> [1,2,1]
);ċ2
cuente la cantidad de 2s;Ẓ
compruebe si se trata de un primo (por lo tanto, 2 o 3), después de que el resultado salga implícitamente Pero hubiera esperado[[1,1,1],[0,1]]
sumar a[3,1]
...S
es equivalente a0;+/Ɗ
, es decir, reducir por adición (que vectoriza) con el valor inicial0
.§
hace lo que esperabasS
hacer.JavaScript (ES6), 38 bytes
Toma entrada como0 0 o 1 .
(a)(b)
. DevuelvePruébalo en línea!
¿Cómo?
Buscamos la posición de la parte media
"o"
del cuerpo de Jimmy en la primera cuerda y probamos si hay un guión en la segunda cuerda en la misma posición.El único caso en el que Jimmy no sería seguro en esta situación es con una plataforma de un solo tablero:
Por lo tanto, también nos aseguramos de que la plataforma tenga un ancho de al menos2 :
JavaScript (ES6), 36 bytes
Versión alternativa si suponemos que siempre hay guiones o espacios debajo de Jimmy (es decir, la entrada es rectangular).
Pruébalo en línea!
Aprovecha el hecho de que la coerción a un valor numérico es0 0 para un espacio y NaN para un guión.
fuente
"/o\\\n__"
Excel,
674544 bytesPon a Jimmy adentro
A1
, en una plataforma adentroA2
.2 condiciones verificadas:
o
) en la plataforma?-
?fuente
<>
a>
Python 3,
8843 bytesLa entrada se proporciona en forma de una lista que contiene dos cadenas: la primera cadena es la primera línea; La segunda cadena es la segunda línea.
Pruébalo en línea!
Otra versión, empatando 43 bytes (no he podido obtenerla más corta que 43):
Pruébalo en línea!
Bajó 42 bytes gracias a un consejo de Jo King.
Versión antigua:
-2 bytes gracias al Sriotchilism O'Zaic.
Esto funciona tomando dos entradas separadas, luego emparejando las letras correspondientes. Cuenta el número de pares donde ninguno de los caracteres es un espacio, luego devuelve True si ese número es mayor que 1.
fuente
Perl 6 , 18 bytes
Pruébalo en línea!
Toma dos parámetros y devuelve un valor booleano de si Jimmy permanecerá en la plataforma. Esto funciona haciendo XOR uniendo las dos líneas y verificando si alguna parte de Jimmy todavía está en la plataforma.
Explicación:
fuente
Python 2 ,
4237 bytesPruébalo en línea!
5 bytes thx a siete negativos
fuente
"--"in [...]
para -5 bytesHaskell , 34 bytes
Pruébalo en línea!
Obtuve esta combinando mi técnica a continuación con la otra respuesta de haskell .
Haskell , 45 bytes
Pruébalo en línea!
Esto cuenta el número de partes del cuerpo (caracteres que no son espacios) que están en la parte superior de la plataforma y luego comprueba que sea mayor que 1. La razón por la que contamos las partes del cuerpo en la plataforma en lugar de las partes del cuerpo es que
zipWith
corta la línea superior ser del largo del fondo y así poder cortar las partes del cuerpo de Jimmy. Esto nos impide tener que hacer algo comocycle" "
rellenar la lista.fuente
MathGolf ,
614 bytesPruébalo en línea!
Se tuvieron que agregar 8 bytes para tener en cuenta el caso límite presentado por Nick Kennedy.
Comprueba si
"-o-"
es una subcadena de la cadena comprimida de ambas líneas y la cadena comprimida donde la primera línea de entrada tiene el primer carácter eliminado. Toma la entrada como dos cadenas separadas, con el único cambio que el carácter se ingresa como/o\\
, ya que\\
es la forma correcta de ingresar una barra diagonal inversa en una cadena en MathGolf.Explicación
fuente
05AB1E (heredado) ,
987 bytes-1 byte gracias a @ Mr.Xcoder con el enfoque de
ðм2ù
.Entrada como una lista de dos cadenas.
Solo funciona en la versión heredada de 05AB1E, porque
ζ
puede transponer una lista de cadenas y una lista de caracteres 2D, mientras queζ
en la nueva versión 05AB1E solo funciona con la lista de caracteres 2D.Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
bytes
página de códigos para que sepa que no está codificada en UTF-8, sino que utiliza una codificación personalizada. ;) Si lo desea, puedo editar mi respuesta para poner la codificación debajo del título, pero sinceramente, el código de la tabla de clasificación debería poder manejarlo en mi humilde opinión.https://github.com/Adriandmen/05AB1E/wiki/Codepage?7
que 7 sea el último número sin invalidar la URL?Rubí , 28 bytes.
Pruébalo en línea!
fuente
Dyalog APL Extendido,
11108 bytesPruébalo en línea!
Explicación:
-2 gracias a Adám.
fuente
2≤1⊥∧⌿⍤<
Excel, 36 bytes
Jimmy adentro
A1
, en una plataforma adentroA2
.Encuentra la posición de Jimmy, toma los 3 bytes de la plataforma y recorta los espacios. Si la longitud de la plataforma resultante es lo suficientemente larga, Jimmy se para.
fuente
EXCEL,
9471 bytes.VBA (Excel), 87 bytesA1
= Jimmy,A2
= plataforma-23 bytes. Gracias @Wernisch.
?[(FIND("-",A2)-FIND("/",A1)<2)*(FIND("\",A1)-LEN(A2)<2)]*(len(replace([A2]," ",""))>1)
fuente
trim
lugar delen(replace
?/// ,
85 9387 bytesPruébalo en línea!
La salida es 1 si Jimmy está a salvo. De lo contrario, no genera nada. (Unario 1 y 0.) Debido a que no hay otra forma de tomar datos en ///, debe estar codificado:
Por ejemplo:
(¡ Pruébelo en línea! )
Tenga en cuenta el espacio después de la
<INPUT HERE>
.Explicación:
¡NOTA! El código de explicación no se puede ejecutar debido a los comentarios. Los comentarios están encerrados entre llaves. Además, el código original utiliza un campo de golf donde
//
se reemplaza~
. Este código se omite de la explicación.///
truco de golf estándar .fuente
R , 35 bytes
Pruébalo en línea!
Basado en la excelente respuesta de Jelly de @EriktheOutgolfer, ¡ así que vota también esa!
La entrada es una matriz de caracteres en 2-d.
fuente
Haskell, 59 bytes
Pruébalo en línea!
La función se llama así:
f "/o\\ " " -- "
Cómo funciona (para
f "/o\\" " -"
):b++cycle" "
- Agrega un número infinito de espacios despuésb
para garantizar que Jimmy siempre esté por encima de un-
o(
" -"
→" - ..."
zip a$b++cycle" "
- Comprime las dos cuerdas juntas ([('/',' '), ('o','-'), ('\\',' ')]
)(p,q)<-zip a$b++cycle
- Para cada par en la lista comprimida[1|(p,q)<-zip a$b++cycle" ",elem p"/o\\",q==' ']
- Genera una lista de1
s, cuya longitud es el número de pares que satisfacen las condiciones:elem p"/o\\"
- El personaje en la cadena superior es una de las partes del cuerpo de Jimmy. (Satisfecho por los tres pares en este ejemplo)q==' '
- El carácter en la cadena inferior es un espacio. (Satisfecho por('/', ' ')
y('\\', ' ')
)Entonces, el par tiene que ser uno donde una de las partes del cuerpo de Jimmy esté por encima de un espacio.
Como en este ejemplo, dos pares satisfacen ambas condiciones, la lista es
[1,1]
sum[1|(p,q)<-zip a$b++cycle" ",elem p"/o\\",q==' ']
- Tome la suma de esos1
s (es decir, la longitud de la lista), que en este ejemplo es2
.sum[1|(p,q)<-zip a$b++cycle" ",elem p"/o\\",q==' ']<2
- Compruebe si el número de partes del cuerpo sobre un espacio es menor que 2. En este ejemplo, no lo es, por lo que Jimmy se caerá. :(fuente
C (gcc) , 73 bytes
Pruébalo en línea!
fuente
index()
lugar destrchr()
Kotlin, 60 bytes
Explicación:
fuente
/// , 57 bytes
Pruébalo en línea!
Agregue la entrada al final del programa para ejecutar. Devuelve la cadena vacía si Jimmy se cae de la plataforma, una cadena de signos de exclamación de lo contrario.
/|/\/\//
reemplaza|
con//
, lo que hace que el código sea más corto y más legible (|
se usa para demarcar cada reemplazo)/\/o\\/J| J/J*/
reemplaza a Jimmy conJ
por brevedad y cambia el espacio a la izquierda de él a*
a la derecha de él/* /| -/ | //
cancela*
sy con el espacio a la izquierda de la plataforma. Si quedan dos o más espacios, Jimmy se cae a la izquierda y la plataforma se elimina. Esta parte también elimina cualquier espacio en blanco a la derecha de la plataforma./*-/|--/!/
cancela*
sy con la longitud de la plataforma. Si quedan al menos dos-
, Jimmy no se cae a la derecha, por lo que se reemplazan con un!
./-/|*/|J//
elimina todos los caracteres restantes que no son!
fuente
Japt , 8 bytes
Intentalo
fuente
Retina 0.8.2 , 16 bytes
Pruébalo en línea! El enlace incluye un conjunto de pruebas. Explicación:
Si bien todavía hay un espacio en la primera línea, y ambas líneas aún tienen más de un carácter, elimine el espacio y el primer carácter de la línea siguiente. Nota: Esto supone que no hay espacio final después de Jimmy. Se necesita +1 byte si se debe permitir el espacio final.
Compruebe que hay al menos dos piezas de plataforma debajo de Jimmy.
fuente
Perl 5
-pl
, 42 bytesPruébalo en línea!
fuente
Ruby 2.5.3, 44 bytes
Entrada tomada como dos matrices. Definitivamente no es el enfoque más amigable para el golf (ver la respuesta de GB), pero me gusta cualquier excusa para usar la
zip
función.fuente
PowerShell ,
63..5553 bytes-1 byte gracias a mazzy
Pruébalo en línea!
Toma la entrada como dos líneas.
Desenrollado:
fuente
C # (compilador interactivo de Visual C #) ,
444039 bytes-4 bytes gracias a Jo King
Pruébalo en línea!
fuente
Python 3.7 ,
7156 bytesVersión muy simple y lo más corto que se me ocurre usar este enfoque. La entrada
s
es una lista de dos cadenas, la primera para la fila Jimmy, la segunda para la plataforma. Comprime los caracteres que están uno encima del otro y luego comprueba si-
está debajo de una parte de Jimmy en al menos dos casos.EDITAR: ¡Reducido en bastantes bytes gracias a Blue!
fuente
s
debería haber dos listas, una para Jimmy y otra para la plataforma?). Además, hay algunos lugares donde puede guardar bytes: en lugar de sumar una lista, puede sumar el iterador sin formato (eliminar los corchetes); en lugar de verificar>=2
, verificar>1
; puede sumarTrue
yFalse
como 1 y 0, sin necesidad de if-else. Finalmente, antes de publicar una nueva respuesta en el mismo idioma, debe mirar las anteriores para ver si puede mejorar.Chevron,
8487 bytesEste es un lenguaje bastante nuevo de mi propia creación: se pueden encontrar prototipos de intérpretes, documentación y programas de ejemplo en https://github.com/superloach/chevron .
Explicación:
>^__>^j
- tome a Jimmy como entrada TXT^i<<0
- inicializar índice a 0^i<<^i+1
- índice de incremento^h<^i>^j
- Obtener el personaje de Jimmy en el índice->+2??^h=/
- Saltar del bucle en la pierna izquierda de Jimmy->-3
- volver al comienzo del bucle>^__>^p
- tome la plataforma como entrada TXT^q<^i|2>^p
- recorta 3 personajes debajo de jimmy->+2??^q<--
- Si 2 guiones debajo de Jimmy, salta a la salida verdadera><0
- salida falsa><1
- salida sincerafuente
C (gcc), 103 bytes
Pruébalo en línea!
Sería mucho más corto ( 75 bytes ), si se pudiera suponer que hay espacios en blanco al final de la plataforma.
fuente
Japt
-¡
, 9 bytes-1 byte si la entrada puede invertirse.
Pruébalo en línea
fuente
V , 18 bytes
Pruébalo en línea!
Salida de espacios en blanco solo si Jimmy cae de la plataforma. Imprima algo que no sea un espacio en blanco si Jimmy permanece en la plataforma.
fuente