Schreiben Sie einen quadratischen Codeblock mit einer Breite von N Zeichen und einer Höhe von N Zeichen für eine positive ganze Zahl N.
Zum Beispiel kann Ihr N 5 sein und der Block sieht so aus:
ThisI
sMy5B
y5Cod
eBloc
kOkay
Dieser Block muss sich wie folgt verhalten:
Wenn die oberste Zeile extrahiert und als Programm ausgeführt wird, muss der genaue Text
row
auf stdout gedruckt werden.Zum Beispiel
ThisI
würde druckenrow
.Wenn die linke Spalte extrahiert und als Programm ausgeführt wird, muss der genaue Text
col
auf stdout gedruckt werden.Zum Beispiel
Tsyek
würde druckencol
.Wenn die Hauptdiagonale von der oberen linken zur unteren rechten Ecke extrahiert und als Programm ausgeführt wird, muss der genaue Text
dia
auf Standard gedruckt werden.Zum Beispiel
TMCoy
würde druckendia
.Wenn der gesamte Block als Programm ausgeführt wird, einschließlich der Zeilenumbrüche (mit einem optionalen abschließenden Zeilenumbruch), muss der genaue Text
blk
auf stdout gedruckt werden.Beispielsweise,
ThisI sMy5B y5Cod eBloc kOkay
würde drucken
blk
.
Einzelheiten
- Alle vier Programme werden in derselben Programmiersprache ausgeführt.
- Die N 2 -Zeichen im ursprünglichen Block können alles andere als Zeilenabschlusszeichen sein .
- Wenn Ihre Sprache keine Standardausgabe hat, können Sie eine andere häufig verwendete Ausgabemethode verwenden. Die Methode muss für alle vier Programme gleich sein.
Die Einreichung, deren ursprünglicher Block die wenigsten unterschiedlichen Zeichen enthält (ohne Zeilenumbrüche), gewinnt. Tiebreaker geht zur Vorlage mit dem kleineren N.
quelle
Antworten:
> <> (Fisch) , 3 eindeutige Zeichen (N = 2000)
Der Code verwendet
1
und-
, um beliebige Zahlen auf den Stapel zu setzen undp
den Code basierend auf den drei obersten Zahlen auf dem Stapel (selbst-) zu modifizieren. ZB würde das Setzen einer!
at-Position0 0
wie003b*p
in normalem> <> aussehen undp1-
damit werden111-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1--11-11-p
.Nach der Änderung umschließt der Anweisungszeiger (IP) den Code und führt den geänderten Teil aus. Im "Block" -Fall wird die IP zur weiteren Änderung umgeleitet (dann zurückgeleitet), um sich vom "Zeilen" -Fall zu unterscheiden. Im "Zeilen" -Fall werden die gleichen zwei Umleitungen ausgeführt, zwischen denen sich jedoch kein Code befindet, sodass sie keine Auswirkung haben.
Die endgültig generierten Codes für die 4 Fälle (ohne die unveränderten
p1-
Teile):Die Codegröße beträgt 4 MB und der Code ist hier zugänglich . (Es gibt keine Schwierigkeiten, es auszuführen.)
Auf das Generator-Programm python3 kann hier zugegriffen werden .
quelle
CJam,
1312 eindeutige Zeichen, N = 5So unkompliziert wie es nur geht
UPDATE : Konvertierter Speicherplatz in
a
(in diesem Fall No-Op), wie von Runner112 hervorgehobenProbieren Sie es hier online aus
quelle
a
, um die Anzahl der eindeutigen Zeichen auf 12 zu senken, oder?Bash, 19 eindeutige Zeichen, N = 19
trap echo\ row exit
. Dies wirdecho row
ausgeführt, wenn das Skript beendet wird (nur die erste Zeile).ttt=t echo col
t=tt echo dia
echo blk
dann beendet wird.quelle
exit
eindeutige Zeichen um 4 reduzieren. Sie können denexit
Befehl auch in die nächste Zeile verschieben und alle Semikolons durch Leerzeichen ersetzen.> <> , 14 eindeutige Zeichen, N = 10
Ganz einfach in einer 2D-Sprache. Der einzige schwierige Teil ist, dass wir
\
zwischenrow
und unterscheiden müssenblk
.quelle
p1-
die eine Drei- Zeichen- Lösung ergeben, deren Generierung jedoch sehr ärgerlich ist (und wahrscheinlich nicht gewinnt).Brainfuck, 2 eindeutige Zeichen, N = 378
Mit möglicherweise leichtem Knicken der Regeln.
Das Programm ist ein bisschen umfangreich, daher hier ein Link zu Pastebin .
Die
row
,col
unddia
Programme sind einfach. Sie inkrementieren einfach die Byte-Zelle, bis der richtige ASCII-Code erreicht ist, und geben dann aus. Wenn der Brief bereits bestanden wurde, wird er inkrementiert, bis die Zelle überläuft, sodass er wieder bei 0 beginnen kann.Im
blk
Programm tritt die leichte Regelbiegung auf. Um den "exakten Textblk
" zu drucken, der in der Challenge angefordert wurde, werden Backspaces (ASCII-Code 8) verwendet, für die die Anzeigekonsole / das Terminal erforderlich ist. Jedes Mal , wenn fehlerhafte Werte aus denrow
/col
/dia
Programmen gedruckt werden, ich sicherstellen , dass sie durch die Ausgabe ein paar Backspace Steuercodes entfernt werden. Zur Vereinfachung habe ich sichergestellt, dass alle fehlerhaften Werte, die an einem Punkt ausgegeben werden, Teil des druckbaren ASCII-Bereichs sind.quelle
C (gcc) , 26 eindeutige Zeichen, N = 29
Probieren Sie es online!
quelle
Rubin, 24 einzigartige Zeichen, N = 17
Probieren Sie es online!
quelle