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.

Retransmissão de bate-papo antigo
fonte
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.

ETHproductions
fonte
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
                       __    __   __             __  ___
  /\  /\    |  |\  |  |     /    |  |     /\    |     | 
 /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   | 
/        \  |  |  \|  |__   \__  |   \  /    \  |     | 
Luis Mendo
fonte
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.
Dennis
fonte
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.

Maltysen
fonte
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.
Sebastian Simon
fonte
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.
Dennis
fonte
"Alegada legibilidade?" : P
FryAmTheEggman
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.

Winny
fonte
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.

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.

divide a corda em duas partes.
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 è.

Kevin Cruijssen
fonte
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.

anatolyg
fonte
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.

samgak
fonte
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

Arnaud
fonte
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 é:

   \  /     /\    /    \  \    /    \/      /\    /    \  \    /    \/     /  \                   ||||||                  ||||||  \    /    \/     /  \   ||||||          ||||||__  --____  --__                    ||    //  \\__    ____    __                  ||||||_   -- __   -- _  | \/ |   /  \                    \  /     /\  /__  \  \__  /    \/     /  \                   ||||||_   -- __   -- _                _      __ ||||||_      _
confuso
fonte
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).

Joe
fonte
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.

g.rocket
fonte
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().

axiac
fonte
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.

BlackCap
fonte
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 ...

ETHproductions
fonte
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

Azul
fonte
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]);}
Cole Cameron
fonte
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
Oliver Ni
fonte
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!

Jörg Hülsermann
fonte
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.

Peter Lenkefi
fonte
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.

dzaima
fonte
0

Tela , 70 bytes

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

Experimente aqui!

dzaima
fonte