Minecraft reflejado

51

Este es Calvin . Solo trato de obtener 20 repeticiones para que este usuario pueda chatear en la sala de chat del servidor PPCG Minecraft .

Escriba un programa o función que tome un entero positivo.

Si el número entero es par (2, 4, 6, ...), imprima o devuelva esta cadena de arte ASCII exacta:

                       __    __   __             __  ___
  /\  /\    |  |\  |  |     /    |  |     /\    |     |
 /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   |
/        \  |  |  \|  |__   \__  |   \  /    \  |     |

Si el número entero es impar (1, 3, 5, ...), imprima o devuelva esta cadena de arte ASCII exacta:

                       __    __
\        /  |  |  /|  |     /    |   /  \ __ /  |     |
 \  /\  /   |  | / |  |--  |     |--/    \  /   |--   |
  \/  \/    |  |/  |  |__   \__  |__|     \/    |__  _|_

Puede suponer que la entrada es siempre un número entero positivo.

En ambos casos de salida, opcionalmente puede haber cualquier número de espacios finales hasta el borde derecho de la "T" en cada línea, y / o una nueva línea final. Tenga en cuenta que hay dos columnas de espacios entre cada letra.

El código más corto en bytes gana.

Retransmisión de chat antiguo
fuente
54
También le pondría el nombre a Calvin si fuera un nuevo usuario que buscara representante;)
Geobits
13
@Geobits Soy yo.
Hobbies de Calvin
52
@Geobits No, soy yo. Sabía que nadie votaría si revelaba que en realidad era yo.
Optimizador
19
¿Por qué importa quién lo creó? ¿No debería basarse el representante en el contenido de la publicación?
pantano
19
@marsh En teoría, sí. En realidad, las personas tienen defectos. Sería un experimento interesante hacer que un usuario de alta reputación creara una nueva cuenta para publicar algunos desafíos para medir la diferencia en la recepción.
Geobits

Respuestas:

23

JavaScript (ES6), 343 336 289 267 265 260 bytes

Solo por diversión ... :) (Gracias a Xufox por cortar 46 bytes y animarme a cortar otros 37 por mi cuenta).

n=>`887141${n%2?`
98/202/05/4|3/29 1 /2|5|
 92/92/30 / 0--2|5|--/492/3|--3|
29/29/40/2013912|1|59/4|12_|_`:`3185121_
2/92/9409205/405/94|5|
 /29/2930 9 0--2|5|--94/193|--3|
/892029013912|392/492|5|`}`.replace(/\d/g,x=>+x?x<2?'__':x<9?' '.repeat(x):'\\':'|  |')

Llamado como a(4)o similar. Pruébalo aquí:

He condensado el espacio en blanco en cadenas de dígitos de 2a 8(por ejemplo, 887= 23 espacios). Cada dígito se reemplaza con el número correspondiente de espacios. 0representa | |y 1representa __. En general, este programa es 170 bytes más corto que las dos cadenas combinadas (203 + 227 = 430), así que estoy feliz. :)

Editar: de alguna manera, tiene exactamente la misma longitud que la única otra entrada en este momento ... o_o

Edición 2: ahorrado algo de espacio, cambiando n%2<1?a n%2?e intercambiando las cuerdas. También aprovechó el hecho de que los inicios de las dos cadenas son los mismos para reducir otros 5 bytes.

Edición 3: |2| parecía aparecer mucho, así que simplifiqué cada ocurrencia x, ahorrando 7 bytes. Las sugerencias de Xufox cortaron otros 40 bytes.

Edición 4: la sugerencia de Xufox de reemplazar \ncon saltos de línea reales dio resultado, eliminando 6 bytes del total. Cambiando xa 0y __para 1(inserte una risa malvada aquí), luego combinando todo el (inserte plural de Regex aquí), como lo hizo en su entrada, ahorró 16 bytes adicionales.

Edición 5: dado que elegí usar los estándares ES6, utilicé la interpolación de cadena de plantilla personalizada para eliminar 2 bytes finales.

ETHproducciones
fuente
1
¡Ese número debe tener algo! Además de ser un cubo perfecto, es decir :-) No puedo votar tu respuesta ya que no tengo idea de JavaScript ...
Luis Mendo
1
¿Qué tal .replace(/\d/g,d=>' '.repeat(d))?
Sebastian Simon
1
@ETHproductions ¡Bien! Ahora, ¿puedes superar mi respuesta? Solo quedan 9 bytes ...;) Por cierto, cuando cuento sus bytes dice 289, usando la herramienta de conteo gEdit ...
Sebastian Simon
1
¿Quizás usar cadenas de plantillas para poder hacer saltos de línea reales en lugar de \nguardar un byte por salto de línea?
Sebastian Simon
1
Ahora tengo 2 bytes menos que tú. = P
Sebastian Simon
12

Matlab, 343 341

a=' -/\_|';
if mod(input(''),2)
x='003C00E00E000L0005N5000I000005550I0000I0055N4UVYO26R4004400400U005300UUXO060O060003C00C30CO00IO00UUUS060S5B54000';else
x='0I2000L0000L000E05H50C0000000555000C00C00H554UVYO26R4004400400U000250WUU006O006O0I2002I00O0I0O0C0UUU006S05BT0004';end
disp(a(reshape(dec2base(base2dec(reshape(x,[],7),36),6),4,[])-47))

El número de entrada se proporciona desde stdin.

Ejecución de muestra:

>> a=' -/\_|';
if mod(input(''),2)
x='003C00E00E000L0005N5000I000005550I0000I0055N4UVYO26R4004400400U005300UUXO060O060003C00C30CO00IO00UUUS060S5B54000';else
x='0I2000L0000L000E05H50C0000000555000C00C00H554UVYO26R4004400400U000250WUU006O006O0I2002I00O0I0O0C0UUU006S05BT0004';end
disp(a(reshape(dec2base(base2dec(reshape(x,[],7),36),6),4,[])-47))
1
                       __    __   __             __  ___
  /\  /\    |  |\  |  |     /    |  |     /\    |     | 
 /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   | 
/        \  |  |  \|  |__   \__  |   \  /    \  |     | 
Luis Mendo
fuente
1
Eso es una locura jajaja. +1.
rayryeng - Restablecer Monica
1
@rayryeng Sí :-) Lástima que Matlab solo permita una base de hasta 36. Un valor mayor habría ahorrado bastantes bytes
Luis Mendo
1
@LuisMendo Exactamente lo que pensé al hacer mi solución de JavaScript ...
Sebastian Simon
@Xufox en JS las funciones btoa () y atob () son codificación y decodificación base64, respectivamente.
aplaude el
11

CJAM, 158 149 145 138 bytes

li2%"A+×rµ^ÅÆÿ»£ºoU#ü T^U^ÝZe<ÄÊKÞÒ£^ÛWWø5Úí§¹T^Úêer^^°^Ã}Ã^A0R2"281b7b"/
 -_\|"f=N/S3**_"_ ":T/TW%*4/zW%1m>N*1>"\/"_W%er"^W^]5OU"{i_32>T=t}/\4/zN*?

Lo anterior usa notación de intercalación, ya que el código contiene caracteres no imprimibles.

Pruébelo en línea en el intérprete de CJam .

Si el enlace permanente no funciona en su navegador, puede copiar el código de esta pasta .

Ejecución de ejemplo

$ LANG=en_US
$ xxd -ps -r > minecraft.cjam <<< 6c69322522412bd772b585c6ffbba3ba6f5523fc2054159d5a653cc4ca4bded2a39b5757f835daeda7b9549aea65721eb0837dc30130523222323831623762222f0a202d5f5c7c22663d4e2f53332a2a5f225f20223a542f5457252a342f7a5725316d3e4e2a313e225c2f225f5725657222171d354f55227b695f33323e543d747d2f5c342f7a4e2a3f
$ cjam minecraft.cjam <<< 2; echo
                       __    __   __             __  ___
  /\  /\    |  |\  |  |     /    |  |     /\    |     | 
 /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   | 
/        \  |  |  \|  |__   \__  |   \  /    \  |     | 
$ cjam minecraft.cjam <<< 1; echo
                       __    __                        
\        /  |  |  /|  |     /    |   /  \ __ /  |     | 
 \  /\  /   |  | / |  |--  |     |--/    \  /   |--   | 
  \/  \/    |  |/  |  |__   \__  |__|     \/    |__  _|_

Idea

En lugar de codificar la cadena MINECRAFT (rellenada para lograr una longitud de línea constante) directamente, codificaremos una versión "comprimida" de ella, donde se han transpuesto las filas y columnas.

Después de comprimir y eliminar los avances de línea, esta cadena (llamémosla R ) debe codificarse:

   /  /  /   \    \   /  /   \    \    \         |||         ||| \    \    \ |||         |||_ -__ -_          |  / \_  __  _         |||_ - _ -  |\    \           /  /  /_  \_   \    \         |||_ - _ -         _   _|||_   

Hay muchas corridas de espacios, por lo que reemplazaremos cada aparición de un triplete espacial con un salto de línea.

Esto nos deja con siete caracteres diferentes ( \n -/\_|), por lo que asignamos a cada uno un número del 0 al 6 y consideramos los dígitos de la matriz resultante de un número base 7, que luego codificamos como una cadena de bytes.

La decodificación funciona invirtiendo los pasos desde arriba.

La cadena reflejada se puede construir a partir de la original.

Si invertimos el orden de las cuatro filas e intercambiamos los sólidos, obtenemos lo siguiente:

\        /  |  |  /|  |__   /__  |   /  \    /  |     | 
 \  /\  /   |  | / |  |--  |     |--/    \__/   |--   | 
  \/  \/    |  |/  |  |     \    |  |     \/    |     | 
                       __    __   __             __  ___

De alguna manera similar, pero claramente tendremos que rotar las filas para llevar la fila inferior a la superior:

                       __    __   __             __  ___
\        /  |  |  /|  |__   /__  |   /  \    /  |     | 
 \  /\  /   |  | / |  |--  |     |--/    \__/   |--   | 
  \/  \/    |  |/  |  |     \    |  |     \/    |     | 

Eso sería si no fuera por esos subrayados molestos.

Si leemos la cadena original de arriba a abajo e ignoramos los avances de línea (obteniendo así R ) y reemplazamos cada guión bajo seguido de un espacio seguido por un guión bajo antes de cambiar las filas, este es el resultado:

                         _     _                      _ 
\        /  |  |  /|  |_    /_   |   /  \ __ /  |     | 
 \  /\  /   |  | / |  |--  |     |--/    \  /   |--   | 
  \/  \/    |  |/  |  |__   \__  |__|     \/    |__  _|_

¡Mucho mejor! Todo lo que queda por hacer está suprimiendo el primer espacio de la primera fila (desplazamiento de todos los guiones en la primera fila de la izquierda caracteres), moviendo los guiones fuera de lugar en E y C una fila hacia arriba y desechar el guión sobre T .

Código

li2%           e# Read an integer from STDIN and push its parity.

"A+×rµ^ÅÆÿ»£ºoU#ü T^U^ÝZe<ÄÊKÞÒ£^ÛWWø5Úí§¹T^Úêer^^°^Ã}Ã^A0R2"

281b7b         e# Convert the byte string from base 281 to base 7.
"/\n -_\\|"f=  e# Replace each digit by its corresponding character.
N/S3**         e# Turn linefeeds into three spaces.
_              e# Copy the resulting string.
"_ ":T         e# Define T.
/TW%*          e# Replace occurrences of T with T reversed.
4/z            e# Split into chunks of length 4 and zip.
W%1m>          e# Reverse and rotate the rows.
N*             e# Join the rows, separating by linefeeds.
1>             e# Discard the first character.
"\/"_W%er      e# Swap the soliduses.
"^W^]5OU"      e# Push the string that corresponds to [23 29 53 79 85].
{              e# For each character:
  i            e#   Push its code point.
   _32>        e#   Push 1 iff the code point is larger than 32.
       T=      e#   Select the element at that index from T = "_ ".
         t     e#   Replace the element at the code point's index with that char.
}/             e#
\              e# Swap the partially generated MINECARFT string on top.
4/z            e# Split into chunks of length 4 and zip.
N*             e# Join the rows, separating by linefeeds.
?              e# Select the first string iff the input was odd.
Dennis
fuente
¿Como funciona?
anatolyg
@anatolyg He editado mi respuesta.
Dennis
10

Pyth - 182 bytes

Utiliza el enfoque de codificación base. Dado que la indexación es modular en Pyth, ni siquiera tengo que hacer nada para lo impar, simplemente ponerlo en el orden correcto y usarlo @Q. Como beneficio adicional, esto también funciona con números negativos.

@mjbcs@L"_| /\\-"jCd6 56,"EWbòH\x00B)þK٣ĭIOõìæ«FFãbÐÄBØ\«¼,vã<RN>­º:w÷ò¾<éifP9e|ÉWf!FÔèà""EWbòH\x00B)þOHÿ$@ËþçX'D[¾«Â?°´=&£üá ¹»ázH×Æz3äkÕg{`!|ðY!ðGV"Q

Intenté solo codificar el primero, luego volteé y cambié las barras, pero la primera y la última línea eran demasiado difíciles.

Podría ahorrar 6 bytes poniendo bytes nulos reales en el código, pero eso es demasiado problema.

Pruébelo en línea aquí .

Se ve muy mal en línea porque el cuadro de salida es demasiado pequeño y se ajusta. Recomiendo jugar con la consola de desarrollo y cambiar el col-md-5a a col-md-7.

Maltysen
fuente
Las dos cadenas tienen un montón de caracteres duplicados, puede eliminar 11 bytes así .
PurkkaKoodari
8

JavaScript (ES6), 312, 285, 281, 272, 270, 263, 262260

Para ediciones anteriores ver el historial de edición .

Edición 5: en la conversión, cambié el número asociado con -(ahora 0) y el espacio en blanco (ahora 1). En el bloque resultante, los números 1, 2 y 3 ya no se usaban tanto. Esto me permitió usar una matriz con los números que faltan.

Edición 6: Mejora el literal de la matriz. Intenté esto anteriormente, pero usé 777y 77como cadenas en lugar de números y noté solo ahora que me había perdido esto.

Edición 7: El "código Golfed" es una función, como se especifica en la pregunta y no es necesario f=cumplir con esta especificación. Por lo tanto, eliminándolo, ahorrando dos bytes.


Ejecutable en Firefox 39:

// Testing:

f=

// Golfed code:

n=>[...`11111113ss17ss1pp11117pp3ppp
97dj3dj7822j78z213e17z3v8397gm78212
7f3kf3k1z27k7z20021200k17fppk1z001z
d7983987j2287jz2ss1lss2aabj3d7987j2aa3aza`.replace(/[123]/g,x=>[,777,'77z',77][x])].map(a=>isNaN(i=parseInt(a,36))?a:'- /\\_|'[n%2?i%6:~~(i/6)]).join``

// Testing:

;document.body.appendChild(document.createElement('pre')).innerHTML=f(0);
document.body.appendChild(document.createElement('pre')).innerHTML=f(1);
document.body.appendChild(document.createElement('pre')).innerHTML=f(2);
document.body.appendChild(document.createElement('pre')).innerHTML=f(35);

Se basa en el sistema de números base 6 y cada carácter ASCII representa un número:

"-": 0
" ": 1
"/": 2
"\": 3
"_": 4
"|": 5

Luego, combiné la representación numérica de cada cadena ASCII. Por ejemplo: cuando la primera cadena ASCII contiene una /en una posición y la otra contiene una \en la misma posición , esa posición se convierte en 32base 6 ( 20en decimal). Si convierte esto a base 36 (para obtener un número de base 36 por cada dos números de base 6), obtendrá k.

Todo esto se hizo de antemano y la función básicamente deshace este proceso.

Ahora las dos respuestas de JavaScript tienen una respuesta diferente cada una, que tiene el mismo conteo de bytes ...


PD: Como una nota para mí y una referencia para otros, este es el código que utilicé:

// 1. ASCII here
a=`|\\-/ _`;

// 2. ASCII here
b=`/|\\_ -`;

// Note: the ASCII strings’ backslashes have to be escaped!

[...a]
  .map((c,i)=>parseInt((c+b[i])
    .replace(/-/g,'0')
    .replace(/ /g,'1')
    .replace(/\//g,'2')
    .replace(/\\/g,'3')
    .replace(/_/g,'4')
    .replace(/\|/g,'5'),6))
  .map(c=>isNaN(c)
    ?`
`
    :c.toString(36))
  .join``
// Returns "wn3g7o", which is then put into the function as the block at the top.
Sebastian Simon
fuente
2
Gosh, ¿por qué es ~NaN == -1?
Sebastian Simon
También pensé invirtiendo la línea de cadenas ASCII por línea, para deshacerse de aún más los espacios finales (también salvó dos bytes en la sustitución: […][x]+77, 77no tiene por qué ser una cadena más), pero la marcha atrás adicional en el código golfed no valió la pena ...
Sebastian Simon
No entendí esto cuando lo leí por primera vez hace un año, pero ahora veo la técnica. Combinar cada par de caracteres en uno es muy inteligente :-) Creo que puedes reemplazar isNaNcon 1+y ~~(i/6)con i/6|0.
ETHproductions
Jaja, ahora estoy un byte por delante;)
ETHproductions
@ETHproductions Bueno, espera un segundo ... Acabo de notar que no tienes el f=al principio, pero yo sí. También leí que se acepta eliminarlo, así que lo haré yo mismo, y ahora tengo 260 bytes. ;)
Sebastian Simon el
6

CJam, 136 bytes

"^ASÓ8¥È÷^K¯¾/^HÕ2^ÄË1jÒÝ^D^Á0îl;)HR§û|^Ê^Þ^ÇÝÅ^ßNlz^TfÑ^Øj>À^à 4#bH\¿^Äî·íì^E^A~(¿ø³(ú´,^È(¡j>è?#'»vçPïju87)×"
265b8b[S9*'|3*+S2*]"/-_\| "+f=s4/56/ri=zN*

Lo anterior usa notación de intercalación, ya que el código contiene caracteres no imprimibles.

El salto de línea es únicamente para "legibilidad". Pruébelo en línea en el intérprete de CJam .

Si el enlace permanente no funciona en su navegador, puede copiar el código de esta pasta .

Ejecución de ejemplo

$ LANG=en_US
$ xxd -ps -r > minecraft.cjam <<< 220153d338a5c8f70bafbe2f08d53284cb316ad2dd048130ee6c3b294852a7fb7c8a9e87ddc59f4e6c7a1466d1986a3ec08320342362485cbf84eeb7edec05017e28bff8b328fab42c8828a16a3ee83f2327bb76e750ef6a75383729d7223236356238625b53392a277c332a2b53322a5d222f2d5f5c7c20222b663d73342f35362f72693d7a4e2a
$ cjam minecraft.cjam <<< 2; echo
                       __    __   __             __  ___
  /\  /\    |  |\  |  |     /    |  |     /\    |     | 
 /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   | 
/        \  |  |  \|  |__   \__  |   \  /    \  |     | 
$ cjam minecraft.cjam <<< 1; echo
                       __    __                        
\        /  |  |  /|  |     /    |   /  \ __ /  |     | 
 \  /\  /   |  | / |  |--  |     |--/    \  /   |--   | 
  \/  \/    |  |/  |  |__   \__  |__|     \/    |__  _|_

Idea

Este enfoque tiene algunas similitudes con el de mi otra respuesta , pero es mucho más simple y (bastante decepcionante) un poco más corto.

Buscamos una forma de codificar la siguiente cadena:

                       __    __   __             __  ___                       __    __                         
  /\  /\    |  |\  |  |     /    |  |     /\    |     | \        /  |  |  /|  |     /    |   /  \ __ /  |     | 
 /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   |  \  /\  /   |  | / |  |--  |     |--/    \  /   |--   | 
/        \  |  |  \|  |__   \__  |   \  /    \  |     |   \/  \/    |  |/  |  |__   \__  |__|     \/    |__  _|_

Después de rellenar cada fila (para lograr una longitud de línea constante), comprimir (transponer filas y columnas) y eliminar los avances de línea, esta cadena debe codificarse:

   /  /  /   \    \   /  /   \    \    \         |||         ||| \    \    \ |||         |||_ -__ -_          |  / \_  __  _         |||_ - _ -  |\    \           /  /  /_  \_   \    \         |||_ - _ -         _   _|||_    \    \    \   /  /   \    \   /  /  /           |||         |||   /  /  /   |||         |||_ -__ -_          |  / \_  __  _         |||  -_  -_  /| /           \    \  _ \ _ /  /  /           |||  -_  -_           _ |||   _

Vamos a reemplazar cada subcadena " |||"con un 0 , cada subcadena " "con un 1 y los caracteres de "/-_\| "con 2 a 7 , formando una matriz de base de 8 dígitos, que pueden ser codificados como una cadena de bytes.

La decodificación funciona invirtiendo los pasos desde arriba.

Código

"^ASÓ8¥È÷^K¯¾/^HÕ2^ÄË1jÒÝ^D^Á0îl;)HR§û|^Ê^Þ^ÇÝÅ^ßNlz^TfÑ^Øj>À^à 4#bH\¿^Äî·íì^E^A~(¿ø³(ú´,^È(¡j>è?#'»vçPïju87)×"

265b8b        e# Convert from base 265 to base 8.
[S9*'|3*+S2*] e# Push ["         |||" "  "].
"/-_\| "+     e# Concatenate to push ["         |||" "  " '/' '-' '_' '\' '|' ' '].
f=            e# Select the elements that correspond to the base 8 digits.
s4/           e# Flatten and chop into chunks of length 4 (columns).
56/           e# Chop into two subarrays of 56 columns.
ri            e# Read an integer from STDIN.
=             e# Select the corresponding subarray.
              e# Arrays wrap around, so [A B]0= eq. [A B]2= and [A B]1= eq. [A B]3=.
zN*           e# Zip and join the rows, separating by linefeeds.
Dennis
fuente
"¿Presunta legibilidad?" : P
FryAmTheEggman
4

Raqueta, 443 434 386 bytes

(require file/gunzip net/base64)(define(f n)(define o(open-output-bytes))(gunzip-through-ports(open-input-bytes(base64-decode #"H4sIAK8Lt1UAA22Q3Q3AIAiE352CBcwtRHLpHg7f8lubahRUDuVD5DjItrH9REgOEWgskfVMDeca1GWcSmN2WFBtlUTdzdmSOT0BpEpGnjxUAf2RmvPq1OyKGF6N5V1nvgYcWjeod/Hj8JotBRtH0qM48OeoWrBxJH23KL/dOMh4IDXe8MUbT1AqtKkBAAA="))o)(list-ref(string-split(get-output-string o)"a")(modulo n 2)))

Sólo por diversión.

(require file/gunzip net/base64)
(define (f n)
  (define o (open-output-bytes))
  (gunzip-through-ports
   (open-input-bytes
    (base64-decode #"H4sIAK8Lt1UAA22Q3Q3AIAiE352CBcwtRHLpHg7f8lubahRUDuVD5DjItrH9REgOEWgskfVMDeca1GWcSmN2WFBtlUTdzdmSOT0BpEpGnjxUAf2RmvPq1OyKGF6N5V1nvgYcWjeod/Hj8JotBRtH0qM48OeoWrBxJH23KL/dOMh4IDXe8MUbT1AqtKkBAAA="))
   o)
  (list-ref (string-split (get-output-string o) "a") (modulo n 2)))

Nota: es posible que necesite que la #lang racketlínea se ejecute en DrRacket.

Winny
fuente
1
Exactamente 100 bytes de descuento.
user253751
1
¡Venga! Sé que también puedes llegar al 343
Optimizer
No veo que eso suceda a menos que abandone este enfoque.
Winny
No necesita usar caracteres de base 64. Puede usar solo los caracteres Unicode sin procesar que envía gunzip
MilkyWay90
4

05AB1E , 179 177 176 bytes

"
 -/\_|"•ÿ%Ò´Åçδ’Üå·Äm…½µƵδø5)ǝ®∊∊Ý®þCĀ₆áÝoþ²ši¤Æ%ßû¤%¦Ï≠θĀ5¾₃ʒŸQ>Šn°η8±8d¸6':…é’b…÷‡ö©«&‡huѦ%λÁZÊJÌ₅ú∞°»ó₄ι«ÓW´×ƒ×ùqiò2D1āwθóÆ˲’
Tι#и∊²ý‚KʒFæΩZºÿÏ";ηiʒæøвøïž‚è°ć½∊•7вèJ2äIè

Pruébalo en línea.

Explicación:

•ÿ%Ò´Åçδ’Üå·Äm…½µƵδø5)ǝ®∊∊Ý®þCĀ₆áÝoþ²ši¤Æ%ßû¤%¦Ï≠θĀ5¾₃ʒŸQ>Šn°η8±8d¸6':…é’b…÷‡ö©«&‡huѦ%λÁZÊJÌ₅ú∞°»ó₄ι«ÓW´×ƒ×ùqiò2D1āwθóÆ˲’
Tι#и∊²ý‚KʒFæΩZºÿÏ";ηiʒæøвøïž‚è°ć½∊•

es el número comprimido :

669530978249988431396781816197276307266403407188962925862194299697873953319419752813246251351417090709766331736351616127424760949905163941809417778114834562736028512279028673309866195447599979612590918985644583407413903825059942009898007791080822453262749380245316127735585410697701790387188175543639634091138422651942833048832372950797322005040161476426127678479662921265139425

Pruébalo en línea.

lo convierte a Base-7 como lista, por lo que obtenemos la lista de dígitos:

[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,1,1,1,1,5,5,1,1,1,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,1,1,5,5,5,0,1,1,3,4,1,1,3,4,1,1,1,1,6,1,1,6,4,1,1,6,1,1,6,1,1,1,1,1,3,1,1,1,1,6,1,1,6,1,1,1,1,1,3,4,1,1,1,1,6,1,1,1,1,1,6,0,1,3,1,1,4,3,1,1,4,1,1,1,6,1,1,6,1,4,1,6,1,1,6,2,2,1,1,6,1,1,1,1,1,6,2,2,4,1,1,1,1,3,5,5,4,1,1,1,6,2,2,1,1,1,6,0,3,1,1,1,1,1,1,1,1,4,1,1,6,1,1,6,1,1,4,6,1,1,6,5,5,1,1,1,4,5,5,1,1,6,1,1,1,4,1,1,3,1,1,1,1,4,1,1,6,1,1,1,1,1,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,1,1,1,1,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,4,1,1,1,1,1,1,1,1,3,1,1,6,1,1,6,1,1,3,6,1,1,6,1,1,1,1,1,3,1,1,1,1,6,1,1,1,3,1,1,4,1,5,5,1,3,1,1,6,1,1,1,1,1,6,0,1,4,1,1,3,4,1,1,3,1,1,1,6,1,1,6,1,3,1,6,1,1,6,2,2,1,1,6,1,1,1,1,1,6,2,2,3,1,1,1,1,4,1,1,3,1,1,1,6,2,2,1,1,1,6,0,1,1,4,3,1,1,4,3,1,1,1,1,6,1,1,6,3,1,1,6,1,1,6,5,5,1,1,1,4,5,5,1,1,6,5,5,6,1,1,1,1,1,4,3,1,1,1,1,6,5,5,1,1,5,6,5]

Pruébalo en línea.

èindexa cada dígito en la cadena "\n-/\_|"y Jluego une toda la lista, lo que nos da lo siguiente:

                       __    __   __             __  ___
  /\  /\    |  |\  |  |     /    |  |     /\    |     |
 /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   |
/        \  |  |  \|  |__   \__  |   \  /    \  |     |                       __    __                        
\        /  |  |  /|  |     /    |   /  \ __ /  |     |
 \  /\  /   |  | / |  |--  |     |--/    \  /   |--   |
  \/  \/    |  |/  |  |__   \__  |__|     \/    |__  _|_

Pruébalo en línea.

divide la cadena en dos partes.
toma la entrada y la indexa (con ajuste automático) para obtener una de las dos partes, que luego se emite de forma implícita.

Muchísimas gracias al compresor ASCII de @MagicOctopusUrn que se utilizó para generar el número comprimido y el transliteral Base-7. Pruébalo en línea. (Después de lo cual el transliterado se ha jugado al golf invirtiendo la cadena y el número en la pila, usando en вlugar de Bhacer una lista de dígitos e indexando en la cadena con è.

Kevin Cruijssen
fuente
3

C, 251 bytes

k(w){char*f="_-/\\|]^^^\0<&*&)&3&(&&WX&J&*&\0t_&/&3&\0`);35)I5M\0a).@7).8-;./.-\0j()(0(1+4()(*+4+4()(04+",*o=f+4,m[229]="",i=7,c=10,p;for(memset(m,32,228);i;c=*f++^(w%2&i--/2==2)*115)for(p=0;*++o;m[(w%2?4-i/6-p/57:p/57)*57+p%57]=c)p+=*o-37;printf(m);}

Esta es una función kque recibe un parámetro e imprime el mensaje stdout.

Una versión más legible:

k(w)
{
    char*f="\n_-/\\|", // characters to fill in
        *o= " "// for each character, the list of positions to put it in, difference-encoded
        "]%%^^^\0"                  // for '\n' (newline)
        "<&*&)&3&(&&WX&J&*&\0"      // for '_' (underscore)
        "t_&/&3&\0"                 // for '-' (minus)
        "`);35)I5M\0"               // for '/' or '\' (slashes)
        "a).@7).8-;./.-\0"          // for '\' or '/' (slashes)
        "j()(0(1+4()(*+4+4()(04+",  // for '|' (vertical bar)
        m[229]="",  // message to generate
        i, // index of character, running 7...1
        c, // current character to fill in
        p, // where to place the character
        y; // y-coordinate of the character

    memset(m,32,228); // fill the message with spaces
    for(i=7;--i;)
    {
        c=*f++;
        c^=~w%2|i/2^1?0:115; // flip the direction of slashes, if needed
        for(p=0;*++o;)
        {
            p+=*o-37; // jump to next position
            y=p/57; // extract the y-coordinate
            y=w%2?4-i/5-y:y; // flip the y-coordinate, if needed
            m[y*57+p%57]=c; // place the character
        }
    }
    printf(m); // print the message
}

Primero, prepara un mensaje vacío (lleno de espacios). Para cada personaje (p. Ej. |O -), tiene una lista de posiciones para colocar ese personaje.

Para cada posición, si se imprime la versión invertida, la posición se voltea. Es decir, su coordenada vertical yse reemplaza por 4-yo 3-y(dependiendo de si el carácter es un guión bajo). Además, las direcciones de las barras se invierten; esto se realiza mediante un XORcon 115.

Esta estructura de control también se usa para colocar los caracteres de nueva línea; parece más eficiente agregar 4 coordenadas más a la lista que escribir un bucle explícito.


Hay algunos problemas menores con este sistema. En primer lugar, la letra final T se ve un poco diferente en la versión invertida:

___ 
 |    |
 |    |
 |   _|_

Para generarlo correctamente, el código debe colocar los |caracteres después de los _caracteres.

Además, para asegurarme de que la cadena de control contiene solo caracteres ASCII, la codifiqué:

  • Registra las diferencias entre las posiciones en lugar de las posiciones mismas, esto reduce el rango
  • Los números en la cadena se han 37agregado a ellos, para cambiarlos al rango ASCII 32 ... 127. Podría agregar un número menor, pero 37evita caracteres como "y \, que deben escaparse dentro de los literales de cadena.
  • Dos de los números eran mayores que 127, por ejemplo, el primer -carácter aparece en la posición 137. Para explicar esto, agregué un -carácter artificial en otra posición (79), que luego se sobrescribe, el carácter |también aparece en la posición 79.

Otra cosa divertida fue que no pude usar la putssalida de la cadena, esto produciría una nueva línea final adicional. Así que lo usé en su printflugar.

Además, el número 57aparece 4 veces en el código de golf: la expresión aparentemente larga (w%2?4-i/6-p/57:p/57)*57+p%57hace posible eliminar la variable y, haciendo que el código sea más corto.

anatolyg
fuente
C parece ser un tipo de lenguaje "siempre escribe esta construcción con este código" ... Esto ... es ... muy ... um ... +1;)
aplaude el
3

Perl, 292 259 246 bytes

$_="Svv __SS__S nnSv nnSnnn
i kjSkj hw|j h|wS /SwrhSi pq hwS |
 mSlmSlS |S| l |S|--wS |--lSSmnnlS |--S |
k ihSih jw|h j|S|__S g__S|oosjSk ih jS|ooSo|o";s/v/SSSSS/g;s/w/S|S/g;s/S/  /g;<>&1?y"g-s"\\/\\  /\\ ___ |":y"g-s"\\  \\/\\/_ /\\| ";print $_

Aprovecha el hecho de que las dos cadenas son en su mayoría similares (por ejemplo, todo el IE y C) y hace que la cadena contenga caracteres que se muestran de manera diferente según la versión que se muestre. por ejemplo, m significa "una barra inclinada hacia adelante para la cadena hacia arriba, una barra inclinada hacia atrás en la invertida". Hace una sustitución de transliteración para mostrar el carácter correcto. Los espacios también se codifican en longitud de ejecución mediante sustituciones de cadenas.

multilínea:

$_="Svv __SS__S nnSv nnSnnn
i kjSkj hS|S|j h|S|SS /SS|SrhSi pq hS|SS |
 mSlmSlS |S| l |S|--S|SS |--lSSmnnlS |--S |
k ihSih jS|S|h j|S|__S g__S|oosjSk ih jS|ooSo|o";
s/v/SSSSS/g;
s/w/S|S/g;
s/S/  /g;
<>&1?
    y"g-s"\\/\\  /\\ ___ |"
:
    y"g-s"\\  \\/\\/_ /\\| ";
print $_

Idea:

Como solo hay 22 columnas únicas en la salida, debería ser posible almacenarlo como 22 * ​​4 = 88 caracteres con un rango de 0-17 (todos los posibles caracteres de "doble significado"), junto con una búsqueda de 56 caracteres tabla con una entrada en el rango de 0-21 por columna. En teoría, esto podría codificarse con <100 bytes, sin embargo, es difícil hacer que esto sea una ganancia neta debido al código más complicado para decodificarlo.

samgak
fuente
2
Puede afeitarse un par de bytes: y / foo / bar / es sinónimo de tr / foo / bar /
ryanm
2

CJAM, 206

Las dos imágenes ascii están codificadas en base 216, un byte = 3 caracteres.

" _\/|-":A;S7*"!D!D"+:B;qi2%{B"h  °°¤8 2 °2,J° °"",4# °³8=Ô° Ó\"# Ó °""\"z °Â89D-D·° z ·!¶"}{B"'    '!J"+"#h °¼88 2 °°  ° °""2/\" °²8=Ô° Óh#L Ó °""  h°°9D-D°,2 h° °"}?]{{i32-__36/A=@6/6%A=@6%A=}/N}/

Pruébalo aquí

Arnaud
fuente
2

PowerShell, 275 253 248 bytes

param($n)$d='8 \83484/7/484302 92984308 92918--118--128||6//0\16116129558| \/ |8 /02083\6/10018/6\302 955776_71 9_7_'
'8\,__,777,/6 /,\6/6\,_8 -- _,88,888,  ,||||||'-split','|%{$d=$d-replace+$i++,$_}
0..3|%{$l=$_;-join$d[(0..55|%{$_*8+$l*2+$n%2})]}

Script de prueba:

$f = {

param($n)$d='8 \83484/7/484302 92984308 92918--118--128||6//0\16116129558| \/ |8 /02083\6/10018/6\302 955776_71 9_7_'
'8\,__,777,/6 /,\6/6\,_8 -- _,88,888,  ,||||||'-split','|%{$d=$d-replace+$i++,$_}
0..3|%{$l=$_;-join$d[(0..55|%{$_*8+$l*2+$n%2})]}

}

&$f 2
&$f 1

Salida:

                       __    __   __             __  ___
  /\  /\    |  |\  |  |     /    |  |     /\    |     |
 /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   |
/        \  |  |  \|  |__   \__  |   \  /    \  |     |
                       __    __
\        /  |  |  /|  |     /    |   /  \ __ /  |     |
 \  /\  /   |  | / |  |--  |     |--/    \  /   |--   |
  \/  \/    |  |/  |  |__   \__  |__|     \/    |__  _|_

Ideas principales

El método de compresión es un método extendido de CJam por Dennis ♦:

  1. Cree una cadena antes de la compresión:
    • caracteres de la primera columna de ambas artes ASCII, luego
    • caracteres de la segunda columna, luego
    • caracteres de la tercera columna y así sucesivamente ...
  2. Comprima usando 10 reemplazos consecutivos (10 porque Powershell puede usar los números 0..9 como cadenas, esto acorta el algoritmo de descompresión. Reemplazos encontrados por la fuerza bruta).

El script para la compresión:

$src =
"                       __    __   __             __  ___", # line1, art1
"                       __    __                         ", # line1, art2
"  /\  /\    |  |\  |  |     /    |  |     /\    |     | ", # line2, art1
"\        /  |  |  /|  |     /    |   /  \ __ /  |     | ", # line2, art2
" /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   | ", # line3, art1
" \  /\  /   |  | / |  |--  |     |--/    \  /   |--   | ", # line3, art2
"/        \  |  |  \|  |__   \__  |   \  /    \  |     | ", # line4, art1
"  \/  \/    |  |/  |  |__   \__  |__|     \/    |__  _|_"  # line4, art2

$z=-join(0..$src[0].Length|%{
    $p=$_
    $src|%{$_[$p]}
})
$z

La cadena de compresión anterior es:

   \  /     /\    /    \  \    /    \/      /\    /    \  \    /    \/     /  \                   ||||||                  ||||||  \    /    \/     /  \   ||||||          ||||||__  --____  --__                    ||    //  \\__    ____    __                  ||||||_   -- __   -- _  | \/ |   /  \                    \  /     /\  /__  \  \__  /    \/     /  \                   ||||||_   -- __   -- _                _      __ ||||||_      _
mazzy
fuente
¡La explicación en su respuesta probablemente se puso más esfuerzo que todas mis respuestas combinadas! +1
MilkyWay90
1

SAS, 442 bytes

%macro a(b);&b=tranwrd(&b,put(i,1.),repeat('A0'x,i));%mend;%macro b(z);length a b c d$99;if mod(&z,2)then do;a='992__3__';b='\7/1|1|1/|1|4/3|2/1\0__0/1|4|';c='0\1/\1/2|1|0/0|1|--1|4|--/3\1/2|--2|';d='1\/1\/3|1|/1|1|__2\__1|__|4\/3|__1_|_';end;else do;a='992__3__2__65__1___';b='1/\1/\3|1|\1|1|4/3|1|4/\3|4|';c='0/1\/1\2|1|0\0|1|--1|4|--\3/__\2|--2|';d='/7\1|1|1\|1|__2\__1|2\1/3\1|4|';end;do i=0to 9;%a(a)%a(b)%a(c)%a(d)end;put a/b/c/d;%mend;`

No golfizado:

%macro a(b);
  &b=tranwrd(&b,put(i,1.),repeat('A0'x,i));
%mend;

%macro b(z);
length a b c d$99;
if mod(&z,2)then do;
  a='992__3__';
  b='\7/1|1|1/|1|4/3|2/1\0__0/1|4|';
  c='0\1/\1/2|1|0/0|1|--1|4|--/3\1/2|--2|';
  d='1\/1\/3|1|/1|1|__2\__1|__|4\/3|__1_|_';
end;
else do;
  a='992__3__2__65__1___';
  b='1/\1/\3|1|\1|1|4/3|1|4/\3|4|';
  c='0/1\/1\2|1|0\0|1|--1|4|--\3/__\2|--2|';
  d='/7\1|1|1\|1|__2\__1|2\1/3\1|4|';
end;
do i=0to 9;
  %a(a)
  %a(b)
  %a(c)
  %a(d)
end;
put a/b/c/d;
%mend;

Pruebas:

data a;
  %b(1)
  %b(2)
  %b(0)
  %b(35)
run;
                       __    __
\        /  |  |  /|  |     /    |   /  \ __ /  |     |
 \  /\  /   |  | / |  |--  |     |--/    \  /   |--   |
  \/  \/    |  |/  |  |__   \__  |__|     \/    |__  _|_
                       __    __   __             __  ___
  /\  /\    |  |\  |  |     /    |  |     /\    |     |
 /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   |
/        \  |  |  \|  |__   \__  |   \  /    \  |     |
                       __    __   __             __  ___
  /\  /\    |  |\  |  |     /    |  |     /\    |     |
 /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   |
/        \  |  |  \|  |__   \__  |   \  /    \  |     |
                       __    __
\        /  |  |  /|  |     /    |   /  \ __ /  |     |
 \  /\  /   |  | / |  |--  |     |--/    \  /   |--   |
  \/  \/    |  |/  |  |__   \__  |__|     \/    |__  _|_

Posiblemente podría guardar un poco de código poniéndolos en bloques de entrada, pero eso agrega la restricción de que la macro solo puede ser una vez por paso de datos, lo que creo que viola el espíritu de escribirlo como una macro. (Y sospecho que agregar un mensaje para obtener información en el paso de datos agrega más caracteres).

Joe
fuente
1

bash, 247 bytes

(($1%2)) && c=tail || c=head
base64 -d <<<H4sIAF/3uFUCA31Q2w3AIAj8ZwoWMLcQyS3i8JWXtWlTI6BwPA7Vz0Nunc9HhKSowlJU57qWJjBoZ/4a41o8aC4NsTBjbMgYkQDStCIrDz3AbmRuYjpzPTOGG5P9/gmKtQddFy8eMbOn4Khb7NE88ObRs+DgUez3iqrtwYPMAoWJhU/KBeJFPOCqAQAA | zcat | $c -n4

Las cadenas se concatenan y gziped.

g. cohete
fuente
1

PHP, 225 bytes

Fea, solución de fuerza bruta.

echo str_split(gzinflate(base64_decode('dZDdDcAgCITfnYIFzC1Ecos4fOW3Nm2NgsohfIp8DrJtbB8RkkMEGktk7anhXIO6jFNpzA4Lqq2SqLs5WzKnJ4BUycjOQzXQhdScd6dmV8Rwa7rqP9/QukE9ixeGt2wpODASHoWBN0a1ggMj4fuHsuyBQcYDqfH/XrwA')),224)[$argv[1]%2];

Comprimí y luego base64 codificó las cadenas concatenadas que se mostrarán. El código decodifica, descomprime y divide en partes de 224 caracteres. La primera cadena tiene 224 caracteres sin una nueva línea al final, la segunda tiene 201 caracteres (tampoco una nueva línea después) La paridad del argumento de línea de comando ( $argv[1]%2) se usa como índice en la matriz generada por str_split().

axiac
fuente
1

Haskell, 138 bytes

m x=do
 h<-readFile"a"
 return$take 225.drop(225*mod x 2)<$>find((==h).hash.pack)(replicateM 425"/\\|_- ")

Esto es un poco hack. Estoy forzando el hash SHA256 de la concatenación de los dos textos de Minecraft, y luego los separo y elijo el texto apropiado en función del parámetro x. Esto es de origen muy poco práctico y no se puede calcular en tiempo real, e incluso puede haber colisiones en el camino por lo que sé.

Debido a que Haskell no puede tener la representación ASCII de ese hash en una cadena, lo estoy leyendo desde un archivo llamado "a", y por lo tanto, he agregado 32 bytes a mi puntaje.

  • readFile y el paquete son de Data.ByteString.Char8
  • hash es de Crypto.Hash.SHA256

Explicación:

replicateM 425"/\\|_- "

Crea una lista de cada combinación de las letras "/ \ | _-" en 425 letras (la longitud de ambos textos de Minecraft combinados)

find((==h).hash.pack)

Elige el primero que coincida con el hash

take 225.drop(225*mod x 2)

El primer texto tiene 225 letras, el otro tiene exactamente 200.

Alondra
fuente
106 bytes, no 138
gato
Vea mi explicación, agregué 32 bytes porque estoy leyendo un archivo largo de 32 bytes
BlackCap
1

Javascript (ES6), 403 296 bytes

(Movido de mi respuesta anterior ) Probar un nuevo método:

n=>`55555559Å9Å${n%2?`55555558556776}}5Y75Y¥Æ75786¡YAA[7ćA5Fï5¡YFéA8Y§5}\x83AEÅKÅ\x99}5§5\x999\x95`:`Q5555Q9Ý>6¡77¡}}5Y7756¡75768Y¡AA£7ćA5Fû5u¡FéAY55¡}}­EÅKÅ}G;5¡}5}`}`.replace(r=/./g,x=>(163+x.charCodeAt()).toString(6).slice(1)).replace(r,x=>' /|\\_-'[x]).match(/.{56}/g).join`
`

Tenga en cuenta que hay algunos caracteres no imprimibles; estos han sido reemplazados por ej \x83.

La codificación en sí es aproximadamente 40 bytes más corta que la otra, pero el proceso de decodificación es más complejo. Usé el sistema base-216 que otros han usado para codificar el texto. Como referencia, aquí está el código que utilicé:

// normal MINECRAFT
a='00000000000000000000000440000440004400000000000004400444'+
  '00130013000020023002002000001000020020000013000020000020'+
  '01003100300020020302002550020000025530000144300025500020'+
  '100000000300200200320024400034400200030010000300200000200';

// upside-down MINECRAFT
// un-comment this one to run it
/*
a='00000000000000000000000440000440000000000000000000000000'+
  '30000000010020020012002000001000020001003044010020000020'+
  '03001300100020020102002550020000025510000300100025500020'+
  '003100310000200210020024400034400244200000310000244004240';
*/

console.log(a.replace(/.../g,x=>String.fromCharCode(parseInt(b[i],6)+53)));

Básicamente, esto toma el texto ASCII (convertido previamente a la base 6) y lo triplica sobre sí mismo, cambiándolo a la base 216. Luego se agrega 53 para eliminar la mayoría de los caracteres no imprimibles.

Sugerencias bienvenidas!


Aquí está el código original de 403 bytes:

a=n=>{y=[' ','/','|','\\','_','-'],x=`55555559Å9Å${n%2?`55555555¡55Y}}eA5;5};GÝY}5}¡k;77;} 757Ĉ5G;7ć75§H5AB77Ý8ÝEÑ5H5EÅÕ`:`Q5555Q9Ý6¡k5}\u008FAA5;5}}5k5}5}Y§G77G} 757Ċ5?×7ć7;55GAAI7Ý8ÝA865GA5A`}`;b=x.split('').map(x=>x.charCodeAt(0)-53);for(c=[],i=b.length;i--;){c[i]=b[i].toString(6);while(c[i].length<3)c[i]='0'+c[i]}d=c.join('').replace(/\d/g,x=>y[x]).split('');d[56]=d[112]=d[168]=`
`;return d.join('')};

Usando un forbucle, un whilebucle, cuatro variables que solo se usaron una vez y una tonelada de algoritmos largos para cosas simples. Chico, he mejorado ...

ETHproducciones
fuente
Probablemente puede eliminar por completo y=[' ','/','|','\\','_','-'],y en lugar de y[x]escribir ' /|\\_-'[x]. =)
Sebastian Simon
@Xufox ¡He hecho eso y mucho más, jugando al golf 107 bytes en total!
ETHproductions
0

Python, 312 bytes

def y(b):
 x=int(['4vwhclv10tuk4z18gf73aimn6zvwkrhxekphfn1lxocj9ezchd1cd1cv97p3f6k12s8hcjznnm5iq3om4vgxvugp3makgu4n3f6qxvdrtl4c0lva12hwt','8uzwdylhtrf6oqnwnck8pfxu25m5844tuo2700v3zoeuvossx1b47rnwyrmqodau3feu3spi9jydhyxvntv48vojx9iq9af78wufzn1'][b%2],36);x<<=69;s="";t=" /\\-|_\n"
 while x:s+=t[x&7];x>>=3
 print s

La función imprime el resultado dado un int

Azul
fuente
Sí, solo estoy buscando una forma ordenada de comprimirlo aún más que eso
azul
¿Como funciona esto?
Oliver Ni
¿Es la base 36? pero si es cuál es 16598125653940296495007405984048067937906981182427207589486265398555496561913976121109917896233762115477615438181875147062369253802653987802486539858466848179256705775331854915993645
Oliver Ni
Básicamente, almacena los dos resultados en una lista y luego obtiene el correcto utilizando la función de módulo. Luego lo decodifica desde la base 36 como pensabas. Como era una gran potencia de 2, eliminé algunos caracteres haciendo >> 69. Luego uso una función de traducción básica para convertirla en la salida correcta.
Azul
0

C, 321 bytes

Codificó la repetición y el índice de caracteres en una cadena.

main(n,v,p,c)char**v,*p,*c;{c=" _/\\|-\n";for(p=atoi(v[1])%2?"8@8iXivs8rhththrthtPrXt`rhspiprhtPtvpshrshr`thtprpthtmhtPtmrXshr`tm`tvhsrhsrXthtrhthti`sihtitPsrXtihqtq":"8@8iXi`i8PihavhrshrsXthtshthtPrXthtPrsXtPtvprhsrhs`thtpspthtmhtPtmsXris`tm`tvr8shththsthti`siht`shrXshtPtw";*p;p++)for(n=*p/8^15;n--;)putchar(c[*p&7]);}
Cole Cameron
fuente
0

Pitón 3, 486 533 612

r=str.replace;m,p=r(r(r('''YYYYY   __YA AYY   A___
  /\  /\YX\  X Y/YX Y/\Y| Y|
 /  \/  \   X \ X--  | Y|--\Y/__\   |--   |
/YY\  X  \XA \A|   \  /Y\  | Y| ''','X','|  |'),'Y','    '),'A','__  '),print;
if int(input())%2==0:p(m)
else:
 q,i,u=m.split('\n')[::-1],0,[[23,24,29,30],[42,43],[],[23,24,29,30,34,35,53,49,50,55]];q.insert(0,q.pop())
 while i<len(q):
  x=list(r(q[i],'_',' '))+[' ']
  for a in u[i]:x[a]='_'
  p(r(r(r(r(''.join(x),'___',''),"\\",'t'),'/',"\\"),'t','/'))
  i+=1
Oliver Ni
fuente
0

PHP , 263 bytes

<?=strtr('3333 20220'.['2 0332 020_
2/\2/\211\113/2113/\212 1
 /2\/2\ 11 \ |1412 14\22/0\ 14 1
/32 \112\|102 \012 \2/22\12 1',
'
\32 /112/|13/212 /2\ 0 /12 1
 \2/\2/ 11 / |1412 14/22\2/ 14 1
2\/2\/211/1102 \010|3\/2102_|_'][$argn&1],[__,"  |","  ","     ","--"]);

Pruébalo en línea!

Jörg Hülsermann
fuente
Puede guardar ocho bytes más con un reemplazo propio para 3 espacios.
Titus
0

Rubí, 290 bytes.

$><<(gets.to_i%2<1?"xCeCdCnCcC_
c/Bc/Be|ABAAf/e|Af/Be|f|
b/cB/cBd|AbBb|A--Af|--Be/CBd|--d|
/iBAAcB|ACdBCAdBc/eBAf|":"xCeC
Bi/AAc/|Af/e|d/cBbCb/Af|
bBc/Bc/d|Ab/b|A--Af|--/eBc/d|--d|
cB/cB/e|A/AACdBCAC|fB/e|Cc_|_").gsub(?C,'__').tr(?B,?\\).gsub(?A,'c|').gsub(/[a-z]/){|e|' '*(e.ord-97)}

Probablemente una entrada débil y mejorable. Básicamente, una compresión muy simple (artesanal) donde las letras minúsculas significan que muchos espacios (en realidad ord (ch) - espacios 'A') y letras mayúsculas son solo algunos términos comunes que ahorraron unos pocos bytes.

Peter Lenkefi
fuente
0

SOGL V0.12 , 72 71 bytes

═j;ΗD^⌡⁾yō⁶⅜┐≡¼τ~≡š┘,┼◄‚4øDqψ∫‛²′Ζdκ↓±ģ░○∙ΘΝ◄ōΞ06║⁶╗i-η}┌^JY³‘''n.2%?№↕

Pruébalo aquí!

La duplicación vertical de SOGL funcionó perfectamente para esto.

dzaima
fuente
0

Lienzo , 70 bytes.

C<aT[≤^5t‽◂6Zr!v↓[u0F∙OF-╫#t┬a*7ZfK1!&)y@½(+M⇵PV-¼G:Uju╋╷(╫:N‟‾)n⁸2%?↕

Pruébalo aquí!

dzaima
fuente