Sua tarefa é produzir uma representação da lendária árvore da vida, Yggdrasil .
Você deve escrever um programa cuja saída seja exatamente isso:
/\
/**\
/****\
/******\
/******\
/********\
/**********\
/************\
/**************\
/************\
/**************\
/****************\
/******************\
/********************\
/**********************\
/******************\
/********************\
/**********************\
/************************\
/**************************\
/****************************\
/******************************\
/************************\
/**************************\
/****************************\
/******************************\
/********************************\
/**********************************\
/************************************\
/**************************************\
/******************************\
/********************************\
/**********************************\
/************************************\
/**************************************\
/****************************************\
/******************************************\
/********************************************\
/**********************************************\
/************************************\
/**************************************\
/****************************************\
/******************************************\
/********************************************\
/**********************************************\
/************************************************\
/**************************************************\
/****************************************************\
/******************************************************\
/******************************************\
/********************************************\
/**********************************************\
/************************************************\
/**************************************************\
/****************************************************\
/******************************************************\
/********************************************************\
/**********************************************************\
/************************************************************\
/**************************************************************\
/************************************************\
/**************************************************\
/****************************************************\
/******************************************************\
/********************************************************\
/**********************************************************\
/************************************************************\
/**************************************************************\
/****************************************************************\
/******************************************************************\
/********************************************************************\
/**********************************************************************\
/******************************************************\
/********************************************************\
/**********************************************************\
/************************************************************\
/**************************************************************\
/****************************************************************\
/******************************************************************\
/********************************************************************\
/**********************************************************************\
/************************************************************************\
/**************************************************************************\
/****************************************************************************\
/******************************************************************************\
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|________|
Não há espaço em branco à direita. A nova linha final pode ser omitida.
Para facilitar a verificação, aqui estão as somas md5 da saída esperada:
374899e56bc854d04639c43120642e37
- Sem nova linha no final.03afb81d960b8e130fe2f9e0906f0482
- Nova linha no final
Aplicam-se brechas padrão. Isso é código-golfe, então a menor entrada em bytes vence!
code-golf
ascii-art
kolmogorov-complexity
caird coinheringaahing
fonte
fonte
Respostas:
Golfscript,
8477767572 caracteresAbordagem diferente da de Howard . Clique na contagem de caracteres para experimentá-lo.
Obrigado a Howard por salvar 3 caracteres!
Explicação :
Esta é mais ou menos uma porta direta da minha solução Python . Tomando algumas liberdades expressivas (usando variáveis nomeadas em vez de manter o controle das posições da pilha e
print
realmente manter as coisas na pilha, não imprimindo):fonte
'\\'n
puxar a nova linha para a sequência (+/- 0 caracteres) e agora a barra invertida não precisa mais ser escapada (caractere -1).4*4+
é o mesmo)4*
e'_-'[=]
pode ser escrito, o'_-'1/=
que torna o último+
obsoleto.Haml & Sass
37 + 277 = 314
Haml:
Sass:
* Sass permite diretivas de controle, concatenação e desreferência variável. Tudo isso é útil ao estilizar, mas detalhado ao jogar golfe.
é gerado em:
HTML:
CSS:
a página resultante
fonte
CJam , 62 bytes
Experimente online!
Como funciona
fonte
GolfScript, 79 caracteres
Experimente o código aqui . Observe que as quebras de linha não são opcionais neste código
fonte
Python,
148129126121 caracteresAgradecemos a Falko por salvar 3 caracteres e ao flornquake por salvar brilhantemente outros 5!
fonte
'**'*j
para salvar 3 caracteres. Além disso, minha solução converge para exatamente o mesmo código. :)for c in'-'*11+'_':print' '*35+'|'+c*8+'|'
.Bater,
236 19719310 bytes de código + nome de arquivo com 1 byte + arquivo de dados com 182 bytes = total de 193 bytes
Explicação
y
é um arquivo que contém o Yggdrasil, sem uma nova linha à direita, compactada com o algoritmo zopfli (chamado comozopfli --i64
) e depois com os últimos 8 bytes removidos. O zopfli é compatível com o gzip, para que eu possa descompactar o arquivo com os utilitários Bash padrão projetados para o gzip. O tamanho do arquivo de dados é 182 bytes (229 bytes quando o gzip normal é usado). O tamanho do Yggdrasil original, sem a nova linha à direita, é 5876 bytes.A remoção dos últimos 8 bytes causa mensagens de erro, que são suprimidas enviando erro padrão para um arquivo chamado
j
. Sej
existir, será substituído.A base64 de
y
é (usebase64 -d
para obter o arquivo original):E o md5sum é:
fonte
C, 169
Ungolfed (e ligeiramente desembaraçado):
fonte
Ruby - 100
Coloca nivelamento automático, para que possamos coletar todas as linhas, mesmo em matrizes aninhadas. Precisa de Ruby 1.9
Tente ideone
fonte
PowerShell
104101fonte
C #
258234bytesObrigado a algum usuário irritante pelas edições sugeridas, fazendo bom uso do método String.PadLeft!
O código é bastante simples, não resta muito para o golfe.
Código formatado:
fonte
\r
é inútil aqui. Isso é código de golfe.J,
98 88 8475fonte
Perl, 127
Ungolfed:
fonte
Ruby -
139129126123 123121Hoisted "coloca" fora da criação da matriz (sugestão do bitpwner).
Sem Golfe ("coloca" sem suspensão):
fonte
PHP
223202181160156Editar Eu descobri como criar um apelido para uma função com uma variável e fui capaz de cortar mais alguns caracteres. Essa
str_repeat
função era realmente detalhadaEdit 2: Obrigado a todos pelas sugestões!
Golfe:
Legível:
Saída: http://brobin.me/yggdrasil.php
fonte
(39-$j)
,($j*2)
e($i==11)
. -2 substituindo por\n
caracteres reais de nova linha (o PHP permite isso em literais). -5 caracteres substituindo (ambos)for($i=0;$i<12;$i++)
porfor($i=12;$i-->0;)
e$i==11
com$i==0
.$s(($i==0?'_':'-'),8)
por$s($i?'-':'_',8)
. (==> -5 caracteres)$s('*',$j*2)
por$s('**',$j)
. Eu acho que é a última melhoria que posso encontrar.($j*2)
no interior para a($j++*2)
e remoção$j++
defor()
argumentosfor($i=12;$i-->0;)
pode ser reduzido parafor($i=12;$i--;)
- mais 2 caracteres.Delphi 429
Tentará melhorar mais tarde.
Golfe
destroçado
fonte
Javascript,
288281O Chrome oculta
console.log
s duplicados , use o IE.Ungolfed:
fonte
for(i=0;i++<39-w;)
vez defor(i=0;i<39-w;++i)
e assim por diante. Além disso, emp=console.log
vez dec=console
e emp
vez dec.log
(embora eu só tenha testado o último no Node.js, ele não funciona no Firefox). Isso economiza 12 bytes.c=console.log
também não funcionou no Chrome, então não o usei. Os truques do loop for economizam 7 bytes.JavaScript (console.log),
168166(Espaço em branco apenas para legibilidade)
fonte
C (219)
Obrigado a todos pelas dicas de golfe - consegui reduzi-lo para 219. Não pense que vai diminuir muito.
Necessário inclui:
fonte
32
em vez de' '
e42
em vez de'*'
:)Haskell,
153148Direto, sem truques, apenas golfe:
O
%
operador desenha uma única linha, cujo primeiro argumento é oString
comprimento 3, contendo as bordas e os caracteres de preenchimento nessa linha (agora assumindo exatamente 3Char
s, economizando 5 bytes), o segundoInt
, especifica metade do número de caracteres de preenchimento. A correspondência de padrões, consoantes e anexos é usada em conjunto para salvar bytes, cuidando da "cola" entreChar
eString
. Nesta segunda versão, eu também tornei#
infinito e introduzi umtake 85
para torná-lo finito novamente (sem bytes salvos, infelizmente).O
#
operador cria a sequência para on
argumento%
necessário para a árvore:[0..3], [3..7], ...
concatenada.&
é apenas uma abreviação de infix parareplicate
, que ocorre três vezes.A árvore é montada na última linha e as novas linhas são adicionadas por
unlines
.fonte
Lua - 164
fonte
Mathematica
191178Certamente não é a melhor solução:
Sem contar novas linhas. O Mathematica inclina a saída, pois não tem a mesma largura para um espaço em branco que para "*" e "/". Mas o resultado está correto.
fonte
Java - 286
Meu primeiro golfe.
Golfe:
Ungolfed:
Teste aqui
fonte
Python 2, 117
Outras versões que tentei incluem:
fonte
Pitão,
101100999081 bytesExperimente online!
Tradução Python 3:fonte
a
função definida no seu Python não é equivalente a+
nas listas?<list>+<str>
não é uma operação válida, mas eu poderia usar com a mesma facilidade["-"]*11+["_"]
. Decidi definir minha própria função para traduzir com mais precisão o que Pyth está realmente fazendo.PowerShell, 88 bytes
fonte
Groovy 118
fonte
C, 194
Este código é uma bagunça quente e definitivamente pode ser jogado mais. Ainda assim, foi uma oportunidade de experimentar algumas coisas que nunca fiz antes: usar um literal para uma sequência de asteriscos e usar o especificador de largura
*
com uma sequênciaprintf
.fonte
Raquete
223 220 211 204198Golfe:
Ungolfed:
fonte
Montagem (MIPS, SPIM) ,
768671659655654 bytesExperimente online!
Edit: Salvo ~ 100 bytes codificando cada caractere em um registro e simplesmente escrevendo na pilha, abusando do fato de o MIPS não ter tipos, de modo que a palavra implícita na string ascii é permitida.
Editar 2: removida a alocação de pilha duplicada. (
addi $sp -4
) Opa!Edit 3: ao reescrever, acidentalmente fez o toco de árvore 1 caractere muito curto. (36 em vez de 35). Fixo.
Edite 4: -4 bytes usando $ 8 e $ 9 em vez de $ t0 e $ t1. eles significam a mesma coisa, mas $ t0 é mais fácil de ler. infelizmente, todos os outros registradores t têm o mesmo tamanho quando escritos de maneira adequada ($ t2 == $ 10, mas ambos são 3 caracteres); portanto, o restante é uma lavagem. Eu poderia (em teoria) usar os demais registros 'a' (5-7. Print syscall usa 4), mas depois o comportamento não é definido quando se usa syscall.
-1 Byte, definindo t8 como 0 e ramificando em menor que em vez de igual. também exigiu que eu reorganizasse as operações adicionais, o que infelizmente fez com que o tempo de execução levasse mais três códigos opcionais.
Não é o melhor no MIPS, mas depois de esclarecer isso na meta-discussão, eu os envio. O MIPS não foi projetado para isso (sem saída, sem loops), mas é bem divertido fazer isso, apesar disso.
Infelizmente, não criei uma versão comentada para esta nova solução, mas você pode visualizar a versão antiga, com a documentação completa aqui
Sinta-se livre para receber o crédito e melhorar esta resposta, se puder vencê-la - provavelmente estou perdendo algumas otimizações aqui e ali.
fonte
addi $sp -4
que realmenteaddi $sp $sp -4
é do SPIM ou MIPS em geral, portanto, se alguém o fizer, informe-me.Cobra - 166
228260fonte