Nach @ MartinBüttner erreicht genau 10.000 Ruf , wir haben jetzt drei volle Reihen von 10k Benutzer auf der Benutzer - Seite ! Da wir hier alle Programmierer sind, möchten wir Dinge automatisieren, anstatt sie manuell auszuführen. Ihre Herausforderung besteht darin, ein Programm zu schreiben, mit dem Sie automatisch neuen 10k-Benutzern gratulieren können.
Spezifikation
Eingang
Die Eingabe erfolgt in n
Zeilen mit durch Leerzeichen getrennten Zahlen. (Wenn Sie möchten, können Sie auch eine einzelne durch Kommas getrennte Liste von durch Leerzeichen getrennten Zahlen verwenden, wenn dies Ihren Code kürzer macht.) Zum Beispiel:
10 20 30 40 50
15 25 35 45 55
20 30 40 50 60
Oder:
10 20 30 40 50,15 25 35 45 55,20 30 40 50 60
Jede Nummernliste repräsentiert eine Liste der Reputationswerte der Benutzer an einem einzelnen Tag.
Ausgabe
Die Ausgabe erfolgt in der gleichen Anzahl von n
Zeilen (oder in einer durch Kommas getrennten Liste mit der gleichen Länge). Jedes Zeilen- / Listenelement ist:
:D
wenn es einen Benutzer gäbe, dessen Ruf gerade> = 10.000 wurde.- Mehrere durch Leerzeichen getrennte
:D
s, wenn mehrere Benutzer die Anzahl von 10.000 Wiederholungen erreicht oder überschritten haben. Zum Beispiel:D :D :D
für 3 neue 10k Benutzer.
- Mehrere durch Leerzeichen getrennte
:(
und dann die weitere Ausgabe anhalten, wenn die Eingabe mehrdeutig oder unmöglich ist (mehr dazu im nächsten Abschnitt).- nichts, wenn keine dieser Bedingungen erfüllt ist.
Mehrdeutigkeit
Möglicherweise ist die Eingabe nicht eindeutig. Für die Zwecke dieser Herausforderung gehen wir davon aus, dass:
- Die Reputationsobergrenze liegt bei 200 pro Tag, wobei Akzeptanz, Kopfgeld und dergleichen für die Herausforderung ignoriert werden.
- Die Benutzer dürfen ihren Ruf nicht verlieren (der Einfachheit halber und wegen der Herausforderung).
Eingaben gelten als mehrdeutig, wenn nicht festgestellt werden kann, welche Reputationswerte welchem Benutzer entsprechen. Beispielsweise können Sie in der Eingabe 10 20,30 40
nicht feststellen, ob der Benutzer mit 10 oder 40 Wiederholungen der Benutzer mit 30 oder 40 Wiederholungen wurde.
Eine Eingabe wird als unmöglich angesehen, wenn die Benutzer eines Tages möglicherweise nicht die Benutzer des nächsten Tages geworden sind. Beispielsweise ist 10 20,310 320
diese Situation bei der Eingabe eindeutig unmöglich, da die Benutzer nicht an einem Tag 300 Reputation hätten erlangen können. Es ist auch unmöglich, dass Benutzer ihren Ruf verlieren.
Edge-Fälle
- Die anfänglichen Reputationswerte können bei irgendetwas beginnen (dh ein Benutzer kann mit 1337 Reputation beginnen).
- Für den ersten Zeilen- / Listeneintrag erfolgt keine Ausgabe.
- Die Eingabe ist immer syntaktisch gültig, dh die Reputationswerte sind immer positive ganze Zahlen, es gibt immer die gleiche Menge an Reputationswerten pro Zeile / Listenelement usw.
- Die Reputationswerte werden nicht sortiert. Sie können in beliebiger Reihenfolge sein.
Testfälle
Eingabe: 9900,10000
Ausgabe::D
Eingabe: 9900 9950 9910,10100 9950 9910,10300 10150 10110
Ausgabe::D,:D :D
Eingabe: 10 20 30,42 10 20,10 242 20,442 42 10,0 0 0,442 42 10
Ausgabe:,,,:(
Eingabe: 10 20,15 25,15 25
Ausgabe:,,
Eingabe: 9999 9998 9997,10000 9998 9997,10000 10000 9997,10300 10000 10000
Ausgabe::D,:D,:(
Eingabe: 100,90,80,70
Ausgabe::(
Eingabe: 10000 10000 10000 9999,10000 10000 10000 10000,10010 10020 10030 10040
Ausgabe::D,:(
Eingabe: 9999 9998 9997 9996,10196 10197 10198 10199,10399 10199 10197 10196
Ausgabe::D :D :D :D,
(i.e. a user can start with 1337 reputation).
Ich mochte diese Coz, die mein Repräsentant war ... wel vor 5 Minuten, bis jemand eine meiner Antworten upvoted xDAntworten:
Ruby, 209 Bytes
Edit: Ich habe zu Ruby gewechselt, was dies um ca. 30% verkürzt hat. Die ursprüngliche Mathematica-Version finden Sie im Bearbeitungsverlauf. Ich nehme an, die größten Einsparungen resultieren daraus, dass Ruby
permutation
vertauschte Positionen identischer Elemente nicht ignoriert (zu denen ich Mathematica überlisten musste).Dies verwendet das durch Zeilenumbrüche getrennte Format.
Das Wesentliche ist folgendes:
:(
.:D
neue 10.000 Benutzer vorhanden sind.:(
.Weniger Golf:
Ich denke, das ist eine schöne Kette von Aufzählungszeichen. :)
PS: Ist es komisch, dass ich als erster eine Antwort darauf eingereicht habe?
quelle
Haskell,
254 249 244 232228Eine kleine Erklärung: Der Algorithmus ist dem von MartinBüttner sehr ähnlich, abgesehen von dem
nub
, über den ich mich Gedanken gemacht habe. Beachten Sie, dass eine Liste Unterschied zum Ausarbeiten verwendet wird , wie vielen Ruf Werte 10000 oder größer am Tag n + 1 im Vergleich zu Tag n:t b\\t a
.Ich stimme auch MartinBüttner bei der Interpretation der Spezifikationen zu und stelle fest, dass einige der obigen Beispiele falsch sind, auch wenn Beispiel 2 falsch ist (sein sollte
:(
).quelle
map
?z
Infix und Ersetzenreplicate (length l) x
mitmap (const x) l
. Ist Haskell nicht fantastisch?(t b)\\(t a)
zut b\\t a
, Golf aus 4 weitere Bytes.