Descrição da tarefa:
Desenhe um cubo na arte ASCII em aproximadamente uma projeção de gabinete.
Monospaced fonts
geralmente têm caracteres com o dobro da largura. Como a entrada é o comprimento das linhas verticais (excluindo os cantos), as linhas horizontais são desenhadas com o dobro de caracteres, para que a imagem resultante seja realmente um cubo. As linhas recuadas são desenhadas na metade do comprimento, conforme determinado por uma projeção do gabinete.
Os cantos do cubo são representados por +
, linhas horizontais por -
, linhas verticais por |
e diagonais /
.
Resumindo: Seja a entrada n , então
- Uma aresta horizontal do cubo é desenhada com
-
e consiste em 2 n caracteres. - Uma aresta vertical do cubo é desenhada com
|
e consiste em n caracteres. - Uma aresta diagonal do cubo é desenhada com
/
e consiste em n / 2 caracteres. - Os cantos do cubo são desenhados com
+
. Os cantos não são contados pelo comprimento de uma aresta, conforme detalhado acima (veja também os exemplos abaixo).
Entrada:
A entrada, dada na entrada padrão, é um único número positivo positivo n (2 ≤ n ≤ 30) que fornece o comprimento das linhas verticais do cubo. É seguido por uma única quebra de linha.
Saída:
A saída é um cubo na saída padrão, seguindo as regras acima. O espaço em branco à direita nas linhas é ignorado.
Entrada de amostra 1:
2
Saída de amostra 1:
+----+
/ /|
+----+ |
| | +
| |/
+----+
Entrada de amostra 2:
4
Saída de amostra 2:
+--------+
/ /|
/ / |
+--------+ |
| | |
| | +
| | /
| |/
+--------+
ETA: Agora aceitei a solução mais curta. Atualizarei a resposta aceita quando surgir uma resposta mais curta.
Como algumas pessoas perguntaram quanto tempo duraram as inscrições de nossos concorrentes:
227 - Python
240 - Perl
310 - C
315 - C
326 - VB.NET
459 - C
Assim como nossas próprias soluções (não classificadas com as outras):
140 - Golfscript
172 - Ruby
183 - PowerShell
Respostas:
Golfscript - 96 caracteres
A maior parte da compacidade vem do armazenamento agressivo de quase tudo em uma variável (a menos que você inclua ser escrito em golfscript).
Alguns outros pequenos truques aqui.
'LR''str'*
->'LstrR'
.'/'
único precisam passar por dois elementos da pilha (@
) em vez de 3 (@ .. \
).fonte
Python -
248243230227191Um pouco confuso, mas basicamente imprime o cubo linha por linha (usando um buffer de seqüência de caracteres).
Obrigado a @marcog, por apontar a primeira linha, a @ThomasO, por apontar a segunda linha e a @Juan, por me fazer perceber que posso combinar linhas.
fonte
s=" ";p="+";b="|";f="/";n="\n"
paras,p,b,f,n=" +|/\n"
.Python - 179
Gostaria de observar que peguei algumas idéias do JPvdMerwe (usando uma string para imprimir uma vez, e a linha única que eu não sabia que era a sintaxe correta no Python).
fonte
fortran 77 - 484 caracteres
Não faz sentido fornecer uma versão "não observada". E observe que a redução não se dá bem com os requisitos de recuo.
Tentei o fortran por causa dos inline para loops fornecidos pela
write
declaração. Obviamente, eles ajudam, mas não são suficientes para matar a palavra da linguagem. Pode ser reduzido usando a entrada de forma livre.Validação:
Felizmente, a especificação não diz qual o tamanho que deve ser:
mas outros tamanhos ímpares são razoáveis:
fonte
Minha própria solução, uma vez que já foi derrotada pelo Python:
Windows PowerShell, 183
fonte
PostScript, 237
História:
def
ed mais algumas coisas que apareciam com freqüência.def
s.def
que salva mais dois bytes.[
e]
possui boas propriedades quando usadas como variáveis :-). Graças ao KirarinSnow .def
s. Thansk novamente :-).fonte
Ruby 1.9,
172 165162 caracteresfonte
Ruby - 423 caracteres
Realmente não quero compartilhar isso, pois é uma contagem tão horrível, mas desde que eu escrevi, isso também pode acontecer.
Provavelmente poderia ser reduzido um pouco, mas duvido que essa abordagem de força bruta chegue perto de um número decente de caracteres, então não posso me incomodar.
fonte
PHP,
401392382363 caracteres:Originalmente, fiz isso para ver quão curto eu conseguia fazer isso em PHP, pois sabia que seria muito longo. Tenho certeza de que poderia ser reduzido, mas não considerando muito o PHP não possui muitos atalhos.
Validação:
http://codepad.viper-7.com/ftYYz9.php53
Versão semolfo: http://codepad.viper-7.com/4D3kIA
fonte
Perl, 163
Perl 5.10 ou posterior, execute com
perl -E '<code here>'
Versão substituída:
fonte
Perl,
269 269 262 256 245 244 237 226 228 224217 caracteresA idéia básica é fazer tudo com substituições regex. Como dois dos caracteres usados (+ e /) são caracteres especiais e aparecem muito nas expressões regulares, vale a pena usar outros caracteres e substituí-los para imprimir.
Versão um pouco mais legível:
Em certo sentido, estou trapaceando usando $ b como contador no loop intermediário - eu poderia acrescentar espaço em branco no loop acima de $ a e usar substituições regex para esse loop também - mas vou permitir esse pequeno desvio de uma solução de regex puro.
Sem dúvida, uma pessoa assustadora pode transformar isso em um script sed muito mais curto.
fonte
y
paratr
não é óbvia, e quanto à maneira "enquanto" pode ir antes ou depois ...Lua,
294302292 bytesGolfe:
Ungolfed:
fonte
or 6
após aread()
chamada, o que economiza quatro bytes :-)(...)
que não funciona mais para mim no Lua 5.1.4.Tela , 63 bytes
Experimente aqui!
fonte