Multi-Level-Marketing-Herausforderung.
Ein Peer möchte belohnt werden. Es zog also N
Investoren an ( N>=1
), jeder i-te Investor investierte x[i]
. Wenn eine Gesamtsumme den Schwellenwert überschreitet, kann x[0]+x[1]+...+x[N-1] >= T
ein Peer belohnt werden. Aber nur wenn folgende Bedingungen erfüllt sind:
- Die Mindestanzahl an Anlegern sollte größer sein als
M
(M<=N
) - Für mindestens eine Ganzzahl
k
, bei derk>=M
undk<=N
jederk
Anleger mindestensT/k
jede investieren muss;
Vorausgesetzt, N, x[], T, M
Sie sollten bestimmen, ob die Belohnung des Peers generiert wird oder nicht (boolesches Ergebnis, "Ja" oder "Nein"). Der kürzeste Code gewinnt.
Beispiele:
N=5; M=3; T=10000
Um die Belohnung des Peers zu generieren, muss eine der folgenden Bedingungen erfüllt sein:
- 3 investierten jeweils mindestens 3334
- 4 investierten jeweils mindestens 2500
- Alle 5 investierten jeweils mindestens 2000
N=6; M=2; T=5000
::
- 2 investierten jeweils mindestens 2500
- 3 investierten jeweils mindestens 1667
- 4 investierten jeweils mindestens 1250
- 5 investierten jeweils mindestens 1000
- Alle 6 investierten jeweils mindestens 834
verallgemeinert: für jeden k
, wo k>=M
und k<=N
:
- jeder
k
derN
Anleger investiert mindestensT/k
jeweils
Testfälle:
Format:
N, x[], T, M -> correct answer
6, [999, 999, 59, 0, 0, 0], 180, 3 -> 0
6, [0, 60, 0, 60, 60, 0], 180, 3 -> 1
6, [179, 89, 59, 44, 35, 29], 180, 3 -> 0
6, [179, 89, 59, 44, 35, 30], 180, 3 -> 1
6, [179, 89, 59, 44, 36, 29], 180, 3 -> 1
6, [179, 90, 59, 44, 35, 29], 180, 3 -> 0
6, [30, 30, 30, 30, 29, 30], 180, 3 -> 0
6, [30, 30, 30, 30, 30, 30], 180, 3 -> 1
code-golf
decision-problem
xakepp35
quelle
quelle
len(x)
wird das Schreiben kürzer sein als das SchreibenN
. Dies ist gemacht, weil es für dynamisch zugewiesene Arraysx
in C keine direktelen(x)
Funktion gibt - Sie können sich also immer auf die Länge als beziehenN
. Der Einfachheit halber können Sie alle EingabedatenN, x[], T, M
als extern definierte Konstanten oder als integrierte Sprache betrachten.true
und ein wahrer Wert fürfalse
?Antworten:
Gelee ,
129 BytesEin vollständiges Programm, das akzeptiert
x T M
und druckt,0
ob der Peer belohnt wird und1
wenn nicht.Probieren Sie es online aus!
Wie?
quelle
0
wenn der Peer belohnt wird und1
wenn nicht". (dh0
ist "ja"). Es spart 1 Byte :)05AB1E , 9 Bytes
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Port von @JonathanAllans Jelly-Antwort , nimmt also auch die Ein-
x T M
und Ausgänge0
für"yes"
und1
für"no"
. Wenn dies nicht zulässig ist und invertiert werden sollte, kann ein Trailing_
hinzugefügt werden.Erläuterung:
Alternative für
.ssè
:Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
JavaScript,
5452 BytesProbieren Sie es online aus
quelle
[0, 60, 0, 60, 60, 0], 180, 3 -> true
scheint nicht zu funktionieren! 72 byted bersion handhabt es ok.Netzhaut , 79 Bytes
Probieren Sie es online aus! Nimmt Eingaben im Format vor
[x], T, M
. Link enthält Testfälle. Erläuterung:In unary konvertieren.
[x]
In absteigender Reihenfolge sortieren .Multiplizieren Sie jedes Element
[x]
mit seinem Index.Löschen Sie die ersten
M-1
Elemente von[x]
.Testen Sie, ob ein verbleibendes Element von
[x]
größer oder gleich istT
.quelle
Perl 6 ,
46 3329 BytesProbieren Sie es online aus!
Anonymer Code blockiert, der Eingaben in das Formular übernimmt
list, amount, length of list, minimum amount of investors
und eine Truthy / Falsey-all
Kreuzung zurückgibt , bei der Truthy fehlschlägt und Falsey Erfolg hat.Erläuterung:
quelle
05AB1E , 6 Bytes
Eingang in der Reihenfolge genommen
T
,N
,x[]
, DieM
Ausgabe ist
0
für Peer - Belohnung und1
wenn nichtProbieren Sie es online aus! oder als Testsuite
Erläuterung
quelle
*
mit dem Bereich die Liste implizit zuzuschneiden!C # (.NET Core) ,
129, 89 ByteEDIT: Vielen Dank an Kevin Cruijssen für das Golfen von 40 Bytes und die Erklärung der Mechanik, warum!
Probieren Sie es online aus!
quelle
n
da Sie sie nirgendwo verwenden. entfernt,k
da Sie sichm
selbst verwenden können; eine Variable hinzugefügtl
fürq.Length
da Sie sie zweimal verwenden; Kombinieren Sie die Variablen,int c=0,l=q.Length,j;
damit Sie die zusätzlichen nicht benötigenvar
. Entfernen Sie die unnötigen Klammern, indem Sie alles in den for-loop-Körper einfügen. änderte denc>=k
Scheck inc<k
; und änderte dasif(c>0)break;
inm=c>0?l+1:m;
, da die Schleife stoppt, wenn dasm<=l
Ändernm
inl+1
ein Byte über spartbreak
(und es spart auch in 2 Klammern). :)m=c>0?l+1:m
kann vollständig entfernt werden und&c<1
stattdessen kann der Schleife ein Häkchen hinzugefügt werden. Und wenn Sie die Eingaben
erneut vornehmen, benötigen Sie die nichtq.Length
mehr, sondern können sien
stattdessen verwenden.C # (Visual C # Interactive Compiler) mit Flag
/u:System.Linq.Enumerable
, 69 ByteProbieren Sie es online aus!
Ohne Flags 73 Bytes
Probieren Sie es online aus!
quelle
JavaScript, 72 Bytes
Code
Probieren Sie es online aus!
Akzeptiert Eingaben im Format (x [], T, M)
Erläuterung
quelle
Python 3 , 136 Bytes
Testen Sie einfach die Bedingungen, um sicherzustellen, dass sie erfüllt sind. 1 wenn die Belohnung gegeben wird, 0 wenn nicht.
Probieren Sie es online aus!
quelle
Python ,
7165 BytesProbieren Sie es online aus!
Eine unbenannte Funktion; Port meiner Jelly Antwort. Als solches ist "Ja"
False
und "Nein"True
. Hier verwerfen wir jedoch Testfälle als Teil der Umkehrung und nutzen die Möglichkeit, dieenumerate
Zählung zu initiierenM
. (min
würde auch anstelle von arbeitenall
)quelle
R ,
4342 Bytes-1 Bytes durch noch genauere Implementierung des Ansatzes
Probieren Sie es online aus!
Einfache R-Implementierung von Jonathans Jelly-Ansatz. Ich habe eine Reihe von Variationen ausprobiert, aber dies ist das Beste, was ich mir vorstellen kann, um ein paar Bytes.
1 bedeutet Misserfolg, 0 bedeutet Erfolg.
quelle
Japt,
16141311 BytesVersuch es
quelle
Java 8, 91 (oder 89?) Bytes
Port of @Destroigos C # .NET-Antwort (nachdem ich noch ein bisschen Golf gespielt habe), also stellen Sie sicher, dass Sie ihn positiv bewerten!
Nimmt Ein-
N,x,T,M
und Ausgängetrue
/false
für"yes"
/"no"
.Da die Herausforderung speziell nach
boolean
Ergebnissen fragt , kann ich das1
/ so0
wie es ist nicht zurückgeben, da dies in Java keine gültigen Wahrheits- / False-Werte sind . Wenn stattdessen zwei unterschiedliche Ausgabewerte für"yes"
/"no"
für diese Herausforderung gültig sind, kann der Wert>0
in der Rückgabe gelöscht werden, um zwei Bytes zu sparen. In diesem Fall wird1
/0
für"yes"
/ zurückgegeben"no"
.Probieren Sie es online aus.
Erläuterung:
quelle
C # (Visual C # Interactive Compiler) , 66 Byte
Probieren Sie es online aus!
Inspiriert von der Antwort von @ EmbodimentOfIgnorance.
Ich habe dies bereits erwähnt, aber C # 8 hat ein Bereichsliteral, das diese Antwort in etwa so aussehen lassen könnte:
Ich habe einen Link zu SharpLab mit einem Beispiel gesehen, aber ich konnte ihn nicht selbst zum Laufen bringen.
Eine Sache, die ich geändert habe, war die
x
undt
Werte sind Dezimalstellen. Dies behandelt den Fall, in demt
nicht durchk
etwas besser teilbar ist .quelle