Um número indizível é um número que é divisível por sete ou tem sete como um de seus dígitos. Um jogo infantil é contar pulando números indizíveis
1 2 3 4 5 6 ( ) 8 9 10 11 12 13 ( ) 15 16 ( ) 18 ...
A versão do jogo de Cantor é a sequência definida pelo preenchimento recursivo da sequência "1 2 3 4 5 6 () 8 ..." nas lacunas () acima.
1 2 3 4 5 6 1 8 9 10 11 12 13 2 15 16 3 18 19 20 4 22 23 24 25 26 5 6 29 30 31 32 33 34 1 36 8 38 ...
Imprima / imprima pelo menos os primeiros 7 ^ 7 números do jogo de números indizível da Cantor ...
Embora a definição seja dada recursivamente, você não é obrigado a usar recursão no código.
Isso é código-golfe , então o programa com a menor contagem de bytes vence!
Nota: A soma dos números de 1 a 7 ^ 7 é 203511962727. Os últimos 10 números desse intervalo são 823534 823535 221563 108068 823538 823539 823540 823541 823542 221565.
Despejo de Pastebin das primeiras 1000 iterações: http://pastebin.com/Ksiu9Svf
Respostas:
Pitão ,
252322 bytesObrigado a @Maltysen por -2 bytes
Um programa que imprime um fluxo infinito.
Experimente online! (Saída nivelada em intervalos e tempo limite em 1 min)
Como funciona
fonte
7
é primo, então divisibilidade é pode ser feito através da verificação da fatoração nobre, que se encaixa bem com o outro chequePython 2,
77757470 bytesGraças a @MartinEnder para sugerir o limite de
9e5
que ende r d a trabalhar depois de uma mudança.Agradecemos a @mschauer por sugerir um fluxo infinito, economizando 4 bytes.
Este é um gerador que gera um fluxo infinito de números.
fonte
if n%7<1or'7'in`n`else n
pode ser um pouco mais rápido (mesma contagem de bytes), já quen%7<1
é mais rápido que a verificação da string eor
está em curto-circuito. É uma pena queyield[n,next(i)][n%7<1or'7'in`n`]
não funcione.Perl,
47464139 bytesGuardado 5 bytes graças a @Dada
Experimente Online! TIO Nexus, agora com suporte a Perl! Isso truncará a saída após um certo ponto, mas se você tiver o Perl instalado, poderá executá-lo localmente para produzir a saída completa.
O código utiliza algumas peculiaridades estranhas da sintaxe do Perl, então vou detalhar como funciona abaixo.
Repartição do código:
fonte
say$a[@a]=$_=...
ganhar 2 bytes se não me engano.$_
, me salva 5 bytes. Obrigado!PHP,
80 (Wahooka) 5754 bytesEnquanto a ideia é de Wahooka. Eu acho que minha versão é diferente o suficiente para torná-la uma resposta própria:
fonte
Haskell,
6766 bytesf
é uma lista infinita dos números.Experimente online!
f
inicia uma nova iteração com1
e um índice cujo número deve ser igual a 0. Sempre que houver uma lacuna, fazemos uma nova iteração e selecionamos seuith
elemento e continuamos com a iteração atuali+1
. Se não houver diferença, pegamos o número atualx
e continuamos sem aumentari
.Edit: -1 byte graças ao @BMO.
fonte
MATL ,
2625 bytesExperimente online! é
9e5
substituído por9e4
, para que o tempo máximo de execução e o tamanho da saída do compilador online não sejam excedidos.Como funciona
Isso usa iteração em vez de recursão. (De fato, o MATL não tem recursão).
Uma matriz de números de
1
a9e5
é gerada primeiro (isso é suficiente, porque9e5
excede7^7
). Então, números que são múltiplos de7
ou têm7
como dígitos são identificados e substituídos por1
,2
, ... O processo é iterativo até que não haja números que precisam ser substituídos.fonte
Tcl , 121 bytes
A solução trivial usando loop infinito, nada chique ..
Ungolfed:
fonte
incr
. E se tcl version> = 8.6,incr
assume na primeira iteração um incremento de uma nova variável de0
para1
se essa variável não tiver sido definida anteriormente; para que você possa se livrar das duas primeirasset
instruções.PHP,
10680 bytesObrigado Ismael Miguel pela ajuda com a solução ternária e o código de loop mais curto usando for, em vez de enquanto.
Não foi possível verificar as últimas partes da sequência completa devido ao tempo de execução máximo de 30 segundos do PhpFiddle. Parece funcionar pelo menos até 1K com base na saída de amostra fornecida pelo OP.
Golfe:
Versão original do golfe :
fonte
for($n=1;;$n++)echo$a[]=!(strpos($n,7)>-1||$n%7==0)?"$n ":array_shift($a)." ";
Não conheço a contagem de bytes, mas tenho certeza que é muito menor que 106 bytes. Experimente e veja se funciona.for($n=1;;$n++)echo$a[]=strpos($n,"7")>-1||$n%7==0?array_shift($a)." ":"$n ";
. Eu não tenho certeza se você pode substituir$n%7==0
com!$n%7
mas vale a pena uma tentativa.for(;;)echo$a[]=strpos(++$n,55)<-1&&$n%7?"$n ":$a[++$b-1];
(58 bytes).++$b-1
porque$a[null] === null
Julia, 62 bytes
Nada chique. Usa que a sequência dentro das lacunas é a própria sequência. Faz cópias excessivas da matriz para salvar alguns bytes.
fonte
Perl 6 ,
74 57 5453 bytesTente
Expandido:
Teste:
fonte
~7
vez de'7'
.Ceilão, 202 bytes
Isso não é uma função, mas uma declaração de objeto implementando uma sequência infinita (Iterable). O objeto pode ser impresso diretamente,
print(u)
produz o seguinte:{ 1, 2, 3, 4, 5, 6, 1, 8, 9, 10, 11, 12, 13, 2, 15, 16, 3, 18, 19, 20, 4, 22, 23, 24, 25, 26, 5, 6, 29, 30, ... }
Para imprimir mais, use
printAll(u)
. O código a seguir usa novas linhas e também imprime a soma (e os 30 primeiros elementos mostrados acima):Aqui está a versão não-gasta e comentada:
fonte
Ruby, 80 bytes
l=->x{x%7==0||x.to_s[/7/]};a=(1..100);b=a.reject &l p a.map{|x|!l[x]?x:b.shift}
Primeira submissão, tenho certeza de que pode ser melhorada :)
fonte
34
(que está8
atualmente) deve ser7
, mas como7
é um número indizível, o programa deve iniciar uma terceira iteração e, em vez disso, imprimir1
.Dyalog APL , 39 bytes
{(⍵⍴⍨⍴i)@(i←⍸('7'∊¨⍕¨⍵)∨0=7|⍵)⊢⍵}⍣≡⍳7*7
⍳7*7
é 1 2 3 ... 7 7{ }⍣≡
é o operador de ponto fixo - aplique uma função repetidamente até o resultado estabilizarA@I⊢B
alterar operador - substituir os elementos em índicesI
emB
comA
0=7|⍵
bitmask para onde o argumento é divisível por 7'7'∊¨⍕¨⍵
máscara de bits para onde a formatação decimal do argumento contém um 7∨
ou⍸
em que índices é verdade uma das máscaras de bits acima?i←
atribuir ai
⍵⍴⍨⍴i
remodelar o argumento para o número de elementos emi
fonte
C
157155 bytesParece certo, eu não me incomodei em verificar completamente. Vai até 999999, que é aparentemente grande o suficiente.
Versão não destruída:
Versão parcialmente golfada:
fonte
else
?(r=0)
maioria das vezes. Mas alguns compiladores são exigentes. Estou com preguiça de verificar as especificações agora.R, 86 bytes
Usa Truthy embutido de R
T
(inicializado emTRUE
/1
) para contar os números na sequência e o valor de FalsyF
(inicializado emFALSE
/0
) para contar os indizíveis. Fora isso, o programa simplesmente verifica se cada número é divisível por sete ou contém o número.fonte
7%in%el(strsplit(c(T,""),""))
por55%in%utf8ToInt(paste(T))
? (não testada)C - 115 bytes
EDIT: Obrigado a @mschauer, que apontou que perdi algumas coisas.
fonte
Javascript, 80 bytes
Como há apenas um requisito mínimo, mas não um requisito máximo, esta solução continua a ser produzida indefinidamente.
Para verificar se o algoritmo está correto, você pode executar o mesmo código imprimindo apenas os últimos 10 números e a soma:
fonte
Mathematica, 82 bytes
fonte
JavaScript 81 bytes
Original (98 bytes)
Golfe
fonte
p=console.log;for(c=0,i=1;i<=Math.pow(7,7);i++)/7/.test(i)||i%7==0?(6==c?c=1:c++,p(c)):p(i);
?9e5
em vez deMath.pow(7,7)
, uma vez que o desafio disse:Print/output AT LEAST the first 7^7
34 1 36 **8** 38
. Mas para o que vale a pena, a versão atual poderia ser golfed um pouco mais:for(c=i=0;++i<9e5;)console.log(!/7/.test(i)&&i%7?i:c++%6+1)
.Befunge, 100 ou 156 bytes
Essa primeira versão é a mais portátil das duas, limitando-se às células de memória de 7 bits, que é o que você obtém no intérprete de referência.
A segunda versão funciona apenas com intérpretes que possuem células de memória de 32 bits e, portanto, não é estritamente padrão do Befunge, mas que permite armazenar valores maiores na memória sem precisar dividi-los pelas células.
Nos dois casos, o programa é executado indefinidamente, mas a primeira versão ultrapassa a marca de 2 milhões, enquanto a segunda versão deve atingir o valor máximo int (cerca de 2 bilhões).
Você pode experimentá-lo on-line , mas precisará interromper o processo para impedir que ele seja executado para sempre.
fonte
Clojure, 130 bytes
Redução básica, mantendo o controle do conteúdo do vetor de resultado e quantos valores foram ignorados. O último
0
recebe o primeiro elemento do reduzido[r s]
erest
descarta o primeiro elemento do resultado indexado em 0.fonte
Perl6, 41 bytes
fonte
Tcl , 64 bytes
Experimente online!
fonte
JavaScript, 64 bytes
fonte
console.log
) JavaScript respostas, é 70 bytesJapt , 25 bytes
Teste a soma e os últimos 10 elementos.
Gera as primeiras 1.000.000 entradas da sequência e as imprime. Um milhão é o número mais curto do
7**7 == 823543
Japão.A nova linha à direita é significativa, pois ativa a atribuição implícita para
U
.A geração da lista leva apenas um segundo, mas a saída de toda a matriz provavelmente fará o navegador travar.
Descompactado e como funciona
Usa a propriedade que a definição recursiva pode ser resolvida observando a sequência já gerada.
fonte