Le scénario: Vous êtes un concepteur de logiciels travaillant pour une entreprise dirigée par le gouvernement qui conçoit des plaques d'immatriculation pour les voitures et autres véhicules. On vous a demandé de développer un logiciel qui génère des plaques d'immatriculation. Avant de vous mettre au travail, vos patrons ont établi ces règles de base.
Une plaque d'immatriculation ne peut pas contenir:
ASS
666
69<any number here>
<any number here>69
KKK
SHT
Règles et exigences:
- La plaque d'immatriculation doit être générée de manière aléatoire.
- Une fois qu'une plaque d'immatriculation aléatoire est générée, la même plaque d'immatriculation ne peut plus être générée.
- Vous devez produire au moins 200 plaques d'immatriculation uniques . Vous pouvez en générer plus si vous le souhaitez .
- Vous pouvez stocker les plaques générées dans un fichier pour les "mémoriser".
- La plaque d'immatriculation contient 2 sections, l'une ne contenant que trois lettres et l'autre ne contenant que trois chiffres, séparés par un tiret, comme ceci:
233-ADF
ouADF-233
. - Vous ne pouvez utiliser que des chiffres et des majuscules.
- Les plaques d'immatriculation peuvent être écrites sur stdout ou dans un fichier.
- Chaque "côté" d'une plaque d'immatriculation contiendra soit trois chiffres ou lettres.
- Il s'agit d'un code-golf , donc la réponse la plus courte et la plus populaire l'emporte. Le gagnant sera choisi après sept jours.
Règles générales
- La réponse doit inclure, mais sans s'y limiter, les éléments suivants.
- Nom de la langue.
- Nombre de caractères.
- Taille du fichier.
- Comment le code est exécuté.
- Le code lui-même.
- Exemple: caractères Python 234 ou Python 23mb .
Si j'ai besoin de clarifier des détails supplémentaires, veuillez le mentionner dans les commentaires et je l'ajouterai à mon message. Quoi qu'il en soit, bonne chance et générez-moi des plaques d'immatriculation appropriées!
Mise à jour 1: le gagnant sera choisi un peu plus tôt.
Il s'avère que je dois partir en voyage bientôt, donc je choisirai un gagnant vers 00:00 UTC, le 25 juillet. Une fois le gagnant choisi, vous pouvez toujours soumettre des candidatures, sachez simplement qu'un gagnant a été choisi. Bai.
Mise à jour 2: gagnants!
Nous avons des gagnants! Yay! Du fromage et du vin à tous ceux qui ont participé! Voici qui a gagné.
- 1ère place: Àngel - Bash (95 caractères)
- 2e place: Martin Büttner - Mathematica (182 octets)
- 2ème place: Emilio M Bumachar - Pyg (92?)
- 2e place: Peter Taylor - Golfscript (98 caractères)
- 3e place: Mark Thomas - Ruby (127 caractères)
Wow, trois liens pour la deuxième place. Sensationnel. Le concours est terminé, mais n'hésitez pas à soumettre des candidatures si vous le souhaitez. Bai!
la source
AAA-
Réponses:
bash (95 caractères)
Enregistrez le script comme
m
dans un dossier de votre PATH avec le jeu de bits d'exécution.Exécuter en tant que
bash m
. Les plaques sont stockées dans le fichier pCela revient à exécuter ce qui suit:
Mise en garde: la finale
m
devrait en fait êtreexec m
(+5 caractères) afin d'éviter de laisser des processus en attente d'achèvement (mais vous pouvez en avoir des milliers sans trop de problèmes)Nous remercions http://www.cyberciti.biz/faq/linux-random-password-generator/ pour l'idée d'utiliser
tr -dc
la source
grep -v
exclut à la fois la liste noire et la liste des plaques que nous avons déjà générées (grep
s'attend à ce que p contienne un motif par ligne, mais comme les plaques ne contiennent pas de métacaractères d'expression régulière, elles ne correspondent qu'à elles-mêmes). Nous ne générons qu'une ou zéro plaque par itération, donc après chaque itération, la liste complète (mise à jour) des plaques à exclure sera lue par grep. : DPYG - 92
Maintenant, vous pouvez sélectionner uniformément toutes les plaques inutilisées, en respectant les spécifications d'OP, tout en étant plus court d'un caractère de plus.
Il est théoriquement possible que la liste des 999 plaques contienne suffisamment de répétitions pour que l'ensemble coupé soit inférieur à 200. Mais les chances de cela sont infiniment petites. En dix essais, la longueur la plus basse que j'ai obtenue était de 994.
EDIT: changé 999 en K (qui est pyg pour 1000), pour enregistrer deux caractères sur les conseils de bitpwner.
la source
Mathematica, 182 octets
Ugh, c'est long
Non golfé
Assez simple. Génère des plaques aléatoires et filtre les doublons et les interdits jusqu'à ce que 200 soient trouvés.
la source
GolfScript (98 caractères)
Cela génère toutes les plaques d'immatriculation possibles dans un ordre aléatoire en utilisant une conversion de base laide suivie d'un filtrage. Il y en a beaucoup, alors ne vous attendez pas à ce qu'il s'exécute rapidement, mais la question n'a pas imposé de contraintes sur le temps d'exécution.
la source
JavaScript (ES6) - 213
Cela peut probablement être amélioré. Testé sur Firefox Console.
Remplacez cette alerte par un
console.log()
si vous souhaitez testerla source
Ruby -
136133129 caractèresHideux. Mais pensez qu'il y a place à amélioration. Déposez simplement le code
irb
oupry
appuyez sur Entrée pour exécuter:la source
Rubis, 127 caractères
Ma tentative d'une version Ruby "lisible":
la source
Python 2.7 - 258 caractères
Je ne suis pas un programmeur professionnel ou quoi que ce soit, donc je dirais que je suis satisfait du résultat.
La taille du fichier est de 4,0 K, exécutez avec
python file.py
!la source
pass
être uncontinue
? Vous pouvez également enregistrer des caractères en indentant avec un espace de 1 au lieu de 4.for i in range(0,200):
Peut également être remplacé parfor i in range(200):
.continue
. Mais j'aipass
fait l'affaire. De plus, c'est plus court. Et quand j'ai essayéfor i in range(200)
, ça n'a fait que 199 ^^ Je les ai comptés ensuite en faisant uneduplicates
variable et en mettantduplicates += 1
avantpass
et en comptant les occurrences de-
dans la liste / chaîne.\t
et les remplacer par 1 espace n'a pas changé le nombre de caractères ... Merci pour les suggestions!if k in t: pass
, car il ne fait rien.Python - 208
Salut, mon coup de couteau à la génération de plaques d'immatriculation. Cette solution est similaire à la solution de @ bitpwner mais sans le module de chaîne et au lieu d'une liste pour la plaque d'immatriculation, j'ai choisi d'utiliser un ensemble et elle autorise également les chiffres en premier.
Exemple de sortie:
la source
Python, 252 octets
Voici ma contribution. J'en suis impressionné, mais je sais que d'autres ont fait mieux avec python.
la source
Python - 165
Ces importations ...
S'il est nécessaire de commencer au hasard avec des chiffres ou des alphabets, ce qui ne me semble pas vraiment nécessaire, alors 190.
la source
PHP
341324320C'était le mieux que je pouvais faire.
Pour exécuter le code, enregistrez-le simplement en tant que fichier .php et accédez-y sur n'importe quel serveur Web. Il tentera de créer le fichier de liste noire p.txt s'il n'existe pas déjà. Cependant, vous devrez peut-être le définir avec un chemin d'accès complet au serveur si vous ne disposez pas d'un accès root.
Le code lui-même est ici avant la golfification:
Était aussi courte que possible :-(
Exemple de sortie
EDIT: ranger quelques instructions if à utiliser sous forme abrégée.
la source
$string = (rand(1,2)==1) ? "$rand_number-$letters" : "$letters-$rand_number";
Delphi, 161 octets
Voici mon point de vue à ce sujet. Il sort les plaques d'immatriculation vers la sortie standard sans saut de ligne entre elles. Si LF est nécessaire (non spécifié dans les règles), cela ajoute 4 octets supplémentaires.
Version golfée:
Non golfé:
Comment exécuter:
la source
PHP, 267
C'est à peu près aussi court que possible.
Les plaques sont stockées dans le fichier "p".
la source
R, 229 caractères
Je suis sûr que cela pourrait être amélioré:
Exécuter dans la console, imprime une liste de plaques d'immatriculation.
la source
Cobra - 198
la source
ECMAScript 6 -
155168158Avertissement : 200 boîtes de dialogue d'alerte (passez
alert
àconsole.log
pour tester)Edit : Oups. Version originale imprimée en double ...
Edit 2 : Plus proche de la partition d'origine maintenant - passé d'un ensemble à un tableau associatif avec des vérifications en double qui lui permettent d'imprimer au fur et à mesure
Testé dans la console Firefox.
la source
l=x=>String.fromCharCode(65+r()*26);
. Je suppose que je ne sais pas ce qui se passel=x=>...
f=a=>b
est une fonctionnalité ES6 qui est essentiellement un raccourcifunction f(a) { b }
et qui n'est prise en charge (?) Que par Firefox pour le moment.JavaScript (ES6) 184
Comme d' habitude, le test dans la console FireFox et le changement
alert
àconsole.log
ou être prêt à appuyer surescape
200 fois.la source
Python3, 257 caractères
Exemple de sortie:
la source
;
au lieu de\n
.PHP, 167
c'est 100 caractères de moins que le meilleur PHP actuel :)
J'espère que vous aimez. Dans le cas où il est autorisé:
n'est que de 141 caractères mais ne mélange pas les caractères et les nombres. Toutes les suggestions sont les bienvenues :)
la source
F #, 264 caractères
Pas vraiment un langage conçu pour le golf, mais je suis sûr que cela pourrait être amélioré. Utiliser Seq.exists avec un lambda est assez ennuyeux, tout comme les nombreuses parens et le manque de conversion implicite.
Utilise la récursivité, continue indéfiniment.
Peut être exécuté en FSI.
la source
Python 203
Je ne sais pas si cela compte techniquement, mais je l'ai aimé, donc je le poste quand même. Bien que je génère les réponses de manière pseudo-aléatoire, comme à peu près tout le monde, j'ai stratégiquement choisi la graine aléatoire de sorte que les réponses invalides ne se retrouvent pas dans la sortie. Donc, ma réponse n'est pas réellement capable de générer l'ensemble des réponses valides, sans générer également les réponses invalides.
la source
Perl - 123 caractères
Non golfé:
Si quelqu'un a des idées pour jouer au golf plus loin, faites-le moi savoir, je suis intéressé. Si vous voulez plus d'explications sur une partie du code, laissez un commentaire et je serais heureux de vous en expliquer plus.
la source
Javascript - 283
327caractèresÉditer:
Après avoir implémenté les suggestions d' Alconja , voici ma nouvelle version:
1) Supprimer la variable: s et utiliser le littéral: "\ n" [-4] [323]
2) Supprimer "var o =" ", i, r, n, l," [-17] [306]
3) Supprimer Variable: t et utilisez littéral: "ASS | KKK | SHT | 666" [-4] [302]
4) Définissez m = Math.random et utilisez plutôt "m" [-7] [296]
5) Utilisez (m ( ) + "") plutôt que m (). toString () [-6] [290]
6) Supprimer les inutiles ";" [-7] [283]
Ancienne version: Javascript - 327 caractères
Je suis sûr qu'il y a de la place pour l'amélioration ... Je suis assez inexpérimenté au Code-golf:
Voici une version formatée, "non golfée" avec des noms de variable / fonction "non minifiés":
Voici une version "debug" qui peut être collée dans l'URL du favori / signet du navigateur. La sortie est placée dans un "TEXTAREA" sur une nouvelle "fenêtre" au lieu de "alert ()":
Voici la version "debug", formatée:
la source
var
(simplement assigner fera l'affaire, 323 ), vous n'avez pas besoin de;
s sauf s'il y a une autre déclaration suivante (par exemple, le dernier caractère de la ligne, ou avant a}
, 316 ), surveillez tout ce qui prend plus de place pour déclarer / utiliser que juste en ligne (par exemple votres
variable, 312 ), idem pour l'inverse si quelque chose est utilisé plus de une fois (par ex.Math.random(...)
àr=Math.random ... r(...)
, 307 ,(x+"")
est plus courte quex.toString()
, 300