Nossa cobra clássica desenvolveu um desequilíbrio dos hormônios do crescimento . Para piorar, seu rabo está congelado no lugar! Dada a entrada direcional conforme especificado em Figure 1
, escreva um programa para determinar onde ele crescerá.
Figura 1. Entrada direcional.
Especificações do programa
- Leia o caractere de entrada por caractere
STDIN
. - Depois de ler um personagem, coloque a cobra na
STDOUT
. Inclua uma linha em branco entre cada vez que imprimir uma cobra. - A cobra consiste em
<>v^
e uma cabeça. A cabeça da serpente pode ser qualquer personagem rodada de sua escolha, comoo
,0
,O
, ou☺
. - Qualquer combinação de
wasd
é válida para entrada. - Seu programa não deve assumir que a entrada esteja dentro de um determinado comprimento.
- A cobra pode se sobrepor, sobrescrevendo
<>v^
. Veja exemplos de mecânica de crescimento de cobras. - O espaço em branco à direita é bom, mas sua cobra deve parecer correta.
Pontuação
Isso é código-golfe . Sua pontuação é o número de caracteres no seu programa. Menor pontuação ganha!
Cobras de exemplo:
Entrada: ddddssaassdddddww
Saída:
>>>>v
v
v<< ☺
v ^
>>>>>^
Entrada: dddsssaaawww
Saída:
☺>>v
^ v
^ v
^<<<
Entrada: dddsssdddddasddddwww
Saída:
>>>v
v ☺
v ^
>>>>v< ^
>>>>^
Entrada: dddwwdddssssaaaaaaaaawww
Saída:
>>>v
☺ ^ v
^ >>>^ v
^ v
^<<<<<<<<<
Entrada: ddddssssaawwddddd
Saída:
>>>>v
v
>>>>>☺
^ v
^<<
Entrada: dddddssaawwwwddddd
Saída:
>>>>>☺
^
>>>^>v
^ v
^<<
Entrada:
ddddaaaasssssdddddddddddwwwwwaaaasssssdddddddddddwwwwwwwwwwsssssaaaasssssdddddddwwwwwddddssaaaasssddddaaaassssssssssdddwwwwwwwddddswaaaassssddaasssaaaaaaaaaawwwwddddssssaaaaaaaaaaawwwwddddsssssssssaaaa
Saída:
v
v
v
v
v
v<<<< v<<<< v<<<< >>>>v
v v ^ v ^ ^ v
v v ^ v ^ v<<<<
v v ^ v ^ v
v v ^ v ^ v
>>>>>>>>>>>>>>>>>>>>>v<<<<
v
v
v v<<<<
v v ^
v v
>>>>v >>>>v v v
^ v ^ v v v<<
^ v ^ v v v
^ v ^ v v v
^<<<v<<<<<<<<<<<<<
v
v
v
v
O<<<<
Respostas:
Ruby, 207 caracteres
Ungolfed:
(o lambda para
a
gravações de volta porque a linha na qual a atribuição acima grava não está mais no quadro)fonte
ECMAScript 6 Javascript (399
401431)Precisa ser executado em um navegador compatível com o ECMAScript 6 devido às funções de seta.
Aqui estão as violações que foram alteradas para serem executadas em qualquer navegador (comum), não usando as funções de seta. Eles também imprimem em um
textarea
:Versão Golfed
Gif Animado:
Um dos exemplos do OP:
O exemplo do Stretch Maniac :
Ungolfed
Aqui está uma versão (ligeiramente) ungolfed de algum tempo antes de eu começar realmente a jogar:
fonte
convert
. Muito fácil :)sed, 71
Golfscript,
165126A mesma abordagem da minha resposta anterior, mas posicionando corretamente o cursor antes e depois. Estou bastante orgulhoso da abordagem ao posicionamento do cursor - basicamente, ele primeiro executa a cobra ao contrário, sem imprimir caracteres.
fonte
echo "dddddssaawwwwddddd" | sed -e 's/w/\^\x1B[D\x1B[A/g' -e 's/a/<\x1B[2D/g' -e 's/s/v\x1B[S\x1B[D/g' -e 's/d/>/g' -e 's/$/@/'
não dá a saída correta para mim.\n
s após o@
comando para que o prompt vá para outro lugar.Java - 646
Pode muito bem ser o primeiro!
Aposto que todos podem vencer isso.
un (tipo de) jogou golfe
Menor -
input - dddsssdddwwwwaaaaaaaassssssssssddddddddddddddddd
input - dddsssdddddasddddwww
meu favorito - dwdwdwddaasassdddddwdwdwddsdswawaasassdddddddwdwdwddsdswawaasassddddwwwwwwwssssssdsdddwwwwddaassddaassddddsssdddwdwdwddaasasassddddwwwwssssssssasasaaawdwwdwddwwdddddddwdwdwddsdswawaasassddddddddddwwdwwwwaasssassdsdddddddwdwdwwwwasasssssssssssdwwwwwwwddd
fonte
C # 607
"Ungolfed" com espaço em branco (isso não será mantido em sincronia com a versão em golfe):
fonte
Python 3: 259 bytes
Decidi guardar a cobra em um ditado, com coordenadas para as chaves. Em seguida, encontre e repita o intervalo de saída, substituindo espaços em branco.
PS. Meu primeiro golfe :) Deixe-me saber se minha resposta é inadequada
fonte
O
vez de☺
economiza 2 bytes.☺
é um arenque vermelho.☺
não era contado como 3 bytes.O
, então não me preocuparia. Está claro no código que ele ainda funcionaria para qualquer outro caractere, mas o uso☺
permite executar convenientemente os casos de teste do desafio sem alterações.#coding=utf-8
. Observe que#coding=utf-16
não funciona. Portanto,☺
deve ser contado como 3.Python 2.7 - 274 bytes
Versão ungolfed
fonte
SyntaxError: invalid syntax
.05AB1E ,
35343028 bytesUsa
0
como cabeça da cobra.-4 bytes graças a @Grimy .
Experimente online (não há suíte de testes para todos os casos de teste de uma só vez, porque não há como redefinir o Canvas, portanto as saídas se sobrepõem ..).
Explicação:
Veja esta dica 05AB1E (seções Como compactar cadeias de caracteres que não fazem parte do dicionário? E Como compactar números inteiros grandes? ) Para entender por que
.•₃º•
é"adsw"
eŽO^
é6240
.Quanto a uma breve explicação sobre o Canvas embutido
Λ
e seus três argumentos:Primeiro argumento: length (s): o tamanho das linhas que queremos desenhar. Como precisamos ter em mente a sobreposição, usamos o tamanho 2 para cada personagem e um 1 adicional para a cabeça da cobra.
Segundo argumento: string (s): os caracteres que queremos exibir. Quais são os caracteres nesse caso, anexados ao caractere de cabeça da cobra.
Terceiro argumento: direção (ões): as direções em que essas linhas de caracteres com o comprimento especificado devem ser traçadas. Em geral, temos as direções
[0,7]
que mapeiam essas direções:É por isso que temos o número inteiro[ ← , → , ↓ , ↑ ] respectivamente.
6240
para as direçõesConsulte esta dica 05AB1E para obter uma explicação mais detalhada sobre o Canvas integrado
Λ
.fonte
γ
é necessário. Isso parece funcionar muito bem.Perl - 394
Não é o mais curto, mas vence pelo menos Javascript, C # e Java.
Alguns truques:
Coisas que doem:
fonte
C - 273 bytes - com entrada interativa!
O campo é impresso toda vez que um caractere é inserido e cresce se a cabeça da cobra se aproximar da borda. Não sei como é portátil - alguém na Internet disse que o getch () não funciona em plataformas não Windows. Difícil dizer se o ASCII 1 também parecerá um rosto sorridente.
A versão para golfe é bastante irritante, pois não há como sair do programa normalmente. Control-C não funciona para mim. Por outro lado, a versão não-gasta termina se um caractere diferente de 'w', 'a', 's' ou 'd' for inserido.
Os chamados "não destruídos":
fonte
05AB1E , 23 bytes
Experimente online!
Explicação:
fonte