Scores
Dieser Abschnitt wird ausgefüllt, sobald Beiträge eingereicht wurden.
Normal
1. bopjesvla Perl 54
2. edc65 Javascript (ES6) 91
3. name language score
4. name language score
5. name language score
Bonusrunde
1. name language score
2. name language score
3. name language score
4. name language score
5. name language score
Karel J. AlphaBot
Hintergrund
Ein beliebter Einführungskurs in Java ist Karel J. Robot (ich benutze es selbst). Der Roboter interagiert mit einem Raster von Straßen (positive ganzzahlige y-Koordinaten) und Alleen (positive ganzzahlige x-Koordinaten) sowie mit Signaltönen, die auf dem Raster platziert und gespeichert werden können (beachten Sie, dass Karel und alle Signaltöne nur in Gittern existieren können Punkte). Karel (der Roboter) darf nur fünf Aktionen ausführen: um 1 vorwärts gehen, nach links abbiegen, einen Piepser abstellen, einen Piepser aufheben und sich selbst ausschalten.
In meiner Informatik-Klasse bestand eine unserer ersten Aufgaben darin, Karel so zu programmieren, dass er lernt, wie man nach rechts dreht, sich umdreht und die kombinierte Aktion ausführt, um 1 vorwärts zu gehen und einen Piepser abzustellen. Einige Tage später bestand die Aufgabe darin, diese Methoden zu verwenden und neue Methoden zu schreiben, um Buchstaben des Alphabets zu erzeugen.
Natürlich habe ich nach Abschluss dieser Aufgabe mehr Methoden geschrieben, um jeden Buchstaben des Alphabets sowie die zehn numerischen Ziffern zu erstellen, und ich habe vor, herauszufinden, wie man aus dem Roboter eine Art Textverarbeitungsprogramm mit einer Zeichenfolge erstellt würde in STDIN eingegeben und der Roboter würde Piepser auf eine Art und Weise auf das Gitter legen, die den Buchstaben ähnelte.
Jedes Mal, wenn ich private void draw#
für ein Zeichen schrieb #
, fügte ich einen Kommentar hinzu, der Abkürzungen für die Befehlsfolge enthielt, die ich benötigte.
Ich habe die folgenden Befehle (in Pseudocode geschrieben) zur Verfügung (Klarstellung - dies sind die einzigen nützlichen Befehle).
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"
Bedingungen
Der Roboter muss in der folgenden Reihenfolge vorgehen.
- Der Roboter startet in der unteren linken Ecke des 5xN-Rechtecks mit der minimalen Fläche, in die der Buchstabe gezeichnet wird.
- Der Roboter zeichnet den Brief.
- Der Roboter bewegt sich in die untere rechte Ecke des Rechtecks.
- Der Roboter bewegt sich zwei Felder nach rechts und muss nach Norden / oben zeigen
Lassen Sie uns ein Beispiel durcharbeiten. Angenommen, wir möchten zeichnen A
. Der Standort des Roboters ist der Buchstabe, der seine Richtung angibt (Norden, Süden, Osten, Westen). Der Buchstabe wird in Großbuchstaben geschrieben, wenn sich der Roboter an einem Ort mit einem Piepser befindet, und in Kleinbuchstaben, wenn sich der Roboter an einem Ort ohne Piepser befindet. o
Stellt Spots mit Pieptönen dar und Stellt .
Spots ohne Pieptöne dar.
Wie wir später sehen werden, A
ist dies.
.ooo.
o...o
ooooo
o...o
o...o
Hier ist eine mögliche Lösung.
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
Das endgültige mml
Ausfüllen des vierten Aufzählungszeichens ist implizit, weil es in jedem Buchstaben vorkommt und weil ich nicht noch einmal zwei Spalten zu allem in der oben vorgeschlagenen Lösung hinzufügen möchte.
So eine Lösung zu machen A
ist pddrdddammmrdmrdddmrddddlmml
.
Beachten Sie, dass dies nicht Ihre Lösung sein muss. Ihr Algorithmus kann jede Spalte durchgehen, indem er die Piepser an den richtigen Stellen platziert und sich nicht darauf verlässt, wo andere Piepser platziert wurden oder platziert werden. Unabhängig von Ihrem Algorithmus kann der Roboter nur einen Piepser pro Feld auf dem Gitter platzieren.
Das Programm
Ihr Programm verwendet als Eingabe ein 5xN-Raster des Rasters für den Buchstaben. Beachten Sie, dass am Eingang kein Roboter vorhanden ist. Es wird angenommen, dass sich der Roboter in der unteren linken Ecke (Südwesten) in Richtung Norden befindet.
Die Ausgabe ist die Folge von Buchstaben, die die Abkürzung für die Folge sind.
Beispieleingaben
.ooo.
o...o
ooooo
o...o
o...o
o...o.ooooo
o...o...o..
ooooo...o..
o...o...o..
o...o.ooooo
Beispielausgaben
pddrdddammmrdmrdddmrddddlmml
prmmmlmlmmdrdrdddlmlmmdrdrmmmdrddddlmmlprdddlmldmmrmrmdmlmldmmrdrddddrmmmdlmml
Das ist Codegolf, Jungs. Es gelten die Standard-CG-Regeln. Kürzester Code in Bytes gewinnt.
Bonusrunde
Regeln
Wenn Sie an der Bonusrunde teilnehmen möchten, sorgen Sie dafür, dass sich Ihre Codes effizient bewegen! Unten finden Sie eine Bibliothek mit allen 5x5-Buchstaben, die mein Programm erstellt, wenn es ausgeführt wird. Ziel der Bonusrunde ist es, ein Programm zu schreiben, das eine Sequenz druckt ABCDEFGHIJKLMNOPQRSTUVWXYZ
, die so wenig Züge wie möglich enthält. Es erfolgt keine Eingabe in STDIN. Der Code wird nicht nach der Länge des Codes, sondern nach seiner "Bewegungsbewertung" bewertet . Die Bewegungsbewertung soll Sweeper-Algorithmen verhindern, die jeden Punkt im Rechteck aufsuchen.
d: 1
l: 1
m: 4
p: 1
r: 1
Briefe
.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
Das gleiche Verfahren wie bei der ursprünglichen Herausforderung muss angewendet werden: Buchstaben müssen nacheinander mit einem Leerzeichen zwischen den Buchstaben gezeichnet werden.
Es gelten die Standard-CG-Regeln. Der Eintrag mit der niedrigsten Zugpunktzahl gewinnt.
Zusammenfassend wird gesagt, dass beide Codes im Wesentlichen die gleichen Aktionen ausführen. Der erste Code sollte eine minimale Anzahl von Bytes im Code haben, und der zweite Code sollte die geringste Anzahl von Zügen verwenden.
Antworten:
Perl -p0,
60 5654 + 2 BytesGolf
Anmerkungen
quelle
@-
, könnte eine nützliche sein, um auf die Tipps für das Golfen in Perl Frage zu teilen !JavaScript (ES6), 91
Ein erster Versuch zur grundlegenden Herausforderung.
Testlauf des folgenden Snippets in einem EcmaScript 6-kompatiblen Browser (getestet in Firefox)
Code-Snippet anzeigen
BONUS-HERAUSFORDERUNGS-ANTWORT - Ergebnis für vollständiges Alphabet = 869
Teste das wnippet unten in Firefox (besserer Vollbildmodus)
Da ich keine Fixed-Input- / Fixed-Output- Herausforderungen mag , können Sie Ihre Eingabe ausprobieren. Denken Sie daran, dass nur Buchstaben gedruckt werden.
quelle