Arte robado de ¿ De qué tamaño es el dígito?
Los dígitos de 7 segmentos se pueden representar en ASCII utilizando _|
caracteres. Aquí están los dígitos 0-9
:
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
Su trabajo es analizar el arte en números normales.
Notas sobre números
- Cada dígito tiene un ancho diferente.
1
tiene un ancho de1
3
y7
son2
anchas245689
y0
son todos3
anchos
También entre cada dígito hay un char de relleno. Aquí está el conjunto completo de caracteres:
// <- debería ser un espacio, pero el formato SE lo estropeó El | El | ------------- _ _ _ | | _ ------------- _ _ _ | _ | ------------- | _ | El | ------------- _ _ | _ _ | ------------- _ _ | _ | _ | ------------- _ _ El | El | ------------- _ _ | _ | | _ | ------------- _ _ | _ | _ | ------------- _ _ El | El | | _ |
Entrada
La entrada puede ser desde la consola o como una cadena arg a una función.
Salida
La salida se coloca en la consola o se devuelve desde la función.
Ejemplos:
_ _ _
| | | |_
| | | |_|
1776
_ _ _
_| | | | |_
|_ |_| | |_|
2016
_ _
| |_| |_| |_
| _| | _|
1945
_ _ _ _ _ _
| | | | | | | | | | | | |
| |_| |_| |_| |_| |_| |_|
1000000
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
0123456789
Este es el código de golf, ¡así que el conteo de bytes más corto gana!
Respuestas:
Pyth,
3330 bytesAquí está la idea: una vez que transponemos la entrada y la dividimos en dígitos, podemos ordenar las cadenas de dígitos individuales y asignarlas a sus valores.
Pruébalo aquí .
fuente
Rubí, 184 bytes
Explicación
Este es mi primer código de golf. Gracias por la diversion!
fuente
Pyth, 39 bytes
Esto parece funcionar? Pruébalo en línea .
fuente
Japt, 119 bytes
Try it here!
Oh cielos, este es muy largo. No creo que haya terminado de jugar golf.
Explicación
Preparación
Tomamos la entrada y convertimos cualquiera
|_
a1
. Luego, transponemos, eliminamos los espacios finales y los dividimos a lo largo de líneas nuevas dobles.Traducción
Hacemos un mapa sobre la matriz resultante y encontramos el índice donde aparece el formulario en una matriz de referencia. Aquí hay un diagrama para ayudar:
Después de eso, ¡nos unimos al conjunto de números y resultados!
NOTA : Quizás se pregunte por qué tenemos que cambiar cada personaje de arte a una serie de 1. Esto se debe a que parece haber un error (o algo así) que no me permite almacenar los personajes tal como están
|_
.fuente
_
error, pero no sé qué lo causó."\n\n"
se puede reemplazar conR²
y"\\||_"
con"%||_"
. Creo que se podría también ahorrar algo de bytes por codificar la cadena larga en la base 4 (cambio de cada uno de los 4 caracteres disinctive a0
,1
,2
, o3
, relleno de una longitud de un múltiplo de 4, a continuación, ejecutarr"...."_n4 d}
sobre él), pero por alguna razón Aún no he conseguido que esto funcione.Python2,
299261244 bytesRealmente me gustó este desafío, ¡buen trabajo!
Explicación
La función
s
toma las tres líneas como entrada, trata de encontrar una separación de dígitos (todos los caracteres son espacios). Cuando se encuentra tal separación, llamas
con el resto de las tres líneas y agrega el valor devuelto por la llamada a las tres líneas que componen el dígito. Si no hay separación, significa que solo hay un dígito.La función
p
es el punto de entrada, por lo que toma una cadena que representa los dígitos. Los dígitos se almacenan como un "hash" calculadosum(ord(c)**i for i,c in enumerate("".join(n)))%108
para ahorrar espacio (¡gracias a otras respuestas!).Ejemplo
Otras versiones
261 bytes (py3):
249 bytes, este transpone las líneas (py2):
fuente
JavaScript (ES6), 169 bytes
Comienza dividiendo en tres líneas, reasignando cada columna en un valor y luego construyendo una identidad única para cada columna a partir de esos valores. Luego se divide por
0
(la identidad para el espacio entre columnas), y finalmente asigna cada identidad a sus valores numéricos, que concatena y genera.fuente
join
en una cadena para poder dividirla. ¿Creo que podrías hacer eso también en Python?Python 3,
281254 bytesEditar
Acabo de mirar el código para la otra respuesta de Python y noté que gran parte del código es similar. A esto se llegó independientemente.
(nuevas líneas agregadas para "legibilidad")
Sin golf:
Pruebas:
Cómo funciona
(Nota: estoy explicando el programa no protegido aquí ya que es más legible y tiene exactamente el mismo código, con la excepción de que la
digit
función está integrada en una lambda)La función principal es
parse
. Primero divide la entrada en líneas y crea lanumbers
matriz.Esta es mi parte favorita (ya que tardó mucho en darse cuenta). Aquí tenemos
zip
las líneas para que básicamente podamos atravesar verticalmente la entrada. Cuando la línea tiene caracteres, la agregamos al último número de lanumbers
matriz. Si no tiene caracteres, agregamos un nuevo número a la matriz.Realmente simple,
numbers
se asigna con ladigit
función y se convierte en una cadena.Esto es (bastante) simple.
fingerprint
es la representación de cadena de los dígitos creados anteriormente menos los primeros 2 caracteres (esta fue la huella digital más pequeña que pude encontrar). Devolvemos el índice del primer partido.fuente
Haskell,
270207 bytesNo seas demasiado duro, este es mi primer programa de haskell;) Estoy casi seguro de que esto se puede jugar más, pero no sé cómo dado mi limitado conocimiento del idioma.
Sin golf:
¡Muchas gracias a @nimi por los consejos!
fuente
import Data.List
en su conteo de bytes. Buenas noticias: a) si lo haData.Lists
instalado, puede importarlo y reemplazarloa
consplitOn
:...map c$splitOn[" "]$transpose...
y...f<-splitOn",""|_...
. b)intercalate "" n
esconcat n
oid=<<n
. c) reemplazarres
con un solo nombre de letra. d) patrón de uso en lugar de guardalet ... in
:c n|e<-drop 2$id=<<n,Just r<-elemIndex ... ]=(show r)!!0
.=<<
hace? Ni los documentos de hoogle ni la firma de tipo son muy útiles para mí.=<<
en el contexto de la lista esconcatMap
, es decir, asigna la función dada sobre la lista y combina los resultados en una sola lista.>>=
hace lo mismo pero con los argumentos invertidos.id =<< n
(on >>= id
) asigna la función de identidad sobre la lista (de listas), es decir, no hace nada con las sublistas y las concatena. Entonces es lo mismo queconcat
.