Einführung
Sie spielen ein Matching-Spiel, bei dem Münzen oben eingeworfen werden und aufgrund der Schwerkraft nach unten (auf die obere Münze) fallen.
Also das
O <- inserting this coin
OO O
OOOOO
wird dies werden
O
OO O
OOOOO
Stellen Sie sich vor, jemand dreht das Board im Uhrzeigersinn. Folgendes wird passieren:
1. Die Platine wird gedreht
OOO
OO
O
OO
O
2. Münzen fallen aufgrund der Schwerkraft herunter
O
O
OO
OO
OOO
Deine Aufgabe
Ihre Aufgabe ist es, die Drehung der Platine durch Schreiben eines Programms oder einer Funktion zu simulieren. Der Einfachheit halber haben wir es nur mit einer Art Münze zu tun (es ist kein allzu aufregendes Matching-Spiel, oder?). Sie können davon ausgehen, dass die Schwerkraft erst nach Abschluss der Drehung angewendet wird. Das Brett wird im Uhrzeigersinn gedreht.
Eingang
Die Eingabe wird eine Zeichenfolge sein, die drei Arten von Zeichen enthält:
- O (Kapital o) ODER 0 (Null) - eine Münze (Sie entscheiden, welche Ihre Lösung unterstützt)
- (Leerzeichen) - ein leeres Feld
- \ n (neue Zeile) - Zeilenende
Der Eingang repräsentiert den Zustand der Karte. Sie können davon ausgehen, dass die Eingabe wohlgeformt ist und einen gültigen Status der Karte enthält (keine Münzen schweben). Die Eingabe kann ein Funktionsparameter sein oder von der Standardeingabe oder aus einer Datei gelesen werden.
Ausgabe
Der Ausgang ist der neue Zustand der Karte nach dem Drehen. Die Ausgabe enthält die gleichen 3 Arten von Zeichen wie die Eingabe. Die Ausgabe kann von Ihrer Funktion zurückgegeben oder in die Standardausgabe oder in eine Datei geschrieben werden.
Stichprobe
Input1:
O
OO O
OOOOO
Output1:
O
O
OO
OO
OOO
Input2:
O O
O O
Output2:
OO
OO
Sie können jede Sprache und die Standardbibliothek der gewählten Sprache verwenden. Das kürzeste Programm in Bytes gewinnt.
quelle
Antworten:
GolfScript,
1412 ZeichenDie Eingabe muss auf STDIN erfolgen, das Zeichen für Münzen kann ein beliebiges Nicht-Leerzeichen sein. Versuchen Sie es hier . Vielen Dank an Peter für den Hinweis auf eine Reduzierung um zwei Zeichen.
quelle
transpose
in Ruby geben, der Arrays mit unterschiedlichen Längen verarbeiten kann ...([nil]*a.map(&:size).max).zip(*a)
. Nicht gut zum Golfen.-1%
mit$
." "
.Javascript (E6) 103
Versuchen Sie zuerst, nur Matrixoperationen. Jede Zeile in der Eingabezeichenfolge muss aufgefüllt werden.
Ganz schön wortreich.
Pseudocode
quelle
[...x]
. Wie heißt es?spread
[ developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Ruby 2.0, 59 Zeichen
Bei der Eingabe über stdin wird davon ausgegangen, dass alle Zeilen die gleiche Länge haben. Dies ist wahrscheinlich viel länger als nötig. Aber zumindest ist es lesbar ...
quelle
$<.map
stattdessen verwenden.1..-1
) auszuwählen, wähle ich einfach 50 Zeilen aus, beginnend mit der zweiten Zeile (1,50
).J -
493124 BytesIch denke, es könnte unnötige Rotationen geben, aber sonst funktioniert es gut. Es ist eine Funktion, die die Eingabe wie angegeben übernimmt, Münzen werden
O
. In der Eingabe ist kein nachgestelltes Leerzeichen erforderlich.Neue Version, inspiriert von der Javascript-Antwort von edc65 :
Erläuterung:
Alte Version:
Erläuterung:
Beispiele (beachten Sie, dass mehrzeilige Zeichenfolgen mit
0 : 0
einer Klammer beginnen und enden):quelle
Haskell - 86
Ich lerne nur, also bin ich sicher, dass dies verbessert werden kann.
Beispiel Input:
Beispielausgabe:
quelle
Python 2 (69)
(79)Nimmt mit Leerzeichen aufgefüllte Eingaben auf, damit alle Zeilen gleich lang sind. Das
split
erzeugt ein Arrat jeder Zeile. Diezip
transponiert effektiv Array. Anschließend werden diesorted
Tupel in lexikografischer Reihenfolge sortiert, sodass alle Münzen auf den Boden fallen. Schließlich drucken wir jede Zeile aus und wandeln sie wieder in eine Zeichenfolge um, obwohl wir sie zuerst umkehren müssen. Diesprint'O'*c.count('O')
ist äquivalent und verwendet die gleiche Anzahl von Zeichen.Beispiellauf:
quelle
C,
167119 BytesDiese kürzere Version ist (leider?) Auch viel deutlicher als das Original.
quelle
Schläger: 130
Sie müssen mit Leerzeichen auffüllen, damit die Linien gleich lang sind.
quelle
C # -
209174 BytesRichtig, ich muss diesen Code Golf irgendwann ausprobieren, wie ich finde. Erstellt eine Funktion (r), die das Board dreht und druckt. Ich schätze, ich betrüge ein bisschen, wenn ich mein Char-Array drucke, aber wenn Sie nicht herausfinden können, warum Sie nicht sauer sein sollten :)
Danke an ProgramFOX für die Tipps :)
Betrügen
quelle
char[]
undy
, um die Anzahl Ihrer Zeichen auf 192 Zeichen zu reduzieren. Außerdem ist es nicht unbedingt erforderlich, das Schlüsselwort anzugeben,static
wenn Sie hier eine Antwort veröffentlichen. Wenn Sie es entfernen, wird Ihre Zeichenanzahl auf 185 Zeichen reduziert.