Schreiben Sie ein rechteckiges Programm, das die Anzahl der Drehungen ausgibt


63

Der Titel sagt schon alles. Ihr Ziel ist es, ein Programm zu schreiben, das ein Rechteck aus Zeichen bildet, das gedreht und erneut ausgeführt werden kann, um die Anzahl der durchgeführten Umdrehungen um 90 ° gegen den Uhrzeigersinn (CCW) auszugeben.

Zum Beispiel, wenn das 3 × 2-Programm

abc
def

Gelöst das Problem, würde es zunächst 0 und aufeinanderfolgende Drehungen von 90 ° nach links ausgeben

cf    fed    da
be    cba    eb
ad           fc

würde jeweils 1, 2 und 3 ausgeben.

Das Verwenden von Kommentaren macht dies zu einer trivialen Aufgabe für die meisten Sprachen. In Ruby kann dies beispielsweise in einem 7 × 7-Rechteck erfolgen:

###p###
### ###
###1###
p 0#2 p
###3###
### ###
###p###

Die Herausforderung besteht darin, dies ohne jegliche Kommentare zu tun .

Wertung

Ihre Punktzahl ist w * h, die Fläche Ihres Rechtecks. Zeilenumbrüche sind ausgeschlossen. Mit anderen Worten, Code-Golf, Newlines zählen nicht.

Die Punktzahl für das Ruby-Beispiel ist 49 (obwohl es natürlich ungültig ist, da es Kommentare enthält).

Anmerkungen

  • Ihr Code muss wirklich rechteckig sein und darf keine fehlenden Zeichen am Zeilenende enthalten.
  • Wenn Sie möchten, können Sie anstelle von 0 1 2 3 auch andere zulässige "mod 90 °" -Werte ausgeben. 8 ist also in Ordnung anstelle von 0 und -1 ist in Ordnung anstelle von 3 usw.
  • Die Ausgabe kann an die Konsole oder in eine Datei gehen.
  • Es gelten Standardlücken.

Ich hoffe, dass dies, meine erste Frage, einige Leute wirklich fasziniert. Genießen!


1
Um genauer zu sein, was ein Kommentar ist, ist ein Kommentar ein nicht bewerteter Code? Code ohne Analyse?
Isaacg

Ich meine, dass keines der traditionellen "Kommentarzeichen" Ihrer Sprache in einer der 4 gedrehten Versionen vorkommen sollte. Daher sollten in C ++ niemals zwei Schrägstriche nebeneinander angezeigt werden, obwohl einer für sich allein verwendet werden kann. Ebenso mit / *. Ich hoffe das klärt es.
Calvins Hobbys

Was ist mit Sprachen ohne Kommentarzeichen?
Isaacg

Code wie echo 0;exit;ein Bash ist also erlaubt?
Jimmy23013

Wenn es keine Möglichkeit gibt, Kommentare abzugeben, brauchen Sie sich keine Sorgen zu machen. @ user23013 Diese Bash ist in Ordnung.
Calvins Hobbys

Antworten:


43

APL (1x3 = 3)

5!3

Diese Lösung verwendet die zusätzliche Regel, dass jede Ausgabe, die korrekt für Mod 4 ist, funktioniert.

In APL x!yist die Anzahl der Auswahlmöglichkeiten für xElemente y, die allgemein als binom(y,x)oder bezeichnet werden choose(y,x). Lassen Sie uns überprüfen, ob jede Umdrehung die richtige Antwort liefert.

0 Umdrehungen

5!3

Es gibt keine Möglichkeit, 5 Elemente aus 3 auszuwählen, daher erhalten wir 0, die automatisch gedruckt wird.

1 Linkslauf

3
!
5

APL wertet glücklich jede Zeile aus, erhält die Nummer 3, den Operator !und dann die Nummer 5und druckt nur die letzte davon ( 5), was 1 mod 4 ist.

2 Linksdrehungen

3!5

Das ist binom(5,3), was ist (5*4*3*2*1)/(3*2*1)/(2*1) = 10, was ist 2 mod 4.

3 Linksdrehungen

5
!
3

Nach wie vor ist nur der zuletzt ausgewertete Wert von 3printer.

Ich kenne APL nicht wirklich, also sag mir bitte, ob ich eine der Erklärungen falsch verstanden habe. Ich fand es durch Versuch und Irrtum als die erste Sprache auf dieser Seite, dass:

  1. Druckt automatisch das Ergebnis eines Ausdrucks
  2. Bei mehreren Ausdruckszeilen wird nur die letzte ausgegeben
  3. Hat kein Problem damit, dass ein Bediener alleine in einer Leitung steht
  4. Nimmt Betreiber-Infix
  5. Verfügt über einen einstelligen arithmetischen Binäroperator, der asymmetrisch (aRb! = BRa) und flexibel genug ist, um eine Vielzahl von Zahlen zurückzugeben.

Für (5) ging ich die Liste der dyadischen APL- Funktionen durch . Meine erste in Frage kommende Operation war die Ganzzahldivision /von C und Python 2, aber die APL-Division ÷gibt Floats. Potenzierung ist verlockend, aber schlägt fehl , da aund a^bdie gleiche Parität haben , aber durch aufeinanderfolgende Drehungen bekommen (es sei denn b=0, aber dann b^a=0). Boolesche Operatoren wie <give 0und 1180 degrees apart funktionieren nicht. Schließlich fand ich den Binomialoperator !und versuchte es mit Zahlen, bis ich etwas davon bekam.

Vielen Dank an Quincunx für sein Vertrauen, dass es eine kleinere Lösung als 2x2 gibt.


6
Mann, es ist schön, eine Antwort zu sehen, die eine nicht esoterische Sprache verwendet und gewinnt .
Stuart P. Bentley

Ich habe dies als Antwort akzeptiert, da es nach meinen Regeln die kürzeste ist, aber ich möchte die Antwort von Ventero ( codegolf.stackexchange.com/a/33162/26997 ) zu einer sehr ehrenwerten Erwähnung machen. Es folgt dem wahren Wesen des Problems.
Calvins Hobbys

Es funktioniert auch in J in der von Ihnen angegebenen Form.
ɐɔıɐɔuʇǝɥʇs

Tatsächlich druckt APL nicht sowohl die 3 als auch die 5 in der 90 ° -Drehung?
FUZxxl

@FUZxxl Ich denke, das funktioniert nur in ngn / apl.
Adám

40

Rubin, 7 × 9 (63)

 30;p  
0||p=p 
0|0;p;p
;p;p|p;
p=p ||0
;p   p;
2||p =p
 00;1  
     p 

Ein bisschen länger als die andere Lösung, aber zumindest hängt diese Lösung nicht von implizitem Drucken oder Regelmissbrauch ab. Bei allen vier Umdrehungen wird der gesamte Code analysiert und abgesehen von Kurzschlüssen vollständig ausgeführt. Überraschenderweise gibt es absolut keine Symmetrie im Code

Diese Lösung beruht auf der Tatsache, dass es weiterhin möglich ist, die pFunktion (die zum Drucken der Zahlen verwendet wird) aufzurufen, auch wenn bereits eine Variable mit demselben Namen definiert wurde. Zum Beispiel p pruft so etwas wie die Funktion pmit der Variablen pals Argument auf (druckt also den Wert von p).

Erklärung für einige der im Code verwendeten allgemeinen Ausdrücke:

  • p: Wie oben erwähnt, ist dies entweder ein Funktionsaufruf oder eine Variable. Wenn die Variable nicht definiert ist, ruft dies die Funktion pohne Argumente auf, die nichts tut und zurückgibt nil.
  • p p: Druckt die Variable p.
  • p|x: Wenn pes sich um die Funktion handelt, ist diese identisch mit nil|x, die abhängig vom Wert von true / false zurückgibt x. Wenn pes sich um eine Ganzzahl handelt, ist es bitweise oder. In beiden Fällen hat diese Aussage keine Nebenwirkung.
  • p=p||x: Im Grunde das Gleiche wie p||=x(bedingte Zuweisung) mit dem Vorteil, syntaktisch gültig zu sein und ein No-Op zu erhalten, wenn umgekehrt.

Symmetrische Version (9 × 10 = 90)

    p    

  0 * 0  
  00100  
  0||2* p
p *0||0  
  00300  
  0 * 0  

    p    

Dies ist die kürzeste symmetrische Lösung (C 2, wenn die zu druckenden Zahlen ignoriert werden), die mir einfallen könnte.

Skript testen

Hier ist ein Testskript, um den obigen Code zu verifizieren (die #an den Zeilenenden wurden hinzugefügt, damit das Leerzeichen nicht entfernt und vor der Ausführung entfernt wird):

rotate=->s{s.split($/).map{|i|i.chars.reverse}.transpose.map(&:join).join($/)}

s=<<EOD.gsub(?#,"")
 30;p  #
0||p=p #
0|0;p;p#
;p;p|p;#
p=p ||0#
;p   p;#
2||p =p#
 00;1  #
     p #
EOD


puts ">>> 0°"
eval s
puts ">>> 90°"
eval rotate[s]
puts ">>> 180°"
eval rotate[rotate[s]]
puts ">>> 270°"
eval rotate[rotate[rotate[s]]]

10
Es ist vielleicht nicht die kürzeste, aber genau das ist die Art von verschwommener Brillanz, nach der ich gesucht habe: D
Calvins Hobbys

1
@ Calvin'sHobbies Erfüllt dies die Einschränkung "Ihr Code muss wirklich rechteckig sein, ohne fehlende Zeichen am Zeilenende"?
Joshua Taylor

@JoshuaTaylor Es ist rechteckig, einige Zeilen sind nur mit Leerzeichen aufgefüllt (was für mich ein Zeichen ist). Wenn dies aus irgendeinem Grund die Einschränkung nicht erfüllen würde, könnte ich die Zeilen stattdessen auch mit Semikolons
auffüllen

@Ventero Ich hoffe auf jeden Fall, dass dies legal ist; Ich versuche nur zu verstehen, was in der Frage gemeint war.
Joshua Taylor

1
@Ventero Das Auffüllen mit Leerzeichen (oder wirklich etwas anderem als Kommentaren und Zeilenumbrüchen) ist in Ordnung.
Calvins Hobbys

33

GolfScript, 4 (2x2)

43
12

Druckt 4312was ist 0(mod 4). Die Drehungen drucken 3241(1 Mod 4), 2134(2 Mod 4) und 1423(3 Mod 4).

Aufgefordert von:

Wenn Sie möchten, können Sie anstelle von 0 1 2 3 auch andere zulässige "mod 90 °" -Werte ausgeben. 8 ist also in Ordnung anstelle von 0 und -1 ist in Ordnung anstelle von 3 usw.

Es gibt tatsächlich viele Zahlenmengen, für die dies funktioniert. Ich habe diese mit diesem Python-Programm gefunden:

def f(a,b,c,d):
    return int("%i%i%i%i"%(a,b,c,d))
for a in range(10):
    for b in range(10):
        for c in range(10):
            for d in range(10):
                candidate = f(a,b,c,d) % 4 == 0
                candidate &= f(b,d,a,c) % 4 == 1
                candidate &= f(d,c,b,a) % 4 == 2
                candidate &= f(c,a,d,b) % 4 == 3
                if candidate:
                    print("%i, %i, %i, %i"%(a,b,c,d))

Obwohl das Programm 0s ausgibt (was wahrscheinlich nicht funktionieren würde), haben die gültigen Lösungen die Form

ab
cd

Wo a∈{4,8}, b∈{3,7}, c∈{1,5,9}, d∈{2,6}. IE, (a,b,c,d)∈{4,8}×{3,7}×{1,5,9}×{2,6}die 24 Lösungen ist.


7
Sehr schlau. Ehrlich gesagt dachte ich, dass zusätzliche Regel harmlos war.
Calvins Hobbys

4
@Everybody Beachten Sie, dass dies nicht das kleinstmögliche Programm ist. Ein 2x1 ist möglich und es ist das kleinstmögliche. Also mach dich an die Arbeit!
Justin

1
@isaacgYour score is w*h, the area of your rectangle. Newlines are excluded. In other words, code-golf, newlines not counted.
undergroundmonorail

2
@ Quincunx Na dann poste es!
Tomsmeding

1
Unter der Annahme, dass die Sprache hier einfach die letzte ausgewertete Zahl ausgibt, glaube ich, dass es für keine eine 1 * n-Lösung gibt n. Dies liegt daran, dass die Parität der ganzen Zahl der Parität der am weitesten rechts stehenden Ziffer entspricht, Rotationen im Abstand von 90 Grad jedoch unterschiedliche Paritäten ergeben müssen. Ist 2*2also das Minimum für diesen Ansatz.
xnor

30

Python - 23 x 23 = 529

Ok, diese Frage hat bereits einen Gewinner, aber es gibt noch keine Python-Lösung. Also habe ich darüber nachgedacht - schwer! - und einen Weg gefunden, um den sperrigen printBefehl in jede Richtung arbeiten zu lassen, ohne Fehler zu erzeugen, wenn er aus einer der anderen Richtungen analysiert wird.

Der Durchbruch war die folgende Zeile:

'"\'';forward_code;"';backward_code;""\'"''

Während das forward_codeausgeführt wird, backward_codeist das Teil eines Strings und wird daher nicht gedruckt. Dies ist genau umgekehrt, wenn Sie rückwärts lesen.

Kombiniert mit zwei weiteren Richtungen und der Feinabstimmung, um alle Anführungszeichen korrekt abzugleichen, erhalte ich die folgende Lösung:

''"''""''"''"''"'"''""'
"  ""                 "
"  \\                 "
'"\'';print 1;"'""\'"''
'"\''"';3 tnirp;""\'"''
"  ;""                "
"  p'                 "
'  r;                 '
'  i2                 '
"  n                  "
"  tt                 "
'   n                 '
'  4i                 '
"  ;r     .-=<>=-.    "
' \"p    /__----__\   '
"  ';'  |/ (')(') \|  "
"  ""    \   __   /   "
'  ""    .`--__--`.   '
"  \\   /    :|    \  "
'  ''  (_)   :|   (_) '
'  ""    |___:|____|  '
"  ''    |_________|  "
''"''""''"''"''"'"''""'

Edit: Ich habe einen Weg gefunden, mit all dem Whitespace umzugehen. ;)


Gibt es eine Möglichkeit, p=printdie Datei auch einzufügen, da Sie momentan so viel Leerzeichen haben? (Python 3 natürlich)
isaacg

@isaacg: Das glaube ich nicht. Die Definition p=printist auch langwierig. Und was noch wichtiger ist: Sie können nicht wiederverwenden, pnachdem Sie den Code gedreht haben!
Falko

Ich glaube du hast recht. Es ist aber zwei schlimm.
Isaacg

12
Nominiert: Best Use of Whitespace Award.
Primo

24

BASIC, 64

Gewinnt nicht, aber hier ist es trotzdem. (Getestet in Chipmunk Basic )

?0:END:?
:::::::1
D:::::::
N::::::E
E::::::N
:::::::D
3:::::::
?:DNE:2?

Hinweis: ?ist eine Abkürzung für PRINTverschiedene Dialekte von BASIC. Obwohl der Code viele Syntaxfehler enthält, verhindert die ENDAnweisung in der ersten Zeile, dass sie vom Interpreter gesehen werden.


1
Ihre Punktzahl beträgt 64 bzw. 16. Zeilenumbrüche zählen nicht. Warum also nicht die Antwort aufteilen?
Justin

Oh, ich habe das ein bisschen verpasst. Ich hätte die Antworten geteilt, wenn sie nicht gemeinsam den letzten Platz belegt hätten. Es scheint sonst nicht viel Sinn zu geben :-)
zimperliche Ossifrage

Du bist nicht mehr zuletzt :-)
Justin

Ich würde Ihnen Bonuspunkte für eine schöne, runde Anzahl von Charakteren geben. Die tatsächliche +1 ist für den kreativen Einsatz von ENDobwohl :)
CompuChip

21

Pyth , 9 Zeichen (3x3)

0 1

3 2

In Pyth wird standardmäßig alles gedruckt, es sei denn, vor ihm steht ein Leerzeichen. Zeilen nach der ersten Zeile dienen der Benutzereingabe und werden in diesem Programm nicht ausgewertet.

Ein anderer Weg, um 9 Zeichen zu bekommen:

"0"
3 1
"2"

Pyth 1.0.5 , 4 Zeichen

Während die letzten Änderungen an Pyth die Generierung von zweistelligen Zahlen erschwert haben (eine Änderung, die ich rückgängig machen möchte), haben ältere Versionen von Pyth die einfache Generierung zweistelliger Zahlen, kombiniert mit dem impliziten Drucken und der Tatsache, dass alle Zeilen außer der ersten Zeile werden ignoriert, ergibt sich folgende Lösung:

32
41

Drucke 32,21,14,43.


Das macht einfach Spaß. +1
siehe auch

Scheiße, ich hatte gehofft, dass es nicht so einfach ist. Ihnen fehlen 3 Zeichen in Ihrer mittleren Zeile, aber ich vermute, das liegt an der automatischen Formatierung hier.
Calvins Hobbys

@ Calvin'sHobbies Sorry, ich verstehe. Es hat meine Leerzeichen gekostet.
Isaacg

@Quincunx Oh, ich habe diesen Teil der Wertung verpasst. Danke für die Korrekturen.
Isaacg

18

Befunge, 16

0.@1
@@@.
.@@@
3@.2

Erläuterung: Digits von 0auf 9die entsprechende Zahl auf den Stapel zu schieben, .erscheint ein Wert aus dem Stapel und druckt sie als eine Ganzzahl, und @das Programm beendet.

( hier getestet )


Gibt dies nicht die Anzahl der Drehungen gegen den Uhrzeigersinn aus?
Siehe auch

@TheRare Ja. Es tut. Das sollte es tun.
Justin

1
Ich scheine völlig blind zu sein. Habe deswegen eine +1.
Siehe auch

Befunge !!! Immer noch meine Lieblingssprache aller Zeiten, ewig so!
steffen

16

Piet, 49

Ein Piet-Programm

Ich habe darauf hingewiesen, nur gelbe und rote Farben zu verwenden und zu versuchen, es grob symmetrisch zu machen. Beim Drehen werden 0, 1, 2 oder 3 ausgegeben. Das Beenden des Programms in Piet ist schwierig und nimmt leider etwa die Hälfte des Bildbereichs ein.


1
Scheint das richtige Werkzeug für den Job zu sein.
Robert Fraser

O_o, ich habe geweint, etwas über diese Programmiersprache herauszufinden! Gerade jetzt. Schön. In vielerlei Hinsicht! Danke!
steffen

15

GNU dc , 6 (3x2)

Ich denke, dies ist die kürzeste Antwort, um die "mod 90 °" -Regelentspannung nicht zu erfordern:

3z1
0p2

Ausgänge 0, 1, 2oder 3für jede Drehung.

Für die 0, 2und 3Drehungen, die pknallen einfach und drucken die letzte Nummer wörtliche auf den Stapel geschoben wurde. Für die 1Drehung zschiebt der die aktuelle Stapeltiefe (1) auf den Stapel, dann pknallt der und druckt ihn aus.


1
Also würde 311 / 0p2 auch funktionieren?
Neil

@ Neil Ja, gut. Hat jedoch keinen Einfluss auf das Golfergebnis :)
Digital Trauma

Dies wirkt sich zwar negativ auf die Golfwertung aus, da die Zeilenumbrüche nicht gezählt werden, die Schrägstriche jedoch.
M.Herzkamp

@ M.Herzkamp Meine Vermutung war, dass Neil gemeint hat 311\n0p2, wo \nein Newline-Charakter ist. Andernfalls wäre es im Kontext von dc bedeutungslos.
Digitales Trauma

10

GolfScript, 9 (3x3)

0}1
} }
3}2

Art, die Regeln zu missbrauchen. Das }Programm wird beendet, wenn keine Übereinstimmung vorliegt {, und der Inhalt des Stapels wird am Programmende gedruckt.


Vergiss nicht, den Zeilenvorschub als Zeichen zu zählen.
Isaacg

2
@isaacgYour score is w*h, the area of your rectangle. Newlines are excluded. In other words, code-golf, newlines not counted.
undergroundmonorail

Ich wusste nicht, dass }das unausgeglichen sein kann. Guter Trick.
Peter Taylor

9

JavaScript, 4

03
12

Wenn Sie dieses Programm (oder eine Drehung dieses Programms) in einer JavaScript-Konsole ausführen, wird nur die letzte Zeile in der Konsole ausgewertet und als Echo ausgegeben.

Damit:

12 modulo 4 == 0
01 modulo 4 == 1
30 modulo 4 == 2
23 modulo 4 == 3

Hier sind alle ähnlichen 2x2-Programme, die auch funktionieren:

03
12

03
16

03
52

03
56

03
92

03
96

07
12

07
16

07
52

07
56

07
92

07
96

43
12

43
16

43
52

43
56

43
92

43
96

47
12

47
16

47
52

47
56

47
92

47
96

83
12

83
16

83
52

83
56

83
92

83
96

87
12

87
16

87
52

87
56

87
92

87
96

Mit anderen Worten,

ab
cd

wobei a in [0,4,8] ist, b in [3,7] ist, c in [1,5,9] ist und d in [2,6] ist


8

CJam / GolfScript - 3 * 3

2;3
;7;
1;0

Das Semikolon zeigt die vorherige Nummer an, daher wird nur die untere rechte Ecke gedruckt.


6

Aheui , 8

바몽희뷸
뷷희몽반

Da Aheui keinen Buchstaben hat, der 1 auf den Stapel schiebt, habe ich beschlossen, 0, 5, 2 und 3 zu drucken.

Erläuterung: 바 und 반 drücken jeweils 0 und 2 auf den Stapel und bewegen den Cursor um ein Zeichen nach rechts. 뷸 und 뷷 drücken jeweils 5 und 3 auf den Stapel und bewegen den Cursor um zwei Zeichen nach unten. 몽 öffnet und druckt die Zahl im Stapel und bewegt den Cursor um ein Zeichen nach oben. 희 beendet das Programm.


5

JavaScript

(Wird in die Browserkonsole, die Shell oder eine andere REPL eingegeben, damit das Ergebnis gedruckt wird.)

1+2
-3-
4+5

Sollte für jede andere Sprache mit Ausdrücken, nicht signifikanten Zeilenumbrüchen und automatischem Ausdruck des Ergebnisses funktionieren.


2
Ich mag die Idee dahinter, aber druckt sie nicht immer 1 (Mod 4)?
Zennehoy

2
Eine einfachere Variante könnte sein '2,3\n,0,\n1,0'.
Keen

Es gibt unterschiedliche Ergebnisse, wenn es gedreht wird. @ Cory, das ist schlau! Ich bin es auch gewohnt, in einer Sprache ohne Komma zu arbeiten.
lrn

@lrn Ja, es gibt unterschiedliche Ergebnisse, aber das ist nicht die Voraussetzung. Das Programm muss 0 (Mod 4) ausgeben, wenn es nicht gedreht wird, und 1, 2 oder 3 (Mod 4), wenn es so oft gedreht wird ...
zennehoy

Die zweite Note des Originalplakats lässt alle Werte für die gedrehten Versionen zu, sofern sie unterschiedlich sind.
lrn

5

Matlab / Octave - 144 100

Golf gespielt: 10 x 10 = 100

....d.....
....i.....
....s.....
... p2 ...
disp  1...
...3  psid
... 4p ...
.....s....
.....i....
.....d....

Alternative Lösung: 15 x 15 = 225

.......d.......
.......i.......
.......s.......
...    p    ...
...         ...
...    4    ...
...    .    ...
disp 1...3 psid
...    .    ...
...    2    ...
...         ...
...    p    ...
.......s.......
.......i.......
.......d.......

Kann die erste Lösung auf die Größe 8x8 reduziert werden, wenn die virtuellen und horizontalen Operatoren den gemeinsamen Buchstaben "p" verwenden? ...d.... ...i.... ...s2... disp 1.. ..3 psid ...4s... ....i... ....d...
AMK

@AMK: Leider führt dies zu einem Syntaxfehler in der Zeile ..3 psid. Sie benötigen mindestens drei Punkte am Anfang jeder Zeile, um einen Zeilenumbruch anzuzeigen und die verbleibenden Zeichen zu ignorieren.
Falko

5

Perl 5x7 (35)

1+p+t+1
-print+
1+i+i+1
+tnirp+
1+t+p+1

Ein bisschen zu spät zur Party. Der Einzelgänger -bestimmt, welche Nummer gedruckt wird.


4

JavaScript, 3

2
1
4

Es funktioniert ... in Basis 7.

Base 9 Version:

2
7
0

Erläuterung

Bei interaktiver Ausführung, z. B. von einer Debug-Konsole, wird der Wert der letzten Anweisung / des letzten Ausdrucks ausgegeben.

4 7 = 4 100 (mod 4 )
412 7 = 205 101 (mod 4 )
2 7 = 2 102 (mod 4 )
214 7 = 109 103 (mod 4 )

Ähnliche Lösungen könnten für jede ungerade Basis gefunden werden.


Dies wurde markiert, aber ich verstehe die Frage oder die Antwort nicht und musste sie überspringen. Wäre nett, wenn Downvoter einen Kommentar hinterlassen, der ihre Downvotes erklärt.
Rainbolt

@ Rusher Ich vermute, sie haben die Basis 7 Bit nicht verstanden.
Primo

3

Befunge, 12 (6x2)

Es gelang mir, eine leichte Verbesserung der vorhandenen Befunge-Antwort zu erzielen, indem ich die zweidimensionale Natur von Befunge optimal nutzte und den Codepfad vertikal in zwei der Ausrichtungen verlaufen ließ.

0.@.1v
v3.@.2

Probieren Sie es online aus: Starten von 0 , Drehung 1 , Drehung 2 , Drehung 3 .


2

Marbelous, 7 × 14 = 98

.. \/ \/ .. ..
.. 31 \\ 32 \/
\/ \\ \/ \\ \/
\/ 30 \\ 33 ..
.. .. \/ \/ ..

Erwarten Sie, dass jede Zelle beim Drehen intakt bleibt?
Sparr

2

Argh! / Aargh! (4 * 4 = 16)

Wie war das mit dem richtigen Werkzeug für den Job? Es gibt keine Kommentare (in der Sprache im Allgemeinen).

Die gesamte Programmfamilie (generiert in J: ((|.@:|:) ^: (i. 4)) >'hpqh';'q01p';'p32q';'hqph'oder ((|.@:|:) ^: (i. 4)) 4 4 $ 'hpqhq01pp32qhqph')

hpqh
q01p
p32q
hqph

einmal gedreht:

hpqh
q12p
p03q
hqph

zweimal gedreht:

hpqh
q23p
p10q
hqph

dreimal gedreht:

hpqh
q30p
p21q
hqph

Um dies zu erklären, ist es am besten, sich eine "eingerückte" Version anzuschauen (das funktioniert auch in allen Rotationen):

hhpq h
  0  h
q   1p
p3   q
h  2  
h qphh

Diese Version zeigt, dass das Programm aus 4 separaten Teilen besteht, einen für jede einzelne Umdrehung.

  • h - Kontrollfluss links einstellen

  • p - Element im Daten- / Code-Raster darunter drucken

  • q - Beenden Sie das Programm


2

Floater - 9 × 5 = 45

Bildbeschreibung hier eingeben

Druckt 4, 1, 2 oder 3 auf die Konsole.

Beachten Sie, dass 'Black' eine gültige Anweisung (NOP) und syntaktisch ist. Ohne kann es die Ausgangsposition nicht finden. Somit sind alle Positionen im Rechteck belegt.


1

Element, 2x3 = 6

1*
`2
3 

Dies ist eine Verbesserung gegenüber der naiven 3x3-Lösung, bei der `in der Mitte eine Zahl auf jeder Seite steht. Der oben gezeigte 0-Fall ist der interessanteste, da er *verwendet wird, um die 3 mit nichts zu multiplizieren, um 0 zu erhalten. Ansonsten ist er nicht so kompliziert.

Wenn Sie das Leerzeichen als unangenehm empfinden, können Sie es durch ein beliebiges anderes Zeichen ersetzen, mit Ausnahme von []{}`_.

Als Referenz sind hier die anderen drei Umdrehungen:

case 1
*2 
1`3

case 2
 3
2`
*1

case 3
3`1
 2*

0

Chip, (2x5) 10

b~
+a
~t
e*
 f

*aktiviert alle Nachbarelemente: Norden, Osten, Süden und Westen (Quelle) ,
~wenn nicht aus dem Westen aktiviert wird , aktiviert die Ost-Nachbarn (NOT-Gatter) (hier nie aktiviert)
tbeendet die Ausführung nach dem aktuellen Byte Druck
adas Bit setzt 0x01der
bAusgabesätze das Bit 0x02des Ausgangs
esetzt das Bit 0x10des Ausgangs
fsetzt das Bit 0x20des Ausgangs,
+falls von einem Nachbarn aktiviert, alle anderen Nachbarn aktivieren (Draht)

Chip benötigt entweder das -wFlag (um die Ausführung ohne Eingabe zu ermöglichen) oder eine Eingabe, um ausgeführt zu werden.

Druck 0, 1, 2, oder 3in ASCII. Wenn Codepunkte 0x00auf 0x03erwünscht sind, entfernen Sie die eund fdann den Raum bewegen, um die Lücke zu füllen.


0

Japt , 3 * 1 = 3 Bytes

5zB

Probieren Sie es online aus: so wie es ist , einmal , zweimal , dreimal gedreht .

Ausgänge 0, 5, 2, 11.

Die Variable Benthält den Wert 11 und Number.z(other)ist eine Unterteilung (alle haben anscheinend nach p gesucht). Bei mehrzeiligem Code wird die letzte Zeile an die Ausgabe übergeben, was hier einfach eine Konstante ist.


2 * 2 = 4 Bytes

2J
1T

Probieren Sie es online aus: so wie es ist , einmal , zweimal , dreimal gedreht .

Ausgänge 0, 21, 2, -1.

Thält 0 und Jhält -1.

Der Trick ist, dass, wenn zwei Literale oder Variablen nebeneinander gestellt werden, ein Komma eingefügt wird und die Ausgabe nur die letzte ist.

2 * 2 JS-Lösung funktioniert auch in Japt.

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.