Seu trabalho é recriar esta obra de arte:
_____
|
|
|
|
_____|
|
|
|
|
_____|
|
|
|
|
_____|
|
|
|
|
_____|
A resposta deve recriar isso e imprimi-lo como resultado. Todos os idiomas são permitidos, nenhuma impressão direta de arte, ofc, é necessário algum nível de manipulação. A resposta com o mínimo de bytes vence.
Fecha na quinta-feira às 06:30 UTC ou mais.
A coisa original foi mostrada para mim pelo meu amigo que fez isso com Java, ele se recusou a me mostrar o código-fonte e agora vou deslumbrá-lo com o brilho de outras linguagens. : D
Você não pode usar nenhum caractere alternativo (facilita isso?).
Quadro de líderes atual
- Pyth - 28 bytes - isaacg
- CJam - 30 bytes - Runer112
- CJam - 32 bytes - Martin Büttner
Votos mais altos: C - 73 bytes - Paul R
isaacg leva a coroa por passar no Staircase Challenge com Pyth. Fique atento a mais desafios como estes no PPCG!
code-golf
ascii-art
kolmogorov-complexity
café da manhã
fonte
fonte
Respostas:
Pyth,
2928Experimente aqui.
Uma solução bastante direta, com o truque "acrescentar cinco espaços ou cinco sublinhados" da solução do @ xnor, mas com o loop de 0 a 20, não de 20 a 0.
fonte
C,
8680767573 bytesfonte
for(i=25;i--;)
i=26
. Além disso,' '
pode ser alterado32
para um caractere extra. Minha solução tem 2 caracteres a mais após essas otimizações :(main(i){for(i=21;i--;)printf("%*s%c\n",i/5*6+5,i%5?"":"_____",i<20?'|':0);}
1. Simplifique a fórmula para o comprimento 2. Como o @Allbeert diz, você pode usar o código ascii para,' '
mas por que parar no ASCII 32 quando o ASCII 0 funcionar. Também funciona bem para mim com em""
vez de" "
'|'
impressão?c;main(i){for(i=21;i--;c='|')printf("%*s%c\n",i/5*6+5,i%5?"":"_____",c);}
Java,
198158156 156146 bytesProvavelmente isso pode ser muito reduzido. Como sempre, sugestões são bem-vindas.
Recuado (tipo):
Obrigado Martin Büttner, Rainbolt e Geobits.
fonte
Brainfuck (1065 bytes)
Não é bonito, não é curto ... mas vou otimizar mais tarde!
fonte
CJam,
3630 bytesExperimente online.
Minha solução inicial de 36 bytes gerou o resultado na orientação da saída. Apesar de minhas tentativas de extrair mais bytes do algoritmo, não consegui. Então vi a brilhante estratégia de Martin de gerar colunas em vez de linhas e transpor o resultado. Percebi que provavelmente era uma abordagem melhor, então parti para criar uma solução baseada em transposição.
No entanto, minha abordagem para implementar essa estratégia varia bastante. Em vez de gerar colunas completas, eu uso uma solução iterativa que recua as "etapas" já geradas e adiciona uma nova etapa a cada iteração. Portanto, a primeira iteração do loop principal gera isso:
A segunda iteração do loop principal recua a etapa existente e adiciona uma nova após:
E as cinco iterações completas do loop principal geram isso:
Depois disso, tudo o que precisa ser feito é eliminar a primeira linha, que de outra forma se tornaria o riser indesejado para a etapa inferior e transpor.
fonte
Python 2,
807774 bytesLivre-se do duplo
exec
e encaixe tudo neleprint
!fonte
Clip, 46
Explicação
fonte
CJam,
3632 bytesTeste aqui.
Eu também tentei usar uma fórmula explícita, mas é mais longa no CJam ... talvez ajude alguém:
Explicação
Descobri que a escada pode ser construída com muito mais facilidade se você a) transpuser a grade eb) inverter as linhas:
Então, primeiro estou construindo isso, depois invertendo e depois transpondo.
fonte
Python 2, 59
As 21 linhas são indexadas por
n
in[20,19,...,1,0]
. Primeiro imprime 6 espaços para cada "passo" que subimos (menos 1), calculado comon/5*6
. Em seguida, imprime cinco espaços, exceto que, em vez disso, são sublinhados para múltiplos de cinco. Por fim, imprime uma linha vertical, exceto a linha superiorn=20
.fonte
JavaScript,
1151079694898783 bytesÉ muito longo para ganhar, mas é a primeira vez que recebo uma resposta no PCG.SE e estou orgulhoso de ter feito algo postável.
Com alguns conselhos sintáticos úteis, reduzi o código significativamente - mesmo abaixo do limite da barra de rolagem!
fonte
alert
. Se você executá-lo no console, ele funciona muito bem sem ele. Além disso, o ponto-e-vírgula dentro da última chave não é necessário. Você pode salvar 1 byte usando em(y/5-.2)
vez de((y-1)/5)
s+='\n'
depois doy--
e se livrar dos suspensórios para que pareçafor(s='',y=21;y>0;y--,s+='\n')
. Eu também inicializado os s dentro do loop for para que o seu código é tudo uma declaraçãofor(s='',y=22;--y;s+='\n')for(x=0;++x<29;)s+=6*~~(y/5-.2)+5-x?5*~~(x/6)+1-y?' ':'_':'|'
se você virar sua expressão ternária, pode testar paranumber - x
que seja 0 se ambos os termos forem iguais, poupando mais 2 bytes.for(s='',y=22;--y;s+='\n')for(x=0;++x<29;)s+=6*~(~-y/5)-~x?4+5*~(x/6)+y?' ':'_':'|'
e 83ECMAScript 6,
14213812991 bytesAgradecimentos especiais a @ edc65 por realmente reformular isso.
Mostrar snippet de código
A lógica da versão original, verifique o comentário @ edc65 para saber como se transformou.
fonte
new
construtor com segurança antesArray
para salvar alguns bytes.new
era necessário.repeat
[1,2,3,4].map((a,b)
e usando apenas b =>[0,1,2,3].map(b
(-4)MATLAB, 68 bytes
Tenho a forte sensação de que o MATLAB deve fazer melhor, mas não consigo pensar em uma maneira.
Cria as escadas de cabeça para baixo e vira-as. Meu thaumometer quebrou por causa de todas as constantes mágicas ao redor.
'|'
é intencionalmente deixado como está (em vez do ponto de código ascii) para inicializarp
ew
como uma matriz de caracteres.fonte
'|' = 124
de qualquer maneira, para que não custe nenhum caractere extra.Ruby, 48
Abordagem antiga, 68
fonte
'_'
podem ser escritas como?_
. 3. Novas linhas podem ser incorporadas diretamente em strings (para que você possa realmente fazer"<linebreakhere>|"
). 4. Os parênteses em torno disso não são necessários. A finalputs
pode ser substituída por$><<
(o que permite que você se livre do espaço, mesmo após o uso?_
). Mantem! :)(1..4).map
por4.times
e usar em4-i
vez de5-i
.Julia, 83 bytes
Em Julia, a concatenação de sequência é realizada usando o
*
operador e a repetição de sequência é realizada usando^
.fonte
> <> ,
108104100 bytesUma solução>> simples, usando a mesma estratégia da minha resposta em Python . A principal diferença é que> <> não possui multiplicação de strings (ou mesmo strings), então tudo isso é feito com loops.
Explicação
fonte
Groovy,
9871 bytesTenho certeza de que pode ser reduzido de alguma forma :) abreviado por @Score_Under
fonte
' '*(i-(i-1)%5)
, suportes Retire do torno('_____'+(i==25?'':'|'))
, substitua o'_____'
com'_'*5
, e se você virar a última condicional você pode usar% como um operador de desigualdade pouco ortodoxa:(i%25?'|':'')
. Isto deve levá-lo para baixo para 71.Perl, 50
Experimente- me .
fonte
T-SQL, 276 bytes
fonte
Visual FoxPro 9.0, 261 bytes
n = número de etapas
total de 175 caracteres, mas teve que gerar um arquivo para exibir corretamente - menos 43 caracteres para operações de arquivo = 132 caracteres.
Nota para o respondente: A contagem de bytes é para o código fonte absoluto em funcionamento, e o contador de bytes diz que são 261 bytes, por isso é.
fonte
Bash (+ tac de coreutils): 110 bytes
Isso pode ser colado diretamente no terminal.
fonte
|tac
, isso não funciona. E eu executei isso no Git Bash, então eu deveria me matar.código de máquina x86, 48 bytes
Código de montagem equivalente:
Saída:
Desculpe a saída ser diferente; Espero que seja aceitável.
Isso foi executado no DOSBOX
fonte