Schreiben Sie ein Programm oder eine Funktion, die ein Array nicht negativer Ganzzahlen als Eingabe verwendet und eine Reihe von Vektoren / Arrays mit den Elementen des Eingabearrays in der angegebenen Reihenfolge ausgibt. Teilen Sie diese so auf, dass jeder Vektor bis zu 15 summiert N Elemente "treffen 15" nicht, dann muss die Zahl, die 15 passiert hat, abgeschnitten werden, und der Rest ist das erste Element des nächsten Vektors. Dies geht so lange weiter, bis Sie das Ende des Eingabearrays erreicht haben. Wenn die Summe des Endvektors kleiner als 15 ist, muss am Ende eine Zahl hinzugefügt werden, damit die Summe steigt.
Ich denke, die Regeln sind leichter zu verstehen, wenn man sich die Beispiele ansieht:
Input: 3 7 5 10
Output:
3 7 5 <- Sum is 15
10 5 <- 5 is added to make the sum 15
Input: 2 4 5 9 2 3 5 0 2 4 5 0 3
Output:
2 4 5 4 <- Sum 15. 9 is split in two.
5 2 3 5 <- The first 5 is the remainder of 9
0 2 4 5 0 3 1 <- The last number is added to make the sum 15
Input: 1 1 1
Output:
1 1 1 12 <- The number 12 is added to make the sum 15
Input: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Output:
1 2 3 4 5
6 7 2 <- 2 is the first part of 8
6 9 <- 6 is the remainder of 8
10 5 <- 5 is first part of 11
6 9 <- 6 is remainder of 11. 9 is first part of 12
3 12 <- 3 is remainder of 12. 12 is first part of 13
1 14 <- 1 is remainder of 13. 14 is 14
15
15 <- 15 is first part of 16
1 14 <- 1 is remainder of 16. 14 is first part of 17
3 12 <- 3 is remainder of 17. 12 is added to make the sum 15
Input: 20 20
Output:
15
5 10 <- 5 is remainder from the first 20
10 5 <- 10 is remainder from second 20. 5 is added to make the sum = 15.
Sowohl das Eingabe- als auch das Ausgabeformat ist optional. Was auch immer am besten in Ihrer Sprache ist.
Der kürzeste Code in Bytes gewinnt.
Bestenliste
Das Stapel-Snippet am Ende dieses Beitrags generiert den Katalog aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamt-Bestenliste.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
## Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
## Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
quelle
[[3, 7, 5], [10, 5]]
dass dies eine gültige Ausgabe für den ersten Testfall ist?Input: 100 Output: 15; 15; 15; 15; 15; 15; 10 5
Antworten:
Pyth, 37 Bytes
Erklärt
Dies war mein erster Pyth, also zögern Sie nicht, Verbesserungen vorzuschlagen.
Beispiel:
Eingang
Ausgabe
Hinweis: Vielen Dank an Isaacg für einige Ratschläge zur Größenreduzierung und zur ersten Erstellung von Pyth! Bitte stimmen Sie seine Kommentare unten :)
quelle
.?
anstelle von zu seinE
, aber ich vergaß, die Dokumente zu aktualisieren. Das tut mir leid.=Z+ZN
und=+ZN
sind die gleichen. Es ist ein bisschen wie bei Python+=
. Likewiese,=Z-ZK
->=-ZK
. Außerdem brauchen Sie das)
am Ende nicht - es wird automatisch ausgefüllt. SchließlichFNQ
undVQ
sind die gleichen.I>Z0
durchIZ
- ersetzen. DiesZ
kann nicht negativ sein. Sie überprüfen also nur, obZ
nicht Null und Null falsch ist, während alle anderen Zahlen der Wahrheit entsprechen.Java -
229200192181172170168 BytesHatte schon begonnen, nicht um zu gewinnen, sondern um Spaß zu haben :)
Jeder Vorschlag ist willkommen.
8 Bytes dank @ThomasKwa
gespeichert 20 Bytes dank @corsiKa
gespeichert 2 Bytes dank @Ypnypn
gespeichert 2 Bytes dank @ user902383 gespeichert
170 Bytes
172 Bytes
181 Bytes
192 Bytes
200 Bytes
229 Bytes
quelle
Python 3 - 1̶7̶7̶ 1̶3̶8̶ 1̶6̶6̶ 1̶3̶3̶ 113
Edit 5 Wirklich golfen dank @poke * entfernter Zeilenumbrüche etc
Bearbeiten Sie 4 Alias-Druck und ersetzen Sie ein = durch ein - =, um ein Byte zu speichern. Danke an @poke und @elzell. Außerdem wurde die Eingabeauswertung in die for-Schleife verschoben, um 2 Byte von der Zuweisung zu sparen
Edit 3 Gefundene Einsparungen in verschiedenen OO innerhalb von Sekunden, wenn
Edit 2 Fehler behoben
Bearbeiten 1 Die Eingabe wurde in die Form '[1,2,3,4,5 ...]' geändert und die ersten beiden Kommentare wurden implementiert, ein großes Dankeschön an @Morgan Thrapp
Zum ersten Mal Poster hier. Die Eingabe ist eine Befehlszeile mit durch Leerzeichen getrennten Einträgen, die Ausgabe erfolgt zeilenweise mit einer neuen Zeile zwischen den Gruppierungen.
quelle
print
so oft, sollten Sie es als Variable speichern:p=print
. Speichert weitere 14 Zeichen.if s>i:s-=i;p(e-s);p();e=s
für die zweite. Das erspart Ihnen Zeilenumbrüche und Einrückungszeichen.Haskell,
126107102100 BytesAnwendungsbeispiel:
(#[]).(++[14]) $ [1..17]
->[[1,2,3,4,5],[6,7,2],[6,9],[10,5],[6,9],[3,12],[1,14],[15],[15],[1,14],[3,12]]
Edit: @Stewie Griffin hat mir geholfen, 19 Bytes zu sparen. Vielen Dank!
quelle
CJam, 39 Bytes
Teste es hier.
Das fühlt sich sehr suboptimal an, aber bisher wurden alle meine Versuche einer kürzeren Lösung durch das Vorhandensein von Nullen in der Eingabe vereitelt.
quelle
Python2 powered by RegEx :
158 bis155 BytesMit Liebe und fast ohne Mathe in Python gemacht.
Oder Regex Math, wenn Sie so wollen, unäre Mathematik.
"Echte" Mathematik dient nur dazu, die letzte Anforderung zu "reparieren":
Codegolf:
Die Art und Weise, wie dies funktioniert, besteht darin, jede Zahl N in eine Zeichenfolge der Länge N ( x als Zeichen zum Auffüllen der Zeichenfolge ausgewählt) umzuwandeln und sie alle in einem Leerzeichen zu verbinden
string
. Die resultierende Zeichenfolge wird über RegEx BLACK MAGIC in Folgendes aufgeteilt:für eine Eingabe wie:
f([1, 2, 3, 4, 5, 6, 7, 8, 10])
Das ist dann wieder geteilt, und die Länge aufeinanderfolgender
x
es wird verwendet, um die Zahlen erneut zu erstellen, alles schön in einem Listenverständnis gepackt.Ungolfed:
Ausgabe:
Hinweis: Es gab nicht genug Magie für die Nullen, daher wird dieser Eintrag disqualifiziert
quelle
Im Ernst, 88 Bytes
Probieren Sie es online aus
Es ist meine erste ernsthafte Antwort! Jetzt kenne ich alle Mängel der Sprache genau!
Hex Dump:
Erläuterung:
quelle
Javascript,
138128 BytesMit Leerzeichen:
Beispiel:
Weisen Sie die Funktion einer Variablen zu
Dann bewerte wie folgt:
Versionsgeschichte:
03.12.2015 00:02 - Vielen Dank an user81655 (+1 in den Kommentaren) für die 10-Byte-Verbesserung
02.12.2015 21:44 - Umgestellt, um den funktionalen Stil zu verwenden, um die Größe zu reduzieren.
quelle
f=
nicht erforderlich ist , nach Aufstellungsortrichtlinien, entfernen Sie die Klammern aus(i)
, Surround mit ,eval
so dass Sie nicht brauchenreturn
oder die Klammern und ersetzen dieif
mit einem ternären so dasso
zurückgegeben und Änderung'\n'
zu`\n`
, merget+=...
mitt>=m
entfernen Loop-Klammern. Hier ist Ihre Lösung in 127 Bytes mit all diesen Verbesserungen:i=>eval("for(o=z=n='',m=15,t=q=0;q<i.length;q++)(t+=c=+i[q])>=m?(t-=m,z+=c-t,o+=z+`\n`,z=t>0?t+' ':n):z+=c+' ';t<m?o+z+(m-t):o")
o+
dem Zeilenende einige Symbole hinzu . Löscheno+=z
und schreiben Sie es erneut und es wird funktionieren. : P\n
keinen Unterschied`\n`
? Ohne geht es nicht, weil der Code"..."
wegen dereval
.Python 3: 139 Bytes
Etwas anderer Ansatz als die andere Antwort. Produziert die tatsächliche Ausgabe der Frage, da ich anfangs davon ausgegangen bin, dass dies eine Anforderung war.
Anwendungsbeispiel:
quelle
Perl, 86 Bytes
Wenn Sie den Shebang als drei zählen, wird die Eingabe von stdin übernommen, wobei das Leerzeichen getrennt ist.
Beispielnutzung
quelle
R, 155 Bytes
Mit Einrückungen und Zeilenumbrüchen:
Verwendung:
quelle
Python 2, 117 Bytes
Übernimmt die Eingabe als Liste:
quelle
Perl, 76 Bytes
Beinhaltet +3 für
-p
(normalerweise +1, aber +3, um fair mit der anderen Perl-Lösung zu spielen)Mit der Eingabe auf STDIN ausführen (der letzte Zeilenumbruch bei der Eingabe ist optional, MUSS jedoch für die leere Eingabe fehlen)
sum15.pl
:Schau ma, überhaupt keine Berechnungen ...
quelle
0
s sind in dieser Lösung ziemlich knifflig (dargestellt durch zusätzliche Leerzeichen), und ich muss sehr vorsichtig mit Leerzeichen umgehen, um die0
korrekte Anzahl von s beizubehalten. Betrachten Sie insbesondere Eingaben, bei denen eine Teilsumme genau 15 ist, wie1 14 2 13
. Probieren Sie sie ohne das "?" Und sehen Sie, was passiertJava -
158155 BytesLambda-Version von https://codegolf.stackexchange.com/a/65590/46866 von yassin-hajaj , Ich bin nicht sicher, ob eine gültige Einsendung vorliegt , habe aber nicht genügend Mitarbeiter, um einen Kommentar zu der verknüpften Antwort hinzuzufügen. Mit http://meta.codegolf.stackexchange.com/questions/4944/byte-counter-snippet gezählt
158 Bytes
Ungolfed
kann gerne verwendet werden
quelle