Plaques d'immatriculation françaises
Les plaques d'immatriculation françaises sont classées dans un ordre séquentiel, suivant un modèle spécifique de chiffres et de lettres:AB-012-CD
Défi
Ecrivez un programme ou une fonction qui, pour un numéro donné, affiche le numéro de la plaque d'immatriculation française correspondante . Votre programme ne doit pas gérer les cas particuliers spécifiés dans la page liée. Il devrait être capable de générer toutes 26*26*1000*26*26 => 456 976 000
les plaques possibles, ou aussi loin que votre langue le permet.
Le système de numérotation va comme suit:
- AA-000-AA à AA-999-AA (les nombres évoluent en premier);
- AA-000-AB à AA-999-AZ (puis la dernière lettre à droite);
- AA-000-BA à AA-999-ZZ (puis la première lettre à droite);
- AB-000-AA à AZ-999-ZZ (puis la dernière lettre à gauche);
- BA-000-AA à ZZ-999-ZZ (puis la première lettre à gauche).
Contribution
- L'indice du numéro de plaque sous forme d'entier
Sortie
- Le numéro de la plaque d'immatriculation française correspondante
Information additionnelle
- Les lettres doivent être majuscules
- Vous pouvez utiliser les indexes 0 et 1 pour générer les plaques (ce qui signifie que AA-000-AA peut correspondre à
0
ou1
en supposant que tous les autres cas de test utilisent la même indexation.
C'est le code-golf , la réponse la plus courte dans toutes les langues gagne!
Cas de test (indexation basée sur 0)
0 -> AA-000-AA
1 -> AA-001-AA
999 -> AA-999-AA
1000 -> AA-000-AB
675 999 -> AA-999-ZZ
676 000 -> AB-000-AA
456 975 999 -> ZZ-999-ZZ
Réponses:
Pure Bash (sans utils externes), 64
Essayez-le en ligne! - Il faut environ 10 secondes pour parcourir les 7 cas de test.
eval
est nécessaire pour assurer la dilatation variable (de x) avant l’extension de l’attelle.la source
Perl 5 (-ap), 47 octets
Essayez-le en ligne!
PHP , 74 octets
Essayez-le en ligne!
la source
Python 3 ,
79 7877 octetsEssayez-le en ligne!
D'une manière ou d'une autre, je n'avais jamais réalisé que le
f"string"
raccourci de format existait jusqu'à ce que je voie la réponse de Black Owl Kai.la source
tuple
de(*...,)
f"string"
rend votre réponse exclusive à Python 3.6+, pour votre information. Beau travail cependant!Ruby,
615955 octetsAussi 55 octets:
Essayez-le en ligne!
Ceci initialise un compteur à
AA-AA000-
, l’incrémenten
fois (en multipliant une chaîne du code qui le fait par n eteval
ing), puis déplace les 4 derniers caractères après le 3ème.la source
->n{s=('AA-AA000-'..?Z*9).step.take(n)[-1];s[2]+=s.slice!5,4;s}
est plus long mais je me demande s’il est possible de le raccourcir.->n{s=[*'AA-AA000-'..?Z*9][n];s[2]+=s.slice!5,4;s}
devrait fonctionner et ne faire que 50 octets de long, mais il génère d'abord toutes les plaques possibles. : - /PHP ,
968479 octets-5 octets grâce aux excellents commentaires d’ Ismael Miguel .
Essayez-le en ligne!
Je profite du fait que vous pouvez incrémenter des lettres en PHP! Ainsi
AAAA++
deviendraientAAAB
etAAAZ++
deviendraientAABA
. Je calcule combien de fois les lettres doivent être incrémentées en obtenant une partie entière deinput/1000
. Puis incrémentez la longueur de quatre caractères à plusieurs reprises et ses deux premiers et deux derniers caractères deviendront automatiquement les côtés gauche et droit de la plaque.Par exemple, pour entrer le
675999
nombre d’incréments de lettres(int)(675999 / 1000) = 675
, ilAAAA
deviendraAAZZ
.Enfin, le nombre du milieu est calculé par
input%1000
et tout est imprimé dans le format spécifié à l'aide de printf .%.2s
imprime les deux premiers caractères de la chaîne,%03u
insère le chiffre à gauche de 3 zéros.la source
%0.2s
vous pouvez écrire%.2s
. Cela vous évite 1 octet. (Petit conseil: si vous souhaitez générer un nombre décimal avec un nombre spécifique de décimales, vous pouvez utiliser%.2f
(ou tout autre modificateur) car il fonctionne de la même manière)0
. Edit: en regardant les documentations, il semble que je n’en ai même pas eu besoin au départ: P$x++^$argn/1e3
au lieu de$x++<(0^$argn/1e3)
et vous devriez économiser 4 octets. Cela va boucler jusqu’à($x++^$argn/1e3) === 0
, et c’est0
quand$x
et$argn/1e3
sont le même nombre entier (en utilisant^
va convertir les nombres en entier). Vous pouvez essayer ceci sur sandbox.onlinephpfunctions.com/code/…C,
8886 octetsAssez simple, il utilise la division et le module pour extraire les champs, ajoute 'A' pour les lettres afin de les mapper avec des caractères ASCII et le formatage printf pour les nombres.
Essayez-le en ligne!
la source
Haskell,
85817977 octetsEssayez-le en ligne!
la source
05AB1E ,
252220 octets-2 octets (et augmentation des performances en ne générant pas la liste complète) grâce à @Grimy .
Indexation basée sur 0.
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
La dernière partie (
s₄‰`UèX₄+¦'-.øý
) pourrait êtreI₄÷èI₄+3.£.ý'-ý
une alternative à octets identiques:essayez-la en ligne ou vérifiez tous les cas de test .
la source
Au2ããI₄‰`UèX₄+¦'-.øý
ouAu2ããI₄÷èI₄+3.£'-.øý
.J ,
564946 octetsEssayez-le en ligne!
-3 octets grâce à FrownyFrog
Le tout n’est que 7 trains imbriqués - si ce n’est pas amusant, c’est quoi?
la source
JavaScript (Node.js) , 82 octets
Essayez-le en ligne!
la source
Ruby , 51 octets
Essayez-le en ligne!
la source
R , 101 octets
Essayez-le en ligne!
Fait juste les calculs arithmétiques nécessaires. J'ai enregistré 5 octets en incluant dans le vecteur
a
une valeur inutilea[4]
, ce qui me permet de réutiliser le vecteur d'assistanceb
.B
AB-012-CD
n
n %/% 676000 %% 26
%/%
%%
la source
Gelée ,
2622 octetsUn lien monadique acceptant un entier (indexé 1) qui donne une liste de caractères ... Crazy-slow puisqu'il construit toutes les plaques en premier!
Essayez-le en ligne!(ne sera pas complet)
Ou essayez une version avec alphabet réduit (uniquement "ABC" pour les lettres).
Pour le code qui se termine à temps, voici un programme complet de 32 octets (index 0) qui crée la plaque unique à la place en utilisant une décompression de base arithmétique modulaire et numérique:
Essaye celui-là!
la source
APL + WIN, 61 octets
Invites pour un entier:
Essayez-le en ligne! Gracieuseté de Dyalog Classic
la source
Charbon de bois , 33 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Explication:
Entrez le nombre.
Imprimer a
-
.Ajoutez 1000 au nombre, transformez le résultat en chaîne et imprimez les trois derniers chiffres.
Divisez le nombre par 1000, puis ajoutez 26⁵, de sorte que la conversion en base personnalisée à l'aide de l'alphabet majuscule entraîne une chaîne de longueur 6, qui est ensuite divisée en paires de lettres.
Imprimer a
-
.Imprimer la dernière paire de lettres.
Déplacez-vous au début de la plaque d'immatriculation.
Imprimez le reste des lettres souhaitées.
la source
Perl 6 , 42 octets
Essayez-le en ligne!
Solution Perl 5 du port de Grimy. Lent pour les grandes valeurs d'entrée.
la source
Excel,
183167155147 octets-16 octets grâce à @Neil. (6 en utilisant
E3
)-12 octets grâce à @Keeta. (
TRUNC
au lieu deQUOTIENT
)-8 octets grâce à @Jonathan Larouche (
INT
au lieu deTRUNC
)Concatène 5 parties:
la source
MOD(QUOTIENT(A1,1E3),26)
fonctionne pas? En outre, pourquoi1E3
pour1000
mais pas26E3
etc?456 975 996
->[Z-996-ZZ
CHAR(65+)
tronque silencieusement les décimales jusqu'à%.9999997614649
. Plus gros que cela est arrondi. ComparezCHAR(65+24.9999997614649)
etCHAR(65+24.999999761465)
.Propre , 107 octets
Essayez-le en ligne!
Définit
$ :: Int -> [Char]
la n-ième plaque d'immatriculation à index zéro.la source
Japt , 21 octets
Obscurément lent! Sérieusement, n'essayez même pas de le lancer!
Un bravo à Kevin pour m'avoir fait comprendre où j'allais mal lorsque je me suis battu pour que cela fonctionne la nuit dernière.
Essayez-le - limite la plage de numéros à
000-005
.la source
Forth (gforth) , 94 octets
Essayez-le en ligne!
0 indexé. L'entrée est prise du haut de la pile
Explication du code
la source
q , 78 octets
la source
T-SQL, 135 octets
la source
Python 2 , 88 octets
Essayez-le en ligne!
la source
Rouge ,
130127 octetsEssayez-le en ligne!
la source
Python 3 , 89 octets
Essayez-le en ligne!
-1 octet grâce à mypetlion
la source
chr(x//26000%26+65)+chr(x//1000%26+65)
pour'%c%c'%(x//26000%26+65,x//1000%26+65)
enregistrer 1 octet.MATLAB , 113 octets
Explications:
La première ligne définit une fonction qui produira un caractère (de
A
àZ
), fonction de 2 entrées. Le numéro d'indexx
à convertir en un numéro de plaque et un entierp
qui sera utilisé comme exposant pour 26 (c'est-à-dire26^p
). Cette seconde entrée permet d’ajuster les calculs pour le premier chiffre alphanumérique de la plaque (p=3
) jusqu’au dernier (p=0
).Par exemple, pour le deuxième chiffre cyclé toutes les 1000 * 26 * 26 itérations, l'opération:
mod(idivide(x,1000*26^2),26)
renvoie un index compris entre 0 et 25, qui est ensuite converti en ASCIIchar
en ajoutant 65 (car les index sont0
basés).La deuxième ligne concatène simplement les caractères ensemble. Chaque caractère alphanumérique est calculé à l'aide de la fonction
c(x,p)
. Les caractères numériques sont simplement calculés à l'aide d'unemodulo
opération et convertis en chaîne.Chaque composant de la chaîne composant le numéro de plaque est le suivant:
Puisque je ne peux pas vous laisser essayer MATLAB en ligne ( edit: en fait, vous pouvez l' essayer en ligne ), je vais laisser les utilisateurs de Matlab la possibilité de vérifier les cas de test:
les sorties:
Variante: Notez que l’option permettant de laisser
sprintf
ou defprintf
prendre en charge la conversion de nombre en caractères est possible. Cela permet de simplifier la fonctionc
, mais aboutit globalement à quelques octets supplémentaires dans cette implémentation (119 octets):la source
C (gcc) ,
136106105 octetsEssayez-le en ligne!
-7 octets de celingcat de solution , avec inspiration supplémentaire -23 par elle
-1 octet de la solution de ceilingcat en remplaçant le par
char[]
unwchar_t[]
casting impliciteint[]
Utilise l'indexation basée sur 0.
Explication / Ungolfed:
la source
a
etb
de la macro et je suis descendu à 106 octetsJulia 1.0 , 86 octets
Essayez-le en ligne!
la source
Kotlin , 93 octets
Essayez-le en ligne!
la source
Python 3 , 161 octets
Essayez-le en ligne!
la source