Schreiben Sie zwei Programme in Form eines Dreiecks (dh einer Pyramide).
Das erste sollte ein nach oben zeigendes Textdreieck mit einer Mindestbasisbreite von drei Zeichen sein. Es hätte also eine Struktur wie
X
XXX
oder
X
XXX
XXXXX
oder
X
XXX
XXXXX
XXXXXXX
oder größer. Jedes X
der Zeichen muss durch die Zeichen Ihres tatsächlichen Codes ersetzt werden. Dies kann alles andere als ein Zeilenabschluss sein (daher können die Zeichen X
Leerzeichen sein). Alle X
müssen ersetzt werden, und die Leerzeichen und Zeilenumbrüche, die zur Bildung der Dreiecksform beitragen, müssen unverändert bleiben.
Das zweite Programm muss dieselbe Größe und Form haben wie das erste, außer dass das Dreieck nach unten zeigt.
Also wenn dein erstes Programm so aussieht
X
XXX
XXXXX
dann würde dein zweites programm so aussehen
yyyyy
yyy
y
wobei jedes y
Zeichen ein Zeichen ist, das Sie mit Ihrem tatsächlichen Code ausfüllen müssen (wahrscheinlich anders als Ihr X
Code). Die Leerzeichen und Zeilenumbrüche müssen auch hier gleich bleiben.
Ihre Aufgabe ist es, diese Programme so zu schreiben, dass sie jeweils den Titel eines bestimmten Beatles- Songs ausgeben (zur Standard- oder nächsthöheren Alternative) , ohne dass Eingaben erforderlich sind. Dieser Wikipedia-Artikel dient als offizielle Songliste für die Beatles. Die Ausgabe sollte einer der Titel genau wie aufgelistet sein, z I Want You (She's So Heavy)
.
Dies ist jedoch trotz der seltsamen Dreieck-Programmanforderung ziemlich einfach. Wir werden also aus den ersten beiden Programmen ein weiteres Programm formen, das einen weiteren Songtitel ausgeben muss.
Durch Kombinieren von drei Kopien der beiden Dreiecksprogramme können wir ein drittes Programm in Form eines Sechsecks erstellen.
Wenn die Basisbreite Ihres ersten Programms drei wäre, würde das so aussehen:
XyyyX
XXXyXXX
yyyXyyy
yXXXy
Wenn die Basisbreite fünf wäre, würde das so aussehen:
XyyyyyX
XXXyyyXXX
XXXXXyXXXXX
yyyyyXyyyyy
yyyXXXyyy
yXXXXXy
Dieses Programm (wenn es mit Leerzeichen und Zeilenumbrüchen wie die anderen ausgeführt wird) muss genau wie die ersten beiden Programme einen anderen Beatles-Songtitel ausgeben. Ebenfalls:
- Ihre drei Programme müssen unterschiedliche Songtitel ausgeben.
- Es sind nur Songtitel mit einer Länge von mindestens acht Zeichen zulässig.
- Sie können nur einen auswählen
Revolution
,Revolution 1
undRevolution 9
weil die Titel so ähnlich sind. - Sie müssen Ihre drei Lieblings-Beatles-Songs auswählen. (Nun, versuchen Sie es.)
Beachten Sie, dass tatsächliche Programme erforderlich sind. Funktionen sind nicht erlaubt. Das Lesen des eigenen Quellcodes in einem Programm ist ebenfalls nicht gestattet.
Beispiel
Wenn dein erstes Programm war
A
AAA
AAAAA
es könnte ausgeben Across the Universe
.
Dann dein zweites Programm
bbbbb
bbb
b
könnte ausgeben Revolution
.
Dann kombiniert in das Sechseck-Programm
AbbbbbA
AAAbbbAAA
AAAAAbAAAAA
bbbbbAbbbbb
bbbAAAbbb
bAAAAAb
die Ausgabe könnte sein Get Back
.
Wertung
Die Einsendung mit der kleinsten Dreiecksgrundbreite gewinnt. Im wahrscheinlichen Fall von Unentschieden gewinnt die Einreichung mit der größten summierten Länge ihrer drei Songtitel.
quelle
Antworten:
GolfScript, Breite = 9 Zeichen, Titel = 33 Zeichen
Hexagon
Drucke lassen es sein . (9 Zeichen)
Probieren Sie es online aus.
Wie es funktioniert
Das Token
"Let It Be"
in der ersten Zeile drückt die Zeichenfolge Let It Be auf den Stapel.Die zweite Zeile beginnt mit
}
einem undokumentierten "Superkommentar", der die Ausführung sofort abbricht.Vor dem Beenden druckt GolfScript den Inhalt des Stapels.
X Dreieck
Druckt Twist and Shout . (15 Zeichen)
Probieren Sie es online aus.
Wie es funktioniert
Die ersten beiden Zeilen drücken den String
"\n }"
, den der Befehl;
aus dem Stapel entfernt.Die restlichen Zeilen enthalten , die Token
"Twi"
,"st an"
und"d Shout"
, die die Zeichenfolge schieben Torsion und Ruf in drei Stücke.Vor dem Beenden druckt GolfScript den Inhalt des Stapels.
Y Dreieck
Druckt gestern . (9 Zeichen)
Probieren Sie es online aus.
Wie es funktioniert
Die Token
Let
,It
undBe
in der ersten Zeile sind nicht definiert, so dass sie nichts zu tun.Die drei folgenden Zeilen enthalten die Token
"Yeste"
,"rda"
und"y"
, die die Zeichenfolge schieben gestern in drei Stücke.Das
}
in der letzten Zeile macht nichts; das programm wäre sowieso beendet gewesen.GolfScript druckt erneut den Inhalt des Stapels, bevor es beendet wird.
quelle
Befunge -93, Breite = 13
15, Titel = 3124ZeichenEin Stromausfall letzte Nacht hat mich daran gehindert, dies zu aktualisieren, als ich es herausgefunden habe, aber ich habe es geschafft, die Breite des Dreiecks zu reduzieren und die Länge des Songs zu erhöhen!
Hinweisprogramm: "Dig a Pony", 10 Zeichen:
Erläuterung
Ich nutzte WIRKLICH Befunges Wrap-Around-Trick und wählte "Dig a Pony" speziell, weil es ein Leerzeichen an der 6. Position hatte. Dies ermöglicht es dem Programmfluss, sich durch den Songnamen zu bewegen . Probieren Sie es im Online-Interpreter aus, um zu sehen, wie es funktioniert.
Hinweisprogramm: "If I Fell", 9 Zeichen:
(Der Punkt ist irrelevant und wird nur eingefügt, damit die anderen Zeilen angezeigt werden.)
Erläuterung
Die einzigen relevanten Zeilen sind hier die ersten beiden. Ich habe den Wrap-Around-Trick verwendet (der Anweisungszeiger wird sofort nach links gesendet), um ein weiteres Zeichen einzupressen. Die zweite Zeile gibt den Songnamen aus.
Kombiniert: "Mein Auto fahren", 12 Zeichen:
Hier ist das Gleiche, aber mit Linien, die das Sechseck und die Dreiecke anzeigen.
Erläuterung
Hier kommen die dritte und vierte Zeile des nach unten weisenden Dreiecks ins Spiel. Am Rand der beiden Dreiecke befinden sich mehrere Umleitungen, mit denen der Befehlszeiger durch diese beiden Zeilen bewegt und "Mein Auto fahren" auf den Stapel geschoben wird. Anschließend wird es mit dem
>:#,_@
Bit im nach oben zeigenden Dreieck ausgedruckt . Im Übrigen werden sowohl das linke als auch das rechte nach oben zeigende Dreieck verwendet.Es könnte eine Möglichkeit geben, mehr von dem leeren Raum zu nutzen, aber ich denke, meine Zeit wird besser für andere Fragen aufgewendet. : P
quelle
Python 2, Breite = 51
Ja, na ja ... Python.
Python-Kommentare beginnen mit
#
, daher sind die meisten Zeilen nur Kommentare. Für das nach oben gerichtete Dreieck ist das einzige, was ausgeführt wirdwelche druckt
Sgt. Pepper's Lonely Hearts Club Band
.Für das nach unten gerichtete Dreieck führen wir aus
was druckt
Yellow Submarine
, da die funktionid
wahr ist.Wenn wir die Programme jedoch kombinieren, geschieht alles, was in der Reihenfolge der beiden obigen Zeilen geschieht. Da das Ende der ersten Zeile gesetzt ist
id=0
, was jetzt falsch ist, ist das Endergebnis, dass wir ein(Reprise)
bis zum Ende heften undSgt. Pepper's Lonely Hearts Club Band (Reprise)
als unsere Ausgabe erhalten (Calvin sagte, dass dies in Ordnung ist ).quelle
Schneemann 1.0.2 , Breite = 13
Endlich! Eine Herausforderung, bei der Schneemann gedeihen kann! : D: D
Die Schrägstriche dienen hauptsächlich ästhetischen Zwecken und können größtenteils durch Leerzeichen ersetzt werden (dies würde es jedoch viel langweiliger erscheinen lassen). Für Kommentare sind einige Schrägstriche erforderlich.
Programm A (Ausgabe:)
Birthday
:Das ist ziemlich einfach. Das erste Zeichen (
}
) richtet unsere aktiven Variablen ein, dann gibt es eine Reihe von Kommentaren / No-Ops. Dann speichert es den String"Sun King\n "
und wirft ihn sofort ab (via*
, indem es ihn in einem Permavar speichert, den wir nie benutzen). Dann speichert es"Birthday\n"
.]]
ist hier ein No-Op, da[[ foo ]]
es sich bei Snowman um einen Blockkommentar handelt, aber da es[[
vorher keine Übereinstimmung gibt]]
(innerhalb von Programm A selbst), tut es einfach nichts. Dann8AaL
packt die ersten 8 Zeichen des Strings,sP
druckt er und[[
Kommentare aus dem Rest des Programms (weil auch hier gibt kein passender ist]]
.Programm B (Ausgabe:)
Get Back
:Das ist auch ziemlich unkompliziert.
?}
ist äquivalent zu}
(?
setzt einfach alle Variablen auf inaktiv, was hier ein No-Op ist, aber später wieder wichtig). Dann speichert es den String"Get Back"
, macht ein paar No-Ops (//
bis zum Zeilenende steht immer ein Kommentar) und druckt übersP
.Volles Programm
Ausgang ist, Sie haben es erraten,
Sun King
1 .Schauen wir uns diese Zeile für Zeile an:
Linie 1
Dies setzt unsere aktiven Variablen, genau wie die vorherigen Programme (wir können jetzt sehen, dass das
?
benötigt wird, um sie nicht einfach ein- und wieder auszuschalten}}
). Der Rest der Zeile ist auskommentiert.Zeilen 2-4
Bemerkungen...
Zeile 5
Hier speichern wir den String
"Sun King//"
und starten dann einen Blockkommentar. Dies überspringt im Wesentlichen alles bis zum nächsten]]
.Zeile 6
Noch im Blockkommentar ...
Zeile 7
Hier brechen wir für kurze Zeit aus dem Blockkommentar aus, um den Code auszuführen
8AaLsP
. Dies wird tatsächlich aus Programm A wiederverwendet. Da ich alle Songs ausgewählt habe, die 8 Buchstaben lang sind, kann ich für das kombinierte Programm einfach denselben Code verwenden.Dann wird es etwas knifflig. Das nächste Mal, wenn wir aus dem Blockkommentar auftauchen, sehen wir es
8AaLsP
erneut. Dieses Mal sind jedoch alle Variablen undefiniert (wirsp
haben print im Consume-Modus aufgerufen , wodurch die Variablen entfernt werden). Daaal
zwei Argumente erforderlich sind und diesmal nur eines (8
), tritt ein Fehler auf und die Variablen bleiben unverändert.In ähnlicher Weise
sp
der Begegnungen8
, erkennt es die falsche Art ist gedruckt werden, und die Blätter der Variablen wie.Zeilen 8-13
Immer noch in diesem Blockkommentar stecken ...
Zeile 14
Schließlich versuchen wir, dieselbe print-first-8-chars-Sequenz erneut aufzurufen, und es schlägt erneut fehl, wodurch zwei weitere Fehler erzeugt werden. (Das
8
bedeutet, dass die Variablen jetzt8 8
sind. Dies ist die richtige Anzahl von Variablenaal
, aber immer noch nicht die richtigen Typen.)1: sowie vier Laufzeitfehler
SnowmanException
an STDERR, aber gemäß Meta spielt das keine Rolle .quelle
The slashes are mostly for aesthetic purposes, and the majority of them can be replaced with spaces (but that would make it look a whole lot more boring)
Aber es macht es ein bisschen schwieriger zu> <> , width = 11
2D-Sprachen haben eine gute Zeit mit dieser Herausforderung.
Pfeil nach oben
Der Programmablauf beginnt von links oben und verläuft nach rechts. Das wird nach oben
/
reflektiert, und da> <> toroidal ist, erscheinen wir wieder von unten. Wir schlagen dann eine andere an,/
überlegen erneut und schieben die ZeichenklawstaC
einzeln im Zeichenfolgenmodus auf den Stapel""
. Zum Schluss reflektieren wir nach oben und treffen eine>l?!;o
Schleife, was der idiomatische Weg ist, den gesamten Stapel in> <> zu drucken.Dies wird gedruckt
Catswalk
.Pfeil nach unten
Im Prinzip dasselbe, indem Sie die Zeichen von Anfang an verschieben und mithilfe von Spiegeln und Pfeilen den Programmfluss steuern. Dies wird gedruckt
Birthday
.Kombiniert
Die relevanten Teile sind oben (ich habe viele Linien in der Mitte ausgeschnitten). Mit dem
/
Pfeil von oben nach oben spiegeln wir nach oben und drehen uns umher, aber da wir jetzt den Pfeil nach unten darunter haben, wird stattdessen ein Teil dieses Codes ausgeführt. Wir verschieben dann die relevanten Zeichen in den Stapel und verwenden die Ausgabeschleife vom Pfeil nach unten.Dies wird gedruckt
Hey Jude
.quelle
Python 2, Größe 21
Für dieses Programm ist ein ANSI-kompatibles Terminal erforderlich (DOS ANSI.SYS muss angegeben werden), da ich
\x1b[2J
die Konsole lösche UND den Cursor nach oben links bewege. Um dies mit anderen ANSI-Terminals kompatibel zu machen, drucken Sie\x1b[1J\x1b[H
(dies kann immer noch in ein Sechseck der Größe 21 passen). Ich konnte diesen Teil nicht testen, da ich kein Terminal habe, das ANSI-Escape-Codes druckt.Ich denke, das Programm sieht ziemlich cool aus, ähnlich dem radioaktiven Symbol (obwohl die ASCII-Schattierung impliziert, dass die Farben rückwärts sind) oder dem Symbol der Scharfschützenwaffe von Metroid Prime: Hunters.
Es tat fit in Größe 17, aber ich hatte vergessen ,
id=0
in dem Pfeil nach oben. Ich glaube nicht, dass ich es wieder verkleinern kann, da das alles in einer Zeile sein muss ...Auch Sp3000 wird die Idee zur Verwendung gutgeschrieben
id
.Aufwärtspfeil:
Pfeil runter:
"Hey Jude" ist einer meiner Lieblingslieder der Beatles, aber ich kenne wirklich nicht so viele. Ich habe die beiden anderen Songs, die ich benutze, noch nie gehört. Es ist kein Genre, das ich oft höre.
quelle
\x1b[2J
funktioniert nur mit ANSI.SYS; es sollte nichts in anderen Terminals tun. Auch\x1b[;H
erwartet eine ganze Zahl nach dem Semikolon. Verwenden Sie, um die Standardeinstellung für Zeile und Spalte auf 1 festzulegen\x1b[H
. 2.\x1b[1J\x1b[H
und\x1b[H\x1b[J
sollte auf allen ANSI-Terminals funktionieren. 3. Auf Linux-Terminals können Sie\x1bc
das Terminal einfach mit zurücksetzen. 4.\x1b
Kann durch ein buchstäbliches ESC-Byte ersetzt werden, falls dies zur Verbesserung Ihrer Punktzahl beiträgt.C (gcc) , Basisbreite = 17
Oben, "Hey Jude"
Probieren Sie es online!
Unten "Streichholzschachtel"
Probieren Sie es online!
Sechseck, "Michelle"
Probieren Sie es online!
quelle
Gawk, Basislänge 15
Ich habe gerade herausgefunden, dass es mit mawk nicht funktioniert : /
Es ist nicht zu schwierig, aber als ich in den 70ern aufgewachsen bin und die Beatles immer noch überall auf Sendung sind, musste ich das beantworten. Zuerst dachte ich, awk sei nicht geeignet, aber dann kam es zu mir.
Da diese Skripte BEGIN- und / oder END-Blöcke enthalten, muss ihnen mitgeteilt werden, dass es keine Eingabe gibt, um den END-Block auszuführen. Dies kann erreicht werden, indem entweder Strg-D gedrückt wird, nachdem sie gestartet wurden, oder indem sie folgendermaßen gestartet werden:
was ich für bequemer halte.
echo | awk -f script.awk
wird auch funktionieren, aber wenn ich eine leere Zeile als Eingabe verwendet hätte, hätte ich dies ganz anders gemacht.Nach oben zeigen, druckt für niemanden (Youtube Link)
Der wesentliche Code ohne Kommentare ist dies. Da
n
es nicht definiert ist, gibt es "Für niemanden" aus, wenn es von selbst aufgerufen wird.Zeigt nach unten und druckt Blackbird
Der wesentliche Code ist dies. Wenn
n
definiert wurde, gibt es nichts aus. Ich habe die nette Ausgabe mit einem Zeilenumbruch nach jedem Spurnamen verstärkt, weil ich den Raum dazu hatte und es in der Konsole besser aussieht.n
wird dabei definiert; Das wird für das Hexagon benötigt.Sechseck, druckt Ich bin so müde
Der wesentliche Code. Jetzt wird endlich das Geheimnisvolle
n
ausgenutzt. Dan
in der ersten Zeile definiert ist, druckt das nach oben zeigende Dreieck die alternative Ausgabe und das nach unten zeigende Dreieck die Leere.quelle