Fondo
Person of Interest es un drama criminal en CBS, y mi programa de televisión favorito, recientemente.
El programa trata sobre un hombre llamado Harold Finch, un programador multimillonario, y su compañero John Reese, un veterano de las fuerzas especiales y ex agente de la CIA. Este programador creó una IA inteligente llamada "La máquina" que predice crímenes violentos antes de que sucedan. Rastrea a cada persona en la Tierra en todo momento mediante el monitoreo y análisis de todas las cámaras de vigilancia y comunicaciones electrónicas en todo el mundo.
Harold construyó The Machine para que el gobierno de los Estados Unidos detecte la actividad terrorista antes del hecho. Divide los delitos que predice en listas según sean relevantes o no para la seguridad nacional. Los casos relevantes son manejados por el gobierno, mientras que la lista "irrelevante" está programada para ser eliminada diariamente.
Harold hizo una pequeña puerta trasera para sí mismo con la esperanza de lidiar con la lista "irrelevante", él mismo. Esta puerta trasera hace que The Machine llame al teléfono público más cercano a Harold (una vez al día más o menos) y le lea un número de Seguro Social. Este número de seguro social pertenece a alguien cuya vida está en peligro como parte de un delito premeditado, o de alguien que está planeando dicho delito.
El reto
Escriba un programa que no reciba entrada y genere 30 números de teléfono aleatorios y SSN (consulte a continuación).
Salida
Hay dos líneas de texto que se imprimirán cada "día".
Crime predicted: 555-55-5555
Calling: 1-555-555-5555
seguido de una nueva línea
Este proceso debe repetirse durante un "mes" (30 "días").
Números de teléfono
Cada número de teléfono debe tener los siguientes elementos:
Debe tener el código de país de Estados Unidos (el primer dígito).
Debe tener un código de área aleatorio (primer conjunto de tres dígitos).
Los primeros tres dígitos del número de teléfono deberían ser
555
, seguidos de 4 dígitos aleatorios.
Aquí hay un ejemplo anotado:
1-814-555-3857
| | | |
| | | |
| | | +----------> random four digits
| | |
| | +--------------> the set 555
| |
| +------------------> area code
|
+---------------------> country code
Números de seguridad social
Cada SSN debe tener 9 dígitos aleatorios en el siguiente formato.
342-98-1613
Ejemplo
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
...
Continuando por 27 ciclos más.
Marcador
Para que su puntaje aparezca en el tablero, debe estar en este formato:
# Language, Bytes
Los tachados no deberían causar un problema.
1
. En cuanto a los códigos de área, lo harán tres dígitos, a los efectos de este desafío. @minxomatRespuestas:
CJam,
686664 bytes¡Gracias a Dennis por guardar 2 bytes!
El copypasting no funcionará ya que hay algunos no imprimibles (uno en lugar de cada grupo aleatorio), así que aquí hay un
xxd
volcado:Para revertirlo, péguelo en un archivo y ejecútelo
xxd -r in_file > out_file
. También puedes probarlo en línea .Explicación
fuente
Pitón 2, 129
Un método ingenuo. Toma el mensaje
y lo copia 30 veces. Luego, reemplaza cada uno
x
con un dígito aleatoriorandint(0,9)
, manteniendo todos los demás caracteres iguales.fuente
Python 2, 151 bytes
Gracias al señor (y @Dennis) por
%0nd
: Dfuente
Perl, 85 Bytes, gracias a Dennis y grc!
Perl original,
9192 bytesfuente
$_="..."x30;s/_/0|rand 10/eg;print
que salva la/r
bandera.0|rand ...
truco y el operador de repetición que ahora estoy usando para golpearme repetidamente la cabeza por perder eso!CJam,
737170 bytesPruébelo en línea en el intérprete de CJam .
Cómo funciona
fuente
ß,
121118112 bytesBásicamente reemplaza 0 con un número aleatorio cada uno y se llama a sí mismo 30 veces.
Pruébelo usando el terminal en línea :
Editar (112B): Uso
$$
(algo así como sprintf) y operador ternario.fuente
Pyth, 66
Utiliza
X
para traducir las últimas 5 letras del alfabeto (>5G == 'vwxyz'
) en los 5 números aleatorios. Utiliza el mismo RNG que encontró Sok.Pruébalo en línea aquí
fuente
Pyth, 62
Una implementación de la fantástica respuesta CJam de Andrea .
Tenga en cuenta que hay varios caracteres no imprimibles en la fuente, y no debe haber un final
"
. Eso se agregó para SE para que parezca un poco más legible. Todavía no he podido obtener un hexdump, pero el siguiente enlace funciona y deberías poder copiarlo y pegarlo.Pruébalo en línea aquí
fuente
CJam, 74 bytes
No es un ganador, pero al menos está cerca de lo que Dennis tiene hasta ahora, y está usando un enfoque diferente. Así que pensé que valía la pena publicar de todos modos.
Esto utiliza el
e%
operador CJam , que genera resultados con una cadena de formato de estilo printf.fuente
Matlab / Octave, 108
172bytesPruébalo en línea
fuente
JavaScript (ES6), 142
La respuesta mixmat de la nota al margen en ß muestra una manera mejor de realizar esta tarea, y podría implementarse fácilmente en JS dando una mejor puntuación. Desearía haberlo pensado.
Editar Se agregó el texto que falta (leí mal el desafío)
Pruebe a ejecutar el fragmento a continuación en un navegador compatible con EcmaScript 6
fuente
Fourier,
166142 bytesEste tiene uno de los conteos de bytes más altos, pero soy un gran admirador de Fourier y quería probar mi solución. No muy optimizado.
Desglosándolo:
Establece la variable d en 45, el código ASCII para un guión. Este carácter se imprime tanto que ahorra algunos bytes para declararlo aquí.
Establece el acumulador en cero y se repite dentro de los paréntesis hasta que alcanza 30.
Imprimir "Delito predicho:".
Imprima una SSN + nueva línea completamente al azar.
Imprimir "Llamando:".
Imprima un número de teléfono que siga las pautas: 1-xxx-555-xxxx
Imprima dos líneas nuevas para comenzar de nuevo.
fuente
Pyth, 67 bytes
Las nuevas líneas son importantes y se incluyen en el recuento de bytes. Pruébalo aquí .
fuente
Haskell, 150 bytes
fuente
JavaScript (ES6),
130123 bytesLlevando la solución ß de minxomat un paso más allá, he reemplazado la
0
s con la cantidad de0
s que habría estado allí. El código usa esos números para extraer el número correcto de dígitos deMath.random()
, ahorrando un buen bit de bytes en el proceso.Pruébalo:
Como siempre, las sugerencias son bienvenidas!
fuente
Java, 246 bytes
Con saltos de línea:
Es un comienzo. En lugar de producir dígitos aleatorios, utilicé números aleatorios de 3 o 4 dígitos.
fuente
R,
151o 144 bytesCódigo
Pruébalo línea .
Sin golf
Creo que hay mucho espacio para mejorar, pero no soy bueno jugando con las cuerdas en R.
Edición 1: cambió el
runif(16,max=10)
arunif(16,,10)
.He hecho otro código (
147144 bytes)sprintf
pero no creo que sea un código similar a R.Otro enfoque (149 bytes):
fuente
PHP ,
144143 Bytesfuente
GolfScript, 91 bytes
Pruébalo en línea.
fuente
C #,
280263246 bytesGolfizado:
Sangrado:
Nuevo en Codegolf, ¡los consejos son bienvenidos!
fuente
h(999)
va a generar un número del000
que998
ambos inclusive, de manera que mediante este no lo hace bastante golpean el espíritu de las especificaciones. Me encontré con el mismo problema .Hasio , 230 Bytes
Expandido:
fuente
Ruby, 98 caracteres
Ejecución de muestra:
fuente
JavaScript,
146141fuente
Javascript pre-ES6, 128
Siento que los guiones podrían eliminarse de alguna manera, pero no estoy seguro.
fuente
Pyth, 73 bytes
Manifestación
fuente
Julia, 120 bytes
Sin golf:
fuente
Ruby,
9088 bytesPruébalo en línea.
fuente
?N
es suficiente. No hay necesidad de paréntesis, alrededorrand
del parámetro.PowerShell,
120108103102 BytesSe acortaron unos pocos bytes más configurando el bucle dividido para que sea un bloque de código que salga a una matriz@(..)
y se vuelva a unir.Se eliminó el
@
recordatorio que(...)
designa un bloque de código ejecutado antes del-join''
todos modos.Esto elimina la necesidad de asignar la
$a
variable. También noté que debido a cómo-split
funciona la funcionalidad, el código anterior estaba escupiendo demasiados dígitos para el número de teléfono, por lo que obtuve un byte gratis ahorrando allí al reducirlo1-XXX-555-XXX
. Eso compensó lo erróneoRandom 9
que realmente elige al azar0-8
, por lo que debemos especificarRandom 10.
Taaan cerca de los dos dígitos, pero no estoy seguro de dónde es posible jugar otros
cuatro3 bytes ...Anterior, 108
Acorté el código un par de bytes al dividir una cadena en
X
una, luego volver a recorrer la matriz resultante de cadenas y concatenar cada entrada con unRandom
dígito para construir nuestra cadena de salida final$a
. Tenga en cuenta que no podríamos hacer algo así"string".replace("x",$(Random 9))
porque entoncesRandom
solo se llamaría una vez, por lo que tendría1-222-555-2222
un número de teléfono, por ejemplo.Anterior er, 120
Bastante competitivo para un lenguaje detallado, gracias a las generosas especificaciones de salida (es decir,
000-00-0001
se trata como un SSN válido) y al.ToString()
algoritmo de formato realmente robusto que utiliza PowerShell. PowerShell también\r\n
sale después de cada salida de cadena, por lo que el requisito de una nueva línea entre iteraciones es simplemente simple""
.Tenga en cuenta que esto utiliza un implícito
Get-
delanteRandom
, por lo que esto puede ser realmente lento en algunas plataformas / implementaciones.fuente
Befunge-98, 170
Creo que esto todavía se puede jugar un poco. Pero al menos vencí a C #. Probado en befungius.aurlien.net .
fuente
Python 2,
151150 bytesTan golfizado como pude obtener este método.
fuente