Einführung
Betrachten Sie zwei Arrays gleicher Länge, sagen wir A = [0,1,0,2]
und B = [-1,1,2,2]
. Angenommen, wir wissen, dass ihr Inhalt in gewisser Weise Artikel für Artikel gleichwertig ist:
0
ist äquivalent zu-1
,1
ist äquivalent zu1
,0
ist äquivalent zu2
, und2
ist äquivalent zu2
.
Äquivalenz ist transitiv: -1
und 0
sind äquivalent und 0
und 2
sind äquivalent, also -1
und 2
sind auch äquivalent. Die Vereinheitlichung von A
und B
ist das Array, in dem jedes Element von A
(oder B
) durch die größte entsprechende Zahl ersetzt wurde. In diesem Fall wäre die Vereinigung [2,1,2,2]
.
Die Aufgabe
Schreiben Sie ein Programm oder eine Funktion, die zwei nicht leere Ganzzahl-Arrays gleicher Länge verwendet und deren Vereinheitlichung ausgibt. Sie können auch eine der vorhandenen Eingaben ändern, anstatt sie zurückzugeben. Die niedrigste Byteanzahl gewinnt.
Testfälle
[0] [0] -> [0]
[1] [2] -> [2]
[0,-1] [-1,-1] -> [0,0]
[0,1,0] [2,1,0] -> [2,1,2]
[1,2,3] [0,0,1] -> [3,3,3]
[0,1,0,2] [-1,1,2,2] -> [2,1,2,2]
[1,0,1,-4] [-3,-1,-2,2] -> [1,0,1,2]
[1,2,3,-2] [1,0,-3,-2] -> [1,2,3,-2]
[-3,-2,-1,0,1] [-1,-1,-1,-1,-1] -> [1,1,1,1,1]
[-3,-2,-1,0,1] [2,-1,0,1,-3] -> [2,2,2,2,2]
[-3,5,5,3,1] [4,2,3,1,2] -> [4,5,5,5,5]
[4,0,2,-5,0] [0,4,-5,3,5] -> [5,5,3,3,5]
[-2,4,-2,3,2,4,1,1] [-2,4,1,2,2,3,1,-2] -> [1,4,1,4,4,4,1,1]
[-10,-20,-11,12,-18,14,-8,-1,-14,15,-17,18,18,-6,3,1,15,-15,-19,-19] [-13,6,-4,3,19,1,-10,-15,-15,11,6,9,-11,18,6,6,-5,-15,7,-11] -> [-8,14,18,14,19,14,-8,-1,-1,15,14,18,18,18,14,14,15,-1,18,18]
[20,15,2,4,-10,-4,-19,15,-5,2,13,-3,-18,-5,-6,0,3,-6,3,-17] [-18,7,6,19,-8,-4,-16,-1,13,-18,8,8,-16,17,-9,14,-2,-12,7,6] -> [20,15,20,19,-8,-4,20,15,17,20,17,17,20,17,-6,14,15,-6,15,20]
Antworten:
JavaScript (ES6),
1009011010296 ByteMeine ursprüngliche Lösung war 90 Bytes:
Obwohl alle bereitgestellten Testfälle bestanden wurden, schlägt dies beispielsweise fehl:
Testfälle
Code-Snippet anzeigen
quelle
a.map
...a.map
könnenb.map
genauso gut ersetzt werden.CJam , 27 Bytes
Probieren Sie es online! Testsuite.
Erläuterung
quelle
Python 2, 91 Bytes
quelle
Python, 86 Bytes
Aktualisiert beide Listen gleichzeitig, indem jeder Wert in der ersten Liste durch das entsprechende Element in der zweiten Liste ersetzt wird, falls es größer ist. Die Ersetzung erfolgt
map
nach derget
Methode eines Wörterbuchs . Vertauscht dann die Listen und wiederholt sie, bis sie gleich sind.quelle
Pyth, 13 Bytes
Probieren Sie es online aus: Demonstration
Erläuterung:
Beginnen Sie mit jedem Paar. Erweitern Sie jedes Paar (Liste) iterativ mit überlappenden Listen, deduplizieren Sie die Elemente und sortieren Sie sie. Stoppen Sie, sobald dieser Prozess konvergiert. Drucken Sie das Maximum jeder Liste.
quelle
Telefon
266241213200 BytesLösung:
Verwendung:
u([1,2,3], [0,0,1]);
Gibt das gewünschte Array zurück.Nicht so golfen:
quelle
Dyalog APL ,
2928 Bytes⌈/¨({∪¨,/∘.{⍵/⍨≢⍺∩⍵}⍨⍵}⍣≡,¨)
Gleiche Idee wie die Pyth-Lösung .
quelle
Mathematica, 56 Bytes
quelle
Java,
273263 BytesDie Methode
f(int[]a,int[]b)
löst die Herausforderung.Gehen Sie zuerst beide Arrays durch und notieren Sie sich die entsprechenden Zahlen. Ändern Sie dann jedes Element im ersten Array, damit die entsprechenden Nummern gespeichert werden.
quelle
Python, 522 Bytes
Erläuterung
Erstellen Sie eine Wertetabelle für jedes einzelne Element in beiden Arrays (
a
undb
in diesem Fall). Zum Beispiel wenndann wäre der Tisch:
Wenden Sie dann zuerst die Tiefensuche an. Nehmen Sie also beispielsweise an, dass ich das am weitesten links stehende Element in
a
dem Wert auswähle, der dann ist0
und0
die Äquivalenzen hat:0
und2
. Da0
wurde schon besucht, gehe zu2
. 2 hat die Äquivalenzen:0
. Das beste Ergebnis für die Auswahl des Elements ganz links ina
ist2
. Hier ist der Baum:und Sie möchten den größten Wert dort nehmen, also ist das Ergebnis
2
.quelle
PHP, 132 Bytes
Anonyme Funktion, die zwei Arrays annimmt.
Dies ist meine Einstellung, wie in der Ausgabe der Challenge angegeben, "eines der Arrays an Ort und Stelle ändern". Dies durchläuft jedes der beiden Arrays, zeichnet die Äquivalenz auf, wenn die aktuelle größer als die gespeicherte ist, durchläuft dann das erste Array und ersetzt alle Werte durch ihre größten Äquivalente. Das erste Array wird als Referenz genommen (daher das
&$a
), so dass das übergebene Array "an Ort und Stelle" geändert wird.quelle
Java, 170 Bytes
Golf gespielt
Ungolfed
Anonyme Funktion, die zwei
int[]
s als Argumente verwendet und ein zurückgibtint[]
.quelle