Desafio: Produza a seguinte saída usando o menor número possível de caracteres:
_ _ _ _ _ _ _
| | | | ___| | | ___ __ _____ _ __| | __| | |
| |_| |/ _ \ | |/ _ \ \ \ /\ / / _ \| '__| |/ _` | |
| _ | __/ | | (_) | \ V V / (_) | | | | (_| |_|
|_| |_|\___|_|_|\___( ) \_/\_/ \___/|_| |_|\__,_(_)
|/
Regras e restrições:
Você não pode usar o FIGLet ou qualquer ferramenta similar. (Caso contrário,
figlet Hello, world!
seria uma solução trivial e praticamente imbatível.)Seu programa deve consistir inteiramente de caracteres ASCII imprimíveis - especificamente, pontos de código 9 (TAB), 10 (LF) e 32 - 126. (Se o seu idioma / SO exigir quebras de linha CRLF, você poderá usá-los em vez de LFs simples). , isso desqualifica lamentavelmente qualquer idioma que exija caracteres não ASCII (ou dados não textuais) como parte de sua sintaxe.
A saída deve ser exatamente igual ao exemplo acima. Você pode, no entanto, incluir espaço em branco extra ao redor da saída, se desejar. Você pode assumir o espaçamento da guia de 8 caracteres (ou a configuração padrão nativa da plataforma escolhida, se houver uma consistente).
Ps. Para definir o par, criei uma solução Perl de 199 caracteres. No entanto, ainda não vou publicá-lo, caso alguém o faça independentemente. (Além disso, é meio extravagante.) Obviamente, isso não deve desencorajá-lo a postar sua própria solução, mesmo que seja mais longa.
Atualização: Agora que o han o venceu em um caractere, aqui está a minha solução Perl de 199 caracteres:
use Compress'Zlib;say uncompress unpack u,'M>-I]BT$*`S$,`^]YQ=R:0,&_Z<DP?8@?WVQJ]E2J"%E$$@)R(/(/MCJ*\U!OM`Z#=5`4Y>6M=L\L%DMP&DB0V.4GQL&OOGB$4:%`4TT4!R8O-Z(^BTZWNV?>F86K:9+""-35*-LNC:T^D:_$#%^`";"DD0'
É muito semelhante à solução da DC (e a todas as outras soluções baseadas em zlib / gzip em vários idiomas), exceto que eu usei a uuencoding em vez da base64 para o texto compactado e alguns outros pequenos truques de golfe.
Atualização 2 : Acho que é hora de aceitar oficialmente um vencedor. O primeiro lugar vai para o código PHP do konsolenfreddy , pois, embora você conte os caracteres, é o mais curto enviado até o momento. De fato, combiná-lo com o fluxo DEFLATE otimizado do meu código Perl de 199 caracteres produz uma solução ainda mais curta de 176 caracteres:
<?=gzinflate(base64_decode("fYtBCgMxDAPvecXcmkDBv+nJMH2IH99savZUqghZRBICciDyD7Y6ivNQbwOg3VQFOXlrXbPLBZLcBpIkNjlJ8bBr754hFGhQFNNFAcmLzeiPotOt7tn3plq2mSwgjU1SjbLo2tPpGvxAxfgA"));
No entanto, acho que han merece uma menção honorária especial por estar tão perto sem usar nenhuma ferramenta de descompressão pré-escrita. Parabéns a vocês dois e um feliz ano novo para todos!
fonte
Respostas:
Stax , 137 bytes
Execute e depure
Funciona assim.
0
s seguidas de a1
são convertidas em caracteres não espaciais.1
s restantes são substituídos por espaços.fonte
Perl 5.10 - 195
198202203caracteresAqui está uma entrada que não requer bibliotecas além da correspondência básica de regexp. A cadeia codificada tem 131 caracteres e o código para decodificar e imprimir ocupa 64 caracteres (assumindo que não há nova linha no final da origem). A idéia é representar seqüências comuns de 3 caracteres por letras minúsculas.
O codificador é muito mais longo e infelizmente não é muito legível no momento. A idéia básica é usar a programação dinâmica para encontrar a codificação mais curta para cada linha, considerando um conjunto fixo de substituições de strings. A cadeia de substituições na última linha foi criada por tentativa e erro, e é possível que outra cadeia de substituições leve a um programa mais curto que o anterior.
Um truque aqui é que algumas substituições têm menos de 3 caracteres: devido ao modo como o perl
substr
funciona,x
é substituído por '_
' ey
por '_
'. O último é necessário porque\w
no regex corresponde a '_
', que é substituído por '(_)
'.fonte
print
porsay
say
você precisause 5.010;
executar ou executar o script como uma linhaperl -E 'script here'
. O primeiro torna o código mais longo e o último não é apropriado para um script de várias linhas. Perdi algo?-E
não conta em número de caracteres.s''...'
vez de$_=q!...!
; lembre-se de escapar da aspas simples. Com isso e emsay
vez deprint
(e deixando de fora a última nova linha), eu diminuo para 198 caracteres.#
longas execuções de espaço em branco e reduzi a solução para 190 caracteres. Gostaria de saber se é possível ficar abaixo de 184 caracteres - isso superaria todas as soluções compactadas com zlib até agora.Brainfuck - 862 caracteres:
fonte
[<---->---]
primeira linha. (Presumivelmente, acabaria por terminar, mas eu não esperar o tempo suficiente para isso.)Python (2.x), 194 caracteres
fonte
Javascript,
273265264 caracteres:(
fonte
return
, -1 char :) #Essa resposta é mais longa do que apenas imprimir a string; no entanto, apenas para se divertir, aqui está:
Python, 485 caracteres ☺
Como tenho uma das representações ASCII mais curtas do texto original compactado, preciso ter a barra de rolagem mais longa do meu código! É uma vitória! :)
fonte
PHP,
194189 caracteresÉ basicamente o mesmo que a resposta Python e Perl, um pouco mais curta
fonte
php -r'=...'
truque não parece funcionar para mim, mas você pode usar apenas<?=...
184 caracteres. Além disso, sua saída parece ter um espaço extra onde or
e sel
encontram.-r'=..'
. que ophp -r
não contam? É incluído em meus 189chars ...-r
mudança do PHP é uma espécie de caso limítrofe, pois, além de apenas pegar o código como parâmetro e executá-lo, também modifica um pouco o ambiente de análise em comparação com a execução do código a partir de um arquivo. Eu estaria inclinado a contá-lo como 2 caracteres extras - o que, aliás, coloca tudo em ordem<?
.J,
167160 caracteres (47 + 113)Outro envio sem compactação interna. Usa uma codificação de comprimento variável bastante simples, codificando cada caractere como uma série de 1 bits e separando os caracteres por 0 bits. A cadeia compactada tem apenas 113 caracteres.
fonte
Python (2.7.x), 218 caracteres
Bem direto ... não muito satisfeito com esta tentativa.
fonte
Festança,
199196193 caracteresPerto o suficiente...
EDIT: até 193!
fonte
gzip -d
porzcat
.festança,
196192fonte
Perl, 230 caracteres
Isso é basicamente o mesmo que minha resposta em Python. Eu gostaria de ver a versão de 199 caracteres .. parece mágica.
fonte
Perl,
294290 bytes.A cadeia compactada sozinha é
151130 bytes.Isso não é curto, mas foi realmente divertido de escrever.
fonte
Perl, 346 bytes
A cadeia compactada sozinha é de 111 bytes.
Tentando entender o que o python
key= (0,(1,((((7,5),(6,(8,(11,(9,10))))),(4,3)),2)))
estava fazendo, acabei criando uma versão perl de aparência muito semelhante.fonte
PHP 590
Obviamente, não estou tentando vencer, apenas me interessei em tentar outro esquema de compactação, apesar de não conseguir nem vencer a solução PHP mais simples de texto simples 302, apenas copiar e colar
funciona como um bitmap em 10 canais
"jogou golfe"
legível
fonte
Pylongolf2, 300 bytes
Não consegui encontrar nenhum método de codificação elegante, então provavelmente não estou competindo.
fonte
Golfe-Básico 84, 325
Supondo que uma calculadora possa imprimir backticks, barras invertidas, tubos únicos e sublinhados.
fonte
HTML + JS (223 caracteres unicode)
Apenas por diversão:
Nota: você precisa salvá-lo em um arquivo HTML "UTF-8 com BOM".
fonte
PowerShell , 220 bytes = script: 9 + arquivo: 211
Experimente online!
O script do Powershell para criar o arquivo
t
(consulte o TIO):fonte