Contexte
Person of Interest est un drame policier sur CBS, et mon émission de télévision préférée, récemment.
L'émission parle d'un homme nommé Harold Finch, un programmeur milliardaire, et de son partenaire John Reese, un vétéran des forces spéciales et ancien membre de la CIA. Ce programmeur a créé une intelligence artificielle appelée "La Machine" qui prédit les crimes violents avant qu'ils ne se produisent. Il suit chaque personne sur Terre à tout moment en surveillant et en analysant toutes les caméras de surveillance et les communications électroniques à travers le monde.
Harold a construit The Machine pour que le gouvernement des États-Unis détecte les activités terroristes avant le fait. Il divise les crimes qu'il prédit en listes en fonction de leur pertinence ou non pour la sécurité nationale. Les cas concernés sont traités par le gouvernement, tandis que la liste "non pertinente" est programmée pour être supprimée quotidiennement.
Harold s'est fait une petite porte dérobée dans l'espoir de gérer lui-même la liste "non pertinente". Cette porte dérobée oblige The Machine à appeler le publiphone le plus proche de Harold (une fois par jour environ) et à lui lire un numéro de sécurité sociale. Ce SSN appartient à quelqu'un dont la vie est en danger dans le cadre d'un crime prémédité, ou à quelqu'un qui planifie un tel crime.
Le défi
Écrivez un programme qui ne prend aucune entrée et génère 30 numéros de téléphone et SSN aléatoires (voir ci-dessous).
Sortie
Il y a deux lignes de texte qui seront imprimées tous les "jours".
Crime predicted: 555-55-5555
Calling: 1-555-555-5555
suivi d'une nouvelle ligne
Ce processus devrait se répéter pendant un "mois" (30 "jours").
Les numéros de téléphone
Chaque numéro de téléphone doit comporter les éléments suivants:
Doit avoir le code de pays des États-Unis (le premier chiffre).
Doit avoir un indicatif régional aléatoire (premier ensemble de trois chiffres).
Les trois premiers chiffres du numéro de téléphone lui-même doivent être
555
suivis de 4 chiffres aléatoires.
Voici un exemple annoté:
1-814-555-3857
| | | |
| | | |
| | | +----------> random four digits
| | |
| | +--------------> the set 555
| |
| +------------------> area code
|
+---------------------> country code
Numéros de sécurité sociale
Chaque SSN doit être composé de 9 chiffres aléatoires dans le format suivant.
342-98-1613
Exemple
Crime predicted: 234-72-8311
Calling: 1-633-555-0188
Crime predicted: 135-77-0910
Calling: 1-202-555-4719
Crime predicted: 722-90-6653
Calling: 1-466-555-1069
...
Continuant pendant 27 cycles supplémentaires.
Tableau d'affichage
Pour que votre score apparaisse sur le tableau, il doit être dans ce format:
# Language, Bytes
Les barrés ne devraient pas poser de problème.
1
. En ce qui concerne les indicatifs régionaux, trois chiffres suffiront pour les besoins de ce défi. @minxomatRéponses:
CJam,
686664 octetsMerci à Dennis d'avoir économisé 2 octets!
Le copypasting ne fonctionnera pas car il y a quelques non imprimables (un à la place de chaque groupe aléatoire), voici donc un
xxd
vidage:Pour l'inverser, collez-le dans un fichier et lancez
xxd -r in_file > out_file
. Vous pouvez également l' essayer en ligne .Explication
la source
Python 2, 129
Une méthode naïve. Prend le message
et le copie 30 fois. Ensuite, remplace chacun
x
par un chiffre aléatoirerandint(0,9)
, en gardant tous les autres caractères identiques.la source
Python 2, 151 octets
Remerciez le seigneur (et @Dennis) pour
%0nd
: Dla source
Perl, 85 octets, merci à Dennis et grc!
Perl d'origine,
9192 octetsla source
$_="..."x30;s/_/0|rand 10/eg;print
qui sauve le/r
drapeau.0|rand ...
astuce et l'opérateur de répétition que j'utilise maintenant pour me gifler répétitivement la tête pour avoir raté ça!CJam,
737170 octetsEssayez-le en ligne dans l' interpréteur CJam .
Comment ça marche
la source
ß,
121118112 octetsRemplace essentiellement 0 par un nombre aléatoire chacun et s'appelle 30 fois.
Testez-le à l'aide du terminal en ligne :
Edit (112B): Utilisation
$$
(quelque chose comme sprintf) et opérateur ternaire.la source
Pyth, 66
Permet
X
de traduire les 5 dernières lettres de l'alphabet (>5G == 'vwxyz'
) sur les 5 nombres aléatoires. Utilise le même RNG que Sok a trouvé.Essayez-le en ligne ici
la source
Pyth, 62
Une implémentation de la fantastique réponse CJam d' Andrea .
Notez qu'il y a plusieurs caractères non imprimables dans la source et qu'il ne devrait pas y avoir de fin
"
. Cela a été ajouté pour SE afin qu'il semble un peu plus lisible. Je n'ai pas encore pu obtenir un hexdump, mais le lien ci-dessous fonctionne et vous devriez pouvoir le copier-coller.Essayez-le en ligne ici
la source
CJam, 74 octets
Pas un gagnant, mais c'est au moins un peu proche de ce que Dennis a jusqu'à présent, et il utilise une approche différente. J'ai donc pensé que cela valait la peine d'être publié de toute façon.
Celui-ci utilise l'
e%
opérateur CJam , qui génère une sortie avec une chaîne de format de style printf.la source
Matlab / Octave, 108
172octetsEssayez-le en ligne
la source
JavaScript (ES6), 142
La réponse du mixmat de note latérale en ß montre une meilleure façon d'accomplir cette tâche, et pourrait facilement être implémentée dans JS en donnant un meilleur score. J'aurais aimé y avoir pensé.
Modifier Ajout du texte manquant (j'ai mal lu le défi)
Testez l'exécution de l'extrait ci-dessous dans un navigateur compatible EcmaScript 6
la source
Fourier,
166142 octetsCela a l'un des nombres d'octets les plus élevés, mais je suis un grand fan de Fourier et je voulais essayer une solution. Pas très optimisé.
Décomposer:
Définit la variable d sur 45, le code ASCII d'un trait d'union. Ce caractère est tellement imprimé qu'il économise quelques octets pour le déclarer ici.
Met l'accumulateur à zéro et passe à l'intérieur des parenthèses jusqu'à ce qu'il atteigne 30.
Imprimer "Crime prédit:".
Imprimez une nouvelle ligne SSN + complètement aléatoire.
Imprimez "Appel:".
Imprimez un numéro de téléphone conforme aux directives: 1-xxx-555-xxxx
Imprimez deux nouvelles lignes pour recommencer.
la source
Pyth, 67 octets
Les sauts de ligne sont importants et sont inclus dans le nombre d'octets. Essayez-le ici .
la source
Haskell, 150 octets
la source
JavaScript (ES6),
130123 octetsPrenant la solution ß de minxomat un peu plus loin, j'ai remplacé le
0
s par le nombre de0
s qui auraient été là. Le code utilise ces chiffres pour extraire le nombre correct de chiffresMath.random()
, économisant ainsi un bon nombre d'octets dans le processus.Essaye le:
Comme toujours, les suggestions sont les bienvenues!
la source
Java, 246 octets
Avec des sauts de ligne:
C'est un début. Au lieu de produire des chiffres aléatoires, j'ai utilisé des nombres aléatoires à 3 ou 4 chiffres.
la source
R,
151146 ou 144 octetsCode
Testez-le en ligne .
Non golfé
Je pense qu'il y a beaucoup de place pour s'améliorer mais je ne suis pas bon avec les cordes en R.
Edit 1: changé le
runif(16,max=10)
enrunif(16,,10)
.J'ai fait un autre code (
147144 octets) avecsprintf
mais je ne pense pas que ce soit beaucoup un code de type R.Une autre approche (149 octets):
la source
PHP ,
144143 octetsla source
GolfScript, 91 octets
Essayez-le en ligne.
la source
C #,
280263246 octetsGolfé:
Dentelé:
Nouveau sur Codegolf, les conseils sont les bienvenus!
la source
h(999)
cela générera un nombre de000
à998
inclusif, ce qui signifie que cela ne correspond pas tout à fait à l'esprit des spécifications. J'ai rencontré le même problème .Hassium , 230 octets
Étendu:
la source
Ruby, 98 caractères
Exemple d'exécution:
la source
JavaScript,
146141la source
pré-ES6 Javascript, 128
J'ai l'impression que les tirets pourraient être supprimés d'une manière ou d'une autre, mais je n'en suis pas sûr.
la source
Pyth, 73 octets
Démo
la source
Julia, 120 octets
Non golfé:
la source
Rubis,
9088 octetsEssayez-le en ligne.
la source
?N
suffit. Pas besoin de parenthèses, autourrand
du paramètre de.PowerShell,
120108103102 OctetsRaccourci de quelques octets supplémentaires en définissant la boucle de séparation à la place comme un bloc de code qui sort vers un tableau@(..)
et est à nouveau joint.Éliminé
@
en se souvenant que(...)
désigne un bloc de code exécuté avant le de-join''
toute façon.Cela évite d'avoir à affecter la
$a
variable. A également remarqué qu'en raison du-split
fonctionnement de la fonctionnalité, le code précédent crachait trop de chiffres pour le numéro de téléphone, donc a obtenu un octet gratuit en y réduisant en se rétrécissant1-XXX-555-XXX
. Cela a compensé l'erreurRandom 9
qui choisit réellement au hasard0-8
, nous devons donc plutôt spécifierRandom 10.
Sooo dang près de deux chiffres, mais je ne sais pas où il est possible de jouer au golf sur
quatreautres 3 octets ...Précédent, 108
Raccourci le code de quelques octets en divisant une chaîne à
X
la place, puis en bouclant à nouveau le tableau de chaînes résultant et en concaténant chaque entrée avec unRandom
chiffre pour construire notre chaîne de sortie finale$a
. Notez que nous ne pouvions pas faire quelque chose comme ça"string".replace("x",$(Random 9))
car alors leRandom
ne serait appelé qu'une seule fois, donc vous auriez1-222-555-2222
un numéro de téléphone, par exemple.Précédent-er, 120
Assez compétitif pour un langage verbeux, grâce à des spécifications de sortie généreuses (c'est-à-dire qu'il
000-00-0001
est traité comme un SSN valide) et à l'.ToString()
algorithme de formatage vraiment robuste utilisé par PowerShell. PowerShell\r\n
génère également une sortie après chaque sortie de chaîne, donc l'exigence d'une nouvelle ligne entre les itérations est juste simple""
.Notez que cela utilise un implicite
Get-
devantRandom
, donc cela peut être vraiment lent sur certaines plates-formes / implémentations.la source
Befunge-98, 170
Je pense que cela peut encore être joué un peu. Mais au moins, j'ai battu C #. Testé sur befungius.aurlien.net .
la source
Python 2,
151150 octetsAussi golfé que j'ai pu obtenir cette méthode.
la source