Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die eine quadratisch-zufällig-symmetrische Matrix zurückgibt oder ausgibt.
Eingang
N : Die Größe der Matrix dh6 x 6
Ausgabe
Die Matrix. Sie können es entweder drucken, als String (mit den Zeilenumbrüchen) oder als Liste / Array von Listen / Arrays zurückgeben.
Regeln
Sie müssen mindestens
N
verschiedene Zeichen verwenden, wobeiN
die Größe der quadratischen Matrix (Eingabe) ist. Da wir nur Buchstaben [a, z] [A, Z] und Ziffern [0, 9] (und jeweils nur eine Ziffer) verwenden, können Sie davon ausgehen, dassN < 27
undN > 2
, das liegt daran, dassN <= 2
Sie nicht beide Buchstaben haben können und Ziffern. Last but not least muss jeder Buchstabe / jede Ziffer mit einer Wahrscheinlichkeit ungleich Null auftreten (eine gleichmäßige Verteilung ist nicht erforderlich). Das Ergebnis muss jedoch mindestensN
verschiedene Buchstaben / Ziffern haben.Die Matrix muss sowohl horizontal als auch vertikal symmetrisch sein.
Genau 2 Zeilen und 2 Spalten müssen nur eine einstellige Zahl enthalten (ihre Position sollte ebenfalls zufällig sein). Die restlichen Zeilen / Spalten enthalten nur Buchstaben. Betrachten Sie Buchstaben als [a, z] und [A, Z] und natürlich einstellige Zahlen als [0, 9].
Zur Vereinfachung können Sie davon ausgehen, dass die Groß - und Kleinschreibung der Buchstaben keine Rolle spielt, solange die Groß - und Kleinschreibung symmetrisch ist
a=A, b=B, etc
.Jede mögliche Ausgabe muss eine Wahrscheinlichkeit ungleich Null haben. Die Zufallsverteilung muss nicht einheitlich sein.
Beispiel
Eingabe : 8
Ausgabe :
c r p s s p r c
r k o z z o k r
u t 2 a a 2 t u
y n q z z q n y
y n q z z q n y
u t 2 a a 2 t u
r k o z z o k r
c r p s s p r c
Antworten:
Kohle , 30 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Wenn
n
immer gerade ist, dann für 23 Bytes:Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Eingabe .n
Erstellen Sie ein by Array aus zufälligen Kleinbuchstaben. Dies wird implizit als Quadrat gedruckt. nn2 n2
Springe zu einer zufälligen Position im Quadrat.
Gib eine zufällige Ziffer aus.
Horizontal und vertikal reflektieren, um die Matrix zu vervollständigen.
quelle
R ,
124118 BytesProbieren Sie es online!
In R sind Dinge, die wie Operatoren aussehen, nur Funktionen, die vom Parser speziell behandelt werden.
Wenn Sie einen Operator (wie
-
) neu definieren , um eine andere Funktion zu sein, wird die Sonderbehandlung vom Parser ferngehalten. Da-
es sich sowohl um ein Präfix als auch um ein Infix handelt und ich diesample
Funktion sowohl mit einem als auch mit zwei Argumenten aufrufen muss , kann ich verwendenum zu bekommen, was ich will.
Der Code
-letters
wird also in übersetztsample(letters)
, wodurch derletters
eingebaute Code nach dem Zufallsprinzip gemischt wird . Wirdj-1
aber in übersetztsample(j,1)
, was zufällig einen1
Gegenstand aus dem Vektor abtastet1:j
.(Dieses Verhalten der
sample
Funktion, das von der Anzahl der Parameter und dem ersten Parameter abhängt, ist eine große Belastung für den Hintern im Produktionscode. Ich bin daher froh, hier eine großartige Verwendung ihrer perversen Natur zu finden!)Andernfalls wird der Code macht nur der obere linken Quadranten des gewünschten Ergebnisses, ein zufälliges Element ersetzt (die
j-1
,j-1
Bit) mit einer Zufallszahl (das0:9-1
Bit) und faltet es für die erforderliche Symmetrie aus. Dasi
und dasj
werden benötigt, um mit den geraden und ungeraden Fällen umzugehen.quelle
Python3, 287 Bytes
Mein erster Versuch hier etwas zu golfen; Ich bin mir sicher, dass jemand viel besser kann:
Probieren Sie es online!
Dank HyperNeurtrino, Ourous und Heiteria ist dies auf 193 Bytes geschrumpft (siehe Kommentare). TFeld wies jedoch zu Recht darauf hin, dass bei mehreren Anrufen
sample
nicht mindestensN
unterschiedliche Zeichen garantiert werden .Probieren Sie diese neue Version aus, die mindestens
N
unterschiedliche Charaktere pro Lauf garantiert .Python3,
265260 Bytes, mindestensN
verschiedene ZeichenProbieren Sie es online!
quelle
a[:-1][::-1]
ist grundsätzlich äquivalenta[:-2::-1]
importieren, und Sie könnenrandom
als ,r
stattrn
, und man kann die verschiebenfor
Schleife in eine Inline - Expression. Probieren Sie es online!math
Import entfernen, indem Sie-(-a // 2)
anstellemath.ceil(a / 2)
dessen im Grunde ein negatives Floor-Div des Negativs (effektiv eine Decke) verwenden. tio.run/##XY7LagMxDEX3/…sample()
garantieren nicht, dass Sie mindestensN
verschiedene Zeichen erhalten. Ich schaffte es[['g', 'x', 'x', 'g'], [7, 'x', 'x', 7], [7, 'x', 'x', 7], ['g', 'x', 'x', 'g']]
fürN=4
, was nur 3 verschiedene ZeichenAPL (Dyalog Classic) ,
45444340 Bytesdanke @ Adám für -1 Byte
Probieren Sie es online!
Verwendet
⌈
(max) der Matrix mit ihren Reflexionen, um sie symmetrisch zu machen, sodass sie auf den letzten Teil des Alphabets ausgerichtet istDie Ziffer wird einheitlich von 0 bis 25 mod 10 gewählt, so dass eine geringe Neigung zu niedrigeren Werten besteht
quelle
⌊2⍴⍵÷2)?⍵ ⍵⍴26]}
→⌊⍺⍵÷2)?⍺⍵⍴26]}⍨
⌊⍺⍵÷2
→ ändern⍺⍵
.Japt , 31 Bytes (Feste Ziffernposition )
Probieren Sie es online!
Japt , 41 Bytes (zufällige Ziffernposition )
Probieren Sie es online!
Erläuterung
quelle
Python 2 , 259 Bytes
Probieren Sie es online!
quelle
05AB1E ,
294038 Bytes+11 Bytes die Ziffer wird an einer beliebigen Position zu fixieren , während immer noch die Regel 3 im Auge für ungeradee Eingänge zu halten ..
-2 Bytes dank @MagicOctopusUrn , Wechsel
îï
zuò
und die Position der Veränderung»
.Probieren Sie es online aus, um weitere Testfälle zu überprüfen .
Alte Antwort (
2927 Bytes ), bei der die Ziffernpositionen immer in den Ecken liegen:Probieren Sie es online aus oder überprüfen Sie einige weitere Testfälle .
Erläuterung:
quelle
»
ï
dies implizit auch gemacht wurde. Leider gilt dies nicht für die 40-Byte-Version, da∊
sie anstelle von ersetzen einfügen würde.2
, so ist der Eingang garantiert3 <= N <= 26
.n
Buchstaben des Alphabets anstelle vonn
zufälligen Buchstaben des Alphabets haben. Und erst durch Zeilenumbrüche und dann durch Spiegeln wird ein Byte in meinem gespeichert. Danke für -2 Bytes! :) PS: Ein Byte kann in Ihrem 28-Byte gespeichert werden, indem das nachfolgende entfernt wird}
. :)C (gcc) ,
198197196 Bytes2 Bytes dank ceilingcat gespart.
Probieren Sie es online!
Erläuterung:
quelle
JavaScript (ES6),
213209206 BytesProbieren Sie es online!
Kommentiert
quelle
Sauber ,
346312 Byteswird morgen mehr Golf spielen
Probieren Sie es online!
quelle
Python 3 , 197 Bytes
Wie von @Emigna erwähnt, funktioniert nicht für ungerade Werte von
N
(Ich habe die Frage nicht richtig verstanden)Probieren Sie es online!
Ich denke, die Anrufe nach
randint()
+sample()
+shuffle()
sind zu viel, und das Mischen an Ort und Stelle loszuwerden, wäre großartig :)Ich bin mir ziemlich sicher, dass dieser Teil (der die Buchstaben und Ziffern auswählt) ein bisschen mehr Golf spielen könnte.
quelle
N
.N
dass es immer gerade sein würde, da ich nicht verstehe, wie die Matrix symmetrisch sein könnte, wenn sie ungerade ist!Python 2 ,
275266 BytesProbieren Sie es online!
Gibt das Array als Liste von Zeichenlisten zurück. Um Regel 1 zu erfüllen, haben wir einen Zeichenpool eingerichtet:
Das nächste knifflige Bit ist Regel 3: Es müssen genau 2 Spalten und Zeilen mit einer Ziffer vorhanden sein. Dies bedeutet für
n
ungerade, dass die gewählte Ziffer möglicherweise nicht in der mittleren Spalte oder mittleren Zeile erscheint. Da wir das Array mit einem doppelt reflektierten quadratischen Sub-Array konstruierens
, geschieht dies hier mit:dh mische mindestens einmal; und dann, wenn
n
ungerade ist, wiederholen Sie die Schleife, wenn sich die Ziffer in der letzten Spalte oder der letzten Zeile von befindets
.quelle
Pyth , 48 Bytes
Probieren Sie es hier online aus .
Das Programm besteht aus 3 Teilen: Definition der Palindromisierungsfunktion, Auswahl des numerischen Speicherorts und der Hauptfunktion.
Die Verwendung mehrerer gemischter Alphabete sollte sicherstellen, dass die Anzahl der eindeutigen Zeichen immer größer ist als die eingegebene Anzahl.
quelle
Python 2 / Python 3, 227 Bytes
ein bisschen ungolfing:
Ältere, fast korrekte Versionen unten:
Python2, Python3, 161 Bytes
Es scheint, dass N unterschiedliche Elemente nur fast garantiert sind.
Python 2 / Python 3, 170 Bytes
Es scheint, als hätte ich Regel 3 vergessen. Auch irgendwie hat sich das [: n * n] eingeschlichen.
quelle
n = 3
Sie niemals eine Ausgabe haben, die enthält ) erfüllt a'z'
, daher ist nicht jede Ausgabe möglich).