Im Englischen können Substantive zwei verschiedene Formen annehmen, je nachdem, ob sie Singular (eins) oder Plural (alles andere) sind. Zum Beispiel würden wir "1 Hund", aber "2 Hunde", "0 Hunde", "57 Hunde" und so weiter sagen.
Auf Russisch gibt es drei Kategorien. Anstelle von "1 Hund, 2 Hunde, 5 Hunde" wäre es auf Russisch "1 собака, 2 собаки, 5 собак".
Die Kategorien sind nach folgender Logik unterteilt:
- "Singular": Wird für 1 und für alle Zahlen verwendet, die auf 1 enden, außer für Zahlen, die auf 11 enden.
- Beispiele: 1 собака, 21 собака, 101 собака
- "Wenige": Wird für 2, 3 und 4 verwendet und für alle Zahlen, die auf 2, 3 oder 4 enden, mit Ausnahme der Zahlen, die auf 12, 13 und 14 enden.
- Beispiele: 2 собаки, 3 собаки, 4 собаки, 32 собаки, 43 собаки, 104 собаки
- "Viele": alles, was nicht als "Singular" oder "Wenige" gilt.
- Beispiele: 0 собак, 5 собак, 11 собак, 13 собак, 25 собак, 111 собак, 114 собак
Die Herausforderung
Bei einer Ganzzahleingabe im Bereich [0, 1000] wird zurückgegeben, 1
ob sie zur Kategorie "Singular" 2
gehört , ob sie zur Kategorie "Wenige" gehört und 5
ob sie zur Kategorie "Viele" gehört.
Ihr Programm kann eine Funktion sein oder es kann STDIN verwenden. Sie können auf STDOUT drucken oder einen Wert von der Funktion zurückgeben
Dies ist eine Code-Golf- Herausforderung, daher gewinnt die Lösung mit der geringsten Anzahl von Bytes.
quelle
1
,2
und5
im Besonderen? Warum kann ich auch keine Beendigungscodes verwenden?Antworten:
Python 2 , 36 Bytes
Probieren Sie es online!
Gleiche Länge rechnerisch:
Schauen wir uns zunächst einfacheren Code an, der Jugendliche nicht berücksichtigt.
Hier wollen wir eine Abbildung der eigenen Ziffer auf eine Ausgabe, die wie folgt funktioniert
Aber anstatt
n
modulo 10 (%10
) zu nehmen, können wir tunn%-10
, was den Intervallen zuordnet[-9..0]
, um Reste zu geben:Dies ist viel versprechend , da die ersten beiden Einträge
0
und-9
sind weit voneinander entfernt, und sie müssen verschiedene Ausgänge gesendet werden. Auch-10
kann auf gekürzt werden~9
.Ab hier
/-3
ergibt die Unterteilung durch 3er-Stücke mit dem richtigen StartpunktUm die gewünschte Ausgabe zu erhalten, müssen wir nur noch abbilden
0->5, 1->5, 2->2, 1->1
, was wir mit der String-Auswahl machen'5521'[_]
.Jetzt brauchen wir auch Zahlen, die mit 11 bis 15 enden, um immer zu geben
5
. Wir tun dies zuerst, indem wir feststellen, ob dann die Zehnerstelle ist1
. Untern/10
der letzten Ziffer zu entfernen, wenden wir dann nach%~9
wie vor um die Ergebnisse zu erhaltenfür die jeweiligen letzten Ziffern. Die Ziffer 1, die wir ermitteln möchten, wird dem Extremwert zugeordnet
-9
. Die Unterteilung erfolgt durch-9
1 und alles andere durch 0.Schließlich geben wir für diesen Indikator
1
immer den Wert 5 aus. Dies geschieht durch Bitverschiebung des Ergebnisses vonn%~9/-3
rechts um den Indikator. Das Ergebnis von0,1,2,3
Bitverschiebungen wird immer nach rechts auf 0 oder 1 verschoben, was je nach Wunsch eine Ausgabe von 5 ergibt.quelle
Python 2 , 45 Bytes
Probieren Sie es online!
quelle
(s+'5'*10+s*9)
Sind das nicht 110 Zeichen?Perl 5 , 26 Bytes
25 Byte Code +
-p
Flag.Probieren Sie es online!
Für ein weiteres Byte gibt es
$_=/(?<!1)[1-4]$/?2-/1$/:5
.Erklärungen: (in der 27-Byte-Version; die 26 ist ziemlich symmetrisch)
Sowohl "singular" als auch "few" enden mit "not a 1 gefolgt von einer Ziffer von 1 bis 4" (getestet mit
(?<!1)[1-4]$/
). In diesem Fall ist das Ergebnis 2, minus 1, wenn die Zahl mit 1 (2-/1$/
) endet . Ansonsten ist das Ergebnis, wenn 5.quelle
JavaScript (ES6),
5349484039383736 ByteVersuch es
quelle
1[1-4]
kann sein1.
und/1$/.test(s)
könnte sein+s%10==1
. Vergiss niemals unary+
!+
überhaupt,s%10
sollte umwandelns
in eine Zahl.n%10
->n%5
speichert ein ByteJelly ,
1918 BytesEin monadischer Link, der nicht negative ganze Zahlen aufnimmt und zurückgibt.
Probieren Sie es online! oder sehen Sie sich die drei Gruppen von 0 bis 1000 in dieser Testsuite an .
Wie?
quelle
05AB1E ,
3819 BytesVerwendet den Index-Trick aus Rods Python-Antwort
Probieren Sie es online!
Erläuterung
quelle
PHP> = 7.1, 44 Bytes
Online Version
quelle
<?=$argn[-2]!=1&($m=($argn+9)%10)<4?2-!$m:5;
.MCxxxx Assembly , 123 Bytes
Hinweis:
TiO unterstützt diese Sprache, die im Zachtronics-Spiel Shenzhen I / O verwendet wird , nicht. Es gibt also keinen Link, um dies zu testen.
Erläuterung:
Dies ist eine Funktion, die Eingaben über den XBus-Port x0 und Ausgaben über den Port x1 empfängt. Es ist zu lang, um auf einem MC4000 ausgeführt zu werden, passt aber gut in den Speicher eines MC6000. XBus-Ports ermöglichen die Übertragung diskreter digitaler Datenpakete.
Eine Information, die beim Lesen hilfreich sein kann: In der MCxxxx-Assembly setzen die Testanweisungen ein Flag, das angibt, welcher Zweig genommen werden soll. Zeilen, die mit beginnen
+
werden nur ausgeführt, wenn der letzte Test true zurückgegeben hat, und Zeilen, die mit beginnen,-
werden nur ausgeführt, wenn der Test false war.Zeile für Zeile:
Anmerkung zum Scoring: Die MCxxxx-Assembly verfügt nicht über Funktionen an sich, aber dies kommt einer Funktion so nahe wie möglich - es ist ein Programm, das in einen einzelnen Ausführungsknoten passt, Eingaben über einen Port entgegennimmt und Ausgaben über einen anderen ausgibt. Infolgedessen habe ich dies wie eine Funktion bewertet (dh ohne die für die Erstellung einer gültigen MCxxxx-Emulatordatei erforderlichen Bytes zu zählen).
quelle
Netzhaut ,
2521 BytesProbieren Sie es online! -4 Bytes dank Neil.
quelle
!`.$
die letzte Ziffer extrahieren. Probieren Sie es online!Haskell ,
62-58BytesProbieren Sie es online!
Erläuterung
Dadurch wird die folgende Zeichenfolge erstellt:
51222555555555555551222555555122255551222555512225555122255551222555512225555122255551222555 ...
Dies ist eine Tabelle, in der die Zelle
n
die Antwort für dienth
Nummer enthält. Die Tabelle ist nur für die ersten 100 Elemente korrekt, daher diemod
.quelle
f n|s<-"5122255555"=(s++('5'<$[0..9])++cycle s)!!mod n 100
Scala, 110 Bytes
quelle
Turtlèd, 35 Bytes
Probieren Sie es online!
Diese Funktion setzt voraus, dass die Eingabe mit einem> beginnt, was meiner Meinung nach in Ordnung ist, da python2 die Eingabe regelmäßig verwendet und Anführungszeichen benötigt.
Erläuterung:
quelle
>
Turtled einen Zweck oder ist es ein beliebiges Zeichen, das Sie der Eingabe hinzugefügt haben?