Herausforderung
Sie erhalten ein Array von ganzen Zahlen. Mit einem Zug können Sie ein Element des Arrays um 1 erhöhen oder verringern . Ihre Aufgabe ist es, das Array auszugleichen , dh alle Elemente des Arrays durch einige Bewegungen gleich zu machen . Aber das reicht nicht! Sie möchten auch so wenig Züge wie möglich machen .
Eingang
- Ein nicht leeres Array von ganzen Zahlen
- Optional kann die Länge von .
Ausgabe
- Die minimale Anzahl von Zügen, die erforderlich sind, um das Array auszugleichen .
Regeln
- Es gelten die Standardregeln für gültige Einreichungen , E / A und Lücken .
- Das ist Code-Golf , also gewinnt die kürzeste Lösung (in Bytes). Lassen Sie sich wie üblich nicht von lächerlich kurzen Lösungen in Golfsprachen davon abhalten, eine längere Antwort in der Sprache Ihrer Wahl zu verfassen.
- Dies ist keine Regel, aber Ihre Antwort wird besser angenommen, wenn sie einen Link zum Testen der Lösung und eine Erklärung zur Funktionsweise enthält.
Beispiele
Input --> Output
[10] --> 0
[-1, 0, 1] --> 2
[4, 7] --> 3
[6, 2, 3, 8] --> 9
[5, 8, 12, 3, 2, 8, 4, 5] --> 19
[1,10,100] --> 99
quelle
Median
Ist für einige esoterische Sprachen etwas zu schwer.JavaScript (Node.js) ,
50 bis48 Byte2 Bytes dank Arnauld gespeichert
Probieren Sie es online!
Sortieren Sie das Array aufsteigend und addieren Sie dann:
quelle
a=>a.sort((x,y)=>x-y).map(n=>r+=a.pop()-n,r=0)|r
.05AB1E , 4 Bytes
Probieren Sie es online!
Erläuterung
quelle
ZL€αOW
war mein Versuch ._.Perl 6 ,
2928 Bytes-1 byte dank nwellnhof
Probieren Sie es online!
Erläuterung
quelle
X-
Operanden tauschen , um ein Byte zu speichern.Japt, 7 Bytes
Versuch es
Erläuterung
quelle
JavaScript (ES6),
605655 Bytes1 Byte dank @Shaggy gespeichert
Probieren Sie es online!
Wie?
Sofern es keinen Trick gibt, den ich vermisse, ist die Berechnung des Medians in JS länger. Wahrscheinlich um die 65 Bytes wegen des erforderlichen Rückrufs
sort()
, um die voreingestellte lexikografische Sortierung zu umgehen, und der ziemlich langenMath.abs()
:Stattdessen versuchen wir alle Werte im ursprünglichen Array als Ausgleichswert .
quelle
r
innerhalb des erstenmap
.Haskell , 34 Bytes
Probieren Sie es online!
Ermittelt den Gesamtabstand aller Elemente zum Median, testet jedes Element in der Liste als potenziellen Median und ermittelt das kleinste Ergebnis.
quelle
Gelee , 4 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Python 2 , 46 Bytes
Probieren Sie es online!
Nimmt die Listenlänge
n
als Argument. Berechnet die Summe der oberen Hälfte abzüglich der Summe der unteren Hälfte, indem die sortierte Liste in die ersten/2
und die letzte aufgeteilt wirdn/2
Element aufgeteilt wird.Der Ausdruck
l[-~n/2:l.sort()]
ist äquivalent zu der Berechnungl.sort()
, die modifiziert die Liste vorhanden, dann tunl[-~n/2:None]
, wo die Liste slicing obere Ignoriert von gebundenenNone
dassl.sort()
produziert. Es mag so aussehen, als ob die Liste zu spät sortiert wurde, um richtig aufgeteilt zu werden, aber Python scheint die Slice-Argumente auszuwerten, bevor die zu teilende Liste "eingeschlossen" wird.Python 2 , 47 Bytes
Probieren Sie es online!
Die langweilige Methode zum Summieren des Abstands jedes Werts vom Median. Nimmt die Länge
n
als Argument.Python , 51 Bytes
Probieren Sie es online!
Sortiert die Liste an der richtigen Stelle, fügt dann wiederholt den letzten (höchsten verbleibenden) Eintrag minus dem ersten (niedrigsten verbleibenden) Eintrag hinzu und wiederholt die Liste ohne diese Elemente, bis nur noch 0 oder 1 übrig sind. Verwendung
pop
‚s bekommt die gleiche Länge:l.pop()-l.pop(0)+f(l)
.Der
l.sort()
steckt an einer Stelle fest, an derNone
er keine Auswirkung hat. Das Slicel[None:1]
ist dasselbe wie,l[:1]
daNone
s in Slices ignoriert werden.Python , 54 Bytes
Probieren Sie es online!
Ein nettes Listenverständnis, bei dem das überarbeitete Argument ignoriert und die Liste durch wiederholtes Platzieren des ersten und des letzten Elements geändert wird. Wir stellen sicher, dass das Listenverständnis
len(l)//2
mal durchgeführt wird, indem wir jedes andere Element, dasl
übersprungen wird, iterierenl[1::2]
. Dasl.sort()
ProduzierenNone
kann im unbenutzten Slice-End-Argument stecken bleiben.quelle
APL (Dyalog), 12 Bytes
Brute Forces durch Testen jeder Zahl als Equalizer. Ich bin mir nicht sicher, ob stillschweigend kürzer ist, aber ich kann es nicht herausfinden.
TIO
quelle
TI-Basic,
186 Bytes-12 Bytes von Mischa Lawrow (Ich habe TI-Basic eine Weile nicht mehr benutzt und ich habe vergessen, dass Listen das können)
TI-Basic ist eine Token-Sprache . Alle in dieser Antwort verwendeten Token bestehen aus einem Byte.
Übernimmt die Eingabe als
{1,2,3,4}:prgmNAME
Grundsätzlich die gleiche Idee wie bei den meisten anderen Antworten: Durch den Median subtrahieren, dann die Summe nehmen.
Erläuterung:
quelle
sum(abs(Ans-median(Ans
funktioniert auch. (Und "TI-84 Plus CE" scheint zu spezifisch zu sein; dies funktioniert zumindest auf allen Rechnern der Serie 83 und wahrscheinlich auch auf denRöda , 33 Bytes
Probieren Sie es online!
Erläuterung:
quelle
R 29 Bytes
Probieren Sie es online!
quelle
Attache , 18 Bytes
Probieren Sie es online!
Erläuterung
quelle
J , 15 Bytes
Im Wesentlichen dasselbe wie Shaggys Japt-Lösung.
Probieren Sie es online!
Wie es funktioniert?
|@-/~"{
- Erstellt eine Tabelle/~
mit absoluten Unterschieden|@-
jeder Zahl zu allen anderen"{
1#.
summiert jede Zeile[:<./
findet das kleinste Objekt (um ein Minimum reduzieren)quelle
Kohle ,
1611 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Bearbeiten: 5 Bytes dank @Arnauld gespeichert. Erläuterung:
quelle
Visual C #, 138 Bytes
ungolfed:
Probieren Sie es online!
quelle
C (gcc)
10093 BytesBrute-Force-Lösung, versucht mit jedem Element auszugleichen. Probieren Sie es hier online aus .
Dank Ceilingcat für das Golfen von 7 Bytes.
Ungolfed:
quelle
PHP, 78 Bytes
Sortiert das Array, durchläuft dann eine Kopie, entfernt Elemente vom Original und summiert die absolute Differenz, die für die Rückgabe halbiert werden muss.
Ausgabe:
quelle
PHP, 69 Bytes
anonyme Funktion. Probieren Sie es online aus .
quelle
Input: *) A non-empty array a of integers *) Optionally, the length of a
.JavaScript (Node.js) , 52 Byte
Probieren Sie es online!
quelle
Java (JDK), 112 Byte
Golf gespielt
Ungolfed
quelle
[1,1,4]
(gibt 4 zurück, aber die Antwort ist 3).Kotlin Android, 200 Bytes
Versuchen Sie es online
quelle