Ein unregelmäßiges Array ist ein Array, in dem jedes Element eine unbekannte Anzahl positiver Ganzzahlen enthält.
Beispielsweise handelt es sich bei den folgenden Elementen um unregelmäßige Arrays:
[[1,2,3],[4],[9,10]] Shape: 3,1,2
[[1],[2],[3]] Shape: 1,1,1
[[1,2,3,4,5,6,8]] Shape: 7
Die folgenden Arrays sind nicht unregelmäßig:
[1] Each element will be an array
[] The array will contain at least 1 element
[[1,2,3],[]] Each subarray will contain at least 1 integer
Sie müssen ein unregelmäßiges Array eingeben und ein unregelmäßiges Array mit gemischten Ganzzahlen zurückgeben
- Das Ausgabearray muss dieselbe Form haben wie das Eingabearray. Wir definieren die Form des Arrays als die Länge jedes Subarrays.
- Jede Ganzzahl muss die gleiche Wahrscheinlichkeit haben, an jeder möglichen Position zu erscheinen.
- Sie können davon ausgehen, dass der Zufallsgenerator Ihrer Sprache zufällig ist.
Zum Beispiel, wenn ich in vergangen: [[4],[1,2,3],[4]]
, dann [[1],[4,4,2],[3]]
wäre eine gültige Ausgabe, aber [[4,1,3],[3],[4]]
oder [[4],[4],[1,2,3]]
nicht würde.
code-golf
array-manipulation
random
Nathan Merrill
quelle
quelle
Antworten:
Jelly, 3 Bytes in Jellys Codepage
Erläuterung:
Da das Programm unvollständig ist (
ṁ
ohne Angabe eines zweiten Arguments), wird standardmäßig die Programmeingabe verwendet. somitṁ
bewirkt , dass die Ausgabe die gleichen sublist Muster wie der Eingang haben.Probieren Sie es online!
quelle
F
undṁ
für mehrere Ebenen der Abflachung arbeiten, nicht nur eine.)ṁ
kann alles sein, nicht nur eine flache Liste. Zum Beispiel: tio.run/nexus/jelly#@/9wZ@P///@jow11FIxidRSijXUUTEC0qY6CWWzs/…PowerShell v2 +, 86 Byte
Funktioniert über String-Manipulation. Die Eingabe wird als Zeichenfolge übergeben, die das Array darstellt, unabhängig davon, welches Format für Ihre Sprache verwendet wird. ;-)
-split
Wenn Sie die Eingabe auf Nicht-Ziffern ausgeben, speichern Siesort
diese anhand desrandom
Skriptblocks (der der Sortierung für jede Eingabe eine andere zufällige Gewichtung zuweist) in$a
. Wir geben dannsplit
die Eingabe erneut ein, diesmal auf Ziffern, und geben für jede einzelne den aktuellen Wert (meist Klammern und Kommas) mit der entsprechenden Zahl verkettet aus$a
. Das wird-join
wieder zu einer Zeichenfolge zusammengefasst, und die Ausgabe ist implizit.Beispiele
quelle
Python 2 , 89 Bytes
Probieren Sie es online!
quelle
shuffle(r=sum(x,[]))
?JavaScript (ES6),
78 bis75 ByteDies ist das erste Mal, dass ich mich
.splice()
an eine Code-Golf-Herausforderung erinnere ...Sie können zwei Bytes entfernen, indem Sie das Array vorher mischen:
Dies scheint jedoch die meiste Zeit die letzte ganze Zahl an die erste zu setzen, daher gehe ich davon aus, dass die ganzen Zahlen nicht gleichmäßig verteilt sind.
quelle
sort
funktioniert nicht richtig, wenn ein inkonsistenter Vergleichsschlüssel angegeben wird. Selbst wenn die Zufallssprache zufällig ist, funktioniert ihre Sortierung in dieser Situation nicht richtig, und genau das schafft die Tendenz, die Sie sehen. Insofern halte ich die zweite Lösung für falsch.Ruby, 47 Bytes
quelle
Brachylog , 17 Bytes
Probieren Sie es online!
Erläuterung
Wir erstellen im Grunde genommen eine Liste von Unterlisten mit variablen Elementen, die dieselbe "Form" wie die Eingabe haben, und geben dann an, dass, wenn wir alles zu einer einzigen Liste verketten, die Verkettung der Eingabe zu einer einzigen Liste gemischt werden muss .
quelle
Perl, 37 Bytes
36 Byte Code +
-p
Flag.Um es auszuführen:
Erklärungen:
quelle
05AB1E , 17 Bytes
Probieren Sie es online!
Ich warte auf die 05AB1E- oder 2sable-Lösung mit einer integrierten Funktion zum Glätten / Formen, die ich noch nicht kenne :).
quelle
APL, 35 Bytes
Ich habe Perl kaum geschlagen, es muss etwas geben, das mir fehlt.
Z.B:
Erläuterung:
⍳¨⍴¨⍵
: Für jedes Sub-Array erhalten Sie eine Liste der Indizes{⍵+⊃⌽⍺}\
: Beginnen Sie mit dem ersten Unterarray und fügen Sie den letzten Wert im Array zu jedem Wert im nächsten Array hinzu.⊃¨
: Holen Sie sich die ersten Elemente der Arrays, die die Startplätze sind(⍳⍴Z←∊⍵)∊
: Speichern Sie das abgeflachte Array inZ
. Erzeugen Sie einen Bitvektor, in dem diejenigen die Stellen markieren, an denen die Sub-Arrays beginnen sollen.?⍨⍴Z
: erzeugen eine zufällige Permutation vonZ
.Z[
...]
: permutierenZ
.⊂⍨
: Aufteilen der Permutation in Subarrays entsprechend dem Bitvektor.quelle
A⊣(∊A)←(∊A)[?⍨≢∊A←⎕]
Pyth, 15 Bytes
Ein Programm, das eine Liste eingibt und das Ergebnis druckt.
Testsuite
Wie es funktioniert
quelle
PHP , 105 Bytes
reduziert auf 105 Bytes dank
user59178
.Ursprüngliche Antwort:
PHP , 132 Bytes
quelle
$m=array_merge(...$i=$_GET[i]);
ist 25 Bytes kürzer als$i=$_GET['i'];$m=call_user_func_array('array_merge',$i);
und macht das gleiche. Außerdem können Sie die{}
nach demforeach
löschen, um 2 weitere Bytes zu sparen.Bash,
6358 BytesEDITS:
Hinweis:
Bash nicht wirklich multidimensionalen Arrays unterstützen (sie können nur simuliert werden, bis zu einem gewissen Grad), so stattdessen dieses Programm einer „serialisiert“ Textdarstellung eines robusten Array akzeptieren, wie es in der Aufgabenbeschreibung dargestellt, zum Beispiel:
[[1,2,3],[4],[9,10]]
und liefert Ausgang im gleichen Format.Golf gespielt
Prüfung
Ein netter Bonus ist, dass Sie damit robuste Arrays beliebiger Tiefe füttern können:
und es wird immer noch richtig funktionieren.
Probieren Sie es online!
quelle
Oktave, 60 Bytes
quelle
MATLAB , 84 Bytes
quelle
Java, 368 Bytes
Die Methode
static int[][] f( int[][] r ){...}
löst die Herausforderung. beschlossen, meine eigene funktionale Schnittstelle zu rollen, um einen Import zu vermeiden und eine Standardmethode für die Benutzerfreundlichkeit hinzuzufügenquelle
Mathematica, 67 Bytes
Erläuterung: Hiermit wird die Liste der Positionen aller Ganzzahlen im 2D-Array gemischt.
Union@@
Kurzform fürFlatten@
Hinweis:
{}
Anstelle von Klammern werden verzerrte Klammern verwendet[]
.quelle