El desafío es realmente extremadamente simple. Elija 5 letras distintas (puede elegir las 5 que le permiten el código más corto si lo desea) y envíelas a la consola. Sin embargo, el giro es que deben ser de la siguiente lista:
AAA BBBB CCCC DDDD EEEEE FFFFF GGG H H
A A B B C D D E F G H H
AAAAA BBBB C D D EEEE FFFF G GG HHHHH
A A B B C D D E F G G H H
A A BBBB CCCC DDDD EEEEE F GGG H H
IIIII J K K L M M N N OOO
I J K K L MM MM NN N O O
I J KKK L M M M N N N O O
I J J K K L M M N NN O O
IIIII JJJ K K LLLLL M M N N OOO
PPPP QQQ RRRR SSSS TTTTT U U V V W W
P P Q Q R R S T U U V V W W
PPPP Q Q RRRR SSS T U U V V W W
P Q QQ R R S T U U V V W W W
P QQQQ R R SSSS T UUU V W W
X X Y Y ZZZZZ
X X Y Y Z
X Y Z
X X Y Z
X X Y ZZZZZ
Reglas Adicionales:
- 5 de la misma letra no está permitido, no hay opciones de repetición.
- Cada letra debe usar la capital de sí misma como carácter ascii para dibujarla.
- Cada salida de letra debe estar en la "misma línea" y tener 5 espacios entre cada letra.
- Puede elegir las 5 letras que desee, esto le permitirá reutilizar algunos códigos y reducir el recuento de bytes. Averiguar qué letras le permitirán hacer esto de manera más eficiente es parte del desafío.
- Los espacios finales son aceptables.
- Una nueva línea final es aceptable, aunque no más de una nueva línea final.
- Este es el código de golf, el menor recuento de bytes gana.
Ejemplos:
A B C D E
AAA BBBB CCCC DDDD EEEEE
A A B B C D D E
AAAAA BBBB C D D EEEE
A A B B C D D E
A A BBBB CCCC DDDD EEEEE
EFLIP
EEEEE FFFFF L IIIII PPPP
E F L I P P
EEEE FFFF L I PPPP
E F L I P
EEEEE F LLLLL IIIII P
LOCA
CCCC RRRR AAA ZZZZZ Y Y
C R R A A Z Y Y
C RRRR AAAAA Z Y
C R R A A Z Y
CCCC R R A A ZZZZZ Y
No tenga miedo de enviar más de una respuesta con diferentes letras o diferentes estrategias cada vez, esto se puede lograr de varias maneras diferentes.
code-golf
ascii-art
kolmogorov-complexity
Urna de pulpo mágico
fuente
fuente
J
s.\n
, lo permitiré.Respuestas:
Jalea , 41 bytes
LICTE
TryItOnline!
Idea
Utilice un decodificador de longitud de ejecución con letras que tengan el medio más similar posible con solo una longitud de ejecución de cada "valor de píxel" por fila por letra.
Ponga un inicio plano como "L" para evitar diferentes valores de decodificación de longitud de ejecución para las filas.
Coloque la letra diferente (no pudo encontrar 5) de las tres filas del medio al final para que la diferencia más pequeña se pueda agregar aritméticamente.
Salida deseada; las longitudes de carrera; y estos convertidos de la base 11:
Los tres valores
399633415
,431646160
y1179122455
en la base250
como índices de página de código de jalea son entoncesðƁ ƥ
,ȷɓSɠ
yJrŀṘ
que se pueden utilizar para encapsular la información de longitud de ejecución.El código
fuente
Carbón ,
5149 bytes (ECXKI)Salidas
Pruébalo en línea!
Usando caracteres que son simétricos verticalmente, dibuja las mitades superiores y luego refleja. La mayoría de estos utilizan Polygon (
G
) y PolygonHollow (GH
) para dibujar una serie de segmentos de línea conectados con un carácter particular.I
se puede hacer más fácilmente con MultiPrint (P
), utilizandoT
como dirección.Nota: PolygonHollow solo dibuja los segmentos especificados, sin completar el polígono ni llenarlo. El polígono se completará y rellenará (no lo que queremos) si el polígono se puede completar con una línea simple en una de las ocho direcciones cardinales o intercardinales. De lo contrario, se comporta como PolygonHollow, para un ahorro de un byte.
Se eligió el orden de los caracteres para requerir solo movimientos horizontales desde el punto final de uno hasta el comienzo del siguiente. Así es como avanza el cursor:
fuente
GH
a los documentos]PowerShell v2 +,
138128114112106105 bytes (LICTD)La idea es maximizar los espacios entre las letras para que podamos obtener compresiones repetidas.
Toma prestado el truco de deduplicación de la fila media de la respuesta de Florent . Ahorré 6 bytes gracias a Ben Owen usando la multiplicación de cadenas para las tres filas del medio, y un byte adicional gracias a Matt .
La salida es como la siguiente en 227 bytes, para una reducción del 53.7%:
fuente
$("L11 I1 C11 T1 D D`n"*3)
lugar de las 3 líneas del medioJavaScript,
110109 bytes (NUBE)Mostrar fragmento de código
La salida es de 227 bytes:
fuente
ES6 (Javascript),
194, 181 bytes (IGOLF / CUALQUIER)Este es largo y no está realmente optimizado (al menos aún), pero puede modificarse para imprimir cualquier mensaje en particular, solo cambiando los datos del mapa de bits.
EDITAR: Reemplazo interno reducido con mapa , uso bit shift para relleno
Golfed
Manifestación
Teoría
Toma una carta:
convertirlo a matriz binaria (mapa de bits)
haga lo mismo para otras 4 letras, escanee una línea, quitando 5 bits "superiores" de cada
11111 01110 01110 10000 11111
convertir a una cadena hexadecimal (debería usar base36 o incluso ASCII imprimible aquí)
0x1f73a1f
aplique el mismo algoritmo a otras 4 líneas, para obtener el mapa de bits.
Render en el orden inverso.
fuente
[32979487,4736528,4834846,4769296,32979952]
es más corto que su representación hexadecimal/(1|0)/g
por/\d/g
para guardar algunos bytes. También\n
podría ser reemplazado por una nueva línea real.PHP,
1071041029486 bytesOk, estoy seguro de que tengo la fuente más pequeña posible con este método ahora. Escribí un script para generar y luego comprimir cada combinación posible de cinco letras. Hay dos soluciones que coinciden con la compresión más corta: LODIC y LDOIC. Voy con el primero porque es más divertido decirlo.
Fuente:
Salida:
fuente
'
s: la cadena se tratará como una constante con un valor de sí misma.05AB1E , 44 bytes
Esto fue divertido.
Siento que necesito volver e intentar jugar un poco más cuando tenga tiempo.
Utiliza la codificación CP-1252 .
Inspirado por la respuesta de carusocomputing .
ECOIH
Pruébalo en línea!
Explicación
‘ÓÑOIHH‘
empuja la cuerda"ECOOIHH"
.SðýJ3×S
une la cadena por espacios, la repite tres veces y la convierte en una lista.La lista resultante es
['E', ' ', 'C', ' ', 'O', ' ', 'O', ' ', 'I', ' ', 'H', ' ', 'H', 'E', ' ', 'C', ' ', 'O', ' ', 'O', ' ', 'I', ' ', 'H', ' ', 'H', 'E', ' ', 'C', ' ', 'O', ' ', 'O', ' ', 'I', ' ', 'H', ' ', 'H']
.•Td<UÕ‘áÓ?¢tWvkÔÚ•
empuja el número564631055513119191317171314619131717500
.S)ø
comprime la lista y el número juntos.ü×J
realiza la repetición de cuerdas por pares y las une.El resultado es la cadena
EEEEE CCCC OOO IIIII H HE C O O I H HEEEE C O O I HHHHH
.3äû»
divide eso en 3 piezas, agrega la primera y la segunda pieza en orden inverso y se une por líneas nuevas.fuente
•Td<UÕ‘áÓ?¢tWvkÔÚ•
empuja el número564631055513119191317171314619131717500
" porque por qué no lo haría ...JavaScript (ES6), 96 bytes (DIOCL)
La idea aquí es no solo hacer que las tres líneas del medio sean idénticas, sino también hacer que la primera línea sea casi idéntica a la última. Dado que solo hay 4 letras que se ajustan perfectamente a esta descripción
CDIO
,L
es la siguiente mejor opción, ya que solo requiere 4 caracteres agregados al final de la cadena.Al igual que con la respuesta de Florent , este es un fragmento que devuelve el resultado. Agregue 3 bytes si necesita ser una función.
Fragmento de prueba
Mostrar fragmento de código
fuente
D
primero.C
pasadoI
yO
tambiénI
inmediatamente después delC
, aunque curiosamente hacerlo mejora mi solución Batch, por la misma razón.Bash + coreutils con figlet, 55440 soluciones,
112106 bytes cada unoSalida:
¡Hola, ya tenemos un programa para el arte ASCII! La fuente del banner casi hace el trabajo, excepto que genera letras 7x7. Hmm, eliminemos las columnas 3ra y 5ta, y las líneas 2da y 5ta, y veamos qué da ...
Resulta que muchas letras se emitirán de la manera requerida, a saber, BDEFHJLPTU Z.
¡Es suficiente reemplazar los argumentos del primer comando set con cualquier combinación de esas letras para obtener un resultado correcto! Por lo tanto, esto nos da 11 * 10 * 9 * 8 * 7 = 55440 soluciones, cada una de ellas con 106 bytes de longitud.
fuente
05AB1E ,
102908969 bytes (EOIXC)Pruébalo en línea!
Salida (230 bytes):
Explicación:
La teoría era elegir letras simétricas verticalmente, luego codificar las primeras 3 líneas y palindromizarlas. Básicamente, codifiqué como {#} de {Letter} en pares de 2 bytes. Estoy seguro de que hay una mejor manera de hacer esto.
-20 bytes gracias a Emigna, pronto estaré en el chat para hacer algunas preguntas;).
fuente
•Cv¶ÉH&9;´ß{ø‰¿šq3d$µ_©Û¶«K>Ò±sÒ9ÍÊC4ÊÚîòvÅr葾)jM•34B2ð:
. Ingrese al chat 05AB1E si tiene preguntas sobre la codificación.45ô
puede ser3ä
.A
no es verticalmente simétrica, y tampoco lo esF
. Voy a adivinar que una vez que comience a usarG
o más, arruinará de lo que está hablando, ¿verdad? Además, con mi metodología de compresión, quería evitar las letras que tenían más de 1 aparición por fila. Si quieres jugar golf esa solución y vencerme, agradecería el ejemplo :).0
en laO
(fila central, lado derecho)•Cv¶ÉH&9;´ß{ø‰¿šq3d$µ_©Û¶«K>Ò±sÒ9ÍÊC4ÊÚúNÏŒº9¨gÚSÞ•
corrige elO
al mismo número de bytes.JavaScript ES6, 168 bytes, CHAMP
Podemos dejar de buscar chicos, tenemos un
CHAMP
por aquífuente
Brainf ***
512411 BytesMejor rehacer:
Este hace un mejor trabajo al optimizar la cinta, sacrificando los caracteres de configuración para imprimir caracteres. La cinta en este se ve
'C' 'E' ' ' 'F' 'I' 'L' '\n'
, mejorando la eficiencia. Elegí estos porque carecen de espacios internos, por lo que no tienen que ir y venir entre el personaje y el espacio más de lo necesarioSi quieres leer lo que está haciendo:
Salida:
Sumisión anterior:
Elegí ir con ABCDE porque hace que la configuración de la cinta para la salida sea mucho más fácil, pero el tiempo y los caracteres que perdí al pasar de la letra a '' para todo el espacio negativo dentro de A, B y D y la colocación de Creo que la línea final al final de la cinta me mató un poco.
Terminé con una cinta que tenía los valores
0 0 'A' 'B' 'C' 'D' 'E' ' ' \n
y luego la salida desde allíSalida:
fuente
[<]>
en 3 ocasiones para guardar 6 bytes.Vim,
116 bytes99 bytesELITC
Golfed menos de 100 con la ayuda de @DrMcMoylex.
Contiene caracteres no imprimibles, por lo que los he agregado a continuación (estilo Vim), para que pueda verlos.
TryItOnline!
Básicamente utiliza la misma decodificación de longitud de ejecución que la respuesta de jalea. Usé letras donde podía (con suerte) repetir la parte superior en la parte inferior, y los medios serían los mismos 3. Una vez que se crean las partes superior, inferior y media, edito los caracteres para corregirlos:
Tengo que agregar dos espacios a la I, porque no permití números de dos dígitos (por lo que no necesitaría un separador. Esto lleva a una carrera de 9 espacios donde necesito 11.
fuente
Y
lugar deVy
, enFI
lugar de?I<cr>
, en{
lugar degg
, enw
lugar defl
. 3) Si usa enr
lugar deR
, puede eliminar el<esc>
.MATL , 49 bytes
Pruébalo en línea!
Esto produce las letras
TIHZN
:Explicación
T
Es relativamente fácil de construir desde cero.I
se puede obtener esencialmente comoT
más su reflejo vertical.H
seI
transponeN
seZ
transpone y se refleja verticalmente.fuente
V ,
62, 53 bytesPruébalo en línea!
Esto produce
C I D O Z
:fuente
Perl, 109 bytes (ABCDE)
Nota : esto contiene caracteres no imprimibles, escapados para facilitar la prueba aquí,
xxd
volcar a continuación.Almacena la representación binaria de las posiciones de las letras como un número, luego desempaqueta nuevamente en binario, reemplazando
0
s con espacios1
ys con la letra correspondiente, usando una búsqueda. Almacenar las representaciones de letras es bastante fácil, pero reemplazarlas resultó más complicado de lo que esperaba. Estoy seguro de que hay mejores maneras de hacer esto, así que podría seguir jugando con esto.Para recrear el archivo, ejecute
xxd -r > favourite-letter.pl
, pegue en el siguiente y presione Ctrl+ D:Uso
fuente
Python 2, 124 bytes
Similar a mi otra respuesta , pero con mejores opciones de letras. Salidas esto:
fuente
Befunge, 120 bytes (CKYTF)
Fuente
Salida
Pruébalo en línea!
En caso de que sea importante, debo señalar que mi salida tiene un espacio inicial en cada línea. Las reglas no lo prohíben explícitamente, así que espero que esté bien. Si no es así, solo considere esto como una entrada no competitiva.
Explicación
Las letras de la palabra están codificadas como una secuencia simple de 25 enteros, cada uno de los cuales es una representación binaria de 5 píxeles. Dado que Befunge requiere que realice un cálculo para crear una instancia de cualquier número entero mayor que 9, las letras se eligieron para minimizar el número de cálculos requeridos, y se ordenaron para que los posibles valores de repetición pudieran duplicarse en lugar de recalcularse.
También necesitamos almacenar el valor ASCII de cada letra, desplazado por 32, en una matriz que está indexada por el módulo 5 de un índice decreciente (por lo que va 0 4 3 2 1 ...). La razón para compensar por 32 es que el valor puede multiplicarse por un bit de píxel (1 o 0) y luego agregarse a 32 para producir un espacio o el carácter requerido.
Este conjunto de valores de letras se almacena en los primeros 5 bytes del código, por lo que es de fácil acceso. Esto también influyó en la elección de las letras, ya que esos valores debían ser significativos cuando se interpretaban como una secuencia de código. Esta es la secuencia
#&49+
. Los#
saltos sobre el&
y el49+
justo empujan 13 en la pila que posteriormente se ignora.fuente
&
, pero tu programa en realidad no recibe información ... ¿qué está pasando?Ruby,
110107102 bytes (dócil)Huellas dactilares
EDITAR: guardó algunos caracteres al evitar
join
y mover cosasfuente
Befunge-98 ,
10998 bytes (FUNGE / ANY)Pruébalo en línea!
Entrada (115 caracteres):
La entrada es la versión entera de un número binario con el formato
aaaaabbbbbb
dondeaaaaa
es un mapa invertido del carácter a imprimir (por ejemplo, la segunda fila en la N esNN N
, entonces la máscara es10011
), ybbbbbb
es el carácter ASCII para imprimir, menos 32 .También creé un programa befunge-98 para crear mis entradas:
Pruébalo en línea!
Salida (255 caracteres):
Explicación:
Esto es probablemente bastante golfable; Apenas he pasado tiempo pensando en posibles reducciones.
Teóricamente, esto puede imprimir cualquier secuencia de 5x5 ascii art.
¡Gracias a James Holderness por ayudarme a salir de tres dígitos!
fuente
48*
se puede reemplazar con'
(ya que esto es 98 después de todo), y88*
se puede reemplazar con'@
. ¡Gracias por ayudarme a salir de tres dígitos!C #,
290279267265 BytesEditar: ¡Guardado 12 bytes gracias a @milk! Y 2 más gracias a @TheLethalCoder
Golfizado:
Sin golf:
Salidas:
fuente
Func<string,string>j=a=>a.Replace("|",g)+"\r\n";
Stax , 33 bytes "BCDEO"
Ejecutar y depurarlo
Escogí letras que
Estas propiedades significan que cada letra se puede representar mediante una cuadrícula de 3x3. Aquí están las 9 regiones, representadas por dígitos.
Considere la letra "B". Puede ser representado por 3 dígitos octales:
656
. Cada dígito contiene tres bits, que controlan qué regiones están habilitadas para esa letra. Esta técnica también funciona para "CDEO".Desempaquetado, sin golf y comentado, el programa se ve así.
Ejecute este
fuente
Python 3,
234228227166 bytes (NUBE):Huellas dactilares:
fuente
Python 3, 178 bytes
No ganará, pero no usa ninguna compresión. Hace esto:
Cualquier ayuda es bienvenida, probablemente me perdí algo. No utilicé Python 2 porque no puedes hacerlo
p=print
, y eso ahorra 17 bytes. Pruébalo en repl.it.fuente
p=print
, puede usar una solaprint
declaración con el argumento kwsep='\n'
.Ruby, 101 bytes (TIFLE)
Escogí letras que requerían un solo bloque de letras (1,4 o 5 letras de largo) en cada línea. F, L y E se dejan justificados, pero T y I requieren espacios iniciales donde se imprime una sola letra (parte vertical). Parece que el código para agregar estos espacios podría mejorarse.
sin golf
fuente
C 176 bytes
Si se permiten entradas implícitas, entonces es posible cortar otros 8 bytes.
Salida: EDCBA
Cómo funciona: la macro R simplemente repite un fragmento de código 5 veces. Dada la frecuencia con la que aparecen los cinco en este problema, es muy útil. Ahora: esto es lo que hace T (int). T toma un número entero y lo usa como un campo de bits para determinar dónde imprimir letras y dónde imprimir espacios en blanco. Por ejemplo, si se les da
T(0b11111111100111111110011100)
, que sería:EEEEE DDDD CCCC BBBB AAA
. Progresivamente cuenta hacia atrás en cuanto a qué letra imprime. Primero imprime E, luego D, luego C, luego B, luego A. Llamar f () imprimirá todo.fuente
Lote, 135 bytes (DOCILe)
Nota: la primera línea termina en 5 espacios.
fuente
GOLPETAZO,
95, 111 bytes (EBASH)Golfed
Explicación
Base64 sobre flujo de bytes LZMA sin procesar
Manifestación
Descargo de responsabilidad
Sí, soy consciente de que esto no es realmente portátil, por eso he pagado un byte para suprimir las advertencias xz con -q en el primer caso> :)
fuente
Python 2,
208194193 bytesEste es mi primer código de golf;) Diversión para hacer
Salida:
Usar un diccionario destruye el orden de clasificación de las letras, pero eso no era un requisito
fuente
perl 94 bytes.
Los primeros 4 letras (
D
,O
,I
,C
) se eligen específicamente para tener las líneas superiores e inferiores similares, y las medias similar. Como no hay ninguna otra letra similar, elegí la "L" para poder aplicar el mismo algoritmo y agregar el 4L faltante.Ahorré algunos bytes adicionales reemplazando el
\n
en el código con una nueva línea real.Resultado:
fuente