Este es el primero de una serie, el segundo es Dos caminos divergidos en un bosque amarillo (parte 2)
Este desafío está inspirado en el famoso poema de Robert Frost, "The Road Not Taken":
Dos caminos se bifurcaban en un bosque amarillo,
y lo siento, no podía viajar a la vez,
y ser un viajero, me quedé de pie
y miré hacia abajo lo más lejos que pude,
hacia donde se doblaba en la maleza;Luego tomé el otro, igual de justo,
y quizás teniendo el mejor reclamo,
porque estaba cubierto de hierba y quería desgaste;
Aunque en cuanto a que el paso allí los
había usado realmente más o menos igual,Y las dos de la mañana yacían igualmente
en las hojas, ningún paso había pisado el negro.
¡Ah, guardé el primero para otro día!
Sin embargo, sabiendo cómo el camino conduce al camino,
dudé si alguna vez debería volver.Voy a decir esto con un suspiro
En algún lugar de siglos en adelante:
dos caminos divergieron en un bosque, y yo
... tomé el menos transitado,
y eso ha marcado la diferencia.
Observe la penúltima línea I took the one less traveled by,
,.
Tu verdadero desafío
Tomarás información de la siguiente manera:
# ##
# ##
# ##
#
#
#
y tienes que encontrar el camino más delgado.
El camino comienza en la parte inferior con a #
. Los otros 2 caminos, que siempre terminan en la fila superior, son los caminos que debe examinar. El camino más grueso es el más transitado y, por lo tanto, no es lo que desea. El otro es el menos transitado, y es el que desea.
Salida
Su programa / función debe generar uno de los 2 valores distintos (por ejemplo, 0 o 1, verdadero o falso), uno para cada posible posición de la carretera no tomada. Por ejemplo, podría generar 0 si el camino no tomado está a la izquierda del camino tomado, y 1 de lo contrario, o podría generar la cadena "izquierda" o "derecha", verdadero, falso, etc.
Casos de prueba:
## #
## #
###
#
#
#
Podría salir "a la derecha".
## #
## #
###
##
#
#
#
Podría salir "a la derecha".
## #
## #
###
##
#
#
#
Podría salir "a la derecha".
## #
## #
###
#
#
#
#
Podría salir "a la derecha".
# ##
# ##
###
#
#
#
#
Podría salir "a la izquierda"
# ##
# ##
###
#
#
#
#
Podría salir "a la izquierda"
Notas
- Este es el código de golf , por lo que gana la respuesta más corta en bytes
- Lagunas estándar prohibidas
- Debe especificar sus salidas para "izquierda" y "derecha" y deben ser distintas
- La entrada será una cadena grande y puede tener cualquier cantidad de líneas
- No necesita preocuparse por la entrada válida.
- La carretera siempre tiene forma de Y, por lo que solo tiene que mirar hacia arriba.
- ¿Tiene alguna pregunta? Comenta abajo:
¡El conteo de bytes más bajo gana!
fuente
Respuestas:
CJam , 1 byte
r
pone la primera cadena de caracteres no está en blanco adyacentes de la entrada estándar en la pila, por lo que las impresiones##
de la izquierda y#
de la derecha .Pruébalo en línea!
fuente
JavaScript (ES6),
1912 bytesEditar:
Una versión más golfizada es
Devuelve
#
a la derecha y un espacio a la izquierda.Original:
Explicación
Sin golf :
Lo primero que hace esta función es eliminar el espacio en blanco al principio y al final de la entrada. Esto significa que el primer personaje es siempre
#
. Luego, desde allí, verifico el segundo carácter (JavaScript comienza en 0) y veo si es un#
carácter. Esto devuelve un booleano. Si el camino esright
, serátrue
, si se deja volveráfalse
.Cómo lo jugué
En ES6 hay una función abreviada anónima llamada función de flecha . Esto significa que puedo tomar mi función de envoltura y convertirla en:
Debido a las reglas de las funciones de flecha, devolverá el resto del código. A partir de ahí me convertí
charAt(1)
a[1]
, ya que es un camino más corto, aunque no se recomienda . Luego lo tomé===
y lo convertí==
. Si bien son diferentes en este caso, no importa. Por último, Retituléinput
aa
y quitó todos los espacios en blanco.Salida derecha e izquierda
Si bien el rompecabezas en realidad no necesita que el programa genere resultados a derecha e izquierda, aquí hay un ejemplo de otros resultados:
La única parte agregada es
?'right':'left'
. Esto crea un operador ternario , una instrucción if condensada, esto significa que el código (sin golf) es igual a *:Ejemplo
fuente
Pyth, 2 bytes
Salidas
#
para izquierda y##
para derecha.Pruébalo en línea
Explicación
fuente
Acc !! , 30 bytes
Por la forma Acc !! toma entrada, dará la salida después de ingresar solo una línea de entrada. Pero si canaliza la entrada o la redirige desde un archivo, no debería notar la diferencia.
Toma entrada de stdin. Emite
si el camino de la izquierda es menos transitado, o
#
si el camino de la derecha es menos transitado. Pruébalo en línea!Explicación
N
lee el valor ASCII de un carácter de stdin cada vez que se hace referencia a él. Hacemos un bucle mientras35-N
es verdad; es decir, mientras35-N != 0
oN != 35
. Por lo tanto, cuando sale el bucle, acabamos de leer el primer#
carácter de la línea. El siguiente carácter se leeN
y se vuelve a escribir en stdout conWrite
.fuente
Retina, 5 bytes
Salidas
1
si son correctas,0
si son izquierdas.Pruébalo en línea
Si los valores para un resultado positivo no tienen que ser distintos (5 bytes):
Emite un entero positivo si es correcto, cero si es izquierdo.
Pruébalo en línea
fuente
Lenguaje de fórmulas IBM / Lotus Notes,
373526 bytesEditar Siempre olvido que
@Like
con los comodines es 2 bytes más barato que@Contains
.Edit 2 en realidad no necesita el
@if
ya que solo imprime1
o0
depende de si la fórmula resulta en@True
o@False
.Fórmula de campo calculada. Simplemente tome todo a la izquierda del primero
##
que encuentre en el campoa
y si hay un#
en él1
sale por la izquierda, de lo contrario, sale0
por la derecha.Gracias a @DavidArchibald, aquí hay una solución para 22 bytes. Por respeto a la solución Davids, no la publicaré como mi respuesta principal.
Éste sale
1
para derecha e0
izquierda.fuente
Pip ,
86 bytesToma la entrada como un argumento de línea de comando (que necesitará citar y escapar de nuevas líneas cuando se ejecuta desde una línea de comando real). Emite
#
si el camino de la izquierda es menos transitado, y##
si el camino de la derecha es menos transitado. Pruébalo en línea!Explicación
Esto utiliza el operador de primera combinación de expresiones regulares recientemente agregado por Pip.
La solución directa de expresiones regulares (un puerto de la respuesta Retina de mbomb007 ) es de 9 bytes:
fuente
a
aq
ay obtener la entrada de stdin en su lugar.Chip de 7 bytes
Pruébalo en línea!
Salidas
0x0
para izquierda y0x1
para derecha. (El TIO incluye un indicador-v
para que pueda ver los valores binarios en stderr. Para ver la salida en ASCII,e*f
puede agregarse al final de la primera línea).El chip opera en bits individuales dentro de una secuencia de bytes, lo que en realidad lo hace bastante bueno en este problema específico.
A
es el bit menos significativo del byte de entrada, y '#' es el único carácter de entrada para el que se establece este bit. Cuando este bit se encuentra por primera vez, hemos alcanzado el primer '#' de la primera línea.Z
retrasa esa señal durante un ciclo, por lo que ahora estamos viendo el siguiente personaje.t
ahora está activado, lo que significa terminar la ejecución después de que se complete este ciclo. No necesitamos mirar más allá del ancho de la primera carretera.~S
suprime la salida para todos los ciclos excepto el final. Si esto no estuviera aquí, obtendríamos una salida en cada ciclo.a
pone el valor actual de sus vecinos (soloA
en este caso) en el bit menos significativo del byte de salida.Todo esto significa que obtenemos un
0x1
si el primer '#' es seguido inmediatamente por otro '#', y de lo0x0
contrario.fuente
C, 35 bytes
La misma idea que la respuesta de PragmaticProgrammer : encuentre el primero
#
y envíe lo que viene después:#
para "derecha" y<space>
para "izquierda".C (escapatoria), 16 bytes
Según los casos de prueba, parece que la carretera izquierda siempre está exactamente a un espacio del margen izquierdo. Entonces...
fuente
Lote, 46 bytes
Lee una línea de STDIN, la divide en espacios e imprime la primera palabra, por lo que genera
#
que sale para izquierda y##
derecha. Si una matriz de parámetros de línea de comandos entre comillas es aceptable, entonces para 36 bytes:Descompone el primer argumento para que se divida en espacios e imprima su primera palabra.
fuente
Python 2, 21 bytes
Pruébalo en línea
Salida
#
para izquierda y##
derechafuente
Retina , 5 bytes
Pruébalo en línea!
Una solución alternativa de 5 bytes. Imprime
#
para izquierda y##
para derecha. La idea es hacer coincidir todas las ejecuciones de#
s (#+
) e imprimir (!
) solo la primera de ellas (1
).fuente
Haskell, 21 bytes
o en estilo sin puntos:
"#" significa derecha y "" significa izquierda
La función solo toma una cadena, suelta los espacios iniciales y luego toma el segundo carácter (espacio si la izquierda es delgada y # si la izquierda es gruesa)
EDITAR: ¡Ahorré tres bytes gracias a Laikoni y nimi!
fuente
(!!2).dropWhile(' '==)
suficiente como respuesta.!!1
para el segundo elemento. Puedes acortar la prueba a<'!'
. En la versión sin puntos, puede reemplazardropWhile
porsnd.span
.Brainfuck, 32 bytes
Sin golf:
Imprime
#
para derecha eizquierda.
Pruébalo en línea!
fuente
Perl 5 , 8 + 1 = 9 bytes
Pruébalo en línea!
Corre con
-a
(penalización de 1 byte).La salida es (donde nombre de archivo es el nombre de archivo de la secuencia de comandos) si el camino izquierdo es menos transitado, o si el camino derecho es menos transitado.
# at filename line 1, <> line 1
## at filename line 1, <> line 1
Explicación
La
-a
opción lee automáticamente la entrada y la divide en columnas alrededor del espacio en blanco, ignorando los espacios en blanco iniciales. Como tal, el primer dato de entrada es lo que necesitamos; que de$F[0]
. También pone el programa en un bucle implícito, que no queremos. Sin embargo, el uso dedie
nos permite generar una cadena y salir del bucle implícito, al mismo tiempo (y sin más caracteres quesay
, la forma más habitual de imprimir una cadena).fuente
C 54 bytes
C ++ 58 bytes
Como OP especificó que puede ser un "programa / función", elegí escribir una función para guardar caracteres. Sin embargo, todavía incluí la declaración "#include" y el salto de línea que acompaña al recuento de caracteres, ya que son necesarios para compilar la función.
Salida
Devuelve un
" "
carácter de espacio para indicar a la izquierda, o un hash"#"
carácter para indicar la derecha.Explicación
La función strchr () recorre una cadena dada y devuelve un puntero a la primera aparición de un carácter especificado. Tiene una sobrecarga que acepta un número entero como segundo argumento en lugar de un carácter que me ahorra 1 carácter. Por ejemplo, '#' se puede reemplazar con 35. Luego agrego uno al puntero devuelto por la función para obtener el carácter que sigue inmediatamente, y lo desreferenciado, luego devuelvo el carácter resultante.
Nota
También me gustaría aprovechar esta oportunidad para expresar formalmente mi molestia en Visual Studio con el formato automático de mi código cuando intento jugar golf (╯ ° □ °) ╯︵ ┻━┻.
Editar: Gracias a Ray por señalar algunas diferencias en C y C ++ y dónde podría guardar caracteres <3.
fuente
#include <string.h>\n
conchar*strchr();
y ahorro 6 bytes sin dejar de ser perfectamente legal. (Y si lo prefiere C ++ por cualquier razón, puede reemplazar#include <string.h>
con#include <cstring>
y ahorro 1 byte.)JavaScript (ES6), 37 bytes
Explicación:
p
es una función que devuelvetrue
si el camino menos transitado está a la izquierda y falso en caso contrario. Esta es mi primera respuesta en este sitio, por lo que probablemente podría jugar más golf (tal vez la expresión regular).Funciona al tomar la línea superior de la entrada y ver si coincide con la expresión regular
/^ *#( |$)/
(inicio de cadena, cualquier cantidad de espacios, un # y un espacio o final de cadena).Esto es solo para dar a las personas aclaraciones sobre el formato y generar ideas. Estoy seguro de que se puede ganar y jugar más al golf. ¡Feliz golf!
fuente
[^#]
Japt , 3 bytes
(2 bytes para
-g1
indicador) Salidas#
para la derecha y un espacio para la izquierda. Basado en la respuesta de JavaScript de David Archibald.Pruébalo en línea!
fuente
Excel, 17 bytes
Asume entrada en celda
A1
.Devuelve
##
a la derecha y#
(#
y espacio) a la izquierda.fuente
Dyvil , 12 bytes
Explicación:
Uso:
Devuelve
(espacios en blanco) para izquierda y
#
derecha.fuente
Java 7,
16666635243 bytesSalidas
35
para derecha e32
izquierda.Sobre la base de @Clashsoft Dyvil respuesta 's .
Explicación:
Código de prueba:
Pruébalo aquí.
Salida:
fuente
Befunge 98, 11 bytes
Pruébalo en línea!
Imprime
32
a la izquierda y35
a la derecha, ambas con un solo espacio final.Explicación
Un truco que usé fue poner el
-!jv
primero, aunque no hizo nada. Esto me permitió deshacerme del espacio después del'
y guardar algo de relleno. Con esto último, el código seríapor 15 bytes.
fuente
Rubí, 20 bytes.
Devuelve verdadero para la izquierda, falso para la derecha.
fuente