Pontuações
Esta seção será preenchida quando os envios forem inseridos.
Normal
1. bopjesvla Perl 54
2. edc65 Javascript (ES6) 91
3. name language score
4. name language score
5. name language score
Rodada de Bônus
1. name language score
2. name language score
3. name language score
4. name language score
5. name language score
Karel J. AlphaBot
fundo
Um curso introdutório popular para Java é Karel J. Robot (eu mesmo estou usando). O robô interage com uma grade de ruas (coordenadas inteiras positivas em y) e avenidas (coordenadas inteiras positivas com x), além de bipes, que podem ser colocados e armazenados na grade (observe que Karel e quaisquer bipes só podem existir na rede pontos). Karel (o robô) deve executar apenas cinco ações: avançar 1, virar à esquerda no lugar, pousar um sinal sonoro, pegar um sinal sonoro e desligar-se.
Na minha aula de Ciência da Computação, uma de nossas primeiras tarefas foi programar Karel para aprender a virar à direita, dar a volta e executar a ação combinada de avançar por 1 e soltar um sinal sonoro. Uma tarefa alguns dias depois era usar esses métodos e escrever novos métodos para produzir letras do alfabeto.
Naturalmente, depois que terminei essa tarefa, escrevi mais métodos para criar todas as letras do alfabeto, além dos dez dígitos numéricos, e planejo descobrir como criar uma espécie de processador de texto no robô, onde uma string seriam inseridos no STDIN e o robô colocaria sinais sonoros na grade de maneira que se parecesse com as letras.
Toda vez que escrevia private void draw#
para cada personagem #
, adicionava um comentário que dizia abreviações para a sequência de comandos que eu precisava.
Tenho os seguintes comandos (escritos em pseudocódigo) à minha disposição (esclarecimento - estes são os únicos comandos úteis ).
Turn Left
Rotate the robot 90˚ counterclockwise
Abbreviated as "l"
Turn Right
Rotate the robot 90˚ clockwise
Abbreviated as "r"
Move
Move one space forwards
Abbreviated as "m"
Put Beeper
Put a beeper on the spot that Karel is on
Abbreviated as "p"
Drop Beeper
Move, then Put Beeper
Abbreviated as "d"
Turn Around
Turn Left, then Turn Left
Abbreviated as "a"
Condições
O robô deve prosseguir na seguinte ordem.
- O robô inicia no canto inferior esquerdo do retângulo 5xN da área mínima em que a letra será desenhada.
- O robô desenha a letra.
- O robô se move para o canto inferior direito do retângulo.
- O robô move dois espaços para a direita e deve ficar voltado para o norte / para cima
Vamos trabalhar com um exemplo. Suponha que queremos desenhar A
. A localização do robô é a letra que indica sua direção (norte, sul, leste, oeste). A letra é maiúscula se o robô estiver em um local com um sinal sonoro e minúscula se o robô estiver em um local sem um sinal sonoro. o
representa pontos com sinais sonoros e .
representa pontos sem sinais sonoros.
Como veremos mais adiante, A
é isso.
.ooo.
o...o
ooooo
o...o
o...o
Aqui está uma solução possível.
Grids ..... ..... ..... ..... ..... ..... ..... ..... .....
..... ..... ..... ..... ..... ..... ..... ..... .....
..... ..... ..... N.... E.... oE... ooE.. oooE. oooW.
..... ..... N.... o.... o.... o.... o.... o.... o....
n.... N.... o.... o.... o.... o.... o.... o.... o....
Letters p d d r d d d a
..... ..... ..... ..... ..... n.... e.... .E... .oE..
..... ..... ..... ..... N.... o.... o.... o.... o....
ooWo. oWoo. Wooo. Nooo. oooo. oooo. oooo. oooo. oooo.
o.... o.... o.... o.... o.... o.... o.... o.... o....
o.... o.... o.... o.... o.... o.... o.... o.... o....
m m m r d m r d d
.ooE. .oooe .ooos .ooo. .ooo. .ooo. .ooo. .ooo.
o.... o.... o.... o...S o...o o...o o...o o...o
oooo. oooo. oooo. oooo. ooooS ooooo ooooo ooooo
o.... o.... o.... o.... o.... o...S o...o o...o
o.... o.... o.... o.... o.... o.... o...S o...E
d m r d d d d l
A final mml
para completar o quarto marcador está implícita porque aparece em todas as letras e porque não quero voltar e adicionar mais duas colunas a tudo na solução proposta acima.
Assim, uma solução a fazer A
é pddrdddammmrdmrdddmrddddlmml
.
Observe que essa não precisa ser sua solução. Seu algoritmo pode percorrer todas as colunas, colocando os bipes nos locais apropriados e sem depender de onde outros bipes foram colocados ou serão colocados. Não importa qual seja o seu algoritmo, o robô pode colocar apenas um sinal sonoro por espaço na grade.
O programa
Seu programa terá como entrada uma grade 5xN do que é a grade da letra. Observe que não há robô na entrada; presume-se que o robô esteja no canto inferior esquerdo (sudoeste), voltado para o norte.
A saída será a sequência de letras que é a abreviação da sequência.
Entradas de Amostra
.ooo.
o...o
ooooo
o...o
o...o
o...o.ooooo
o...o...o..
ooooo...o..
o...o...o..
o...o.ooooo
Saídas de amostra
pddrdddammmrdmrdddmrddddlmml
prmmmlmlmmdrdrdddlmlmmdrdrmmmdrddddlmmlprdddlmldmmrmrmdmlmldmmrdrddddrmmmdlmml
Isso é código de golfe, pessoal. Aplicam-se as regras padrão de CG. O código mais curto em bytes vence.
Rodada de Bônus
Regras
Se você quiser participar da rodada de bônus, certifique-se de tornar seus códigos eficientes em termos de movimento! Abaixo está uma biblioteca de todas as letras 5x5 que meu programa cria quando é executado. O objetivo da rodada de bônus é escrever um programa que imprima uma sequência ABCDEFGHIJKLMNOPQRSTUVWXYZ
que contenha o mínimo de movimentos possível. Não há entrada para STDIN. O código será classificado não no tamanho do código, mas em sua "pontuação de movimentação". A pontuação do movimento foi projetada para desencorajar os algoritmos de varredura que visitam todos os pontos do retângulo.
d: 1
l: 1
m: 4
p: 1
r: 1
Cartas
.ooo. oooo. ooooo oooo. ooooo ooooo .oooo o...o
o...o o...o o.... o...o o.... o.... o.... o...o
ooooo oooo. o.... o...o oooo oooo. o.ooo ooooo
o...o o...o o.... o...o o.... o.... o...o o...o
o...o oooo. ooooo oooo. ooooo o.... oooo. o...o
ooooo ....o o...o o.... ooooo o...o ooooo oooo.
..o.. ....o o..o. o.... o.o.o oo..o o...o o...o
..o.. ....o oo... o.... o.o.o o.o.o o...o oooo.
..o.. o...o o..o. o.... o...o o..oo o...o o....
ooooo .ooo. o...o ooooo o...o o...o ooooo o....
oooo. oooo. ooooo ooooo o...o o...o o...o o...o
o..o. o...o o.... ..o.. o...o o...o o...o .o.o.
o..o. oooo. ooooo ..o.. o...o .o.o. o.o.o ..o..
oooo. o..o. ....o ..o.. o...o .o.o. o.o.o .o.o.
....o o...o ooooo ..o.. ooooo ..o.. ooooo o...o
o...o ooooo
.o.o. ...o.
..o.. ..o..
.o... .o...
o.... ooooo
O mesmo procedimento que o desafio original deve ser seguido: as letras devem ser desenhadas uma de cada vez com uma separação de espaço entre cada letra.
Aplicam-se as regras padrão de CG. A entrada com a menor pontuação de movimento vence.
Para resumir, ambos os códigos farão essencialmente as mesmas coisas. O primeiro código deve ter um número mínimo de bytes no código e o segundo código deve usar o menor número de movimentos.
Respostas:
perl -p0,
60 5654 + 2 bytesgolfe
notas
fonte
@-
, pode ser útil para compartilhar sobre as dicas de golfe na pergunta Perl !JavaScript (ES6), 91
Uma primeira tentativa para o desafio básico.
Teste a execução do snippet abaixo em um navegador compatível com EcmaScript 6 (testado no Firefox)
Mostrar snippet de código
RESPOSTA DO DESAFIO DE BÔNUS - Pontuação para o alfabeto completo = 869
Teste a execução do wnippet abaixo no Firefox (melhor tela cheia)
Como não gosto de desafios de entrada fixa / saída fixa , você pode tentar sua entrada. Lembre-se, apenas as letras serão impressas.
fonte