Zeile, Spalte, Diagonale, Block


13

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:

  1. Wenn die oberste Zeile extrahiert und als Programm ausgeführt wird, muss der genaue Text rowauf stdout gedruckt werden.

    Zum Beispiel ThisIwürde drucken row.

  2. Wenn die linke Spalte extrahiert und als Programm ausgeführt wird, muss der genaue Text colauf stdout gedruckt werden.

    Zum Beispiel Tsyekwürde drucken col.

  3. Wenn die Hauptdiagonale von der oberen linken zur unteren rechten Ecke extrahiert und als Programm ausgeführt wird, muss der genaue Text diaauf Standard gedruckt werden.

    Zum Beispiel TMCoywürde drucken dia.

  4. Wenn der gesamte Block als Programm ausgeführt wird, einschließlich der Zeilenumbrüche (mit einem optionalen abschließenden Zeilenumbruch), muss der genaue Text blkauf 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.


In Anbetracht , dass es sicherlich eine Lösung in einiger Zwei-Symbol esoterische Sprache, ich glaube , das wird eine Lösung worden , dass quetschen sie in die kleinsten N.
xnor

@xnor Wahrscheinlich. Eine einsprachige Antwort ist jedoch nicht ausgeschlossen. Dennoch ist diese Bewertungsmethode interessanter als der kleinste N-Gewinn zuerst.
Calvins Hobbys

Wie kann Lenguage arbeiten, wenn das Zeilen- und das Spaltenprogramm dieselbe Länge haben?
xnor

@xnor Ah, du hast recht. Es würde nicht funktionieren.
Calvins Hobbys

Können blockfremde Programme auch mit einem abschließenden Zeilenumbruch enden?
Jimmy23013

Antworten:


6

> <> (Fisch) , 3 eindeutige Zeichen (N = 2000)

Der Code verwendet 1und -, um beliebige Zahlen auf den Stapel zu setzen und pden Code basierend auf den drei obersten Zahlen auf dem Stapel (selbst-) zu modifizieren. ZB würde das Setzen einer !at-Position 0 0wie 003b*pin normalem> <> aussehen und p1-damit werden 111-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):

row:      "wor"\ooo;

column:   "loc"ooo;

diagonal: "dia"ooo;

block:    "wor"\"klb"ooo;

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 .


14

CJam, 13 12 eindeutige Zeichen, N = 5

"row"
cd;"a
oaiaa
l"aa;
"blk"

So unkompliziert wie es nur geht

UPDATE : Konvertierter Speicherplatz in a(in diesem Fall No-Op), wie von Runner112 hervorgehoben

Probieren Sie es hier online aus


2
Jedes Feld kann in ein Zeichen verwandelt werden a, um die Anzahl der eindeutigen Zeichen auf 12 zu senken, oder?
Runer112

@ Runer112 Verdammt! Danke für den Tipp!
Optimierer

8

Bash, 19 eindeutige Zeichen, N = 19

trap echo\ row exit
t=t trap exit      
t=t echo blk       
exit               
=                  
t    e             
      c            
e      h           
c       o          
h                  
o         d        
           i       
c           a      
o                  
l                  
  • Die erste Reihe ist trap echo\ row exit. Dies wird echo rowausgeführt, wenn das Skript beendet wird (nur die erste Zeile).
  • Die erste Spalte ist ttt=t echo col
  • Die Diagonale ist t=tt echo dia
  • Der vollständige Block wird ausgeführt, indem der in der ersten Zeile eingerichtete EXIT-Handler abgebrochen und echo blkdann beendet wird.

1
Mit Kleinbuchstaben können Sie exiteindeutige Zeichen um 4 reduzieren. Sie können den exitBefehl auch in die nächste Zeile verschieben und alle Semikolons durch Leerzeichen ersetzen.
Jimmy23013

6

> <> , 14 eindeutige Zeichen, N = 10

"wor"\ooo;
     "    
l a  k    
o  i l    
c   db    
"    "    
o    oo   
o    o o  
o    o  o 
;    ;   ;

Ganz einfach in einer 2D-Sprache. Der einzige schwierige Teil ist, dass wir \zwischen rowund unterscheiden müssen blk.


Randomra-Noten, p1-die eine Drei- Zeichen- Lösung ergeben, deren Generierung jedoch sehr ärgerlich ist (und wahrscheinlich nicht gewinnt).
Sp3000,

3

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, colund diaProgramme 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 blkProgramm tritt die leichte Regelbiegung auf. Um den "exakten Text blk" 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 den row/ col/ diaProgrammen 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.


2

C (gcc) , 26 eindeutige Zeichen, N = 29

*w;main(){printf(w?w:"row");}
ww;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;/*;;;;;;;;;;;;;;;;;;;;;;;;
m;;m;;;;;;;;;;;;;;;;;;;;;;;;;
a;;;a;;;;;;;;;;;;;;;;;;;;;;;;
i;;;;i;;;;;;;;;;;;;;;;;;;;;;;
n;;;;;n;;;;;;;;;;;;;;;;;;;;;;
(;;;;;;(;;;;;;;;;;;;;;;;;;;;;
);;;;;;;);;;;;;;;;;;;;;;;;;;;
{;;;;;;;;{;;;;;;;;;;;;;;;;;;;
p;;;;;;;;;p;;;;;;;;;;;;;;;;;;
r;;;;;;;;;;r;;;;;;;;;;;;;;;;;
i;;;;;;;;;;;i;;;;;;;;;;;;;;;;
n;;;;;;;;;;;;n;;;;;;;;;;;;;;;
t;;;;;;;;;;;;;t;;;;;;;;;;;;;;
f;;;;;;;;;;;;;;f;;;;;;;;;;;;;
(;;;;;;;;;;;;;;;(;;;;;;;;;;;;
";;;;;;;;;;;;;;;;";;;;;;;;;;;
c;;;;;;;;;;;;;;;;;d;;;;;;;;;;
o;;;;;;;;;;;;;;;;;;i;;;;;;;;;
l;;;;;;;;;;;;;;;;;;;a;;;;;;;;
";;;;;;;;;;;;;;;;;;;;";;;;;;;
);;;;;;;;;;;;;;;;;;;;;);;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
};;;;;;;;;;;;;;;;;;;;;;;};;*/
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;*w="blk";

Probieren Sie es online!


1

Rubin, 24 einzigartige Zeichen, N = 17

trap(0){$><<:row}
rr=a=:blk;%;00000
a0a00000000000000
p00p0000000000000
(000(000000000000
00000000000000000
)00000)0000000000
{000000{000000000
$0000000$00000000
>00000000>0000000
<000000000<000000
<0000000000<00000
:00000000000:0000
c000000000000d000
o0000000000000i00
l;;trap(0){$><<a;
};000000000000;{}

Probieren Sie es online!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.