Aquí hay un simple muñeco de nieve de arte ASCII :
_===_
(.,.)
( : )
( : )
Hagámosle algunos amigos. Este será el patrón general para nuestra gente de nieve de arte ASCII:
HHHHH
HHHHH
X(LNR)Y
X(TTT)Y
(BBB)
Los espacios iniciales y los paréntesis son siempre los mismos para todas las personas de nieve. Las diferentes letras representan secciones del patrón que pueden cambiar individualmente. Cada sección tiene exactamente cuatro preajustes para lo que los caracteres ASCII pueden llenar. Al mezclar y combinar estos ajustes preestablecidos para las ocho secciones, podemos hacer una variedad de personas de nieve.
Todos los preajustes
(Observe que los espacios se colocan en líneas vacías, por lo que la forma de la sección siempre es correcta).
H es para sombrero
Sombrero de copa
_===_
Sombrero mexicano
___ .....
Fez
_ /_\
-
___ (_*_)
N es para nariz / boca
Normal
,
Punto
.
Línea
_
Ninguna
L es para ojo izquierdo
Punto
.
Punto más grande
o
El punto más grande
O
Cerrado
-
R es para el ojo derecho
(La misma lista que el ojo izquierdo).
X es para brazo izquierdo
Brazo normal
<
Brazo hacia arriba
\
Brazo hacia abajo
/
Ninguna
Y es para el brazo derecho
Brazo normal
>
Brazo hacia arriba
/
Brazo hacia abajo
\
Ninguna
T es para el torso
Botones
:
Chaleco
] [
Brazos interiores
> <
Ninguna
B es para base
Botones
:
Pies
" "
Plano
___
Ninguna
Desafío
Escriba un programa que tome una cadena de ocho caracteres (a través de stdin o línea de comando) en el formato HNLRXYTB
, donde cada letra es un dígito del 1 al 4 que denota qué preajuste usar para la sección correspondiente de la persona de nieve. Imprima la persona de nieve completa en stdout.
Por ejemplo, la entrada 11114411
es el muñeco de nieve en la parte superior de la página. (Primero 1
: tiene un sombrero de paja, segundo 1
: tiene una nariz normal, etc.)
Otro ejemplo, la persona de nieve para la entrada 33232124
:
_
/_\
\(o_O)
(] [)>
( )
Detalles
Cualquier cantidad y combinación de espacios iniciales / finales y nuevas líneas iniciales / finales se permiten siempre que ...
- el muñeco de nieve tiene todas sus secciones ordenadas correctamente una con respecto a la otra, y
- nunca hay más de 64 caracteres de espacio en blanco en total (el patrón general es solo 7 × 5, por lo que probablemente no alcanzará este límite).
No necesita imprimir filas / columnas del patrón si solo contienen espacios en blanco. Por ejemplo, no se requiere la línea vacía del sombrero de paja.
Debe usar el orden de las piezas como se indica arriba.
En lugar de un programa, puede escribir una función que tome la cadena de dígitos como argumento. La salida debe imprimirse normalmente o devolverse como una cadena.
- Puede tratar la entrada como un entero en lugar de una cadena si lo prefiere.
Puntuación
El código más corto en bytes gana.
Pregunta extra: ¿Cuál de las 65536 personas de nieve distintas es tu favorita?
Respuestas:
CJAM,
135134132130126125 bytesPara crear el archivo en su máquina, ejecute
xxd -r > snowman.cjam
, pegue el hexdump reversible desde arriba, presione Entery finalmente Ctrl+ D.Alternativamente, puede probar el código en línea utilizando el intérprete CJam .
Prima
Mi muñeco de nieve favorito es Olaf:
El invierno es un buen momento para quedarse y abrazarse, pero ponme en verano y seré un ... ¡feliz muñeco de nieve!
Idea
La cadena hexadecimal
codifica las posibles opciones para todas las partes del muñeco de nieve, incluidas las fijas. Vamos a llamar a esta cadena P .
Para decodificarlo, convertimos P (aquí tratado como una matriz de enteros) de la base 256 a la base 20 y reemplazamos cada uno de los enteros resultantes por el carácter correspondiente de la cadena M :
Esto da como resultado la cadena T :
La primera línea codifica todas las opciones de sombreros, la última todas las partes fijas del cuerpo. Las otras líneas contienen las 28 partes del cuerpo variables.
Dividimos T en los avances de línea y dividimos las cadenas de la matriz resultante en cuatro partes de igual longitud. Luego, leemos la entrada de STDIN, empujamos la matriz de sus dígitos en la base 10 y seleccionamos los elementos correspondientes de las cadenas divididas. Aprovechamos el hecho de que las matrices se envuelven en CJam, por lo que el elemento en el índice 4 de una matriz de longitud 4 es en realidad el primer elemento. La última cadena dividida no corresponde a ninguna entrada, por lo que se seleccionará por completo.
Manejamos el sombrero desplazando el primer elemento fuera de la matriz resultante. El índice en M del primer carácter, leído como un número base 4, revela el número de espacios y subraya en la primera línea del sombrero. Imprimimos esos caracteres, un salto de línea, un espacio y el resto de la cadena desplazada. Luego, empujamos un salto de línea adicional en la parte inferior de la pila.
Para las partes del cuerpo, concatenamos la cadena correspondiente a todas ellas. Vamos a llamar a esta cadena S . Para el montaje de las partes del cuerpo, llevamos a cabo la transcripción: tomamos cada carácter de la cadena H , calcular su índice en especie (M) y sustituirlo por el carácter correspondiente de S . Aprovechamos el hecho de que el operador de transliteración rellena automáticamente S para que coincida con la longitud de clasificación (M) repitiendo el último carácter de S tantas veces como sea necesario.
Finalmente, dividimos la cadena resultante en subcadenas de longitud 7 y colocamos un salto de línea entre cada par de subcadenas.
Código
Supongamos que las variables
M
yP
contienen las cuerdas M y P .fuente
JavaScript ES6,
210208202 bytesEsta es una función anónima; lo usas ejecutando
([function code])('42232124')
. La parte más agravante de esto fueron los brazos, que ocupan 2 líneas, por lo que tuve que incluir el código para la parte superior e inferior.El Fragmento de pila a continuación tiene un código comentado sin golf, sin ES6. Y puede usarlo para probar fácilmente el código y probar diferentes combinaciones. Editar: Me estoy divirtiendo demasiado con esto. He agregado varias características nuevas, incluida una forma de generar un muñeco de nieve aleatorio.
Gracias a Yair Rand por guardar seis bytes.
fuente
1 1
->11
) y agregando||' '
al final.CJam, 164 bytes
Genera el muñeco de nieve de izquierda a derecha, de arriba a abajo. Esto elimina la necesidad de cualquier tipo de operaciones de unión o reposicionamiento de cuerdas, ya que solo dejo cada pieza del muñeco de nieve en la pila. Y luego, debido al volcado automático de la pila al final de los programas:
♫ ¡ CJam quiere construir un muñeco de nieve! ♫
Pruébalo en línea.
Prima
¡Pensar más allá!
32443333
le da a un hombre nieve (wo) novia. Tienes que intentarlo un poco para verlo, pero están los brazos hacia adentro, fez + brazos hacia abajo = velo, y la cabeza está realmente en el fez / velo. La forma generalmente grande es el vestido ondulado, y los "ojos" y la "nariz" son pliegues en el vestido.Otras opciones de "ojo" son un poco arriesgadas ...
fuente
Python,
276289 bytesEste código tiene 8 bytes adicionales (
\
* 4) para facilitar la lectura.Construye el muñeco de nieve poco a poco.
Prima
F("44444432")
da "oso ruso soñoliento":fuente
Python 2,
354280241261 bytesLlamar
s('33232124')
da:Pero mis favoritos son
44242123
y41341144
:fuente
s('33232124')
las barras de fez no se dibujan. De hecho, en muchos casos falta la mitad inferior del sombrero. Además,0
no es una de las opciones.CJAM,
150145 bytesBase convertir todas las cosas!
SE destruye los no imprimibles, así que aquí hay una copia en Pastebin. Asegúrese de copiar la parte "RAW Paste Data", no la parte al lado de los números de línea. Puede probarlo en línea , pero el enlace permanente puede no funcionar en algunos navegadores.
Explicación
La
"b8li'U9gN;|"125:Kb8bp
parte genera la matrizque asigna cada dígito de la entrada al lugar donde se usa el dígito. Cualquier cosa que sea común a todas las entradas (por ejemplo, espacios iniciales y
()
) se le asigna arbitrariamente un 0, excepto el primero al que se le asigna 1 para que la conversión base pueda funcionar.l:~f=
luego convierte cada dígito en un int y asigna en consecuencia, por ejemplo, para14441133
obtener"G.HMtNY7VM=BM@$^$dX8a665V"KbFb"=_./ <[(*-oO,\":"f=
da la cuerdadespués de lo cual duplicamos, reemplazamos
/<[(
con\>])
y agregamos para dar una cadena larga. Luego dividimos la cadena en grupos de 4 y correlacionamos de acuerdo con otra matriz"r pL|P3{cR`@L1iT"Kb21b
, obteniendo así una matriz de cadenas de longitud 4 que describe todas las opciones posibles en cada celda (por ejemplo,_=./
todas las opciones posibles para el segundo carácter en la segunda línea, comenzando desde el Sombrero ruso).Finalmente, asignamos las opciones a las entradas en consecuencia
.=
, las dividimos en filas de longitud 77/
y las distribuimos en algunas líneas nuevasN*
.Pruebas de funcionamiento
fuente
TI-BASIC, 397 bytes
Importante: si desea probar esto, descárguelo desde aquí y envíe ese archivo a su calculadora. No , no tratar de copiar el siguiente código en el editor de programas de TI-Connect CE o SourceCoder 3 o algo para construir y enviarlo a la calculadora; en el caso de TI-Connect, dirá que tiene un token no válido. SC3 utiliza la barra diagonal inversa como delimitador de comentarios (
//
inicia un comentario en SC3;/\/
sin embargo, se exportará como//
) y, por lo tanto, no exportará los brazos y el sombrero correctamente, haciendo que el programa muestre las partes incorrectas del cuerpo y arroje un ERROR: DOMINIO de vez en cuando. ¡Cosas divertidas!Importante # 2: Soy demasiado vago para arreglar la descarga en este momento, así que cuando la transfieras a tu calc, cambia la
7
en la tercera línea desde abajo haciaX+6
. El código a continuación es fijo si necesita comparar.Bono: me gusta especialmente
12341214
.Algunas notas:
[2ND] → [0]CATALOG → [3]θ → scroll down, it's between ﹢ (small plus) and · (interpunct)
) en lugar de un punto para que los ojos no se alineen con la coma, porque eso se ve raro como el infierno.fuente
length(Ans
debe serlength(Str9
; segundo, ¿has intentado combinar Str3 a Str6 en una sola cadena?C,
280 272264 bytesEn este punto solo jugamos golf parcialmente, pero este es un desafío divertido.
(Con algo más de \ n para facilitar la lectura). Espero que esto
define
desaparezca con más golf.Una versión más legible es
fuente
C, 212 bytes
Una versión legible:
Tomé la idea de la respuesta de Reto Koradi . Hice varias mejoras divertidas que hice, que pueden justificar publicar una respuesta por separado:
\"
(-3)t[i++]
por*t++
(-4)while
porfor
; eliminado{}
(-4)\0
(-9)t[...],t+=4
para(...)[t+=4]
eliminar el operador de coma (-1)¿Por qué tantos problemas? Para compartir mi favorito, fantasma de nieve:
fuente
d
detrás de losmain
JavaScript, 489 (sin líneas nuevas y pestañas)
corre con
node snowman.js 33232124
fuente
parseInt
llamada, ya que la resta intenta automáticamente convertir los operandos de cadena a números. Además, puede deshacerse delfunction
envoltorio y simplemente seguir adelantei=process.argv[2]
, a menos que lo esté utilizando para la recursividad o el alcance variable. Además, puede deshacerse pors
completo y simplemente hacerloconsole.log([ ... ].join('\n'))
.,
caracteres, pero le permite eliminar más de 50. Finalmente, una optimización muy delicada sería usar enq=j[4]-1
lugar deq=j[4]==1
(y luego cambiar su uso deq
y!q
). Esto haráq
que sea0
(un valor falsey) cuandoj[4]
es1
, y de lo contrario un valor verdadero distinto de cero. Esto es exactamente lo contrario de sus valores verdaderos / falsos actuales, por lo que simplemente cambiaq
y!q
.Pyth, 203 bytes
Jajaja Pruébelo en línea: Pyth Compiler / Executor
Explicación
Primero defino una función auxiliar
g
, que toma una lista y un carácter como entrada, convierte el carácter en su valor ASCII y toma el elemento correspondiente (ajuste modular).La otra cosa es imprimir línea por línea. Por ejemplo, la primera línea es:
Por cierto. Experimenté un poco con
.F"{:^7}"
, que centra una cadena. Al usarlo, podría guardar algunos espacios en mi código, pero no guarda ningún byte al final.fuente
R,
436437 bytesAquí está mi primer intento en code-golf , usando R, que no es el más corto pero divertido. Al menos estoy superando a JavaScript (por ahora) ...
Pruebas:
De hecho, me luchado con
X
yY
siendo multilined pero con cosas en el medio, terminó separando cada línea (X
,S
) y (Y
,U
).function
y la conversión de cadena a entero también son muy detalladas.Editar 436 => 437
Tuve que arreglar un espacio vacío perdido notado por @OganM
Podría reducir a 428 reemplazando los saltos de línea entre variables con
;
, pero el código de "una línea" se ve tan mal e ilegible que no seré tan codicioso.fuente
Haskell,
361306289 bytesUso:
Cómo funciona: indexar cada elemento de la lista
[hat options, left upper arm options, left eye options, ..., base options]
con el número de entrada correspondiente y concatenarlo en una sola lista. He dividido el brazo izquierdo y derecho en una parte superior e inferior, para poder construir el muñeco de nieve línea por línea.Mi favorito es el clásico
11112211
.Editar: cambió de la lista de cadenas a cadenas para las partes (sombrero, ojo, ...). Necesita un segundo parámetro, la longitud de la subcadena a tomar.
Editar II: subcadenas comunes extraídas
fuente
C,
233230 bytesCon nuevas líneas y espacios en blanco para una mejor legibilidad:
Todo esto es bastante fuerza bruta. Utiliza una tabla que contiene una entrada para cada uno de los 35 caracteres (5 líneas con longitud 7). Cada entrada en la tabla es:
,
(
,)
. La longitud de la entrada de la tabla es de 1 carácter.El código luego recorre los 35 caracteres y busca el valor en la tabla.
fuente
R 414 bytes
Versión ligeramente modificada de la versión de Molx
Solo fusioné las variables separadas en una. Shawing de un espacio que se utilizó para la
X=c(
rutina.fuente
Cjam,
200191 bytesEsto seguramente se puede jugar mucho al golf. (Especialmente si la base lo codifico). Pero aquí va para empezar:
La entrada entra en STDIN. Por ejemplo, la entrada
23232223
da:Pruébalo en línea aquí
fuente
Haskell, 333 bytes
Mi primera sumisión! Construye el muñeco de nieve de arriba a abajo, de izquierda a derecha. Dividí los brazos en dos funciones para cada brazo, la parte al lado de la cabeza y la parte al lado del cuerpo.
La función s toma una lista de enteros y concatena la salida de las funciones que producen las partes del cuerpo dadas las sublistas correctas de la entrada.
Se basa en la función
que devuelve el enésimo elemento de la lista que se le da. Esto permite la lista de sombreros en a, así como cosas como
Todas estas funciones usan una reducción beta, por lo que su argumento se pasa como índice a la función y.
Salida:
fuente
Python 3,
349336254251 bytesTanto por hacer mi tesis.
Aquí está el contenido del archivo snowman.py :
Y así es como conjuro mi muñeco de nieve favorito:
Explicación
fuente
[int(i)]
yfor
. Del mismo modo, puede eliminar el espacio en la línea 7 entref(int(i))
yfor
. Además, en suprint()
estado de cuenta no necesita imprimir el espacio final, no es parte del muñeco de nieve. Finalmente, cambie suprint()
llamada a una sola líneaprint("{}\n{}({}{}{}){}\n{}({}){}\n ({})".format(*c))
. Cada uno de estos debería ahorrarle 1 byte, ahorrando un total de 4 bytes :)n
, puede definir un atributo de funciónf
. Por lo tanto, puede reemplazar las líneas 5-6 con:def f(m):f.n+=1;return l[4*m+int(b[f.n])-1]
<nueva línea>f.n=-1
. Esto reduce 3 bytes más.PowerShell , 199 bytes
Inspirado por Reto Koradi y anatolyg .
Pruébalo en línea!
Nota: La línea 3 tiene 2 espacios de camino, la línea 4 tiene un espacio de camino.
Mi favorito es
44444444
"soñoliento guardia ruso":fuente
JavaScript (ES6), 247
No es tan buen anuncio @ NinjaBearMonkey :(
Prueba en fragmento (con Firefox)
fuente
05AB1E ,
137135128122 bytes-6 bytes gracias a @Grimy .
Pruébelo en línea o verifique algunos casos de prueba más .
Explicación:
Primero creamos la cadena de plantilla:
Que se ve así:
Luego hago un bucle sobre los dígitos de la entrada:
Y haga lo siguiente:
Empuje el índice (indexado a 0)
N
de la lista:Empuje todas las partes posibles como una lista de listas de caracteres:
Use el índice de bucle
N
para obtener la lista de caracteres de la parte con la que estamos trabajando actualmente:Luego, divida la lista de caracteres en cuatro partes iguales y use el dígito de entrada
y
(que está indexado en 1) para indexarla. (NOTA: Dado que 05AB1E está indexado en 0, pero la entrada está indexada en 1, sería lógico disminuir el dígito en 1 antes de la indexación. Sin embargo, dado que 05AB1E tiene un ajuste automático (es decir, la indexación3
en la lista[1,3,5]
dará como resultado1
), simplemente rotó las partes una vez para que las partes con nr 4 en la descripción del desafío estén al principio de las listas).Y luego reemplace el índice indexado 0 del bucle que empujamos al principio, uno por uno con los caracteres parciales:
Y al final, el resultado se emite implícitamente.
Vea esta sugerencia mía 05AB1E (sección ¿Cómo comprimir enteros grandes? Y ¿Cómo comprimir listas enteras? ) Para comprender cómo funcionan las partes de compresión.
En cuanto a mi favorito, sigue siendo el mismo 'conejo de nieve' que hace 1,5 años cuando publiqué mi solución Java :
fuente
0
entre sus ojos. :)Java 8,
548545432401399 bytesPruébalo aquí
Explicación:
Mi favorito:
No sé por qué, pero se ve un poco lindo. Como un conejito con un sombrero ruso en lugar de orejas.
fuente
F #, 369 bytes
Pruébalo en línea!
Debido a que
g
utiliza un descriptor de acceso a la matriz, necesito especificar explícitamente el tipo en la definición de la función como astring
, por lo que la definición de la función lo tiene(g:string)
.Aparte de eso, generalmente es una matriz de
strings
acceso por un índice. El sombrero, los brazos izquierdo y derecho que irían en líneas separadas se dividen en matrices superiores e inferiores separadas. Lai
función cambia un número en el argumentog
en el índice de matriz. Y la letrab
reemplaza las cadenas de un espacio en las matrices.¡Gran reto! Mi muñeco de nieve favorito es probablemente
242244113
:Te estoy vigilando
fuente
PHP, 378 bytes
Pruébalo en línea!
Me gusta sabio señor búho
31333342
fuente
Python 2.7, 257 bytes (creo)
donde 'i' es la entrada como una cadena (por ejemplo, "13243213")
fuente
i
porinput()
un total de 262 bytesDart , 307 bytes
Pruébalo en línea!
fuente
Zsh, 247 bytes
Pruébalo en línea !!
muñeco de nieve favorito:
fuente