La mayoría de las personas están familiarizadas con el tropo sobre contar ovejas para conciliar el sueño. Hay un rebaño de ovejas, algunas de ellas saltando sobre una cerca, y cuentas las ovejas mientras saltan. Supuestamente, esto ayuda a calmar tu mente y te pone en un estado de sueño para que te duermas.
Aquí hay una oveja ASCII mirando hacia la derecha, esperando ser contada:
'00^>
||
Aquí hay una oveja ASCII saltando sobre una cerca:
'00^>
/\
++
Aquí hay uno hacia la izquierda, que ya se ha contado:
<^00'
||
El reto
Dados dos enteros de entrada n
y m
, al n > 2
describir cuántas ovejas en total y m > 0
decir cuántas ovejas ya se han contado, genera una representación artística ASCII de contar ovejas para conciliar el sueño.
Ahora para el giro:
- Debido al tamaño de los corrales en los que se encuentran las ovejas, la fila superior solo puede contener un máximo de
10
ovejas, sin contar las ovejas que saltan actualmente, que también deben estar siempre en la fila superior. - Las filas siguientes no pueden tener las ovejas fuera de sus corrales respectivos (no puede tener más ovejas a la izquierda en la segunda fila que en la primera fila, y lo mismo para la derecha).
- Si hay
11
o más ovejas en total, la fila superior debe tener10
más las ovejas saltarinas. - El espacio en blanco inicial / final y el espacio en blanco entre las ovejas no importa, siempre que:
- Hay un mínimo de un carácter de espacio en blanco entre ovejas
- Todos los personajes se alinean apropiadamente.
Mientras se cumplan estas reglas, la disposición real de las ovejas depende de su implementación.
Ejemplos
Por ejemplo, aquí está n=3
y m=1
, el caso más simple.
'00^>
'00^> /\ <^00'
|| ++ ||
Aquí está n=11
y m=6
, la mayoría de las ovejas que pueden caber en una línea horizontal.
'00^>
'00^> '00^> '00^> '00^> /\ <^00' <^00' <^00' <^00' <^00' <^00'
|| || || || ++ || || || || || ||
Aquí hay un ejemplo diferente de eso, con n=11
ym=1
'00^>
'00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> /\ <^00'
|| || || || || || || || || ++ ||
Un ejemplo más grande con n=30
ym=12
'00^>
'00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> /\ <^00' <^00'
|| || || || || || || || ++ || ||
'00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> <^00' <^00'
|| || || || || || || || || ||
'00^> <^00' <^00'
|| || ||
<^00' <^00'
|| ||
<^00' <^00'
|| ||
<^00' <^00'
|| ||
Aquí hay un ejemplo con n=17
ym=2
'00^>
'00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> /\ <^00' <^00'
|| || || || || || || || ++ || ||
'00^> '00^> '00^> '00^> '00^> '00^>
|| || || || || ||
Aquí hay un ejemplo con n=19
ym=3
'00^>
'00^> '00^> '00^> '00^> '00^> '00^> '00^> /\ <^00' <^00' <^00'
|| || || || || || || ++ || || ||
'00^> '00^> '00^> '00^> '00^> '00^> '00^>
|| || || || || || ||
'00^>
||
Tenga en cuenta que todos estos son ejemplos . Para el último, puede terminar creando una matriz vertical de ovejas en el lado derecho, lo que permitirá que el lado izquierdo encaje en dos filas. O tal vez un cuadrado de ovejas de 2x2 en el lado derecho, que también cabría las ovejas del lado izquierdo en dos filas. Etc.
E / S y reglas
- La entrada puede tomarse en cualquier formato razonable y por cualquier método conveniente .
- Las nuevas líneas iniciales / finales u otros espacios en blanco son opcionales, siempre que los caracteres se alineen adecuadamente.
- Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
- La salida puede ser a la consola, devuelta como una lista de cadenas, devuelta como una sola cadena, etc.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
n=11
ym=9
n=11
eso0<m<=10
. Esto lo obliga a tener todas las ovejas en la fila superior y un número dinámico de ovejas a la izquierda (n-1-m
) y derecha (m
) de la cerca y no puede usar tamaños de corral fijos.Respuestas:
APL (Dyalog Unicode) , SBCS de 118 bytes
Anónimo infijo lambda. Toma
n
como argumento izquierdo ym
como argumento derecho. Devuelve un resultado de matriz anidada, pero la visualización predeterminada de esta matriz anidada sigue las especificaciones. Utiliza hasta nueve columnas para ovejas contadas y las columnas restantes para ovejas en espera.Pruébalo en línea!
{
...}
lambda anónimo;⍺
es argumento izquierdo,⍵
es argumento correctoEsta función tiene tres partes distintas: Esperando , Saltando y Contada . Cada uno está entre paréntesis, lo que hace que el resultado sea una lista de tres elementos.
Contado
(r⍴(×/r←9,⍨∘⌈⍵÷9)↑⍵⍴⊂S←⌽↑''(b←'''00^<')' ||')
''(
…)' ||'
Las tres líneas de una oveja contada reflejada, la del medio es:b←'''00^<'
el cuerpo y se le asigna ab
↑
mezclar la lista de cadenas en una matriz de caracteres (relleno con espacios)⌽
espejo queS←
asignar aS
(gran S heep)⊂
adjuntarlo para que podamos tratarlo como una unidad⍵⍴
use el número de ovejas contadas para remodelar cíclicamente ese(
...)↑
tome el siguiente número de elementos de eso (relleno con elementos prototípicos, es decir, la misma matriz pero con todos los caracteres reemplazados por espacios)⍵÷9
una novena cantidad de ovejas contadas⌈
redondeo9,⍨
agregar 9 a esor←
asignar ar
(lo que queramos r eshape con; filas y columnas)×/
producto de esa lista (esta es la cantidad de elementos que necesitamos, incluidos los rellenos)r⍴
remodelar eso a una matriz con las longitudes de dimensiónr
Saltando
(↑(s←'>',⍨¯1↓b)' /\' ' ++')
(
...)' /\' ' ++'
las tres líneas de una oveja saltando, la primera es:¯1↓b
soltar el último personaje deb
'>',⍨
agregar una cabeza hacia la derechas←
almacenar ens
(pequeño s heep)↑
mezclar la lista de cadenas en una matriz de caracteres (relleno con espacios)Esperando
(r⍴(×/r←d,⍨⌈w÷d←10-⍵⌊⊢/r)↑w⍴(w←⍺-⍵+1)⍴⊂s@2⌽S)
⌽S
espejoS
s@2
poners
en la línea 2 de eso (reemplazando los datos actuales allí)⊂
adjuntarlo para que podamos tratarlo como una unidad(
…)⍴
Reestructura cíclicamente eso al siguiente tamaño:⍵+1
la cantidad de ovejas contadas más una⍺-
restar eso del totalw←
asignar aw
( w aiting)(
...)↑
tome el siguiente número de elementos de eso (relleno con elementos prototípicos)⊢/r
el elemento más a la derecha der
(es decir, el número de columnas usadas para ovejas contadas)⍵⌊
el mínimo del total y que10-
restar eso de diezd←
asignar ad
( d ifference; columnas faltantes)w÷
dividirw
por eso⌈
redondear hacia arriba (da el número de filas necesarias)d,⍨
adjuntard
r←
asignar ar
(lo que queramos r eshape con; filas y columnas)×/
producto de esa lista (esta es la cantidad de elementos que necesitamos, incluidos los rellenos)r⍴
remodelar eso a una matriz con las longitudes de dimensiónr
fuente
n=11,m=9
y la regla "la fila superior debe tener 10 más las ovejas saltarinas"?Javascript,
281,293, 288 bytesTenga cuidado al usar el fragmento a continuación, existe un gran riesgo de narcolepsia inducida repentina.
fuente
m = n
te sale un error.C, 392 bytes
¡Gracias a @Jonathan Frech por guardar un byte!
Pruébalo en línea!
Desenrollado:
fuente
y+=1+!t
puede sery-=~!t
.Python 2 ,
222277 bytesPruébalo en línea!
fuente
n=11
ym=2
.AWK , 293 bytes
Pruébalo en línea!
Intenté usar sustituciones de cadenas para evitar algunos bucles, pero tomó mucho más código.
Explicación
Debo decir que el arte de las ovejas es bastante lindo. :)
fuente
Carbón , 98 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Ingrese el número de ovejas que ya se han contado.
Ingrese el número total de ovejas y calcule cuántas aún deben contarse.
Crea una matriz de dos matrices. Cada matriz tiene los siguientes elementos:
Refleja el lienzo e imprime la oveja que salta a medias.
Recorre las ovejas de ese lado.
Imprime una oveja.
Si este es el final de la fila, imprima algunas líneas nuevas y espacios para llegar al comienzo de la próxima oveja.
fuente