Mit dem großen Zusammenbruch der Weltwirtschaft sank auch die Nachfrage nach maßgeschneiderten Planeten. Die Magratheaner mussten sich auch um stabilere Einnahmen von einer breiteren Klasse von Kunden kümmern. Aus diesem Grund haben sie die eigene Bergkette (oder kurz Chaos-O-Berge) für Menschen mit geringerem Budget erfunden, die sich keinen vollständigen Planeten leisten konnten.
Die Berge sind bauen nach Kundenwunsch Plan (auch bekannt als Strings von Ziffern und Punkten) und lieferte mit ascii-art (bestehend aus ,
/
, \
, ^
und v
).
Aufgabe
Schreiben Sie ein vollständiges Programm, das Eingaben (einzelne Zeichenfolge) entweder von STDIN oder als Argument empfängt und an STDOUT ausgibt. Bei diesem Puzzle handelt es sich um ein Code-Golfspiel. Zeigen Sie daher bitte einige Golfversuche.
Eingang
Eine Reihe von Punkten und Ziffern, die die Grundlage für die Bergkette bilden. Jede Saite ist genau so lang wie nötig, um die Berge zu stützen. Jeder Gipfel wird durch eine Ziffer anstelle eines Punkts angegeben, der die Höhe des Gipfels angibt.
Ausgabe
Eine ASCII-Version der Bergkette.
- Jede Ziffer in der Eingabe repräsentiert genau einen Peak (
^
) in genau der Höhe, die von der Ziffer angegeben wird (dh 9 ist die höchste Höhe). - Es dürfen keine zusätzlichen Peaks in der Ausgabe vorhanden sein (dh an Stellen, an denen sich ein Punkt in der Eingabe befindet).
- Berge haben eine dreieckige Form, dh Hänge werden mit
/
und\
Zeichen erstellt. - Pässe, bei denen sich zwei Berge überlappen, werden anhand des Zeichens geformt
v
. - Keine überflüssigen Zeilenumbrüche oder Leerzeilen.
- Das Auffüllen von Zeilen mit nachgestellten Leerzeichen ist optional.
Sie können davon ausgehen, dass die angegebene Eingabe gültig ist, dh es gibt immer eine Lösung gemäß den Regeln (z. B. würde eine Eingabe von 13..
nicht zu einer gültigen Konfiguration führen und möglicherweise ignoriert). Außerdem gibt es auf jeder Seite genau so viele Punkte, dass die Berge nicht beschnitten werden dürfen.
Beispiele
Die erste Zeile zeigt den Eingang, alle anderen Zeilen bilden den gewünschten Ausgang. (Eigentlich sehen die Berge in meiner Konsole viel besser aus als hier.)
1
^
11
^^
1.2.
^
^/ \
.2.3..
^
^/ \
/ \
.2..3..
^
^ / \
/ v \
...4...3...3..
^
/ \ ^ ^
/ \/ \ / \
/ v \
1
, ist\n\n\n\n\n\n\n\n^
erlaubt?Antworten:
Javascript:
272268233232201192189188178180 ZeichenVielen Dank an @Sam für die Reduzierung von 268 auf 233 Zeichen und an @manatwork für ein weiteres Zeichen. @VadimR für den Hinweis auf einen Fehler.
Richtig identifizierte und etwas ungolfierte Version mit Kommentaren:
Wie Sie vielleicht aus dem Code entnehmen können, funktioniert dies als zellularer Automat, bei dem jede Zelle nach einer Zahl in der Eingabe sucht, zu sich selbst und zu ihren beiden Nachbarn schaut, um zu entscheiden, was die nächste Iteration sein wird. In jedem Augenblick kann eine Zelle sein ,
^
,/
,\
,v
oder. Die in den Testfällen bereitgestellte Eingabe erzeugt die erwartete Ausgabe.
Beachten Sie, dass die Verwendung der
alert
Box zum Kotzen ist, da sie normalerweise keine monospaced Schriftart hat. Sie können den Text aus demalert
Feld kopieren und an einer anderen Stelle einfügen, um die Ausgabe besser beurteilen zu können, oder Sie ersetzen die letzte Zeilealert
durchconsole.log
. Da dies jedoch Codegolf ist,alert
ist sie kürzer.Außerdem überprüft es nichts in der Eingabe. Nicht erkannte Zeichen werden genauso wie Leerzeichen betrachtet
.
(tatsächlich.
ist dies auch ein nicht erkanntes Zeichen).quelle
prompt()
Parameter initialisieren .delete r; delete s; delete q; delete p; delete t; delete i; delete d;
Muss dem Code ein Präfix voranstellen, um sicherzustellen, dass er nicht verunreinigt wurde.q.trim()?q+'\n':''
könnte seinq.trim()&&q+'\n'
, sparen zwei. Könntei<p.length
auch nur seinp[i]
.Rubin,
208201189Sehr lustige Herausforderung! Hier ist eine alternative Ruby-Lösung.
Als Bonus gibt es hier eine Ruby-Implementierung von Victors sehr cleverem "Cellular Automon" -Algorithmus mit 162 Zeichen:
Beispielausgabe:
quelle
$/
für Newline verwenden.588 Zeichen - aber nicht so gut wie Rays 321!
Beispielausgabe:
Oder eine längere komplexere ...
Geniales Puzzle ... nicht so einfach wie es scheint ... es hat uns sehr gut gefallen!
quelle
3
s sind da. Wenn Sie über den ersten sprechen, ist es ein Teil des Abhangs.APL, 65 Bytes
⍉⌽↑⌽¨h↑¨'^/v\'[1+(~×a)×2+×2+/2-/0,0,⍨h←¯1+⊃⌈/a-↓|∘.-⍨⍳⍴a←11|⎕d⍳⍞]
⍞
Dieses Symbol gibt rohe (nicht ausgewertete) Eingaben als Zeichenarray zurück.Interaktives Lösen in einer APL-Sitzung:
quelle
Ruby, 390 Zeichen
Puh, das hier war schwierig.
Am Ende musste ich für jedes Zeichen eine neue Zeichenfolge anhängen, wobei eine Variable verwendet wurde
s
, die "nächstes Zeichen überspringen" bedeutete^
und für die Verarbeitung benötigt wurde\
.Diese Ausgabe entspricht genau der angegebenen Beispielausgabe für alle Testfälle.
Diagramm der Bedeutung der Variablen:
Ich bin sicher, ich könnte noch viel mehr Golf spielen , aber ich muss jetzt gehen. Wird später verbessert!
quelle
.2.2.
und kann nicht sehen, warum es nicht funktioniert.Java,
377407Edit: @ Victor wies darauf hin, dass dies ein vollständiges Programm sein musste, also habe ich ein paar Dutzend Zeichen hinzugefügt, um es kompilierbar und lauffähig zu machen. Übergeben Sie einfach die "Bestellung" als ersten Parameter, wenn Sie das Programm ausführen:
java M ..3.4..6..4.3..
Ich denke, dies ähnelt im Geiste anderen Antworten, durchquert einfach wiederholt die "Gebirgsordnung" für jede mögliche Höhe und baut die Berge von oben nach unten. Auf diese Weise muss ich mich nur mit vier Bedingungen auseinandersetzen, wenn ich keine Spitze errichte - entweder eine Steigung '/', eine Abwärtssteigung '\, eine Verbindung' v 'oder eine Leerstelle' '. Ich kann das einfach herausfinden, indem ich die drei Felder betrachte, die "über" meiner aktuellen Position in meinem Top-Down-Gebäude zentriert sind.
Beachten Sie, dass ich wie bei anderen Einsendungen alles andere als eine Zahl als äquivalent zu "." in der Eingabe der Kürze halber.
Golf Version:
Vom Menschen lesbare Form (und ohne einige der entsprechenden Transmogrifikationen, um die Golfform zu erreichen):
Genießen.
Beispielausgabe:
quelle
class X{public static void main(String[]z){
.Perl 6,
264 224 216 206 200 194124 BytesVielen Dank an @JoKing für die Anzeige als /// Lösung. Dies ist etwas weiter fortgeschritten, nachdem der Fehler in Perl 6 behoben wurde.
Meine ursprüngliche Lösung mit subst:
Ungolfed:
Ausgabe:
quelle
s///
undtr///
. Ich denke, dass Letzterestr
anstelle von verwendet werden kann,s
aber ich kann es nicht ganz herausfinden, um Backslashes zu übersetzen. Vielleicht auch der erstePerl,
254 218212Bearbeiten: Eigentlich ist es ein Bugfix, mit ProgrammerDans
..3..4...6...5....1
Beispiel zu arbeiten, aber dabei waren einige Bytes deaktiviert. Und Online-Test: https://ideone.com/P4XpMUquelle
C # -
321319Ungolfed und kommentiert:
Beispiel:
Ich denke, es gibt jedoch vor jeder Zeile ein zusätzliches Leerzeichen aus.
quelle
CJam,
128117112106104 BytesCJam ist etwas jünger als diese Herausforderung, sodass diese Antwort nicht konkurriert. Dies war jedoch eine sehr schöne Herausforderung! Nach dem geringen Wissen über J und APL denke ich, dass eine Einsendung in diesen Fällen beeindruckend kurz wäre.
Hier ist ein Testfall, der meiner Meinung nach alle möglichen Kombinationen von Steigungen, Gipfeln und Tälern enthält:
was ergibt
Teste es hier.
Ich werde später eine Erklärung für den Code hinzufügen.
quelle
Python,
297234218-63 Bytes dank Jo King
-16 Bytes mit
r=s.replace
anstelle von LambdaÜbernimmt die Eingabe von STDIN. Ungolfed, vereinfacht:
quelle
s.replace
Methode selbst ausprobiert , aber sie funktioniert nicht. Sie ersetzen nur die ursprüngliche Saite, da die Saiten unveränderlich sindPowershell,
148145 BytesEs ist eine schöne Herausforderung!
Weniger Golf-Testskript:
Ausgabe:
quelle
Pip
-l
, 100 Bytes(Die Sprache ist neuer als die Frage, aber wahrscheinlich wird sie die APL-Einreichung trotzdem nicht übertreffen. Obwohl ich hoffe, dass sie viel kürzer wird.)
Übernimmt die Eingabe über das Befehlszeilenargument. Probieren Sie es online!
quelle