En anglais, les noms peuvent prendre deux formes différentes selon qu'ils sont singuliers (un) ou pluriels (autre chose). Par exemple, nous dirions "1 chien" mais "2 chiens", "0 chien", "57 chiens" et ainsi de suite.
En russe, il existe trois catégories. Au lieu de "1 chien, 2 chiens, 5 chiens", ce serait en russe "1 собака, 2 собаки, 5 собак".
Les catégories sont réparties selon la logique suivante:
- "Singulier": utilisé pour 1 et tout nombre se terminant par 1, sauf pour les nombres se terminant par 11.
- Exemples: 1 собака, 21 собака, 101 собака
- "Peu": utilisé pour 2, 3 et 4 et tout nombre se terminant par 2, 3 ou 4, sauf pour les nombres se terminant par 12, 13 et 14.
- Exemples: 2 pièces, 3 pièces, 4 pièces, 32 pièces, 43 pièces, 104 pièces, 104 pièces
- "Beaucoup": tout ce qui n'est pas considéré comme "Singulier" ou "Peu".
- Exemples: 0 pièce, 5 pièces, 11 pièces, 13 pièces, 25 pièces, 111 pièces, 114 pièces, 114 pièces
Le défi
Étant donné une entrée entière dans la plage [0, 1000], retournez 1
si elle appartient à la catégorie "singulier", 2
si elle appartient à la catégorie "quelques" et 5
si elle appartient à la catégorie "plusieurs".
Votre programme peut être une fonction ou il peut utiliser STDIN. Vous pouvez imprimer sur STDOUT ou renvoyer une valeur à partir de la fonction
Il s'agit d'un défi de golf de code , donc la solution avec le moins d'octets gagne.
la source
1
,2
et5
en particulier? Aussi, pourquoi ne puis-je pas utiliser de codes de sortie?Réponses:
Python 2 , 36 octets
Essayez-le en ligne!
Même longueur arithmétiquement:
Examinons d'abord un code plus simple qui ne tient pas compte des adolescents.
Ici, nous voulons un mappage du chiffre à une sortie qui fonctionne comme
Mais, plutôt que de prendre
n
modulo 10 (%10
), nous pouvons le fairen%-10
, qui correspond aux intervalles[-9..0]
pour donner des restes:Ceci est prometteur parce que les deux premières entrées
0
et-9
sont éloignés, et ils doivent être envoyés à différentes sorties. En outre,-10
peut être raccourci à~9
.De là, la division du sol par
/-3
donne des morceaux de 3 avec le bon point de départPour obtenir la sortie souhaitée, il nous suffit maintenant de mapper
0->5, 1->5, 2->2, 1->1
, ce que nous faisons avec la sélection de chaîne'5521'[_]
.Maintenant, nous avons également besoin de chiffres se terminant par 11 à 15 pour toujours donner
5
. Nous faisons d'abord cela en détectant si le chiffre des dizaines l'est1
. Prenantn/10
pour supprimer le dernier chiffre, nous appliquons ensuite%~9
comme précédemment pour obtenir les résultatspour les derniers chiffres respectifs. Le chiffre de 1 que nous voulons détecter est mappé à la valeur extrême
-9
. La division du sol la-9
transforme en 1 et tout le reste en 0.Enfin, nous faisons en sorte que cet indicateur
1
donne toujours la sortie 5. Cela se fait en décalant le résultat den%~9/-3
droite par l'indicateur. Le résultat des0,1,2,3
décalages de bits toujours à droite à 0 ou 1, ce qui donne une sortie de 5 comme souhaité.la source
Python 2 , 45 octets
Essayez-le en ligne!
la source
(s+'5'*10+s*9)
110 caractères?Perl 5 , 26 octets
25 octets de code +
-p
indicateur.Essayez-le en ligne!
Pour un octet de plus, il y en a
$_=/(?<!1)[1-4]$/?2-/1$/:5
.Explications: (sur la version 27 octets; le 26 est assez symétrique)
"singulier" et "peu" se terminent par "pas un 1 suivi d'un chiffre de 1 à 4" (testé avec
(?<!1)[1-4]$/
). Dans ces cas, le résultat est 2, moins 1 si le nombre se termine par 1 (2-/1$/
). Sinon, le résultat si 5.la source
JavaScript (ES6),
5349484039383736 octetsEssayez-le
la source
1[1-4]
peut être1.
et/1$/.test(s)
pourrait être+s%10==1
. N'oubliez jamais unaire+
!+
du tout, vouss%10
devriez convertirs
en nombre.n%10
->n%5
enregistre un octetGelée ,
1918 octetsUn lien monadique prenant et retournant des entiers non négatifs.
Essayez-le en ligne! ou consultez les trois groupes de 0 à 1000 inclus dans cette suite de tests .
Comment?
la source
05AB1E ,
3819 octetsUtilise l'index-trick de la réponse de Rod en python
Essayez-le en ligne!
Explication
la source
PHP> = 7.1, 44 octets
Version en ligne
la source
<?=$argn[-2]!=1&($m=($argn+9)%10)<4?2-!$m:5;
.Assemblage MCxxxx , 123 octets
Remarque:
TiO ne prend pas en charge ce langage, qui est utilisé dans le jeu Zachtronics Shenzhen I / O , il n'y a donc pas de lien pour le tester.
Explication:
Il s'agit d'une fonction qui accepte les entrées via le port XBus x0 et les sorties via le port x1. Il est trop long pour s'exécuter sur un MC4000, mais s'intègre bien dans la mémoire d'un MC6000. Les ports XBus, pour ceux qui ne sont pas familiers, permettent la transmission de paquets discrets de données numériques.
Une information qui peut être utile pour lire ceci: dans l'assemblage MCxxxx, les instructions de test définissent un indicateur qui indique quelle branche doit être prise. Les lignes commençant par
+
ne sont exécutées que si le test le plus récent a renvoyé true, et les lignes commençant par-
ne sont exécutées que si le test est faux.Ligne par ligne:
Une note sur la notation: l'assemblage MCxxxx n'a pas de fonctions en soi, mais c'est aussi proche d'une fonction que vous pouvez obtenir - c'est un programme qui tient dans un seul nœud d'exécution, prend l'entrée via un port et sort via un autre. En conséquence, j'ai marqué cela comme une fonction (c'est-à-dire sans compter les octets nécessaires pour créer un fichier d'émulateur MCxxxx valide).
la source
Rétine ,
2521 octetsEssayez-le en ligne! -4 octets grâce à Neil.
la source
!`.$
pour extraire le dernier chiffre. Essayez-le en ligne!Haskell ,
6258 octetsEssayez-le en ligne!
Explication
Cela crée la chaîne suivante:
5122255555555555555551222555555122255555512225555551222555555122255555512225555551222555555122255555 ...
C'est un tableau où la cellule
n
contient la réponse pour lenth
nombre. Le tableau n'est correct que pour les 100 premiers éléments, d'où lemod
.la source
f n|s<-"5122255555"=(s++('5'<$[0..9])++cycle s)!!mod n 100
Scala, 110 octets
la source
Turtlèd, 35 octets
Essayez-le en ligne!
Cette fonction nécessite que l'entrée commence par un>, ce qui, je suppose, est correct car python2 utilise une entrée semi régulièrement, et cela nécessite des guillemets.
Explication:
la source
>
utile dans Turtled ou s'agit-il d'un caractère arbitraire que vous avez ajouté à l'entrée?