Einführung:
Vor ein paar Tagen habe ich diesen Beitrag mit demselben Titel gelesen, als ich ihn im HNQ gefunden habe. In dieser Frage wird diskutiert, ob die Behauptung der Präsidentschaftskandidatin Bernie Sanders, die folgendes behauptete:
Heute besitzen die 26 reichsten Milliardäre der Welt, 26, so viel Wohlstand wie die ärmsten 3,8 Milliarden Menschen auf dem Planeten, die Hälfte der Weltbevölkerung.
Link zum Video
ist wahr oder nicht. Bitte gehen Sie zur Frage selbst, um dort Antworten und Diskussionen zu erhalten.
Was die eigentliche Herausforderung betrifft, die auf dieser Behauptung basiert:
Herausforderung:
Zwei Eingänge: ein absteigend sortiert Zahlenliste und eine Anzahl (wobei ist ). Ausgabe: Die längste mögliche Suffix-Teilliste von für die die Gesamtsumme die Summe der ersten Werte in Liste .L ≤ n L
Beispiel:
Eingänge: = und .
Ausgabe:[500,200,150,150,125,100,75,75,55,50,40,30,30,20,10,10,8,5,5,5,3,2,2,1,0,-2,-3]
[125,100,75,75,55,50,40,30,30,20,10,10,8,5,5,5,3,2,2,1,0,-2,-3]
Warum?
Die ersten Werte der Liste ( ) summieren sich zu . Wenn wir alle Suffixe der verbleibenden Zahlen sowie deren Summen nehmen:[500,200]
700
Suffix: Sum:
[-3] -3
[-2,-3] -5
[0,-2,-3] -5
[1,0,-2,-3] -4
[2,1,0,-2,-3] -2
[2,2,1,0,-2,-3] 0
[3,2,2,1,0,-2,-3] 3
[5,3,2,2,1,0,-2,-3] 8
[5,5,3,2,2,1,0,-2,-3] 13
[5,5,5,3,2,2,1,0,-2,-3] 18
[5,5,5,5,3,2,2,1,0,-2,-3] 23
[10,5,5,5,5,3,2,2,1,0,-2,-3] 33
[10,10,5,5,5,5,3,2,2,1,0,-2,-3] 43
[20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 63
[30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 93
[30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 123
[40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 163
[50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 213
[55,50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 268
[75,55,50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 343
[75,75,55,50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 418
[100,75,75,55,50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 518
[125,100,75,75,55,50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 643
[150,125,100,75,75,55,50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 793
[150,150,125,100,75,75,55,50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 943
Das längste Suffix mit einer Summe kleiner oder gleich 700
ist [125,100,75,75,55,50,40,30,30,20,10,10,8,5,5,5,3,2,2,1,0,-2,-3]
mit einer Summe von 643
, also ist das unser Ergebnis.
Herausforderungsregeln:
- Werte im ersten Präfix werden nicht zum Ausgabesuffix gezählt. Dh Eingaben = und würden dazu führen , und nicht .n = 2
[10,5,5,3]
[5,3]
[5,5,3]
- I / O ist flexibel. Sie können als Liste / Stream / Array von Ganzzahlen / Dezimalzahlen / Zeichenfolgen, eine einzelne durch Trennzeichen getrennte Zeichenfolge, eine nach der anderen durch STDIN usw. eingeben. Sie können als Liste / Stream / Array von Ganzzahlen / Dezimalzahlen / Zeichenfolgen ausgeben. Drucken / Zurückgeben einer begrenzten Zeichenfolge, Drucken einer Nummer in jeder neuen Zeile usw. Ihr Anruf.
- Die Ausgabe ist garantiert nicht leer. Sie werden also nicht mit Testfällen wie zu tun haben = und führt . n = 2
[-5,-10,-13]
[]
- Sowohl (als auch) die Eingabe und / oder Ausgabe kann auch in aufsteigender Reihenfolge statt in absteigender Reihenfolge erfolgen, wenn Sie dies wünschen.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln mit Standard-E / A-Regeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp, verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu (z. B. TIO ).
- Außerdem wird dringend empfohlen, eine Erklärung für Ihre Antwort hinzuzufügen.
Testfälle:
Inputs: L=[500,200,150,150,125,100,75,75,55,50,40,30,30,20,10,10,8,5,5,5,3,2,2,1,0,-2,-3], n=2
Output: [125,100,75,75,55,50,40,30,30,20,10,10,8,5,5,5,3,2,2,1,0,-2,-3]
Inputs: L=[10,5,5,3], n=2
Output: [5,3]
Inputs: L=[7,2,1,-2,-4,-5,-10,-12], n=7
Output: [-12]
Inputs: L=[30,20,10,0,-10,-20,-30], n=1
Output: [20,10,0,-10,-20,-30]
Inputs: L=[100,35,25,15,5,5,5,5,5,5,5,5,5,5,5,5,5], n=1
Output: [15,5,5,5,5,5,5,5,5,5,5,5,5,5]
Inputs: L=[0,-5,-10,-15], n=2
Output: [-10,-15]
Inputs: L=[1000,999,998,900,800,766,525,525,400,340,120,110,80,77,33,12,0,-15,-45,-250], n=2
Output: [525,525,400,340,120,110,80,77,33,12,0,-15,-45,-250]
Inputs: L=[10,5,5], n=1
Output: [5,5]
[131000000000, 96500000000, 82500000000, 76000000000, (7.7 billion more entries)]
L = [-5,-10,-13]
undn=2
resultierenden Testfällen befassen[]
. " Außerdem ist die Eingabeliste garantiert absteigend sortiert (oder Aufsteigend, wenn Sie möchten),[1,2,3]
ist also zunächst keine gültige Eingabeliste (es sei denn, Sie wählen eine aufsteigende Eingabe, in diesem Fall[1,2]
wäre dies das Ergebnis).Antworten:
C # (Visual C # Interactive Compiler) ,
8881696863 Byte-4 Bytes dank LiefdeWen
Probieren Sie es online!
quelle
+b
dasSkip
Gespräch beenden. Es ist überflüssig, die ersten
Liste zu überprüfen , aber ich denke, es ist immer noch richtig.EXAPUNKS (2 EXAs, 30 Anweisungen, 594-Byte-Lösungsdatei)
Ich wollte eine Weile eine Code-Golf-Herausforderung in EXAPUNKS ausprobieren, und Sie sahen so aus, als würden Sie am besten zu mir passen, also herzlichen Glückwunsch!
Eingabe über die Dateien 200 und 201 für L bzw. n. Ausgabe über eine neue Datei. L und die Ausgabe sind in aufsteigender Reihenfolge.
Grundsätzlich summiert XA die letzten n Werte in L und sendet sie dann an XB. Es sucht dann nach dem Anfang von L und sendet jeden Wert einzeln an XB. XB empfängt zuerst die Summe von XA und speichert sie in Register X. Anschließend empfängt XA nacheinander die Werte, zieht den neuen Wert von X ab und schreibt diese Werte in die Ausgabedatei, bis X <0 ist.
XA
XB
JavaScript für das Level hier
quelle
Python 2 , 60 Bytes
Probieren Sie es online!
Erläuterung:
Zuerst wird die Summe der ersten
n
Elemente genommen.Dann wird die Summe jeder Unterliste mit dieser Summe verglichen. Sobald einer nicht größer ist, hören wir auf.
Dann wird die resultierende (längste) Unterliste gedruckt.
quelle
05AB1E ,
1412 Bytes2 Bytes dank Grimy gespart
Probieren Sie es online!
Erläuterung
quelle
.$.sʒO²¹£O>‹}θ
. :)|
überschrieb dielast-input
, interessant.|
hier verwenden, wird das Ergebnis|
zur letzten Eingabe anstelle der letzten Eingabe.J , 18 Bytes
Probieren Sie es online!
Erläuterung:
Ein dyadisches Verb, das
n
als linkes Argument undL
- als rechtes Argument verwendet.quelle
Ruby ,
4743 BytesÜbernimmt eine aufsteigende Liste als Eingabe. Entfernt Elemente vom Ende des Arrays, um die anfängliche Summe zu erhalten, und setzt dann das Entfernen der Elemente fort, bis die Summe der verbleibenden Elemente kleiner als die anfängliche Summe ist.n
-4 Bytes durch genaueres Lesen der Spezifikation.
Probieren Sie es online!
quelle
R , 53
55Bytes@ Giuseppe hat mir 2 Bytes gespart und die Art und Weise geändert, wie das Entfernen durchgeführt wurde
Probieren Sie es online! Nimmt die Eingabe als absteigend und gibt sie in aufsteigender Reihenfolge aus, wie in Regel 4 zulässig.
Y
wird die Drehzahl vonL
mit 1: n mit entfernt0:-n
Y
wo die kumulative Summe kleiner ist als die Summe vonL[X]
quelle
X
Verwendung zu entfernen ,-(1:n)
aber das war natürlich die gleiche Größe, so ließ esJavaScript (ES6), 66 Byte
Nimmt die Eingabe wie
(a)(n)
bei der Liste in aufsteigender Reihenfolge vor.Probieren Sie es online!
Kommentiert
quelle
Python 2 , 59 Bytes
Auch kompatibel mit Python 3
Probieren Sie es online!
Erläuterung
Die Summe des Suffixes wird mit der Hälfte der Summe der gesamten Liste verglichen. Wenn die Summe des Suffix kleiner oder gleich ist, wird das Suffix zurückgegeben. Wenn nicht, wird die Funktion rekursiv aufgerufen, wobei das erste Element des Suffixes herausspringt.
quelle
Pyth ,
1615 BytesProbieren Sie es online!
Es wird erwartet, dass die Eingabeliste in aufsteigender Reihenfolge sortiert wird und nicht in absteigender Reihenfolge, wie dies in den Beispielen verwendet wird.
In solchen Situationen wünschte ich mir wirklich, ein einzelner Token-Operator könnte mehr als einmal auf die zweite Eingabe zugreifen (
E
wertet die nächste Eingabezeile aus, wiederholte Aufrufe verwerfen jedoch den zuvor gelesenen Wert).Bearbeiten: 1 Byte dank MrXcoder gespeichert
quelle
JavaScript, 64 Byte
Probieren Sie es online!
quelle
Stax , 12 Bytes
Führen Sie es aus und debuggen Sie es unter staxlang.xyz!
Schönere Version
Entpackt (14 Bytes) und Erklärung:
Aus Konsens kann ich dieses Ergebnis auf dem Stapel belassen. Stax versucht einen impliziten Druckvorgang, der möglicherweise fehlschlägt. Wenn Sie jedoch ein
m
an das entpackte Programm anhängen , sehen Sie die Ausgabe gut.Sieht aus wie
{ ... }j
ist das gleiche wie{ ... fh
. Huh. Edit: Das ist nicht ganz der Fall; Erstere hören auf, wenn das Ergebnis wahr ist, und vermeiden möglicherweise später Nebenwirkungen oder einen schwerwiegenden Fehler.quelle
APL + WIN, 27 Bytes
Fordert zur Eingabe von L und dann n auf.
Probieren Sie es online! Mit freundlicher Genehmigung von Dyalog Classic
quelle
Japt , 16 Bytes
Versuch es
quelle
Jelly ,
13-12BytesProbieren Sie es online!
Vielen Dank an @ JonathanAllan für das Speichern eines Bytes!
Erläuterung
quelle
ṫḊÐƤS>¥ÞḣS¥Ḣ
Gaia , 12 Bytes
Probieren Sie es online!
Ich denke, es gibt ein Byte, das ich spielen kann, wenn ich den richtigen Stack bekomme.
quelle
Haskell , 46 Bytes
Unzufrieden damit, wie das aussieht; Ich hoffe, ich vermisse nur ein paar offensichtliche Golfplätze.
Probieren Sie es online!
Ich habe versucht, das Präfix und das Suffix mit
splitAt
und Pattern Matching in einem Guard abzurufen, aber das waren 3 Bytes mehr. Sie möchten später versuchen, mithilfe von Guards in eine rekursive Funktion zu konvertieren, um festzustellen, ob dies die Anzahl der Bytes verringert.Erläuterung
Was ich als "das Präfix" bezeichne, sind die ersten
n
Elemente und "das Suffix" ist der Rest der Liste.quelle
APL (Dyalog Unicode) ,
2321 Byte SBCSProbieren Sie es online!
{
}
⍺
⍵
⌽⍵
+\
Präfixsummen davon(
…)<
Boolesche Maske, bei der weniger als:⍺↑⍵
+/
summiere diese⊥⍨
Hinterwahrheiten zählen⍺⌈
⍵↓⍨
quelle
MATL ,
13 -12 Bytes1 Byte gespart dank @Giuseppe , basierend auf der Antwort von @MickyT .
Die Ausgabe erfolgt in aufsteigender Reihenfolge.
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
Betrachten Sie Eingaben
2
und[500,200,150,150,125,100,75,75,55,50,40,30,30,20,10,10,8,5,5,5,3,2,2,1,0,-2,-3]
.quelle
PowerShell ,
99 bis97 ByteProbieren Sie es online!
Nimmt Liste in aufsteigender Reihenfolge, Ausgabe ist absteigend (weil es einfacher war, mit den Testfällen zu vergleichen: ^))
Geht die Liste
rückwärtsvorwärts durch und vergleicht den Akkumulator mit den zuletztn
hinzugefügten Einträgen (durch Zusammenkleben mit+
s und Übergeben der resultierenden Zeichenfolge aninvoke-expression
). Die Until-Schleife benötigte zusätzliche Logik, um in die Rich Neighborhood zu gelangen, da sie nicht aufhören würde, wenn wir immer noch nicht reicher sind als die Rich Guys, bis wir die gesamte Liste durchgearbeitet haben.Abgerollt:
quelle
Retina 0.8.2 , 99 Bytes
Probieren Sie es online! Link enthält nur einige Testfälle; Ich könnte es in einigen Fällen mit negativen Zahlen zu einem Preis von 12 Bytes zum Laufen bringen (insbesondere müssen die ersten
n
EinträgeL
noch positiv sein; theoretisch könnte ich wahrscheinlich nur die Summe der erstenn
Einträge als positiv verlangen ). Erläuterung:In Unary konvertieren.
Fügen Sie am Anfang von eine Markierung ein
L
.Verschiebe es
n
mal die Liste runter und summiere wie wir gehen. Dies wird gelöscht,n
aber das Komma bleibt erhalten.Erstellen Sie einen Eintrag für jedes Suffix von
L
.Ersetzen Sie die Mitte durch eine Kopie des Suffixes.
Summiere die Kopie des Suffix.
Nehmen Sie den ersten Eintrag, bei dem die Suffixsumme die Präfixsumme nicht überschreitet.
Löschen Sie die Summen.
In Dezimalzahl konvertieren.
Löschen Sie das vorangegangene Komma
n
.quelle
r
Option zu beheben. Deshalb habe ich sie jetzt mit einigen Testfällen verknüpft.Kohle , 17 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
Rot , 63 Bytes
Probieren Sie es online!
quelle
PowerShell , 86 Byte
Probieren Sie es online!
Abgerollt:
quelle
MathGolf , 13 Bytes
Probieren Sie es online!
Erläuterung
Übernimmt die Eingabe als
n L
Der Grund, warum dies funktioniert, ist, dass wir im ersten Schritt die Liste tatsächlich in zwei überlappende Teile aufteilen. Als Beispiel
L = [4, 3, 2, 1], n = 2
wird die Liste als[3, 2, 1]
und aufgeteilt[4, 3]
. Der Grund für ein zusätzliches Element in der ersten Liste ist, dass in der Schleife als Erstes ein Verwerfen erfolgt. Wenn kein zusätzliches Element vorangestellt wird, schlagen die Fälle fehl, in denen die Ausgabe der gesamte Rest der Liste sein soll.quelle
Wolfram Language (Mathematica) , 40 Byte
Probieren Sie es online!
quelle
Clojure,
6675 BytesLeider scheint es kein kürzeres Idiom für die Gesamtsumme einer Sequenz zu geben.
Edit : Oh beim Hinzufügen von Beispielen zum Try it online! link Mir ist aufgefallen, dass die ursprüngliche Antwort bei vielen negativen Zahlen zu falschen Ergebnissen führte.
Die
doseq
verwendet "Schlüssel" -Destrukturierung, so dass etwas klar sein sollte, welche Daten in welchem Symbol landen.#(...)
ist eine anonyme Funktion, hier binde ich sie an das Symbolf
:Ausgabe:
quelle
APL (NARS), 32 Zeichen, 64 Byte
Test und Kommentare:
Ich habe die Bytelänge falsch angegeben ...
quelle
MS SQL Server 2017 , 271 Byte
Ich weiß, dass die Verwendung einer mehr beziehungsähnlichen Tabelle zum Speichern der Eingabedaten den Code prägnanter machen kann, aber wenn
STRING_SPLIT
ich den Zeichendatentyp zum Speichern der numerischen Liste und der Funktion verwende, wird derBuild Schema
Teil kürzer :)Mehr lesbare Version:
Probieren Sie es auf SQL Fiddle !
quelle
Python 3.8 (Vorabversion) , 59 Byte
Die Ausgabe erfolgt in aufsteigender Reihenfolge
Probieren Sie es online!
quelle