Wahrscheinlich eine einfache Code-Golf-Herausforderung. Wenn 2 positive Ganzzahlen m
und gegeben sind n
, erstellen Sie eine Liste mit n
Werten, die positive Ganzzahlen sind und deren Summe der Zahl entspricht m
. Entweder sind alle Werte in der Ausgabe gleich oder die Differenz ist genau 1.
Beispiele
Beispielsweise
m=6
undn=3
würde werden2, 2, 2
m=7
undn=3
würde2, 2, 3
oder2, 3, 2
oder werden3, 2, 2
m=7
undn=2
würde3, 4
oder werden4, 3
m=7
undn=1
würde werden7
m=7
undn=8
würde einen Fehler erzeugen, da die Summe von 8 positiven ganzen Zahlen nicht 7 sein kann.m=10
undn=4
würde3, 3, 2, 2
oder jede andere Permutation werden
Regeln
- Sowohl bei der Eingabe als auch bei der Ausgabe handelt es sich nur um positive ganze Zahlen.
- Entweder sind alle Werte in der Ausgabe gleich oder die Differenz ist genau 1.
- Die Reihenfolge der Werte in der Liste ist nicht wichtig.
- Die Summe der Werte in der Liste ist gleich
m
. - Wenn es nicht lösbar ist, generieren Sie einen Fehler oder einen falschen Wert (im Fall von m = 7 und n = 8 zum Beispiel).
- Als Ergebnis der anderen Regeln
m=8
undn=3
würde eine der Permutationen von3, 3, 2
(nicht2, 2, 4
) erzeugen
Der Gewinner
Das ist Code-Golf, also gewinnt die kürzeste gültige Antwort - gemessen in Bytes.
float a = -0f, b = 0f; System.out.println(a == b); System.out.println(a + "," + b);
... produzierttrue
und-0.0,0.0
. Sehen Sie, positive 0 und negative 0 sind eindeutig zwei verschiedene Zahlen ... die Implementierung sagt es!Antworten:
Gaia , 4 Bytes
Es gibt fast nur eine eingebaute für diese ...
Erläuterung
quelle
Python 2 ,
4843 BytesGibt
0
bei einem Fehler zurück.Probieren Sie es online!
41 Bytes (mit @ xnors Trick)
Wirft
NameError
auf Fehler.Probieren Sie es online!
quelle
Mathematica, 33 Bytes
Eingang
Ausgabe
gibt False aus, wenn es nicht lösbar ist
quelle
MATL , 7 Bytes
Wenn es keine Lösung gibt, ist die Ausgabe ein Array mit mindestens einer Null, was in MATL falsch ist.
Probieren Sie es online!
Erläuterung
Betrachten Sie Eingaben
m = 10
undn = 4
.quelle
Haskell , 30 Bytes
Probieren Sie es online!
quelle
Kohle , 15 Bytes nach dem Anwenden von NDD 1
Probieren Sie es online!
Gibt nichts aus, wenn es keine Lösung gibt. Link zur ausführlichen Version .
1 NDD = Neil-Driven Development.
Meine vorherige Antwort:
Holzkohle ,
32 27 2420 BytesProbieren Sie es online!
Gibt nichts aus, wenn es keine Lösung gibt. Link zur ausführlichen Version .
Natürlich hätte ich es nicht ohne Neils Hilfe spielen können.
quelle
Cast
Operators funktioniert aus irgendeinem Grund, aber dies ist kein idealer Algorithmus ... Ich habe eine 16-Byte-Lösung.Cast
ich , dass sie auf Listen funktioniert. Ich habe nur noch 11 Bytes ...Map
, wie um alles in der Welt funktioniert es?Map
ist wie die Ausdrucksversion vonfor
, bis auf die Verwendung derselben Schleifenvariablen. In Ihrem Beispiel wird ein Ausdruck also nicht jedes Mal in eine Liste verschoben, sondernMap
automatisch gesammelt und in der Ergebnisliste ausgewertet.R , 33 Bytes
Ein Port von Luis Mendos Oktavantwort . Ziemlich traurig, dass dies fast 50% kürzer ist als meine vorherige Antwort.
Probieren Sie es online!
vorherige Antwort, 63 Bytes:
Eine anonyme Funktion , die zwei (obligatorisch) Argumente nimmt
m
undn
und zwei optional diejenigen , die für den Golfsport gedacht sind. Gibt einen Vektor in aufsteigender Reihenfolge zurück. Für Fehler ist der erste Wert0
, der in R falsch ist, daif
nur der erste Wert des Vektors verwendet wird (mit einer Warnung).Es entspricht im Wesentlichen der folgenden Funktion:
Probieren Sie es online!
quelle
pryr::f(diff(trunc(0:n*m/n)))
funktioniert und ist kürzer!Gelee ,
76 BytesProbieren Sie es online! Gibt nichts für falsch aus.
Wie es funktioniert
quelle
TI-Basic, 23 Bytes
Gibt im Fehlerfall ERR: DIVIDE BY 0 zurück
quelle
Oktave , 24 Bytes
Der Code definiert eine anonyme Funktion. Die Ausgabe ist ein numerisches Array (Zeilenvektor). Wenn es keine gibt, enthält dieses Array mindestens eine Null, was in Octave falsch ist .
Probieren Sie es online!
Erläuterung
0:m/n:m
Erzeugt ein Array vonn+1
Werten von0
bism
mit stepm/n
.fix
Rundet jeden Eintrag auf0
unddiff
berechnet aufeinanderfolgende Differenzen.Als Beispiel sind hier alle Zwischenergebnisse für
m = 7
,n = 3
:quelle
Haskell ,
938988878671 BytesProbieren Sie es online!
Erläuterung
Die Hauptfunktion ist hier
e
.e
wird eine Liste nehmen und im Wesentlichen einen Nudelholz entlang von links nach rechts laufen. Während es ein Element in der Liste gibt, das größer ist als sein Nachbar rechts, werden wir eines von ihm nach rechts verschieben.Jetzt müssen wir dieser Funktion nur noch eine ausreichend einseitige Liste zuführen und sie die Magie ausführen lassen. Auf die Liste, die wir auswählen,
m
folgen nurn-1
Nullen. Da ist das einfach zu machen.Als letztes müssen wir sicherstellen, dass der Fehlerfall behandelt wird. Dafür werfen wir nur einen
Non-exhaustive patterns in function
Fehler, solangem>n
.quelle
error[]
stattdessen indem sie nicht mit einem nicht erschöpfenden Muster:m!n|m>n=e$m:replicate(n-1)0
.(0<$[1..n-1])
kürzer alsreplicate(n-1)0
.C # (.NET Core) ,
868271 BytesLöst einen Fehler für ungültige Eingaben aus.
Probieren Sie es online!
-4 Bytes dank TheLethalCoder
-11 Bytes dank OlivierGrégoire
quelle
a=>b=>
zu Beginn einschließen.using System.Collections.Generic
wenn ich ein zurückgebeIEnumerable<int>
?IEnumerable<int>
in der Funktionsdefinition der Fall ist, müssen Sie das nicht einschließenusing
.Haskell, 48 Bytes
Beginnen Sie mit einer Liste von
n
Nullen. Wiederholen Sie diem
Zeiten: Nehmen Sie das erste Element, fügen Sie eines hinzu und setzen Sie es an das Ende der Liste.Schlägt mit einem Mustervergleichsfehler fehl, wenn
n < m
.Probieren Sie es online!
quelle
Braingolf , 30 Bytes
Probieren Sie es online!
Nimmt Eingaben in umgekehrter Reihenfolge vor (
n
ist erste Eingabe,m
ist zweite)Dividiert
m
durchn
, dupliziert die Ergebnis -n
mal, dann in einer Schleife durch und Inkremente nacheinanderm % n
malquelle
Batch, 71 Bytes
cmd/cset/a
Gibt kein Trennzeichen aus, muss also verwendet werdenecho(
((
vermeidet das DruckenECHO is on.
).quelle
PHP> = 7.1, 62 Bytes
PHP Sandbox Online
quelle
Python 2 , 41 Bytes
Probieren Sie es online!
NameError
wenn es unmöglich ist.Python 2 , 43 Bytes
Probieren Sie es online!
ValueError
wenn es unmöglich ist.quelle
NameError
, per FehlerJavascript (ES6),
57 56 5341 BytesDie Antwort umfasst jetzt eine intelligentere Methode zur Erstellung der Werte. Danke @Neil
Verwendung
Geschichte
Zuerst meins
Anschließend wurde der Spread-Operator und die von @Arnauld eingegebene Currying-Syntax hinzugefügt
quelle
_=>m++/n|0
spart eine Menge Bytes.Java (OpenJDK 8) ,
8073636159 BytesProbieren Sie es online!
Beachten Sie, für Currying Zwecke,
m
undn
sind umgekehrt.quelle
Pyth , 11 Bytes
Probieren Sie es online!
quelle
Pyth , 13 Bytes
Probieren Sie es online! Ausgabe
0
bei Fehler.Schummeln, 6 Bytes
Probieren Sie es online! Das Array enthält einen Ein-
0
Fehler. Leider ist das in Pyth nicht falsch .Erläuterung
quelle
CJam ,
1312 BytesProbieren Sie es online!
Dies ist ein anonymer Block, der die Eingabe wie
n m
auf dem Stapel nimmt. Es wäre eine gute Antwort gewesen, aber das Erfordernis der Fehlerbehandlung hat es völlig zunichte gemacht.Fehler mit einer Division durch Null, wenn es nicht möglich ist, sie zu lösen.
Erläuterung
Wenn die Fehlerbehandlungsanforderung aufgehoben wird, kann dies auf 7 Byte verkürzt werden, was einer Verringerung von über 40% entspricht:
quelle