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>
Réponses:
Gelée , 8 octets
Fonctionne localement en moins de huit minutes.
Essayez-le en ligne! (modifié pour trouver des nombres de six chiffres ou moins)
Comment ça marche
la source
Python 2, 85 octets
Imprime une liste.
Je combine essentiellement deux de mes réponses aux défis précédents:
Vérifier si un nombre est divisible par chacun de ses chiffres
(merci à FryAmTheEggman de me l'avoir rappelé).
Déterminer si tous les chiffres décimaux sont uniques
Merci à xsot pour 1 octet économisé en combinant mieux les conditions.
la source
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 octetsCode de 46 octets + paramètre de ligne de commande de 1 octet.
Usage:
Explication
/(.).*\1|0/
renvoie 1 si le nombre en cours de test contient un caractère en double ou un 0s/./$_%$&/rge
remplace chaque chiffre par la valeur du nombre sous test% du chiffre. Par exemple, 15 -> 00, 16 -> 04 (parce que 16% 6 = 4). Cela signifie que toute entrée qui est divisible par tous ses chiffres sera composée de tous les 0, sinon elle contiendra un chiffre> 0. Afin de traiter cela comme un nombre, nous * 1, ce qui signifie que tout nombre en test renverra 0 pour ce bloc s'il est divisible par tous ses chiffres, sinon> 0.En séparant ces deux instructions et l'empreinte avec 'ou', si l'une des deux premières conditions renvoie> 0, la condition correspond et les parties suivantes de l'expression ne seront pas évaluées. Si et seulement si les deux conditions précédentes sont 0, l'impression sera exécutée. Le
-l
drapeau permet d’ajouter une nouvelle ligne après chaque impression.la source
say
au lieu deprint
+-l
:-)say
fallait d'abord une déclaration explicite ?use feature 'say'
ouuse 5.012
gratuite - je mentionne toujours le moment où je le fais, et personne ne l'a jamais contestée. J'ai vu quelques autres faire la même chose :)map
etsay
réduction à 43: essayez-le en ligne!Pyth,
2221Merci à Jakube pour avoir joué 1 octet de format inutile.
Fortement inspiré par cette réponse CW à la question connexe.
J'ai un collage du résultat ici , à partir du moment où il a imprimé la nouvelle ligne séparée, maintenant il est imprimé sous forme de liste pythonique.
Je recommanderais de ne pas l' essayer en ligne, sauf si vous utilisez un nombre inférieur à 7 ... Je l'ai défini sur 2 dans ce lien.
Filtres de
1
à10^7-1
qui couvre toutes les valeurs nécessaires. Cette version peut provoquer une erreur de mémoire si elle ne peut pas faire la listeS^T7
, ce qui est similaire àlist(range(1,10**7))
Python 3 (Cependant, cela fonctionne très bien pour moi). Si oui, vous pouvez essayer:Qui trouve les 548 premiers numéros du lundi. Cela montre également un autre moyen de rechercher les
0
s dans le nombre, au lieu de les remplacer par.3
ceci, utilise un bloc try-catch. Le mérite de cette version va entièrement à Jakube. (Notez que cela est encore beaucoup à ralentir pour l'interprète en ligne)la source
.f&.{`Z.x!s%LZjZT0548
il est un peu plus rapide (4x - 5x) que votre approche While-loop et n’a également que 21 octets de longueur.55, 66, 77, 88, 99
tous les nombres avec des chiffres dupliqués ...{
été changé, car le remplacer par{I
semble marcher.GS2 ,
2019 octetsGS2 utilise une large gamme d’octets, pas seulement des caractères ASCII imprimables. Je présenterai ma solution en hexadécimal.
Voici quelques explications. gs2 est un langage basé sur la pile, donc il n'y a pas de variables. (mis à part 4 registres, dont l'un est utilisé ici)
la source
Python 3,
132128114111 111104 octetsIl y a 548 numéros de lundi.
la source
1e8
au lieu de même9**9
?'0' not
. En outre,i%int(k)==0
peut probablement êtrei%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 octetsUngolfed:
Sauvegardé 7 octets grâce à Moris Zucca!
la source
TI-BASIC,
6059 octets∟D
est la liste des chiffres générée à l'aide de math et de larandIntNoRep(
commande (permutation aléatoire de tous les entiers compris entre1
et1+int(log(X
). J'utilise une chaîne d'énoncés légèrement compliquée pour vérifier si toutes les conditions sont remplies:Pour échouer les nombres qui ont des chiffres répétés ou zéro chiffre, je remplace les zéros
2X
, carX
n'est jamais divisible par2X
.Pour les cas spéciaux 1 ~ 9 (parce
ΔList(
que les erreurs d'une liste à un élément), j'utilise l'If
instruction de la quatrième ligne pour ignorer le contrôle de la cinquième ligne, affichant automatiquement toutX
≤9.Les numéros de sortie sont séparés par des nouvelles lignes.
la source
Mathematica 105
IntegerDigits
décomposen
en une liste de ses chiffres,i
.FreeQ[i,0]
vérifie s'il n'y a pas de zéros dans la liste.Length[i]==Length[Union[i]]
vérifie qu'il n'y a pas de chiffres répétés.And@@(Divisible[n,#]&/@i)
vérifie que chaque chiffre est un diviseur den
.la source
9^9
ou1e8
ou quelque choseUnion
pour vérifier les doublons.Haskell, 77 octets
Exemple d'utilisation (les 20 premiers chiffres):
Comment ça marche: parcourez tous les nombres de 1 à 9 ^ 9 et vérifiez les conditions. Le nombre actuel
x
est transformé en sa représentation sous forme de chaîne (show x
) pour qu'il fonctionne comme une liste de caractères.la source
R, 99 octets
Un peu moins joué au golf:
la source
Perl,
907570 octetsla source
^
et$
autour de0
votregrep
, vous pouvez remplacer le&&
devants/./
avec un seul&
et je pense que la dernière|0
est inutile (bien que seulement testé la mise à1e3
. ..). Bien et vraiment battu mon score! :)CJam, 25 octets
Essayez-le en ligne . Notez que le lien en ligne ne fonctionne qu'à 10 000. Je ne sais pas si cela se terminerait en ligne si vous êtes assez patient. Il ne l'a pas testé avec la version hors ligne de CJam, mais je m'attends à ce qu'elle se termine.
Explication:
la source
C #,
230227Cela fait longtemps que je n’ai pas réussi à résoudre le problème, j’ai probablement oublié quelques astuces pour obtenir le décompte approximatif. Je vais améliorer quand je pense à eux ... Pour l'instant:
Ungolfed:
la source
TI-BASIC,
5553 octetsLa réponse de Thomas Kwa est relativement mineure , mais je la soumets comme une nouvelle réponse, car j'avais entendu dire qu'il avait mis une prime à jouer pour jouer ses réponses à TI-BASIC.
Ma principale modification va de
randIntNoRep(1,
àrandIntNoRep(0,
signifiant qu’il y aura désormais un zéro dans chaque liste de chiffres générée.Puisqu'il y a maintenant un zéro dans chaque ensemble de chiffres, cela affecte la somme des restes. Normalement, la somme des restes est 0, mais à présent, la présence d'un zéro supplémentaire entraîne l'échec de notre test de divisibilité.
Pour contrer cela, j'ai changé
2Xnot(
pourXnot(
. Le 2 était à l'origine là pour faire échouer le test à 0, mais maintenant, il passe à zéro. Les nombres qui contiennent un zéro dans leurs chiffres, cependant, ont maintenant unmin(ΔList(∟D
zéro de toute façon (car il y a 2 zéros ou plus dans leurs listes), de sorte que cette modification ne fera en sorte que les numéros supplémentaires ne passent pas le test.L'avantage de cette méthode est que, puisqu'il y a maintenant "deux chiffres" produits à partir du nombre 1-9, la
ΔList(
fonction ne génère pas d'erreur, ce qui nous permet de supprimer une condition spéciale pour les nombres à un chiffre.la source
05AB1E ,
302221181413129 octets-9 octets grâce à l'aide et aux encouragements de @Enigma et @ Mr.Xcoder . Merci de m'avoir laissé résoudre le problème moi-même, même si vous aviez déjà en tête une solution de 12 octets quand j'avais encore 30 ans. J'ai beaucoup appris sur 05AB1E grâce à ce défi!
-3 octets grâce à @Grimy
Essayez-le en ligne (affiche uniquement les nombres inférieurs à 10 3 au lieu de 10 7 pour éviter un délai d'attente supérieur à 60 secondes).
Explication:
Version précédente de 12 octets (une de mes toutes premières réponses 05AB1E):
Remarque: ne fonctionne que dans la version héritée de 05AB1E.
Essayez-le en ligne (affiche uniquement les nombres inférieurs à 10 3 au lieu de 10 7 pour éviter un délai d'attente supérieur à 60 secondes).
Explication:
la source
297
, ce qui ne correspond pas à la séquence des numéros de Lynch-Bell.7°LʒÐÑÃÙQ
Julia, 88 octets
Cela prend simplement tous les nombres de 1 au plus grand nombre Lynch-Bell et les filtre en fonction des seuls nombres Lynch-Bell.
Ungolfed:
la source
Python 2, 101 octets
Vous pouvez omettre le
print
dans l'interpréteur jusqu'à 96. Utilisé6**9
puisqu'il s'agit de 8 chiffres alors que le plus grand numéro du lundi n'est que de 7 chiffres, quelque chose comme cela9**9
prendrait probablement beaucoup de temps, 6 ** 9 ne prend qu'environ 10 secondes.la source
1e7
is a float, range takes integers.Perl, 97 bytes
Takes a while to run, but produces the required output, change to
1e3
for a quicker example!la source
y///c==grep{2>eval"$n=~y/$_//"}/./g
, could you use something along the lines of!/(.).*\1/
?MATLAB, 100
And in a more readable format:
Basically this counts through every number between1 and 1×107 and checks if they are a Monday number. Each number is converted to a string so that the digits can be dealt with individually.
The checks are as follows:
First check if there are any duplicates. By sorting the array, if the difference between any consecutive digits is zero, then there are duplicates
Check if there are any zeros. The ASCII for 0 is 48, so we check that all digits are not equal to that.
Check if it is divisible by all its digits. We check that the remainder when dividing by each digit (converted from ASCII to decimal, hence -48) is zero.
Finally we make sure that
all()
the checks are true, and if so we append it to a comma separated output string.MATLAB has no STDOUT, so instead I print the result string at the end using
disp()
This code is SLOW! I am still running it to make sure that it correctly finds all the Monday numbers, but looks good so far.
Update:
Code finished running. It prints the following:
Which if you run this code with that as the input:
Yeilds 548.
la source
Ruby, 79
More interesting but slightly longer solution with a regex:
In each case, we're using Ruby's ability to iterate over strings as though they were decimal integers:
?1.upto(?9*7)
is equivalent to1.upto(9999999).map(&:to_s).each
. We join the string to each nonzero digit using the modulo operator, and eval the result, to check for divisibility.Bonus Ruby 1.8 solution (requires
-l
flag for proper output):1.8 allowed the block iterator to be a global variable. Assigning to
$_
makes it the implicit receiver for string operations. We also get to interpolate arrays into the regular expression more easily: in 1.8,/[#{[1,2]}]/
evaluates to/[12]/
.la source
digits
function on integers, you can save bytes from the eval hack since you aren't operating on strings any more! 63 bytes.Pip, 25 bytes
Outputs each number on its own line. This has been running for about 10 minutes and gotten up to 984312 so far, but I'm pretty sure it's correct. (Edit: Couple hours later... code finished, generated all 548 of 'em.)
Here's a Python-esque pseudocode rendition:
The
#=
operator compares two iterables by length. If the number ofU
niQ
ue characters ina
is the same as the number of characters ina
, there are no repeats.The divisible-by-each-digit check is from one of my Pip example programs. I wrote it after seeing the earlier challenge, but didn't post it there because the language was newer than the question. Otherwise, at 8 bytes, it would be the winning answer to that question. Here's a step-by-step explanation:
la source
Couple hours later
It's a good thing performance isn't taken into account.Javascript (ES6),
1069083 bytesKids, don't try this at home; JS will not be happy with the prospect of looping through every digit of every integer from one to ten million with a regex.
The first regex (props to @Jarmex) returns
true
if the number contains duplicate digits or zeroes. If this turns outfalse
, the program move on to the second, which replaces each digitj
withi%j
. The result is all zeroes if it's divisible by all of it's digits, in which case it moves on toconsole.log(i)
.Suggestions welcome!
la source
JavaScript (ES6), 76
The regexp test for 0 or repeated digits. Then the digits array is checked looking for a non-zero modulo for any digit.
here is the explanation of the 7 digit max.
la source
Ruby, 130 bytes
... not counting whitespace
New to programming,just wanted to participate
la source
C, 122 bytes
Prettier:
For each candidate
i
, we iterate its digitsa
in little-endian order, keeping track of seen digits in the bits ofm
. If the loop completes, then all digits are factors ofi
and we saw no zeros or repeated digits, so print it, otherwise we exit early to continue the outer loop.la source
goto
command being used.CJam, 34 bytes
la source
Lua, 129 bytes
I've eschewed the string approach for pure digit-crunching, which seems a bit speedier and probably saved me some bytes as well. (I'll have test that theory, but Lua string handling is pretty verbose compared to some other languages.)
la source
gawk, 99 bytes
I could reduce that to 97 if I would use
END
instead ofBEGIN
, but then you would have to press Ctrl-D to start the actual output, signalling that there will be no input.I could reduce it to even 94 if I would write nothing instead of
BEGIN
orEND
, but then you would have to press the return key once to start it, which could be counted as input.It simply goes over the digits of each number and tests if the criteria are met.
Takes 140 seconds to terminate on my Core 2 Duo.
la source
Jelly, 11 bytes
This uses the two-week old
œ!
atom. Actually fast enough to run on TIO.Try it online!
How it works
la source