Com o grande colapso da economia universal, também caiu a demanda por planetas feitos sob medida. Os Magratheans tiveram que cuidar de receitas mais constantes também de uma classe mais ampla de clientes. Portanto, eles inventaram a cadeia de montanhas que você tem para si mesmo (ou pequenas montanhas desarrumadas) para pessoas com orçamento menor e que não podiam pagar um planeta completo.
As montanhas são de construção de acordo com o plano do cliente (aka séries de dígitos e pontos) e entregue usando ascii-art (que consistem em ,
/
, \
, ^
e v
).
Tarefa
Escreva um programa completo que use a entrada (string única) do STDIN ou como argumento e envie para STDOUT. Este quebra-cabeça é um código de golfe, por isso, mostre alguma tentativa de jogar golfe.
Entrada
Uma série de pontos e dígitos que fornecem a base para a cadeia de montanhas. Cada corda tem exatamente o tempo necessário para sustentar as montanhas e cada pico é dado por um dígito em vez de um ponto, indicando a altura do pico.
Resultado
Uma versão ascii da cadeia de montanhas.
- Cada dígito na entrada representa exatamente um pico (
^
) exatamente na altura indicada pelo dígito (ou seja, 9 é a altura mais alta). - Não deve haver picos adicionais na saída (ou seja, em locais onde há um ponto na entrada).
- As montanhas são de forma triangular, ou seja, as encostas são criadas usando
/
e\
caracteres. - Passagens onde duas montanhas se sobrepõem são modeladas usando o personagem
v
. - Não há novas linhas supérfluas nem linhas em branco.
- Linhas de preenchimento com espaços à direita são opcionais.
Você pode assumir que a entrada fornecida é válida, ou seja, sempre existe uma solução de acordo com as regras (por exemplo, uma entrada de 13..
não resultaria em uma configuração válida e pode ser ignorada). Além disso, em cada lado há exatamente tantos pontos que as montanhas não devem ser cortadas.
Exemplos
A primeira linha mostra a entrada, todas as outras linhas constituem a saída desejada. (Na verdade, as montanhas parecem muito melhores no meu console do que aqui.)
1
^
11
^^
1.2.
^
^/ \
.2.3..
^
^/ \
/ \
.2..3..
^
^ / \
/ v \
...4...3...3..
^
/ \ ^ ^
/ \/ \ / \
/ v \
1
, é\n\n\n\n\n\n\n\n^
permitido?Respostas:
Javascript:
272268233232201192189188178 178caracteresAgradecemos ao @Sam por reduzi-lo de 268 para 233 caracteres e ao @manatwork por mais 1 caractere. @VadimR por apontar um bug.
Versão devidamente identificada e um tanto não-gasta com comentários:
Como você pode observar no código, isso funciona como um autômato celular, onde cada célula verifica um número na entrada, olha para si e para seus dois vizinhos para decidir qual será a próxima iteração. Em cada momento uma célula pode ser uma
^
,/
,\
,v
ou. A entrada fornecida nos casos de teste produz a saída esperada.
Observe que usar a
alert
caixa é péssimo, pois normalmente não possui uma fonte monoespaçada. Você pode copiar e colar o texto daalert
caixa para outro lugar para uma melhor apreciação da saída ou pode substituir a última linhaalert
porconsole.log
, mas como esse é um código-golfe,alert
é mais curto.Além disso, ele não valida nada na entrada. Ele simplesmente considera caracteres não reconhecidos como espaços da mesma maneira que faz
.
(na verdade, também.
é um personagem não reconhecido).fonte
prompt()
parâmetro .delete r; delete s; delete q; delete p; delete t; delete i; delete d;
para garantir que ele não foi poluído.q.trim()?q+'\n':''
poderia serq.trim()&&q+'\n'
, economizando dois. Além disso,i<p.length
poderia serp[i]
.Rubi,
208201189Desafio muito divertido! Aqui está uma solução alternativa para Ruby.
Como bônus, aqui está uma implementação em Ruby do muito inteligente algoritmo "autômato celular" de Victor, com 162 caracteres:
Exemplo de saída:
fonte
$/
para nova linha.C # - 588 caracteres - não tão bom quanto o 321 de Ray!
Exemplo de saída:
Ou um mais longo e complexo ...
Quebra-cabeça brilhante ... não é tão fácil quanto parece ... adorei!
fonte
3
s estão lá. Se você está falando sobre o primeiro, faz parte da encosta.APL, 65 bytes
⍉⌽↑⌽¨h↑¨'^/v\'[1+(~×a)×2+×2+/2-/0,0,⍨h←¯1+⊃⌈/a-↓|∘.-⍨⍳⍴a←11|⎕d⍳⍞]
⍞
esse símbolo retorna a entrada bruta (não avaliada) como uma matriz de caracteres.Resolvendo interativamente, em uma sessão de APL:
fonte
Ruby, 390 caracteres
Uau, este foi complicado.
Acabei tendo que acrescentar uma nova string para cada caractere, usando uma variável
s
que significava "pular próximo caractere" necessária para o processamento^
e\
.Essa saída é exatamente a saída de amostra fornecida para todos os casos de teste.
Gráfico do significado das variáveis:
Tenho certeza de que poderia jogar muito mais, mas tenho que ir agora. Será melhorado mais tarde!
fonte
.2.2.
e não consigo entender por que ela não funciona.Java,
377407Edit: @Victor apontou que este precisava ser um programa completo, então adicionei algumas dezenas de caracteres para torná-lo compilável e executável. Basta passar o "pedido de compra" como o primeiro parâmetro ao executar o programa, da seguinte maneira:
java M ..3.4..6..4.3..
Eu acho que isso é similar em espírito a outras respostas, basicamente apenas atravessa a "ordem das montanhas" repetidamente para todas as alturas possíveis e constrói as montanhas dos topos para baixo. Dessa forma, só tenho que lidar com quatro condições, se não estiver construindo um pico - uma inclinação ascendente '/', descida '\, articulação' v 'ou vazia' '. Eu posso descobrir isso simples olhando para os três espaços centralizados "acima" da minha posição atual na minha construção de cima para baixo.
Observe que, como outros envios, trato qualquer coisa que não seja um número como equivalente a '.' na entrada, por questões de brevidade.
Versão Golfed:
Forma legível por humanos (e sem algumas das transmogrificações equivalentes para obter a forma de golfe):
Desfrutar.
Exemplo de saída:
fonte
class X{public static void main(String[]z){
.Perl 6,
264 224 216 206 200 194124 bytesObrigado a @JoKing por mostrar como /// solução. Isso é aprimorado um pouco depois de corrigir o erro tr /// no Perl 6.
Minha solução original com subst:
Ungolfed:
Resultado:
fonte
s///
etr///
. Eu acho que o último pode ser usado emtr
vez de,s
mas não consigo descobrir como traduzir barras invertidas. Talvez o primeiro tambémPerl,
254 218212Edit: na verdade, é uma correção de bug para trabalhar com o
..3..4...6...5....1
exemplo do ProgrammerDan , mas, no processo, alguns bytes estavam desativados. E teste on-line: https://ideone.com/P4XpMUfonte
C # -
321319Ungolfed e comentou:
Exemplo:
Eu acho que gera um espaço extra antes de cada linha, no entanto.
fonte
CJam,
128117112106104 bytesO CJam é um pouco mais jovem que esse desafio, portanto, essa resposta não compete. Este foi um desafio muito bom! Pelo pouco que sei sobre J e APL, acho que uma submissão nesses seria impressionantemente curta.
Aqui está um caso de teste, que eu acho que contém todas as combinações possíveis possíveis de declives, picos e vales:
que produz
Teste aqui.
Vou adicionar uma explicação para o código mais tarde.
fonte
Pitão,
297234218-63 bytes graças a Jo King
-16 bytes com em
r=s.replace
vez de lambdaRecebe entrada de STDIN. Ungolfed, simplificado:
fonte
s.replace
método sozinho, mas não funciona. Você está apenas realizando substituições na string original desde strings são imutáveisPowershell,
148145 bytesÉ um bom desafio!
Script de teste com menos golfe:
Resultado:
fonte
Pip
-l
, 100 bytes(A linguagem é mais nova que a pergunta, mas provavelmente não vai superar a submissão da APL. Embora eu espere que ela fique muito mais curta.)
Recebe entrada via argumento da linha de comando. Experimente online!
fonte