4, 8, 15, 16, 23, 42
Escreva um programa que produz essa sequência de números infinitamente. No entanto, os números não devem aparecer no seu código-fonte em nenhum lugar.
O seguinte não é um programa Java válido para a saída do The Numbers porque o The Numbers aparece em seu código-fonte:
class TheNumbers {
public static void main(String[] args) {
for(int n = 0;;) System.out.println(
n == 4 ? n = 8 :
n == 8 ? n = 15 :
n == 15 ? n = 16 :
n == 16 ? n = 23 :
n == 23 ? n = 42 : (n = 4)
);
}
}
A definição de "Os números não devem aparecer no seu código-fonte" é a seguinte:
- Você não deve usar o número 4.
- Você não deve usar o número 8.
- Você não deve usar o número 1 seguido pelo número 5.
- Você não deve usar o número 1 seguido pelo número 6.
- Você não deve usar o número 2 seguido pelo número 3.
Se seu idioma ignora certos caracteres que podem ser colocados entre os números, não é uma substituição válida. Por exemplo, se seu idioma interpreta o literal 1_5
como 15
, isso contará como o número 1 seguido pelo número 5.
Bases alternativas estão incluídas na restrição, por exemplo:
- O binário 100 não pode ser usado como um substituto para 4.
- O Octal 10 não pode ser usado como um substituto para 8.
- O hexadecimal F não pode ser usado como substituto de 15.
Portanto, a seguir, é um programa Java válido (mas não muito inspirado) para gerar saída do Numbers porque ele não aparece em seu código-fonte:
class TheNumbers {
public static void main(String[] args) {
for(int n = '*';;) {
System.out.println(n -= '&');
System.out.println(n *= 2);
System.out.println(n += 7);
System.out.println(++n);
System.out.println(n += 7);
System.out.println(n += 19);
}
}
}
Observe que nesse programa, '*'
e '&'
são substituídos os números inteiros 42 e 38, porque, caso contrário, os números 4 e 8 apareceriam em seu código-fonte.
A definição de "gera a sequência infinitamente" está aberta à interpretação. Assim, por exemplo, um programa que gera glifos cada vez menores até serem "infinitamente" pequenos seria válido.
Parabéns se você é capaz de gerar a sequência de alguma forma que não é basicamente codificar cada número.
- Derivando-o a uma fórmula. Minha impressão é que não existe, mas talvez exista ou possa ser falsificado.
- Corrigindo um gerador pseudo-aleatório para retornar a sequência.
Este é um concurso de popularidade, então seja criativo. A resposta com mais votos em 26 de março é a vencedora.
fonte
This isn't an interesting question, IMHO, since the solution is pretty trivial. Please post in the sandbox next time.
seria muito melhor do que issoThis is a stupid question.
, mas essa é apenas a minha opinião pessoal.Respostas:
Java
Decidi adicionar outra entrada, pois ela é completamente diferente da minha primeira (que era mais como um exemplo).
Este programa calcula a média de uma matriz inserida pelo usuário ...
... ou faz?
fonte
Pitão
Editar: Conforme sugestão de nneonneo, o script agora não inclui dígitos.
fonte
while True:
para que sua resposta não contenha nenhum dígito.while True:
é mais comumPerl
Não há nada oculto no código fonte. Não. Se o código não funcionar, digite
use re "eval";
antes dele (obrigatório no Perl 5.18).Explicação em spoiler.
fonte
Brainfuck
Eu sou tão ruim em arte ASCII!
Teste aqui: http://ideone.com/kh3DYI
fonte
Unix C
Existem muitos lugares para encontrar constantes numéricas.
fonte
C #
fonte
a(i)=a(i-1)+a(i-3)+a(i-5)
realmente parece uma solução mais fácilC #
Usar o fato de que qualquer sequência de N elementos pode ser gerada por um polinômio N-1 e inserir os números envolveu muitos bipes e boops. Para referência, o polinômio I derivado é
Atribuí os fatores às variáveis nomeadas para os números, por simplicidade;)
Primeira versão:
Gostei da implicação do aumento da tensão, à medida que o número de BEEPs diminui após cada número.
Então imaginei que também poderia calcular os fatores usando bipes e boops:
Foi um pouco exagerado depois disso ...
O uso do operador padrão em C # para tipos de valor permite a inicialização do BEEEP em zero. Dessa forma, nenhum literal numérico é usado no código. O algoritmo básico é o mesmo. mas os fatores são calculados em linha.
fonte
D
Não é permitido usar os números 4, 8, 15, 16, 23 ou 42 no meu código? Não tem problema, então não usarei números!
fonte
Javascript + HTML
Anti-golfe!
O
<pre>
elemento exibe um número na sequência. Ele também contém todo o código necessário para chegar ao próximo número na sequência. Portanto, o<pre>
é avaliado, o que resulta no texto da<pre>
atualização para se parecer com o próximo número na sequência. Esse processo se repete indefinidamente.Aqui está em ação!
fonte
C
Coloque seus óculos de sol em :-)
fonte
4
e dois8
segundos.Haskell, 1 LoC
Decidi optar por uma linha legível apenas para mostrar como Haskell é incrível. Além disso, decidi evitar todos os dígitos, apenas por precaução.
Graças à avaliação lenta embutida, o Haskell pode manipular (mapear, dividir, ingressar, filtrar ...) listas infinitamente longas. Ele ainda possui vários recursos internos para criá-los. Como uma string é apenas uma lista de caracteres, infinitamente longas também não são um mistério para Haskell.
fonte
fromEnum
parece mais agradável do queData.Char.ord
, e é um pouco mais curtoMathematica
Podemos responder à pergunta focando nos denominadores parciais repetidos da fração contínua periódica mostrada abaixo. Eles são o que precisamos.
Afinal, eles compreendem a sequência não terminante que estamos tentando produzir: 4, 8, 15, 16, 23, 42, 4, 8, 15, 16, 23, 42 ...
Na Mathematica, obtém-se o irracional quadrático correspondente à fração contínua periódica por
onde 0 se refere à parte inteira implícita.
Podemos verificar invertendo a operação:
Os 4 e 8 violam uma das regras do desafio. A substring
15
é uma violação adicional. Podemos reformatar o irracional quadrático para satisfazer as regras.Agora pegamos a sequência de interesse:
E imprima a lista para sempre ...
fonte
16
fração enquanto eu estava digitando um comentário sobre isso.C / C ++
Usando apenas os personagens
L
,O
,S
eT
repetidamente nessa ordem:fonte
Java
Não consigo encontrar um padrão nessa sequência. Se não houver um padrão reconhecível, é melhor juntarmos alguns primos pequenos, enfiá-los no RNG interno do Java e encerrar o dia. Não vejo como isso poderia dar errado, mas, novamente, sou otimista :)
fonte
while(true)
: ideone.com/1xaPdOBash one-liner
Quebra de linha adicionada para facilitar a leitura. (Ab) usa o fato de que estes são os seis primeiros números da sequência OEIS A130826 .
fonte
awk -F"[ ,]" '/%S/ {for (i=3;i<=9;i++) printf $i" "}'
paracurl
.yes
e soltar o redirecionamento para/dev/null
withcurl -s
. Algo comoyes $(curl -s "https://oeis.org/search?q=id:A$((130726+100))&t=text" | awk -F"[ ,]" '/%S/ {for (i=3;i<9;i++) printf $i" "}')
yes
ecurl -s
- apenas adicionei vergonhosamente isso à minha resposta. :-)C usando nenhum número e nenhum valor de caractere
fonte
Eu gosto da ideia de usar a sequência
como nesta resposta . Foi encontrado através da pesquisa OEIS como sequência A122115 .
Se passarmos pela sequência ao contrário, encontraremos um quíntuplo de inicialização adequado que não contém 4, 8, 15, 16 ou 23.
Python3:
fonte
Javascript
Nenhum número é uma boa jogada. Mas, em vez de imprimir a sequência uma vez por passagem no loop, imprima apenas uma vez o número por passagem.
A parte inferior da sequência codifica os números a serem impressos e a parte superior da sequência codifica o próximo caractere a ser encontrado. Onde as duas partes se encontram (um único
F
) códigos redefinindo o ciclo.fonte
Pitão
Operadores bit a bit e algumas contas simples.
fonte
Rubi
Gera os números incorporando a sequência igualmente mística 0, ∞, 9, 0, 36, 6, 6, 63 ;
Nada de bom pode vir disso.
fonte
C (
5450 caracteres)Estou postando uma resposta de golfe, porque o golfe o torna divertido.
fonte
a=0;
. O único efeito seria que você pode iniciar a sequência em outro lugar que não seja 4 (provavelmente 8). De qualquer forma, isso atrapalhará a sequência quandoa
houver excesso. É um comportamento tecnicamente indefinido, mas o resultado provável é que você imprimirá o lixo na metade do tempo.for
não ajuda se não houver inicialização.for(;;)
é o mesmo número de caracteres quewhile()
. Interpretei as regras para que as novas linhas precisassem estar lá ... Mas eu poderia usar a recursão da cauda com o principal ...Haskell
http://ideone.com/erQfcd
Edit: O que eu usei para gerar os coeficientes: https://gist.github.com/ion1/9578025
Edit: Eu realmente gostei do programa de Agrif e acabei escrevendo um equivalente Haskell enquanto descobri. Eu escolhi uma base diferente para o número mágico.
http://ideone.com/kzL6AK
Edit: Eu também gostei do seu segundo programa e acabei escrevendo uma implementação Haskell de irracionais quadráticos ;-). Usando a biblioteca e o número mágico do agrif, este programa imprimirá a sequência.
É assim que se pode procurar o número mágico com a ajuda da biblioteca:
O valor impresso representa o número
(−644047 + 1 √424477224534)/30815
. Tudo o que você precisa fazer é encontrar fatores que se livrem das seqüências de dígitos não permitidas nos números, sem alterar o valor da expressão.fonte
C #
Encontrei a semente depois de ouvir alguma estação de rádio em um vôo sobre o Pacífico.
fonte
Pitão
Enquanto muitas pessoas usavam padrões retirados do OEIS, decidi criar meu próprio conjunto de funções para representar os números.
A primeira função que criei foi periódica (). É uma função que repete a cada seis números de entrada usando as propriedades cíclicas das funções trigonométricas. É assim:
Então, eu crio polinomial (). Que usa o seguinte polinômio:
(No meu código, alguns dos coeficientes são representados como somas porque contêm os números perdidos como um de seus dígitos.)
Esse polinômio converte a saída de periódico () em seu número perdido apropriado, assim:
Ao aumentar constantemente i e passar por ambas as funções, recebo os números perdidos repetindo infinitamente.
(Nota: Eu uso muito float () no código. Isso é para que o Python faça divisão de ponto flutuante em vez de dizer 2/3 = 0.)
fonte
4
empolynomial
.Emacs Lisp 73 chars
A melhor maneira de fazer um loop para sempre? Uma lista cíclica!
Mas espere, tem mais!
? \ ^ D é a melhor maneira de inserir o caractere para EOT, no entanto, se eu estivesse apenas enviando um arquivo, não precisaria do literal "\ ^ D", apenas poderia inserir um '?' seguido por um caractere EOT real, diminuindo assim o número real de caracteres necessários para: 63
Editar
Eu tenho trabalhado em "gel", que ainda não é uma linguagem real, mas é basicamente uma série de macros emacs lisp para código golf. Em "gel", esta seria a solução:
e sem a espera:
44 caracteres com boa entrada de caracteres. Seria 34 se não fosse por uma apresentação na web.
fonte
Julia
Ao pesquisar um tempo, encontrei uma maneira matemática de expressar a sequência por outras seqüências sem usar nenhum dos números (ou maneiras complicadas de usá-las):
Resultado:
fonte
C ++
Uma linguagem limpa e agradável como o C ++ pode permitir que você organize sua fonte de maneira organizada e altamente legível, e tem a vantagem de ser fácil de copiar manualmente, com o mínimo de ambiguidade.
Aqui a solução é alcançada usando apenas o número 1.
Teste: http://ideone.com/fuOdem
fonte
Esquema (Guile)
http://ideone.com/QBzuBC
Indiscutivelmente, isso quebra a regra "não codifique os números em outras bases", mas acho que é suficientemente obscuro para não contar. Como evidência dessa obscuridade, esses dois números mágicos na base 51 são:
Edit : Mesmo truque, representação diferente. Na verdade, gosto mais deste, uma vez que não depende de uma base escolhida arbitrariamente. No entanto, requer uma implementação de esquema com suporte de precisão infinita para irracionais quadráticos, que (AFAIK) não existe. Você pode implementá-lo em algo como o Mathematica.
fonte
PHP
Eu pensei que era hora de alguém enviar uma resposta php, não a melhor, mas a mais divertida de qualquer maneira
os Ahs são os gritos dos passageiros enquanto o avião cai
fonte
Perl
fonte