Die Einrichtung:
Ein soziales Netzwerk gibt die Anzahl der Stimmen eines Posts auf zwei Arten an: die Anzahl der Netto-Upvotes (Gesamt-Upvotes - Gesamt-Downvotes) und die Prozentzahl der Stimmen, die Upvotes waren , auf die nächste Ganzzahl gerundet (0,5 Aufrundungen ). Die Anzahl der Netto-Upvotes ist eine ganze Zahl (nicht unbedingt positiv), und die zweite ist garantiert eine ganze Zahl zwischen 0 und einschließlich +100. Sowohl die Anzahl der positiven als auch die Anzahl der negativen Stimmen sind entweder null oder positive 32-Bit-Ganzzahlen (Sie können vorzeichenbehaftete oder vorzeichenlose angeben). Angenommen, bei einer Gesamtzahl von null Stimmen wird der Prozentsatz der abgegebenen Stimmen als null gemeldet.
Die Herausforderung:
Was ist das kürzeste Programm, das Sie schreiben können, um die niedrigste Anzahl von Gesamt-Upvotes zu ermitteln, die der Beitrag erhalten hat, wenn alle oben genannten Bedingungen erfüllt sind?
Eingabebeschränkungen sind garantiert. Wenn die Eingabe die oben genannten Einschränkungen nicht erfüllt, liegt das Programmverhalten bei Ihnen. Bonus-Kudos, wenn es nicht in eine Endlosschleife geht oder auf andere Weise abstürzt. Überlegen Sie, ob Sie eine negative Zahl zurückgeben möchten, wenn Sie weitere Anleitungen benötigen.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste gültige Lösung (gemessen 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. Bonuskudos für eine clientseitige Web-Sprache wie Javascript.
- Wenn Sie interessante Lösungen in mehreren Sprachen haben, veröffentlichen Sie diese separat .
- Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und dem richtigen Rückgabetyp oder vollständige Programme verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie außerdem eine Erläuterung der Funktionsweise des Codes hinzu.
- Denken Sie daran, dass wenn Sie eine Ganzzahldivisionsoperation ausführen, die anstelle von Runden abschneidet (z. B. 20/3 = 6) , dies möglicherweise nicht vollständig korrekt ist.
- Zusätzliche Testfälle, die die Randfälle in den obigen Einschränkungen untersuchen, sind willkommen.
- Während der erwartete Rückgabetyp numerisch ist, kann anstelle von 0 der Boolesche Wert "false" verwendet werden .
Beispiel Testfälle:
Die erste Spalte enthält lediglich eine Referenznummer, um die Diskussion zu erleichtern.
ref net %up answer
1 0 0 => 0
2 -5 0 => 0
3 -4 17 => 1
4 -3 29 => 2
5 -2 38 => 3
6 -1 44 => 4
7 0 50 => 1
8 5 100 => 5
9 4 83 => 5
10 3 71 => 5
11 2 63 => 5
12 1 56 => 5
13 1234 100 => 1234
14 800 90 => 894 (tip: don't refer to this as the "last test case;" others may be added.)
1000, 100
. Können Sie bestätigen, dass die erwartete Antwort ist1000
?Antworten:
JavaScript (ES6), 47 Byte
Nimmt Eingaben in der Currying-Syntax vor
(n)(p)
, wobei n die Anzahl der Netto-Upvotes und p der Prozentsatz der Upvotes ist. Mai zurückkehrenfalse
für0
.Probieren Sie es online!
Kommentiert
Edge-Fälle
Sei F n (u) = u / (u - n / 2) * 50 + 0,5
Wenn U = 0 und n = 0 , dann F n (u) = NaN und F n (u) XOR p = p . Wir geben also u = 0 zurück, wenn n = p = 0 (erste Iteration des ersten Testfalls) oder fahren mit der Rekursion fort, wenn p! = 0 (erste Iteration des 7. Testfalls).
Wenn u> 0 und u = n / 2 , dann ist F n (u) = + Unendlich und - wieder - F n (u) XOR p = p . Sofern nicht p = 0 , fahren wir mit der nächsten Iteration fort. (Dies geschieht im 9. und 11. Testfall.)
quelle
Stax , 17 Bytes
Führen Sie es aus und debuggen Sie es
Das ist rohe Gewalt. Es beginnt mit 0 für Kandidaten-Upvotes und wird inkrementiert, bis es die Formel erfüllt.
Ausgepackt, ungolfed und kommentiert sieht es so aus.
Führen Sie dieses aus
quelle
Sauber ,
114107104 BytesProbieren Sie es online!
Definiert die Funktion
$ :: Int Int -> Real
, bei der die Argumente Ganzzahlen mit Vorzeichen sind und der Rückgabewert ein Gleitkomma mit doppelter Genauigkeit ist, das exakt durch eine 32-Bit-Ganzzahl mit Vorzeichen dargestellt werden kann.Es prüft jeden Wert
c
in der Gleichungb=-cd/(d+1)
, um eineb
befriedigende zu finden ,a+c=b
und nimmtb/(b+c)=d
, da das kleinstec
Ergebnis das kleinsteb
ist, das erste Element der Menge aller Lösungen.quelle
05AB1E , 13 Bytes [geringfügig unterbrochen]
Probieren Sie es online!
Erläuterung:
Um dies zu lösen, nahm ich die Eingaben a, b und das erwartete Ergebnis x an. Angesichts der Informationen im Setup ergab sich folgende Gleichung:
Neuordnung für x ergibt
Der einzige Testfall, für den dies nicht funktioniert, ist 0, 50 - ich habe es einfach hartcodiert, um dies zu überprüfen.
quelle
Gehe zu 1.10, 154 Bytes
Probieren Sie es auf Go Playground! (TIO führt Go 1.9 aus, das keine math.Round hat.)
Ungolfed-Version
Um eine Erklärung hinzuzufügen, kann die obige Formel für r durch gleichzeitiges Lösen
n=v-d
undu = 100 * v/(v + d)
für v abgeleitet werden, wobei v und d die Anzahl der positiven bzw. negativen Stimmen sind. Die abgeleitete Formel ist für v = 50 undefiniert, daher müssen wir diesen Fall behandeln (was wir mit der ersten if-Anweisung tun).quelle