Wyniki
Ta sekcja zostanie wypełniona po wprowadzeniu zgłoszeń.
Normalna
1. bopjesvla Perl 54
2. edc65 Javascript (ES6) 91
3. name language score
4. name language score
5. name language score
Runda bonusowa
1. name language score
2. name language score
3. name language score
4. name language score
5. name language score
Karel J. AlphaBot
tło
Popularnym kursem wprowadzającym do Javy jest Karel J. Robot (używam go osobiście). Robot wchodzi w interakcję z siatką ulic (dodatnie współrzędne Y) i alei (dodatnie współrzędne X), a także sygnałów dźwiękowych, które można umieszczać i przechowywać na siatce (zwróć uwagę, że Karel i wszelkie sygnały dźwiękowe mogą istnieć tylko na siatce zwrotnica). Karel (robot) wykonuje tylko pięć czynności: przesuń się o 1 do przodu, skręć w lewo na miejscu, odłóż sygnał dźwiękowy, podnieś dźwięk i wyłącz się.
Na moich zajęciach z informatyki jednym z naszych pierwszych zadań było zaprogramowanie Karela, aby nauczył się, jak skręcać w prawo, zawracać i wykonywać połączoną akcję przesuwania się do przodu o 1 i odkładania sygnału dźwiękowego. Kilka dni później zadaniem było wykorzystanie tych metod i napisanie nowych metod do tworzenia liter alfabetu.
Oczywiście po zakończeniu tego zadania napisałem więcej metod tworzenia każdej litery alfabetu, a także dziesięciu cyfr, i planuję wymyślić, jak zrobić z robota swego rodzaju edytor tekstu, w którym ciąg znaków zostanie wprowadzony do STDIN, a robot umieści brzęczyk na siatce w sposób przypominający litery.
Za każdym razem, gdy pisałem private void draw#
dla każdej postaci #
, dodawałem po niej komentarz, który wskazywałby mi skróty do sekwencji poleceń, których potrzebuję.
Mam do dyspozycji następujące polecenia (zapisane w pseudokodzie) (wyjaśnienie - są to jedyne przydatne polecenia).
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"
Warunki
Robot musi postępować w następującej kolejności.
- Robot rozpoczyna się w lewym dolnym rogu prostokąta 5xN o minimalnej powierzchni, do której zostanie narysowana litera.
- Robot rysuje literę.
- Robot przesuwa się do prawego dolnego rogu prostokąta.
- Robot przesuwa się o dwa pola w prawo i musi być skierowany na północ / w górę
Przeanalizujmy przykład. Załóżmy, że chcemy rysować A
. Lokalizacją robota jest litera wskazująca jego kierunek (północ, południe, wschód, zachód). Litera jest pisana wielkimi literami, jeśli robot znajduje się w miejscu z sygnałem dźwiękowym, a małe litery, jeśli robot znajduje się w miejscu bez sygnału dźwiękowego. o
reprezentuje plamy z sygnałami dźwiękowymi i .
reprezentuje plamy bez sygnałów dźwiękowych.
Jak zobaczymy później, A
jest to.
.ooo.
o...o
ooooo
o...o
o...o
Oto jedno z możliwych rozwiązań.
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
Ostateczne mml
uzupełnienie czwartego punktu jest niejawne, ponieważ pojawia się w każdej liście i ponieważ nie chcę wracać i dodawać kolejnych dwóch kolumn do wszystkiego w powyższym proponowanym rozwiązaniu.
Tak więc jednym rozwiązaniem A
jest pddrdddammmrdmrdddmrddddlmml
.
Pamiętaj, że to nie musi być twoje rozwiązanie. Twój algorytm może przechodzić przez każdą kolumnę, umieszczając sygnały dźwiękowe w odpowiednich miejscach i nie polegając na tym, gdzie zostały umieszczone lub zostaną umieszczone inne sygnały dźwiękowe. Bez względu na algorytm, robot może umieścić tylko jeden sygnał dźwiękowy na pole na siatce.
Program
Twój program weźmie na wejściu siatkę 5xN tego, co jest siatką dla litery. Zauważ, że na wejściu nie ma robota; zakłada się, że robot znajduje się w lewym dolnym (południowo-zachodnim) rogu, twarzą na północ.
Wynikiem będzie ciąg liter, który jest skrótem dla sekwencji.
Przykładowe dane wejściowe
.ooo.
o...o
ooooo
o...o
o...o
o...o.ooooo
o...o...o..
ooooo...o..
o...o...o..
o...o.ooooo
Przykładowe wyniki
pddrdddammmrdmrdddmrddddlmml
prmmmlmlmmdrdrdddlmlmmdrdrmmmdrddddlmmlprdddlmldmmrmrmdmlmldmmrdrddddrmmmdlmml
To jest golf golfowy, chłopaki. Obowiązują standardowe zasady CG. Najkrótszy kod w bajtach wygrywa.
Runda bonusowa
Zasady
Jeśli chcesz wziąć udział w rundzie bonusowej, upewnij się, że Twoje kody działają sprawnie! Poniżej znajduje się biblioteka wszystkich 5 x 5 liter, które mój program tworzy podczas działania. Celem rundy bonusowej jest napisanie programu, który wypisze sekwencję ABCDEFGHIJKLMNOPQRSTUVWXYZ
zawierającą jak najmniej ruchów. Brak danych wejściowych do STDIN. Kod będzie oceniany nie według długości kodu, ale według „wyniku ruchu”. Wynik ruchu ma na celu zniechęcenie algorytmów wymiatających, które odwiedzają każdy punkt prostokąta.
d: 1
l: 1
m: 4
p: 1
r: 1
Listy
.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
Należy postępować zgodnie z tą samą procedurą, co w przypadku oryginalnego wyzwania: litery należy rysować pojedynczo, z odstępem między literami.
Obowiązują standardowe zasady CG. Wpis o najniższym wyniku ruchu wygrywa.
Podsumowując, oba kody będą zasadniczo wykonywać te same czynności. Pierwszy kod powinien zawierać minimalną liczbę bajtów w kodzie, a drugi kod powinien wykorzystywać najmniejszą liczbę ruchów.
Odpowiedzi:
perl -p0,
60 5654 + 2 bajtygolf
notatki
źródło
@-
, może być przydatne, aby podzielić się wskazówkami na temat gry w golfa w pytaniu Perl !JavaScript (ES6), 91
Pierwsza próba podstawowego wyzwania.
Przetestuj poniższy fragment kodu w przeglądarce zgodnej z EcmaScript 6 (testowany w przeglądarce Firefox)
Pokaż fragment kodu
BONUS CHALLENGE ANSWER - Wynik dla pełnego alfabetu = 869
Przetestuj uruchomienie poniższego kodu w przeglądarce Firefox (lepszy pełny ekran)
Ponieważ nie lubię problemów ze stałym wejściem / wyjściem , możesz spróbować swoich danych wejściowych. Pamiętaj tylko, że zostaną wydrukowane tylko litery.
źródło