I punteggi
Questa sezione verrà compilata man mano che vengono inserite le domande.
Normale
1. bopjesvla Perl 54
2. edc65 Javascript (ES6) 91
3. name language score
4. name language score
5. name language score
Round bonus
1. name language score
2. name language score
3. name language score
4. name language score
5. name language score
Karel J. AlphaBot
sfondo
Un popolare corso introduttivo a Java è Karel J. Robot (lo sto usando da solo). Il robot interagisce con una griglia di strade (coordinate y positive intere) e viali (coordinate x positive positive) nonché con i segnali acustici, che possono essere posizionati e memorizzati sulla griglia (notare che Karel e tutti i segnali acustici possono esistere solo su un reticolo punti). Karel (il robot) deve solo eseguire cinque azioni: andare avanti di 1, girare a sinistra in posizione, abbassare un segnale acustico, raccogliere un segnale acustico e spegnersi.
Nella mia lezione di Informatica, uno dei nostri primi compiti è stato programmare Karel per imparare a girare a destra, a girare intorno e ad eseguire l'azione combinata di andare avanti di 1 e di emettere un segnale acustico. Un compito qualche giorno dopo era di usare questi metodi e scrivere nuovi metodi per produrre lettere dell'alfabeto.
Naturalmente, una volta terminato questo incarico, ho scritto più metodi per realizzare ogni lettera dell'alfabeto, nonché le dieci cifre numeriche, e ho intenzione di capire come realizzare una sorta di word processor dal robot, dove una stringa verrebbe inserito in STDIN e il robot inserirà i segnali acustici sulla griglia in modo simile alle lettere.
Ogni volta che ho scritto private void draw#per ogni personaggio #, ho aggiunto un commento dopo di esso che mi avrebbe detto abbreviazioni per la sequenza di comandi di cui avrei bisogno.
Ho a disposizione i seguenti comandi (scritti in pseudocodice) (chiarimento: questi sono gli unici comandi utili ).
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"
condizioni
Il robot deve procedere nel seguente ordine.
- Il robot inizia nell'angolo in basso a sinistra del rettangolo 5xN dell'area minima in cui verrà disegnata la lettera.
- Il robot disegna la lettera.
- Il robot si sposta nell'angolo in basso a destra del rettangolo.
- Il robot sposta due spazi a destra e deve essere rivolto a nord / su
Facciamo un esempio. Supponiamo di voler disegnare A. La posizione del robot è la lettera che indica la sua direzione (nord, sud, est, ovest). La lettera è maiuscola se il robot si trova in un punto con un segnale acustico e minuscolo se il robot si trova in un punto senza un segnale acustico. orappresenta i punti con i segnali acustici e .rappresenta i punti senza i segnali acustici.
Come vedremo più avanti, Aè questo.
.ooo.
o...o
ooooo
o...o
o...o
Ecco una possibile soluzione.
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
Il finale mmlper completare il quarto punto è implicito perché appare in ogni lettera e perché non voglio tornare indietro e aggiungere altre due colonne a tutto nella soluzione sopra proposta.
Pertanto, una soluzione da fare Aè pddrdddammmrdmrdddmrddddlmml.
Nota che questa non deve essere la tua soluzione. Il tuo algoritmo può passare attraverso ogni colonna, posizionando i segnali acustici nei posti giusti e senza fare affidamento su dove sono stati posizionati o verranno posizionati altri segnali acustici. Indipendentemente dal tuo algoritmo, il robot può posizionare solo un segnale acustico per spazio sulla griglia.
Il programma
Il tuo programma prenderà come input una griglia 5xN di ciò che è la griglia per la lettera. Si noti che non è presente alcun robot sull'ingresso; si presume che il robot sia nell'angolo in basso a sinistra (sud-ovest), esposto a nord.
L'output sarà la sequenza di lettere che è la scorciatoia per la sequenza.
Ingressi campione
.ooo.
o...o
ooooo
o...o
o...o
o...o.ooooo
o...o...o..
ooooo...o..
o...o...o..
o...o.ooooo
Output di esempio
pddrdddammmrdmrdddmrddddlmml
prmmmlmlmmdrdrdddlmlmmdrdrmmmdrddddlmmlprdddlmldmmrmrmdmlmldmmrdrddddrmmmdlmml
Questo è il codice golf, ragazzi. Si applicano le regole CG standard. Vince il codice più breve in byte.
Round bonus
Regole
Se vuoi partecipare al round bonus, assicurati di rendere i tuoi codici efficienti! Di seguito è una libreria di tutte le lettere 5x5 che il mio programma crea quando viene eseguito. L'obiettivo del round bonus è scrivere un programma che stampi una sequenza ABCDEFGHIJKLMNOPQRSTUVWXYZche contenga il minor numero di mosse possibile. Non c'è input per STDIN. Il codice verrà valutato non in base alla lunghezza del codice ma al suo "punteggio di movimento". Il punteggio di spostamento è progettato per scoraggiare gli algoritmi di sweeper che visitano ogni punto del rettangolo.
d: 1
l: 1
m: 4
p: 1
r: 1
Lettere
.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
È necessario seguire la stessa procedura della sfida originale: le lettere devono essere disegnate una alla volta con una separazione di spazio tra ogni lettera.
Si applicano le regole CG standard. Vince l'ingresso con il punteggio di mossa più basso.
Per riassumere, entrambi i codici faranno essenzialmente le stesse cose. Il primo codice dovrebbe avere un numero minimo di byte nel codice e il secondo codice dovrebbe usare il minor numero di mosse.