fundo
Person of Interest é um drama policial na CBS, e meu programa de TV favorito, ultimamente.
O programa é sobre um homem chamado Harold Finch, um programador bilionário, e seu parceiro John Reese, um veterano das forças especiais e ex-agente da CIA. Este programador criou uma inteligência artificial chamada "The Machine" que prevê crimes violentos antes que eles aconteçam. Ele rastreia todas as pessoas na Terra o tempo todo, monitorando e analisando todas as câmeras de vigilância e comunicações eletrônicas em todo o mundo.
Harold construiu The Machine para o governo dos Estados Unidos para detectar atividades terroristas antes do fato. Ele divide os crimes previstos em listas com base na relevância ou não da segurança nacional. Os casos relevantes são tratados pelo governo, enquanto a lista "irrelevante" é programada para ser excluída diariamente.
Harold fez uma pequena porta dos fundos para si mesmo, na esperança de lidar com a lista "irrelevante". Essa porta dos fundos faz com que o equipamento ligue para o telefone público mais próximo de Harold (uma vez por dia ou mais) e leia um número do Seguro Social para ele. Esse SSN pertence a alguém cuja vida está em perigo como parte de um crime premeditado ou de alguém que está planejando esse crime.
O desafio
Escreva um programa que não aceite nenhuma entrada e produz 30 números de telefone aleatórios e SSNs (veja abaixo).
Saída
Existem duas linhas de texto que serão impressas todos os "dias".
Crime predicted: 555-55-5555
Calling: 1-555-555-5555
seguido por uma nova linha
Esse processo deve se repetir por um "mês" (30 "dias").
Números de telefone
Todo número de telefone deve ter os seguintes elementos:
Deve ter o código do país dos Estados Unidos (o primeiro dígito).
Deve ter um código de área aleatório (primeiro conjunto de três dígitos).
Os três primeiros dígitos do número de telefone devem ser
555
seguidos por 4 dígitos aleatórios.
Aqui está um exemplo anotado:
1-814-555-3857
| | | |
| | | |
| | | +----------> random four digits
| | |
| | +--------------> the set 555
| |
| +------------------> area code
|
+---------------------> country code
Números de Segurança Social
Todo SSN deve ter 9 dígitos aleatórios no seguinte formato.
342-98-1613
Exemplo
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 mais 27 ciclos.
Placar
Para que sua pontuação apareça no quadro, ela deve estar neste formato:
# Language, Bytes
Tacadas não devem causar problemas.
1
. Quanto aos códigos de área, quaisquer três dígitos servirão para os propósitos deste desafio. @minxomatRespostas:
CJam,
686664 bytesAgradecimentos a Dennis por economizar 2 bytes!
O copipasting não funcionará, pois existem alguns não imprimíveis (um no lugar de cada grupo aleatório), então aqui está um
xxd
despejo:Para revertê-lo, cole-o em um arquivo e inicie-o
xxd -r in_file > out_file
. Você também pode experimentá-lo online .Explicação
fonte
Python 2, 129
Um método ingênuo. Leva a mensagem
e copia 30 vezes. Em seguida, substitui cada
x
um por um dígito aleatóriorandint(0,9)
, mantendo todos os outros caracteres iguais.fonte
Python 2, 151 bytes
Agradeça ao senhor (e @Dennis) por
%0nd
: Dfonte
Perl, 85 bytes, graças a Dennis e grc!
Perl original,
9192 bytesfonte
$_="..."x30;s/_/0|rand 10/eg;print
que salva a/r
bandeira.0|rand ...
truque e do operador de repetição que agora estou usando para repetidamente bater na minha cabeça por perder isso!CJam,
737170 bytesExperimente on-line no intérprete CJam .
Como funciona
fonte
ß,
121118112 bytesSubstitui basicamente 0 por um número aleatório cada e chama a si próprio 30 vezes.
Teste usando o terminal on - line :
Edit (112B): Usando
$$
(algo como sprintf) e operador ternário.fonte
Pyth, 66
Usa
X
para traduzir as últimas 5 letras do alfabeto (>5G == 'vwxyz'
) nos 5 números aleatórios. Usa o mesmo RNG encontrado por Sok.Experimente online aqui
fonte
Pyth, 62
Uma implementação da fantástica resposta CJam de Andrea .
Observe que existem vários caracteres não imprimíveis na origem e não deve haver um final
"
. Isso foi adicionado ao SE para que pareça um pouco mais legível. Ainda não consegui obter um hexdump, mas o link abaixo funciona e você poderá copiar e colar nele.Experimente online aqui
fonte
CJam, 74 bytes
Não é um vencedor, mas é pelo menos um pouco parecido com o que Dennis tem até agora, e está usando uma abordagem diferente. Então pensei que valeria a pena postar de qualquer maneira.
Isso usa o
e%
operador CJam , que gera saída com uma sequência de formato no estilo printf.fonte
Matlab / Octave, 108
172bytesExperimente online
fonte
JavaScript (ES6), 142
A resposta mixmat de nota lateral em ß mostra uma maneira muito melhor de realizar essa tarefa e pode ser facilmente implementada em JS, dando uma pontuação melhor. Eu gostaria de ter pensado sobre isso.
Editar Adicionado o texto ausente (eu interpretei mal o desafio)
Teste a execução do snippet abaixo em um navegador compatível com EcmaScript 6
fonte
Fourier,
166142 bytesEssa é uma das contagens de bytes mais altas, mas sou um grande fã de Fourier e queria tentar minha solução. Não é muito otimizado.
Dividindo:
Define a variável d como 45, o código ASCII para um hífen. Esse caractere é impresso tanto que salva alguns bytes para declará-lo aqui.
Define o acumulador como zero e circula entre parênteses até atingir 30.
Imprima "Crime previsto:".
Imprima uma nova linha SSN + aleatória.
Imprima "Ligando:".
Imprima um número de telefone que siga as diretrizes: 1-xxx-555-xxxx
Imprima duas novas linhas para começar de novo.
fonte
Pitão, 67 bytes
As novas linhas são importantes e estão incluídas na contagem de bytes. Experimente aqui .
fonte
Haskell, 150 bytes
fonte
JavaScript (ES6),
130123 bytesLevando a solução ß do minxomat um passo adiante, substituí os
0
s pelo número de0
s que estariam lá. O código usa esses números para obter o número correto de dígitosMath.random()
, economizando um bom bocado de bytes no processo.Experimente:
Como sempre, sugestões são bem-vindas!
fonte
Java, 246 bytes
Com quebras de linha:
É um começo. Em vez de produzir dígitos aleatórios, usei números aleatórios de 3 ou 4 dígitos.
fonte
R,
151146 ou 144 bytesCódigo
Teste online .
Ungolfed
Eu acho que há muito espaço para melhorar, mas eu não sou bom em mexer com cordas em R.
Editar 1: mudou
runif(16,max=10)
pararunif(16,,10)
.Eu criei outro código (
147144 bytes)sprintf
mas não acho que seja um código semelhante ao R.Outra abordagem (149 bytes):
fonte
PHP ,
144143 bytesfonte
GolfScript, 91 bytes
Experimente online.
fonte
C #,
280263246 bytesGolfe:
Recuado:
Novidade no Codegolf, dicas são bem-vindas!
fonte
h(999)
irá gerar um número000
para998
inclusive, o que significa isso não bastante acertar o espírito das especificações. Corri para o mesmo problema .Hássio , 230 bytes
Expandido:
fonte
Ruby, 98 caracteres
Exemplo de execução:
fonte
JavaScript,
146141fonte
Javascript pré-ES6, 128
Sinto que os traços podem ser removidos de alguma forma, mas não tenho certeza.
fonte
Pitão, 73 bytes
Demo
fonte
Julia, 120 bytes
Ungolfed:
fonte
Ruby,
9088 bytesExperimente online.
fonte
?N
são suficientes. Não há necessidade de parênteses, ao redorrand
do parâmetro.PowerShell,
120108103102 BytesEncurtou mais alguns bytes, definindo o loop dividido como um bloco de código que gera uma matriz@(..)
e é reconectado.Eliminado o
@
lembrando que(...)
designa um bloco de código executado antes do-join''
mesmo.Isso elimina a necessidade de atribuir a
$a
variável. Também notei que, devido à forma como a-split
funcionalidade funciona, o código anterior estava digitando muitos dígitos para o número de telefone; portanto, obtivemos um byte gratuito economizando lá diminuindo para1-XXX-555-XXX
. Isso compensou o erroRandom 9
que realmente escolhe aleatoriamente0-8
, então precisamos especificarRandom 10.
Sooo dang perto de dois dígitos, mas não tenho certeza de onde é possível jogar golfe em outro
quatro3 bytes ...Anterior, 108
Encurtou o código em alguns bytes dividindo uma string em
X
's' e, em seguida, repetindo a seqüência resultante de strings e concatenando cada entrada com umRandom
dígito para criar nossa string de saída final$a
. Observe que não poderíamos fazer algo como,"string".replace("x",$(Random 9))
porque, então, elesRandom
seriam chamados apenas uma vez; portanto, você teria1-222-555-2222
um número de telefone, por exemplo.Anterior-er, 120
Bastante competitivo para uma linguagem detalhada, graças às especificações de saída generosas (isto
000-00-0001
é , é tratado como um SSN válido) e ao.ToString()
algoritmo de formatação realmente robusto que o PowerShell usa. O PowerShell também gera\r\n
após cada saída de string, portanto, o requisito para uma nova linha entre as iterações é simples""
.Observe que isso usa um implícito
Get-
na frenteRandom
, portanto, isso pode ser muito lento em algumas plataformas / implementações.fonte
Befunge-98, 170
Eu acho que isso ainda pode ser um pouco de golfe. Mas pelo menos eu bati em c #. Testado em befungius.aurlien.net .
fonte
Python 2,
151150 bytesO mais golfista que eu pude obter esse método.
fonte