Einführung
Der Weihnachtsmann hat zu viele Namen, um sie zu verarbeiten, und braucht Ihre Hilfe! Er braucht Sie ein Programm oder eine Funktion zu schreiben , die ausgibt nice
, naughty
, very naughty
oder very very naughty
. Um festzustellen, wie nett oder frech jemand ist, hatte der Weihnachtsmann einen Algorithmus entwickelt:
Zunächst erhalten wir aus dem Namen eine Zahl, indem wir alle Buchstaben addieren ( Leerzeichen werden ignoriert ). Beispielsweise:
Doorknob =
D = 4
o = 15
o = 15
r = 18
k = 11
n = 14
o = 15
b = 2
4 + 15 + 15 + 18 + 11 + 14 + 15 + 2 = 94
Wenn die Anzahl der Teiler der Länge des Namens entspricht, wird die Person berücksichtigt nice
. Dies bedeutet, dass Ihr Programm ausgeben sollte [name] has been nice
. Hier sind die Teiler von 94
:
Divisors of 94: 1, 2, 47, 94
Es gibt 4
Teiler, aber der Name hat Länge 8
( einschließlich Leerzeichen ). Fazit, Doorknob
war nicht nett. Also setzen wir unsere Reise fort:
Der Weihnachtsmann hat eine neue Sequenz entwickelt, die Weihnachtsnummer . Zuerst schauen wir uns die folgenden Weihnachtsbäume an:
n = 1 n = 2 n = 3 n = 4
*
***
*****
*******
*********
_ * ***
| *** *****
| ***** *******
* | ******* *********
* *** | *** ***
*** ***** n*n | ***** *****
* *** | ******* *******
***** | *** *********
* | ***** ***
|_******* *****
* *******
|_____| *********
2n+1 *
5 18 47 98
Die Anzahl der Sterne bestimmt die Weihnachtszahl. Die Sequenz geht wie folgt: 5, 18, 47, 98, 177, ...
.
Hieraus können wir schließen, dass 94
es sich nicht um eine Weihnachtszahl handelt. Das heißt, das Doorknob
war nicht nur ungezogen.
Sehr frech ( String ):
Dazu müssen wir herausfinden, ob Doorknob
es sich um eine Raise-Ladder-Saite handelt . Dies wird durch die Buchstaben im Namen bestimmt mit A = 1
, B = 2
, C = 3
, etc .:
Zuerst schauen wir uns den ersten Buchstaben an, den D
. Das hat Wert 4
. Dies ist unser Ausgangspunkt. Der nächste Buchstabe ist o
. Dies hat den Wert 15
, der höher ist als unser vorheriger Wert, also gehen wir einen Schritt höher auf der Leiter. Der nächste Wert ist ebenfalls ein o
. Das ist das gleiche, also tun wir nichts. Ist der nächste Wert höher als der aktuelle Wert, gehen wir einen Schritt höher. Wenn der nächste Wert niedriger als der aktuelle Wert ist, werden wir einen Ster niedriger gehen. Wenn es dasselbe ist, bleiben wir auf dem gleichen Schritt. Diese visualisiert für Doorknob
, Martin Buttner
und Alex A
:
O
/ \
R N B
/ \ /
O-O K T N U L X
/ / \ / \ / \ / \ / \
D M R I B T-T A E A
\ / \
A N R
\ /
E
Sie können sehen, dass Doorknob
das höher als die Startposition endete. Also Doorknob has been very naughty
. Martin Buttner
und Alex A
nicht höher als der Ausgangspunkt. Sie sind also beide very very naughty
.
Testfälle
Input: Doorknob
Output: Doorknob has been very naughty
Input: Martin Buttner
Output: Martin Buttner has been very very naughty
Input: Jakube
Output: Jakube has been nice
Input: B
Output: B has been very very naughty
Regeln
- Sie müssen ein Programm oder eine Funktion bereitstellen, die Eingaben akzeptiert (die aus mindestens einem Buchstaben bestehen).
- Die Eingabe besteht aus Großbuchstaben , Kleinbuchstaben und Leerzeichen . Leerzeichen werden während des Vorgangs mit Ausnahme der Länge der Eingabe ignoriert.
- Das ist Code-Golf , also gewinnt die Einsendung mit der geringsten Anzahl von Bytes!
n^3 + 2n^2 + 2
übrigens von generiert.ZZZ...Z = 26 * 99 = 2574
, was bedeutet, dass Sie nur Weihnachtsnummern bis einschließlich überprüfen müssenn=13
. (Nützliche Informationen für andere Golfer.)Santa has been very very naughty
. Warte was?Santa Claus has been very naughty
. Sollten Sie auch den Heiligen Nick, den Heiligen Nikolaus, den Heiligen Nick, den Heiligen Nikolaus, Kris Kringle, den Weihnachtsmann, Pere Noel und all seine anderen Pseudonyme probieren - vielleicht funktioniert einer von ihnen? Obwohl, warum ein "netter" Kerl so viele Aliase brauchen sollte, ist schon ziemlich verdächtig ...Antworten:
Pyth 86 Bytes
Anscheinend war ich dieses Jahr nett ...
Probieren Sie es online aus: Demo oder Test Suite
Erläuterung:
quelle
CJam,
109108107 BytesProbieren Sie es online aus.
Erläuterung
Eine vollständige Erklärung muss bis später warten, aber hier ist der Code in die verschiedenen Abschnitte unterteilt:
quelle
MATL , 117 Bytes
Mein bisher längstes MATL-Programm :-) :-(
Verwendet die aktuelle Version der Sprache, die älter als diese Herausforderung ist.
Beispiele
Erläuterung
quelle
Lua,
371284 BytesIch bin mir sicher, dass es Raum für Verbesserungen gibt. Ich würde gerne ein paar Wenns herausschneiden.
Edit: 4 Monate später habe ich viel über Lua gelernt und wollte auf diesen Beitrag zurückkommen, das habe ich gut gemacht: 87 Bytes rausgeschnitten!
Ungolfed
Alte 371-Byte-Lösung
Ungolfed version :)
quelle
Im Ernst, 138 Bytes
Hex Dump:
Probieren Sie es online
Es ist schwierig, dies effektiv zu golfen, da die komplizierte Flusskontrolle im Ernstfall schwierig ist. Die Fähigkeit, Funktionen ohne die Verwendung von Registern zu verschachteln, würde helfen. (Ich stelle mir vor, dass dies durch den umsichtigen Einsatz gespeicherter Funktionen bereits etwas verkürzt werden könnte, aber es würde zu einem solchen Spaghetti-Code führen, für den ich nicht den Mut habe, es zu versuchen.)
Erläuterung:
quelle
Python 2, 249 Bytes
quelle