Sigo escuchando que pensar fuera de la caja es un objetivo que vale la pena alcanzar, pero ¿cómo puedo saber si lo estoy haciendo con éxito?
Para resolver este dilema, ya escribí un traductor de Brainwave a ASCII que, en teoría, debería producir resultados como
#
+------------+ #
| thinking | #
| | #
+------------+ #
#
o
#
+------+ #
| | thinking #
| | #
| | #
+------+ #
#
lo que hace que sea bastante fácil saber si uno está pensando fuera de la caja o no. (No #
forman parte de la salida y representan nuevas líneas).
Sin embargo, debido a un error, a veces solo se devuelve una sección más pequeña de la salida:
| | #
+---------+ #
thinking #
#
+#
|#
inking |#
#
#
La tarea
Por favor, ayúdenme a clasificar automáticamente la salida del traductor de Brainwave a ASCII escribiendo un programa o función que lea una representación ascii y devuelva si thinking
está en el cuadro, fuera de él o si no puede distinguirlo de la entrada.
Entrada
Un conjunto de cadenas de la misma longitud como una lista o delimitadas por nuevas líneas que contienen
- la cadena
thinking
o pre o sufijos válidos de la misma - los caracteres que
+-|
forman una caja rectangular o partes válidas de ella - espacios
- NO
#
, solo se incluyen en el desafío para marcar los extremos de las líneas de entrada.
Salida
- un valor verdadero si
thinking
está fuera de la caja - un valor falso si
thinking
está en el cuadro - una clara tercera quizás valor si no puede determinarse a partir de la entrada si
thinking
está en la caja o no
Ejemplos
Verdad:
#
+------+ #
| | thinking #
| | #
| | #
+------+ #
#
| | #
+---------+ #
thinking #
#
+#
|#
|#
inking |#
thinking #
-------+ #
++ # (thinking is not in the box, so it must be outside)
++ # (this is also the smallest possible box)
+ #
t#
+----+# (The box is not wide enough to contain "thinking")
---# (The box is not high enough to contain "thinking")
---#
Como entrada de cadena:
" \n +------+ \n | | thinking \n | | \n | | \n +------+ \n "
" | | \n +---------+ \n thinking "
" \n +\n |\n |\ninking |"
"thinking \n-------+ "
" ++ \n ++ "
"+ \n t"
"+----+"
"---\n---"
"g++"
"k\n+"
Falsy
#
+------------+ #
| thinking | #
| | #
+------------+ #
#
+---------------#
| #
| #
| thinking #
| #
king | #
------+ #
+---#
|thi#
+---#
-#
n#
-#
Como entrada de cadena:
" \n +------------+ \n | thinking | \n | | \n +------------+ \n "
" +---------------\n | \n | \n | thinking "
" | \nking | \n------+ "
"+---\n|thi\n+---"
"-\nn\n-"
Tal vez:
thinking#
g|#
think#
-----#
| |# (box large enough to possibly contain the string)
| |#
+--#
| #
# (empty input)
Como entrada de cadena:
"thinking"
"g|"
"|t"
"-\ni"
"h\n-"
"think\n-----"
"| |\n| |"
" +--\n | "
""
Reglas
- Este es el código de golf , así que trate de usar la menor cantidad de bytes posible.
- El valor quizás se puede elegir libremente siempre que sea diferente del valor verdadero / falso y sea el mismo para todas las entradas quizás. También puede ser un error.
- Puede suponer que la entrada siempre es válida (por ejemplo, no contiene más caracteres que
+-ghiknt|
, no más de un cuadro, ...).
fuente
+\n+
caja demasiado pequeña para una palabraRespuestas:
Javascript (ES6),
274263 bytesLa función
f
devuelvetrue
,false
o-1
como su valor "quizás". Debe llamarse con un argumento: la entrada. Los otros dos parámetros solo existen para acortar el código.Aquí hay una versión menos golfizada con comentarios:
Me divertí mucho con este. ¡Gracias!
Editar: Guardado 6 bytes gracias @L. Serné modificando
b
para usar un argumento predeterminado, guardando 3 bytes y cambiando[a-z]
a\w
, guardando 3 bytes más. También salvado 5 bytes más haciendo que la palabra de sustitución no global, el ahorro de 1 byte, y cambiando"a"
a5
y","
a4
, el ahorro de 4 bytes.fuente
console.log(f("input"))
. Parece funcionar. Gran trabajo en golf esto.b=(b,c)
ab=(b,c="")
, y luego puede eliminar el último argumento de las dos llamadas ab
con una cadena vacía como segundo argumento, ahorrando (2 * 3-3 =) 3 bytes en total. Además, puede acortar la palabra regex de[a-z]+
a\w+
(haga esto antes de que el otro reemplace, porque esto también coincidirá con los dígitos) ahorrando 3 bytes más.Python 2.7,
532494453 bytesEste seguro tenía muchos casos especiales. Mis valores de verdad y falsedad son las cadenas "Verdadero" y "Falso" respectivamente. Mi valor quizás es un Error de índice, ya que son fáciles de activar y uno de mis casos de prueba lo activa si la entrada es una cadena vacía, que de todos modos es un caso probable. Hice uso de expresiones regulares bastante.
No practico golf en Python a menudo, así que estoy seguro de que esto podría reducirse aún más, pero aquí está mi código:
En mi versión de golf, muestro la respuesta Verdadero / Falso llamando
exit(bool as string)
. Aquí hay una versión comentada, en la que las declaraciones de salida se reemplazan con declaraciones de retorno, y todo se ha movido a una función:Mi solución asume que la entrada es válida, es decir, 'Thinking' (o sus subcadenas) están escritas correctamente, solo hay un cuadro, etc.
Editar: ahorró 10 bytes gracias a la sugerencia de @ ais523 de cambiar
c
ai.count('+')
, 3 bytes gracias a la sugerencia de @ Pavel de reemplazarTrue
con1<2
yFalse
con2>1
, 23 bytes eliminando un bloque innecesario y 2 bytes eliminando algunos espacios.Edición 2: ahorré 36 bytes gracias a @Wheat Wizard que señaló amablemente que mis 'pestañas' eran en realidad 5 espacios (¡Oh!) Y sugirió algunas otras mejoras.
fuente
i
nunca cambia, ¿verdad? Por lo tanto, probablemente podría guardar algunos bytes almacenandoi.count('+')
enc
lugar dei.count
, ya que nunca lo llama con ningún argumento, pero+
.Befunge, 535 bytes
Esto no es bonito y no se acerca a competir con las respuestas existentes, pero es lo mejor que podría lograr en Befunge.
Devuelve
1
si pensar fuera de la caja,0
si pensara en el interior de la caja, y-1
para tal .Pruébalo en línea!
fuente