var QUESTION_ID=59014,OVERRIDE_USER=42963;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Respostas:
Geléia , 8 bytes
É executado localmente em menos de oito minutos.
Experimente online! (modificado para encontrar números com seis dígitos ou menos)
Como funciona
fonte
Python 2, 85 bytes
Imprime uma lista.
Basicamente, estou combinando duas das minhas respostas aos desafios anteriores:
Verificando se um número é divisível por cada um de seus dígitos
(obrigado a FryAmTheEggman por me lembrar disso).
Determinar se todos os dígitos decimais são exclusivos
Graças ao xsot por 1 byte economizado, combinando melhor as condições.
fonte
print[n for n in range(1,9**9)if(n<10**len(set(`n`)))>any(n%(int(d)or.3)for d in`n`)]
Perl,
6147 bytesCódigo de 46 bytes + parâmetro da linha de comando de 1 byte.
Uso:
Explicação
/(.).*\1|0/
retorna 1 se o número em teste contiver um caractere duplicado ou um 0s/./$_%$&/rge
substitui cada dígito pelo valor do número em teste% do dígito. Por exemplo, 15 -> 00, 16 -> 04 (porque 16% 6 = 4). Isso significa que qualquer entrada que é divisível por todos os seus dígitos consistirá em todos os 0s, caso contrário, conterá um dígito> 0. Para tratar isso como um número, nós * 1, o que significa que qualquer número em teste retornará 0 para este bloco se for divisível por todos os seus dígitos, caso contrário> 0.Ao separar essas duas instruções e a impressão com 'ou', se uma das duas primeiras condições retornar> 0, a condição corresponderá e as partes subsequentes da expressão não serão avaliadas. Se e somente se as duas condições anteriores forem 0, a impressão será executada. O
-l
sinalizador garante adicionar uma nova linha após cada impressão.fonte
say
em vez deprint
+-l
:-)say
exigia uma declaração explícita primeiro ?use feature 'say'
ouuse 5.012
de graça - eu sempre menciono quando faço isso e ninguém nunca o desafiou. Eu vi alguns outros fazer o mesmo :)map
esay
reduza para 43: Experimente online!Pyth,
2221Agradecimentos a Jakube por jogar 1 byte de formatação desnecessária.
Fortemente inspirado por esta resposta da CW à pergunta relacionada.
Eu tenho uma pasta do resultado aqui , a partir de quando ela imprimiu uma nova linha separada, agora ela é impressa como uma lista python.
Eu recomendaria não experimentá-lo on-line, a menos que você use um número menor que 7 ... Defini-o como 2 neste link.
Filtros
1
para10^7-1
que abrange todos os valores necessários. Esta versão pode causar um erro de memória se não conseguir fazer a listaS^T7
, semelhante aolist(range(1,10**7))
python 3 (no entanto, funciona bem para mim). Se sim, você pode tentar:Que encontra os primeiros 548 números de segunda-feira. Isso também demonstra outra maneira de verificar os
0
s no número, em vez de substituí-los por.3
isso, usa um bloco try-catch. O crédito para esta versão vai inteiramente para Jakube. (Observe que isso ainda é muito lento para o intérprete on-line)fonte
.f&.{`Z.x!s%LZjZT0548
é um pouco mais rápido (4x - 5x) do que sua abordagem while-loop e também possui apenas 21 bytes de comprimento.55, 66, 77, 88, 99
, todos os números com dígitos duplicados ...{
ter sido alterado, pois substituí-lo por{I
parece funcionar.GS2 ,
2019 bytesO gs2 usa uma ampla gama de bytes, não apenas caracteres ascii imprimíveis. Vou apresentar minha solução em hexadecimal.
Aqui está uma explicação. gs2 é uma linguagem baseada em pilha, portanto não há variáveis. (além de 4 registros, um dos quais eu uso aqui)
fonte
Python 3,
132128114111104 bytesExistem 548 números de segunda-feira.
fonte
1e8
vez de até9**9
?'0' not
. Além disso,i%int(k)==0
provavelmente pode seri%int(k)<1
?j=`i`
.if len(set(j))+2==len(j)+('0'in j)+all(i%int(k)<1 for k in j)
APL,
443937 bytesUngolfed:
Economizou 7 bytes graças a Moris Zucca!
fonte
TI-BASIC,
6059 bytes∟D
é a lista de dígitos, que é gerada usando matemática e orandIntNoRep(
comando (permutação aleatória de todos os números inteiros entre1
e1+int(log(X
inclusive). Eu uso uma cadeia de instruções um pouco complicada para verificar se todas as condições são atendidas:Para falhar números com dígitos repetidos ou zero, substituo zeros por
2X
, porqueX
nunca é divisível por2X
.No caso especial 1 ~ 9 (porque
ΔList(
em uma lista de erros de um elemento), uso aIf
instrução na quarta linha para pular a verificação na quinta linha, exibindo automaticamente todos osX
≤9.Os números de saída são separados por novas linhas.
fonte
Mathematica 105
IntegerDigits
terminan
em uma lista de seus dígitosi
,.FreeQ[i,0]
verifica se não há zeros na lista.Length[i]==Length[Union[i]]
verifica se não há dígitos repetidos.And@@(Divisible[n,#]&/@i)
verifica se cada dígito é um divisor den
.fonte
9^9
ou1e8
ou algoUnion
para verificar se há duplicatas.Haskell, 77 bytes
Exemplo de uso (os 20 primeiros números):
Como funciona: itere sobre todos os números de 1 a 9 ^ 9 e verifique as condições. O número atual
x
é transformado em sua representação de seqüência de caracteres (show x
) para operar como uma lista de caracteres.fonte
R, 99 bytes
Um pouco menos golfe:
fonte
Perl,
907570 bytesfonte
^
e$
ao redor da0
suagrep
, você pode substituir o&&
antess/./
com um único&
e eu acho que a última|0
é desnecessária (embora apenas testado up-to1e3
. ..) Bem e realmente gostei da minha pontuação! :)CJam, 25 bytes
Experimente online . Observe que o link online é executado apenas para 10.000. Não tenho certeza se isso terminaria online se você for paciente o suficiente. Ele não foi testado com a versão offline do CJam, mas espero que seja finalizado.
Explicação:
fonte
C #,
230227Já faz um tempo desde que eu me envolvi, então provavelmente esqueci alguns truques para diminuir o número de bytes. Vai melhorar quando penso neles ... Por enquanto:
Ungolfed:
fonte
TI-BASIC,
5553 bytesEsta é uma edição relativamente pequena da resposta de Thomas Kwa , mas a estou enviando como uma nova resposta, porque ouvi dizer que ele deu uma recompensa por jogar suas respostas no TI-BASIC.
Minha principal mudança é de
randIntNoRep(1,
pararandIntNoRep(0,
o que significa que agora haverá zero em todas as listas de dígitos geradas.Como agora existe um zero em cada conjunto de dígitos, isso afeta a soma dos restantes. Normalmente, a soma dos restantes é 0, mas agora, a presença de um zero extra causa uma falha no nosso teste de divisibilidade.
Para combater isso, mudei
2Xnot(
paraXnot(
. O 2 estava lá originalmente para fazer o teste falhar em 0, mas agora passa em zero. Números que contêm zero em seus dígitos, no entanto, agora têm ummin(ΔList(∟D
zero de qualquer maneira (já que há 2 ou mais zeros em suas listas), portanto, essa alteração não faz com que outros números passem no teste.A vantagem desse método é que, como agora existem "dois dígitos" produzidos a partir do número 1-9, a
ΔList(
função não produz um erro, o que nos permite livrar-nos de uma condição especial para números de um dígito.fonte
05AB1E ,
302221181413129 bytes-9 bytes graças à ajuda e incentivo do @Enigma e @ Mr.Xcoder . Obrigado por me deixar descobrir principalmente, mesmo que você já tivesse uma solução de 12 bytes quando eu ainda tinha 30 anos. Aprendi muito sobre o 05AB1E com esse desafio!
-3 bytes graças a @Grimy
Experimente online (gera apenas os números abaixo de 10 3 em vez de 10 7 para evitar um tempo limite após 60 segundos).
Explicação:
Versão anterior de 12 bytes (uma das minhas primeiras respostas 05AB1E):
NOTA: Funciona apenas na versão herdada de 05AB1E.
Experimente online (gera apenas os números abaixo de 10 3 em vez de 10 7 para evitar um tempo limite após 60 segundos).
Explicação:
fonte
297
, que não está na sequência dos números da Lynch-Bell.7°LʒÐÑÃÙQ
Julia, 88 bytes
Isso simplesmente pega todos os números de 1 até o maior número da Lynch-Bell e os filtra apenas para os números da Lynch-Bell.
Ungolfed:
fonte
Python 2, 101 bytes
Você pode omitir o valor
print
do intérprete em 96. Usado,6**9
pois possui 8 dígitos, enquanto o maior número de segunda-feira tem apenas 7 dígitos, algo como9**9
provavelmente levaria muito tempo, 6 ** 9 leva apenas 10 segundos.fonte
1e7
é um float, o intervalo leva números inteiros.Perl, 97 bytes
Demora um pouco para ser executado, mas produz a saída necessária, mude para
1e3
para um exemplo mais rápido!fonte
y///c==grep{2>eval"$n=~y/$_//"}/./g
, você poderia usar algo como!/(.).*\1/
?MATLAB, 100
E em um formato mais legível:
As verificações são as seguintes:
Primeiro verifique se há duplicatas. Classificando a matriz, se a diferença entre os dígitos consecutivos for zero, haverá duplicatas
Verifique se existem zeros. O ASCII para 0 é 48, portanto, verificamos que todos os dígitos não são iguais a isso.
Verifique se é divisível por todos os seus dígitos. Verificamos que o restante ao dividir por cada dígito (convertido de ASCII para decimal, portanto -48) é zero.
Finalmente, garantimos que
all()
as verificações sejam verdadeiras e, em caso afirmativo, anexamos a uma sequência de saída separada por vírgula.MATLAB não tem STDOUT, então, em vez disso, imprimo a sequência de resultados no final usando
disp()
Este código é LENTO! Ainda o estou executando para garantir que ele encontre todos os números de segunda-feira corretamente, mas que esteja bom até agora.
Atualizar:
Código concluído em execução. Imprime o seguinte:
E se você executar esse código com isso como entrada:
Anos 548.
fonte
Ruby, 79
Solução mais interessante, mas um pouco mais longa, com uma regex:
Em cada caso, estamos usando a capacidade do Ruby para iterar sobre as strings como se fossem números decimais:
?1.upto(?9*7)
é equivalente a1.upto(9999999).map(&:to_s).each
. Juntamos a string a cada dígito diferente de zero usando o operador modulo e avaliamos o resultado para verificar a divisibilidade.Solução bônus Ruby 1.8 (requer
-l
sinalizador para saída adequada):1.8 permitiu que o iterador de bloco fosse uma variável global. Atribuir a
$_
torna o receptor implícito para operações de string. Também podemos interpolar matrizes na expressão regular com mais facilidade: no 1.8,/[#{[1,2]}]/
avalia para/[12]/
.fonte
digits
função com números inteiros , você pode salvar bytes do eval hack, já que não está mais operando em strings! 63 bytes.Pip , 25 bytes
Produz cada número em sua própria linha. Isso está em execução há cerca de 10 minutos e chegou a 984312 até agora, mas tenho certeza de que está correto.(Editar: Algumas horas depois ... o código terminou, gerou todos os 548 deles.)
Aqui está uma versão em pseudocódigo do tipo Python:
O
#=
operador compara dois iterables pelo comprimento. Se o número de caracteres emU
niQ
uea
for o mesmo que o número de caracteres ema
, não haverá repetições.A verificação divisível por cada dígito é de um dos meus programas de exemplo do Pip. Escrevi depois de ver o desafio anterior , mas não o publiquei porque o idioma era mais novo que a pergunta. Caso contrário, com 8 bytes, seria a resposta vencedora para essa pergunta. Aqui está uma explicação passo a passo:
fonte
Couple hours later
É bom que o desempenho não seja levado em consideração.Javascript (ES6),
1069083 bytesCrianças, não tente fazer isso em casa; JS não ficará satisfeito com a perspectiva de fazer um loop por todos os dígitos de todo número inteiro, de um a dez milhões com um regex.
O primeiro regex (adota @Jarmex) retorna
true
se o número contiver dígitos ou zeros duplicados. Se isso acontecerfalse
, o programa passará para o segundo, que substitui cada dígitoj
pori%j
. O resultado é todos os zeros, se for divisível por todos os dígitos; nesse caso, ele passa paraconsole.log(i)
.Sugestões são bem-vindas!
fonte
JavaScript (ES6), 76
O teste regexp para 0 ou dígitos repetidos. Em seguida, a matriz de dígitos é verificada procurando um módulo diferente de zero para qualquer dígito.
Aqui está a explicação do máximo de 7 dígitos.
fonte
Ruby, 130 bytes
... sem contar espaço em branco
Novo na programação, só queria participar
fonte
C, 122 bytes
Mais bonito:
Para cada candidato
i
, iteramos seus dígitosa
na ordem little-endian, acompanhando os dígitos vistos nos bits dem
. Se o loop for concluído, todos os dígitos são fatoresi
e não vimos zeros ou dígitos repetidos; portanto, imprima-o; caso contrário, sairemos cedo para continuar o loop externo.fonte
goto
comando que está sendo usado.CJam, 34 bytes
fonte
Lua, 129 bytes
Evitei a abordagem de strings por pura digitação de dígitos, que parece um pouco mais rápida e provavelmente me salvou alguns bytes também. (Vou testar essa teoria, mas o manuseio de strings de Lua é bem detalhado, comparado a outras línguas.)
fonte
gawk, 99 bytes
Eu poderia reduzir isso para 97 se eu usasse em
END
vez deBEGIN
, mas então você teria que pressionar Ctrl-D para iniciar a saída real, sinalizando que não haverá entrada.Eu poderia reduzi-lo a 94 mesmo se não escrevesse nada em vez de
BEGIN
ouEND
, mas então você teria que pressionar a tecla de retorno uma vez para iniciá-lo, o que poderia ser contado como entrada.Ele simplesmente passa os dígitos de cada número e testa se os critérios são atendidos.
Demora 140 segundos para terminar no meu Core 2 Duo.
fonte
Gelatina , 11 bytes
Isso usa o
œ!
átomo de duas semanas . Na verdade, rápido o suficiente para rodar no TIO.Experimente online!
Como funciona
fonte