Zwei Listen A
und B
sind kongruent, wenn sie die gleiche Länge haben, und Elemente, die gleich in A
vergleichen, vergleichen gleich in B
.
Mit anderen Worten, wenn zwei gültige Indizes gegeben sind x
und y
:
- Wenn ja
A[x] = A[y]
, dannB[x] = B[y]
. - Wenn ja
A[x] != A[y]
, dannB[x] != B[y]
.
Zum Beispiel sind die Listen [1, 2, 1, 4, 5]
und [0, 1, 0, 2, 3]
kongruent.
Die Aufgabe
Bei einer nicht leeren Liste nichtnegativer Ganzzahlen A
geben Sie eine neue Liste nichtnegativer Ganzzahlen zurück B
, die kongruent zu ist A
, während Sie die Summe der Ganzzahlen in minimieren B
.
Es gibt möglicherweise viele mögliche gültige Ausgaben. Beispielsweise würde in der Liste [12, 700, 3]
jede Permutation von [0, 1, 2]
als gültige Ausgabe betrachtet.
Testfälle
Format:
input ->
one possible valid output
[1 2 1 4 5] ->
[0 1 0 2 3] (this is the example given above)
[3 2 2 1 5 7 2] ->
[1 0 0 2 3 4 0]
[8 8 8 8 8] ->
[0 0 0 0 0]
[2] ->
[0]
[8 6 8 4 6 8 2 4 6 8 0 2 4 6 8] ->
[0 1 0 2 1 0 3 2 1 0 4 3 2 1 0]
[14 1] ->
[1 0]
[19 6 4 9 14 17 10 9 6 14 8 14 6 15] ->
[8 0 3 2 1 7 5 2 0 1 4 1 0 6]
[15] ->
[0]
[1 18 4 8 6 19 12 17 6 13 7 6 8 1 6] ->
[1 8 3 2 0 9 5 7 0 6 4 0 2 1 0]
[9 10 11 9 7 11 16 17 11 8 7] ->
[2 4 0 2 1 0 5 6 0 3 1]
[1 3 16 19 14] ->
[0 1 3 4 2]
[18 8] ->
[1 0]
[13 4 9 6] ->
[3 0 2 1]
[16 16 18 6 12 10 4 6] ->
[1 1 5 0 4 3 2 0]
[11 18] ->
[0 1]
[14 18 18 11 9 8 13 3 3 4] ->
[7 1 1 5 4 3 6 0 0 2]
[20 19 1 1 13] ->
[3 2 0 0 1]
[12] ->
[0]
[1 14 20 4 18 15 19] ->
[0 2 6 1 4 3 5]
[13 18 20] ->
[0 1 2]
[9 1 12 2] ->
[2 0 3 1]
[15 11 2 9 10 19 17 10 19 11 16 5 13 2] ->
[7 2 0 5 1 3 9 1 3 2 8 4 6 0]
[5 4 2 2 19 14 18 11 3 12 20 14 2 19 7] ->
[5 4 0 0 2 1 9 7 3 8 10 1 0 2 6]
[9 11 13 13 13 12 17 8 4] ->
[3 4 0 0 0 5 6 2 1]
[10 14 16 17 7 4 3] ->
[3 4 5 6 2 1 0]
[2 4 8 7 8 19 16 11 10 19 4 7 8] ->
[4 1 0 2 0 3 7 6 5 3 1 2 0]
[15 17 20 18 20 13 6 10 4 19 9 15 18 17 5] ->
[0 1 3 2 3 9 6 8 4 10 7 0 2 1 5]
[15 14 4 5 5 5 3 3 19 12 4] ->
[5 4 2 0 0 0 1 1 6 3 2]
[7 12] ->
[0 1]
[18 5 18 2 5 20 8 8] ->
[2 0 2 3 0 4 1 1]
[4 6 10 7 3 1] ->
[2 3 5 4 1 0]
[5] ->
[0]
[6 12 14 18] ->
[0 1 2 3]
[7 15 13 3 4 7 20] ->
[0 4 3 1 2 0 5]
[10 15 19 14] ->
[0 2 3 1]
[14] ->
[0]
[19 10 20 12 17 3 6 16] ->
[6 2 7 3 5 0 1 4]
[9 4 7 18 18 15 3] ->
[4 2 3 0 0 5 1]
[7 4 13 7] ->
[0 1 2 0]
[19 1 10 3 1] ->
[3 0 2 1 0]
[8 14 20 4] ->
[1 2 3 0]
[17 20 18 11 1 15 7 2] ->
[5 7 6 3 0 4 2 1]
[11 4 3 17] ->
[2 1 0 3]
[1 9 15 1 20 8 6] ->
[0 3 4 0 5 2 1]
[16 13 10] ->
[2 1 0]
[17 20 20 12 19 10 19 7 8 5 12 19] ->
[7 2 2 1 0 6 0 4 5 3 1 0]
[18 11] ->
[1 0]
[2 16 7 12 10 18 4 14 14 7 15 4 8 3 14] ->
[3 9 2 7 6 10 1 0 0 2 8 1 5 4 0]
[5 7 2 2 16 14 7 7 18 19 16] ->
[3 0 1 1 2 4 0 0 5 6 2]
[8 6 17 5 10 2 14] ->
[3 2 6 1 4 0 5]
Dies ist Code-Golf , also gewinnt die kürzeste gültige Übermittlung (in Bytes gezählt).
code-golf
array-manipulation
Esolanging Fruit
quelle
quelle
Antworten:
Python 2 ,
6254 BytesProbieren Sie es online!
Bearbeiten: 8 Bytes via Map gespeichert Danke an Maltysen
quelle
lambda L:map(sorted(set(L),key=L.count)[::-1].index,L)
Pyth -
121110 BytesTest Suite .
quelle
mx_o/QN{Q
.Japt , 11 Bytes
Testen Sie es online!
Erläuterung
quelle
J , 11 Bytes
Probieren Sie es online!
Erläuterung
quelle
Röda , 55 Bytes
Probieren Sie es online!
quelle
Haskell ,
939185 BytesProbieren Sie es online!
EDIT: Danke an @Laikoni für die 6 Bytes!
Nicht sehr kurz, aber mir fällt nichts anderes ein. Die Idee ist, über das Array (
x<-a
) zu iterieren und eine Suche in einer Tupelliste ((i,y:_)<-
...,x==y
) durchzuführen , die jedem eindeutigen Element in der Eingabe eine nicht negative Ganzzahl zuweist, je nachdem, wie häufig es ist. Diese Tupelliste wird erzeugt, indem zuerstsort
die Eingabegroup
in Unterlisten gleicher Elemente eingegeben, diese Liste nach der Länge der UnterlistensortOn((0-).length)
sortiert ( ; Länge wird negiert, um in "absteigender" Reihenfolge zu sortieren) und schließlich mit einer unendlichen Liste komprimiert wird Inkrementieren von 0. Wir verwenden die Mustererkennung, um das tatsächliche Element aus der Unterliste in zu extrahiereny
.quelle
(i,y:_)
und dashead<$>
Teil ablegen und die Klammer durch ersetzen$
.Mathematica, 94 Bytes
Probieren Sie es online!
quelle
CJam,
1714 Bytes-3 Bytes danke an Peter Taylor
Dies ist eine Golfversion des Programms, mit dem ich die Testfälle erstellt habe.
Dies ist ein anonymer Block, der Eingaben als Array über dem Stapel erwartet und ein Array über dem Stapel ausgibt.
Erläuterung:
quelle
$W%
.TI-BASIC, 66 Bytes
Erläuterung
quelle
Perl 5 , 77 + 1 (-a) = 78 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6), 91 Byte
Verwenden einer Liste eindeutiger Werte, sortiert nach Häufigkeit.
Prüfung
quelle
PHP , 92 Bytes
Probieren Sie es online!
quelle
R , 58 Bytes
Probieren Sie es online!
Port of Chas Browns Python-Antwort .
table
berechnet die Anzahl der Elemente inx
(speichert die Werte alsnames
Attribut),order
gibt eine Permutation der Indizes inz
undmatch
den Index der ersten Übereinstimmung vonx
in zurücknames(z)
. Dann subtrahiert es,1
weil R-Indizes auf 1 basieren.quelle