Minecraft espelhado


51

Este é o Calvin . Apenas tentando obter 20 representantes para que esse usuário possa conversar na sala de chat do PPCG Minecraft Server .

Escreva um programa ou função que receba um número inteiro positivo.

Se o número inteiro for par (2, 4, 6, ...), imprima ou retorne esta sequência de arte ASCII exata:

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

Se o número inteiro for ímpar (1, 3, 5, ...), imprima ou retorne esta sequência de arte ASCII exata:

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

Você pode assumir que a entrada é sempre um número inteiro positivo.

Nos dois casos de saída, opcionalmente, pode haver qualquer número de espaços à direita até a borda direita do "T" em cada linha e / ou uma única nova linha à direita. Observe como existem duas colunas de espaços entre cada letra.

O código mais curto em bytes vence.


54
Eu nomear soltar Calvin também se eu era um novo usuário à procura de rep;)
— Geobits

13
@Geobits Sou eu.
— 24515 Calvin's Hobbies

52
@ Geobits Não, sou eu. Eu sabia que ninguém iria votar se eu descobrisse que sou eu.
— Optimizer

19
Por que importa quem o criou? O representante não deve se basear no conteúdo da postagem?
— pântano

19
@ marsh Em teoria, sim. Na realidade, as pessoas são falhas. Seria uma experiência interessante a ser realizada, com um usuário de alto representante a criar uma nova conta para publicar alguns desafios para avaliar a diferença na recepção.
— Geobits

Respostas:


23

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

Apenas por diversão ... :) (Obrigado ao Xufox por cortar 46 bytes e me incentivar a cortar outros 37 por conta própria.)

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):'\\':'|  |')

Chamado como a(4)ou similar. Experimente aqui:

Eu condensado a espaços em branco em cadeias de dígitos a partir 2de 8(por exemplo 887= 23 espaços). Cada dígito é então substituído pelo número correspondente de espaços. 0representa | |e 1representa __. Em suma, este programa é 170 bytes mais curto que as duas seqüências combinadas (203 + 227 = 430), então estou feliz. :)

Edit: De alguma forma, é exatamente o mesmo comprimento que a única outra entrada neste momento .... o_o

Edit 2: Salvo algum espaço, alterando n%2<1?a n%2?e trocar as cordas. Também aproveitou o fato de que o início das duas seqüências é o mesmo para reduzir outros 5 bytes.

Edição 3: |2| parecia mostrar muito, simplificando cada ocorrência para x, economizando 7 bytes. As sugestões do Xufox cortam outros 40 bytes.

Edit 4: A sugestão do Xufox de substituir \npor quebras de linha reais valeu a pena, removendo 6 bytes do total. Mudar xpara 0e __para 1(inserir risada maligna aqui) e, em seguida, combinar todas as (inserir plural de Regex aqui), como ele fez em sua entrada, salvou 16 bytes extras.

Edit 5: Desde que escolhi usar os padrões ES6, usei a interpolação de string de modelo personalizado para economizar 2 bytes finais.


11
Esse número deve ter algo a ver! Além de ser um cubo perfeito, que é :-) Não pode votar em sua resposta desde que eu não tenho nenhuma idéia de JavaScript ...
— Luis Mendo

11
Que tal .replace(/\d/g,d=>' '.repeat(d))?
— Sebastian Simon

11
@ETHproductions Nice! Agora, você pode vencer a minha resposta? Faltam apenas 9 bytes…;) A propósito, quando conto seus bytes, diz 289, usando a ferramenta de contagem do gEdit…
— Sebastian Simon

11
Talvez usando seqüências de caracteres de modelo para poder fazer quebras de linha reais em vez de \n, economizando um byte por quebra de linha?
— Sebastian Simon

11
Agora eu tenho 2 bytes a menos que você. = 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))

O número de entrada é fornecido pelo stdin.

Exemplo de execução:

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

11
Isso é loucura, lol. +1.
— rayryeng - Restabelece Monica

11
@rayryeng Sim :-) Pena que Matlab só permite-se base para o valor 36. A maior teria poupado muito poucos bytes
— Luis Mendo

11
@LuisMendo Exatamente o que eu pensava ao fazer minha solução JavaScript ...
— Sebastian Simon

@Xufox em JS, as funções btoa () e atob () são codificadas e decodificadas base64, respectivamente.
— clap

11

CJam, 158 149 145 138 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*?

O exemplo acima usa notação de intercalação, pois o código contém caracteres não imprimíveis.

Experimente online no intérprete CJam .

Se o link permanente não funcionar no seu navegador, você pode copiar o código desta pasta .

Exemplo de execução

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

Idéia

Em vez de codificar a string MINECRAFT (preenchida para obter um comprimento de linha constante) diretamente, codificaremos uma versão "zipada" dela, na qual as linhas e colunas foram transpostas.

Após fechar e remover os feeds de linha, essa sequência (vamos chamá-la de R ) deve ser codificada:

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

Existem muitas execuções de espaços, portanto, substituiremos cada ocorrência de um trigêmeo de espaço por um avanço de linha.

Isso nos deixa com sete caracteres diferentes ( \n -/\_|), então atribuímos a cada um um número de 0 a 6 e consideramos os dígitos da matriz resultantes de um número base 7, que depois codificamos como uma sequência de bytes.

A decodificação funciona revertendo as etapas acima.

A sequência espelhada pode ser construída a partir da sequência original.

Se invertermos a ordem das quatro linhas e trocarmos os soliduses, obteremos o seguinte:

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

De alguma forma semelhante, mas teremos que girar claramente as linhas para trazer a linha inferior para o topo:

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

Isso seria se não fosse por aqueles sublinhados traquinas.

Se lermos a string original de cima para baixo e ignorar os feeds de linha (obtendo R ) e substituir cada sublinhado seguido por espaço por um espaço seguido por um sublinhado antes de mudar as linhas, este é o resultado:

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

Muito melhor! Tudo o que resta a fazer é apagar o primeiro espaço da primeira linha (mudando todos os sublinhados na primeira linha esquerdo personagem), movendo-se os sublinhados extraviado em E e C uma linha para cima e descartando o sublinhado ao longo 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.

Como funciona?
— anatolyg

@anatolyg Eu editei minha resposta.
— Dennis

10

Pitão - 182 bytes

Usa a abordagem de codificação básica. Como a indexação é modular no Pyth, nem preciso fazer nada pelo ímpar, basta colocá-lo na ordem correta e usá-lo @Q. Como bônus, isso também funciona com 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

Eu tinha apenas tentativas de codificar a primeira, depois sacudindo e trocando as barras, mas a primeira e a última linha eram muito difíceis.

Eu poderia economizar 6 bytes colocando bytes nulos reais no código, mas isso é demais.

Experimente online aqui .

Parece muito ruim online, porque a caixa de saída é muito pequena e envolve. Eu recomendo brincar com o dev-console e mudar col-md-5para a col-md-7.


As duas seqüências têm um monte de caracteres duplicados, você pode remover 11 bytes assim .
— PurkkaKoodari

8

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

Para edições anteriores, consulte o histórico de edições .

Edit 5: Na conversão, troquei o número associado a -(agora 0) e espaço em branco (agora 1). No bloco resultante, os números 1, 2 e 3 não eram mais usados. Isso me permitiu usar uma matriz com os números ausentes.

Editar 6: Melhorou o literal da matriz. Eu tentei isso anteriormente, mas usei 777e 77como strings em vez de números e notei apenas agora que eu tinha perdido isso.

Edit 7: O "código Golfed" é uma função, conforme especificado pela pergunta e não há necessidade de f=atender a esta especificação. Assim, removendo-o, economizando dois bytes.


Executável no 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);

Baseia-se no sistema de números base 6 e cada caractere ASCII representa um número:

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

Em seguida, combinei a representação numérica de cada sequência ASCII. Por exemplo: quando a primeira string ASCII contém a /em uma posição e a outra contém a \na mesma posição , essa posição se torna 32, que é a base 6 ( 20em decimal). Se você converter isso para a base 36 (para obter um número da base 36 para cada dois números da base 6), você obtém k.

Tudo isso foi feito de antemão e a função basicamente desfaz esse processo.

Agora, as duas respostas JavaScript têm uma outra resposta, com a mesma contagem de bytes…


PS: Como uma observação para mim mesmo e uma referência para os outros, este é o código que eu usei:

// 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.

2
Puxa, por que é ~NaN == -1?!
— Sebastian Simon

Eu também pensei sobre a inversão linha do ASCII cordas por linha, para se livrar de ainda mais espaços à direita (ele também salvou dois bytes na substituição: […][x]+77, 77não precisa ser uma string mais), mas o adicional de reverter no código golfed não valeu a pena…
— Sebastian Simon

Eu não entendi isso quando li pela primeira vez há um ano, mas agora vejo a técnica. Combinar cada par de caracteres em um é muito inteligente :-) Acho que você pode substituir isNaNpor 1+e ~~(i/6)com i/6|0.
— ETHproductions

Haha, eu sou agora um byte à frente;)
— ETHproductions

@ETHproductions Bem, espere um segundo ... Acabei de perceber que você não tem f=o começo, mas eu tenho. Também li que é aceito removê-lo, portanto, eu mesmo o farei, e agora tenho 260 bytes. ;)
— Sebastian Simon

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*

O exemplo acima usa notação de intercalação, pois o código contém caracteres não imprimíveis.

O avanço de linha é apenas para "legibilidade". Experimente online no intérprete CJam .

Se o link permanente não funcionar no seu navegador, você pode copiar o código desta pasta .

Exemplo de execução

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

Idéia

Essa abordagem tem algumas semelhanças com a da minha outra resposta , mas é muito mais simples e (um pouco decepcionante) um pouco mais curta.

Procuramos uma maneira de codificar a seguinte string:

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

Depois de preencher cada linha (para obter um comprimento de linha constante), fechar (transpor linhas e colunas) e remover os feeds de linha, essa sequência deve ser codificada:

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

Vamos substituir cada subsequência " |||"com um 0 , cada subsequência " "com um 1 e os caracteres de "/-_\| "com 2 para 7 , formando uma matriz de base de 8 dígitos, que podem ser codificados como uma sequência de bytes.

A decodificação funciona revertendo as etapas acima.

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.


4

Raquete, 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)))

Apenas por diversão.

(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: você pode precisar da #lang racketlinha para executar no DrRacket.


11
Exatamente 100 bytes de desconto.
— user253751

11
Vamos! Eu sei que você também pode fazê-lo para 343
— Optimizer

Não vejo isso acontecendo a menos que abandone essa abordagem.
— 28515 Winny

Você não precisa usar caracteres de base 64. Você pode usar apenas os caracteres unicode brutos que o gunzip envia
— 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è

Experimente online.

Explicação:

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

é o número compactado :

669530978249988431396781816197276307266403407188962925862194299697873953319419752813246251351417090709766331736351616127424760949905163941809417778114834562736028512279028673309866195447599979612590918985644583407413903825059942009898007791080822453262749380245316127735585410697701790387188175543639634091138422651942833048832372950797322005040161476426127678479662921265139425

Experimente online.

7в converte-o em Base-7 como lista, para obter a 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]

Experimente online.

èindexa cada dígito na sequência "\n-/\_|"e Jjunta a lista inteira, o que nos fornece o seguinte:

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

Experimente online.

2ädivide a corda em duas partes.
Ièpegue a entrada e a indexe (com quebra automática de linha) para obter uma das duas partes, que será produzida implicitamente.

Muito obrigado ao compressor ASCII do @MagicOctopusUrn , que foi usado para gerar o número compactado e o transliteral Base-7. Experimente online. (Após o qual o transliterado foi jogado no golfe, invertendo a sequência e o número na pilha, use em вvez de Bfazer uma lista de dígitos e indexe a sequência com è.


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 é uma função kque recebe um parâmetro e imprime a mensagem em stdout.

Uma versão mais legível:

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
}

Primeiro, ele prepara uma mensagem vazia (cheia de espaços). Para cada personagem (por exemplo, |ou -), há uma lista de posições para colocar esse personagem.

Para cada posição, se a versão invertida deve ser impressa, a posição é invertida. Ou seja, sua coordenada vertical yé substituída por 4-you 3-y(dependendo se o caractere é um sublinhado). Além disso, as direções das barras são invertidas - isso é realizado XORcom a 115.

Essa estrutura de controle também é usada para colocar os caracteres de nova linha - parece mais eficiente adicionar mais 4 coordenadas à lista do que gravar um loop explícito.


Existem algumas pequenas falhas neste sistema. Primeiro de tudo, a letra final T parece um pouco diferente na versão invertida:

___ 
 |    |
 |    |
 |   _|_

Para produzir corretamente, o código deve colocar os |caracteres após os _caracteres.

Além disso, para garantir que a sequência de controle contenha apenas caracteres ASCII, eu a codifiquei:

  • Ele registra as diferenças entre as posições em vez das próprias posições - isso reduz o alcance
  • Os números na sequência foram 37adicionados a eles, para alterá-los para o intervalo ASCII 32 ... 127. Eu poderia adicionar um número menor, mas 37evita caracteres como "e \, que precisam ser escapados dentro de literais de string.
  • Dois dos números eram maiores que 127 - por exemplo, o primeiro -caractere aparece na posição 137. Para explicar isso, adicionei um -caractere artificial em outra posição (79), que depois será sobrescrita - o caractere |também aparece na posição 79.

Outra coisa engraçada é que eu não poderia usar putsa saída da string - isso produziria uma nova linha extra à direita. Então eu usei printf.

Além disso, o número 57aparece 4 vezes no código golfed - a expressão aparentemente longa (w%2?4-i/6-p/57:p/57)*57+p%57torna possível eliminar a variável y, tornando o código mais curto.


C parece ser um tipo de linguagem "sempre escreva esta construção com este código" ... Este ... é ... muito ... um ... +1;)
— aplaude

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 $_

Ele tira proveito do fato de que as duas seqüências de caracteres são muito semelhantes (por exemplo, o IE e C inteiro) e transforma a sequência de caracteres que são exibidos de maneira diferente, dependendo de qual versão está sendo exibida. por exemplo, m significa "uma barra para a corda do caminho certo, uma barra para trás na da cabeça para baixo". Ele substitui a transliteração para exibir o caractere correto. Os espaços também são codificados no comprimento da execução usando substituições de cadeia.

multi-linha:

$_="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 $_

Idéia:

Como existem apenas 22 colunas exclusivas na saída, deve ser possível armazená-lo como 22 * ​​4 = 88 caracteres com um intervalo de 0 a 17 (todos os possíveis caracteres de "significado duplo"), juntamente com uma pesquisa de 56 caracteres tabela com uma entrada no intervalo de 0 a 21 por coluna. Em teoria, isso pode ser codificado com <100 bytes, no entanto, é difícil fazer disso uma vitória líquida por causa do código mais complicado para decodificá-lo.


2
Você pode raspar um par de bytes - y / foo / bar / é um sinônimo para tr / foo / bar /
— ryanm

2

CJAM, 206

As duas imagens ascii são codificadas em base 216, um 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}/

Teste aqui


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 teste:

$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

Resultado:

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

Ideias principais

O método de compressão é o método estendido do CJam por Dennis ♦:

  1. Crie uma sequência antes da compactação:
    • caracteres da primeira coluna de ambas as artes ASCII,
    • caracteres da segunda coluna, depois
    • caracteres da terceira coluna e assim por diante ...
  2. Compacte usando 10 substituições consecutivas (10 porque o Powershell pode usar os números 0..9 como seqüências de caracteres, isso reduz o algoritmo de descompactação. Substituições encontradas por força bruta.)

O script para compactação:

$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

A cadeia de compactação anterior é:

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

A explicação em sua resposta provavelmente foi colocada em mais esforço do que todas as minhas respostas 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;`

Não-golfe:

%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;

Testes:

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

É possível economizar um pouco de código colocando-os em blocos de entrada, mas isso adiciona a restrição de que a macro pode ser apenas uma vez por etapa de dados, o que eu viola o espírito de escrevê-la como uma macro. (E eu suspeito que adicionar um prompt para obter entrada na etapa de dados adicione mais caracteres).


1

bash, 247 bytes

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

Strings são concatenadas e compactadas com gzip.


1

PHP, 225 bytes

Solução feia de força bruta.

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

Compactei e, em seguida, base64 codificou as seqüências concatenadas a serem exibidas. O código decodifica, descompacta e divide em pedaços de 224 caracteres. A primeira sequência é de 224 caracteres sem uma nova linha à direita, a segunda é de 201 caracteres (também nenhuma nova após). A paridade do argumento da linha de comando ( $argv[1]%2) é usada como índice na matriz gerada por str_split().


1

Haskell, 138 bytes

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

Isso é meio que um hack. Estou forçando brutalmente o hash SHA256 da concatinação dos dois textos do minecraft e depois os separando e escolhendo o texto apropriado com base no parâmetro x. Isso é muito impraticável e não pode ser calculado em tempo real, e pode até haver colisões ao longo do caminho, pelo que sei.

Como Haskell não pode ter a representação ASCII desse hash em uma string, estou lendo-a de um arquivo chamado "a" e, portanto, adicionei 32 bytes à minha pontuação.

  • readFile e pacote são de Data.ByteString.Char8
  • hash é de Crypto.Hash.SHA256

Explicação:

replicateM 425"/\\|_- "

Cria uma lista de todas as combinações das letras "/ \ | _-" em 425 letras (o comprimento dos dois textos do minecraft combinados)

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

Escolha o primeiro que corresponde ao hash

take 225.drop(225*mod x 2)

O primeiro texto tem 225 letras, o outro tem exatamente 200.


106 bytes, não 138
— cat

Veja minha explicação, eu adicionei 32 bytes, porque eu estou lendo um arquivo longo de 32 bytes
— Cabeção

1

Javascript (ES6), 403 296 bytes

(Removido da minha resposta anterior ) Tentando um novo 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`
`

Observe que há alguns caracteres não imprimíveis; estes foram substituídos por ex \x83.

A codificação em si é cerca de 40 bytes mais curta que a outra, mas o processo de decodificação é mais elaborado. Eu usei o sistema base-216 que outros usaram para codificar o texto. Para referência, aqui está o código que eu usei:

// 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)));

Isso basicamente pega o texto ASCII (pré-convertido para a base 6) e triplica-o, alterando-o para a base 216. 53 é então adicionado para remover a maioria dos caracteres não imprimíveis.

Sugestões são bem-vindas!


Aqui está o 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 um forloop, um whileloop, quatro variáveis ​​que foram usadas apenas uma vez e uma tonelada de algoritmos longos para coisas simples. Rapaz, eu melhorei ...


Você provavelmente pode remover completamente y=[' ','/','|','\\','_','-'],e em vez de y[x]gravar ' /|\\_-'[x]. =)
— Sebastian Simon

@ Xufox Eu fiz isso e muito mais, jogando 107 bytes no 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

A função imprime a saída dada uma int


Sim, eu estou apenas procurando uma maneira pura de compactá-lo ainda mais que isso
— Blue

Como é que isso funciona?
— Oliver Ni

É a base-36? mas se é o que está 16598125653940296495007405984048067937906981182427207589486265398555496561913976121109917896233762115477615438181875147062369253802653987802486539858466848179256705775331854915993645
— Oliver Ni

Basicamente, ele armazena os dois resultados em uma lista e, em seguida, obtém o correto usando a função de módulo. Em seguida, decodifica a partir da base 36, como você pensava. Como era um grande poder de 2, removi alguns caracteres fazendo >> 69. Depois, uso uma função básica de tradução para transformá-la na saída correta.
— Azul

0

C, 321 bytes

Codificou a repetição e o índice de caracteres em uma sequência.

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]);}

0

Python 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

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],[__,"  |","  ","     ","--"]);

Experimente online!


Você pode salvar mais oito bytes com uma substituição própria para 3 espaços.
— Titus

0

Ruby, 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)}

Provavelmente uma entrada fraca e improvável. Basicamente, uma compactação muito simples (artesanal), onde letras minúsculas significam que muitos espaços (na verdade, ord (ch) - espaços 'A') e letras maiúsculas são apenas alguns termos comuns que salvaram alguns bytes.


0

SOGL V0.12 , 72 71 bytes

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

Experimente aqui!

O espelhamento vertical de SOGLs funcionou perfeitamente para isso.


0

Tela , 70 bytes

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

Experimente aqui!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.