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>
Odpowiedzi:
Galaretka , 8 bajtów
Działa lokalnie w mniej niż osiem minut.
Wypróbuj online! (zmodyfikowany w celu znalezienia liczb zawierających sześć cyfr lub mniej)
Jak to działa
źródło
Python 2, 85 bajtów
Drukuje listę.
Zasadniczo łączę dwie moje odpowiedzi na poprzednie wyzwania:
Sprawdzanie, czy liczba jest podzielna przez każdą z jej cyfr
(dzięki FryAmTheEggman za przypomnienie mi o tym).
Sprawdź, czy wszystkie cyfry dziesiętne są unikalne
Dzięki xsot za 1 bajt zaoszczędzony dzięki lepszemu połączeniu warunków.
źródło
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 bajtów46 bajtów kodu + 1 bajtowy parametr wiersza poleceń.
Stosowanie:
Wyjaśnienie
/(.).*\1|0/
zwraca 1, jeśli testowany numer zawiera zduplikowany znak lub 0s/./$_%$&/rge
zastępuje każdą cyfrę wartością testowanego numeru% cyfry. Na przykład 15 -> 00, 16 -> 04 (ponieważ 16% 6 = 4). Oznacza to, że każde wejście, które można podzielić przez wszystkie jego cyfry, będzie składać się ze wszystkich zer, w przeciwnym razie będzie zawierać cyfrę> 0. Aby potraktować to jako liczbę, my * 1, co oznacza, że każdy testowany numer zwróci 0 dla tego bloku, jeśli jest podzielny przez wszystkie jego cyfry, w przeciwnym razie> 0.Po oddzieleniu tych dwóch instrukcji i wypisania znakiem „lub”, jeśli którykolwiek z pierwszych dwóch warunków zwróci> 0, warunek zostanie dopasowany, a kolejne części wyrażenia nie będą oceniane. Jeśli i tylko wtedy, gdy oba poprzednie warunki są równe 0, wydruk zostanie wykonany.
-l
Flagi zapewnia, aby dodać nową linię po każdym wydruku.źródło
say
zamiastprint
+-l
:-)say
najpierw wymaga wyraźnej deklaracji ?use feature 'say'
lubuse 5.012
za darmo - zawsze wspominam, kiedy to robię, i nikt nigdy nie kwestionował tego. Widziałem kilka innych osób, które robią to samo :)map
isay
obniżając to do 43: Wypróbuj online!Pyth,
2221Dzięki Jakube za grę w golfa z 1 bajta niepotrzebnego formatowania.
Mocno zainspirowany tą odpowiedzią CW na powiązane pytanie.
Mam pasty wyniku tutaj , od kiedy to wydrukowane nowej linii oddzielone, teraz drukuje jako lista pythonic.
Polecam nie wypróbowywać go online chyba że użyjesz liczby mniejszej niż 7 ... Ustawiłem go na 2 w tym linku.
Filtry
1
na10^7-1
który obejmuje wszystkie niezbędne wartości. Ta wersja może powodować błąd pamięci, jeśli nie może utworzyć listyS^T7
, która jest podobna do tejlist(range(1,10**7))
w Pythonie 3 (jednak działa dla mnie dobrze). Jeśli tak, możesz spróbować:Który znajduje pierwsze 548 poniedziałkowych liczb. Pokazuje to także inny sposób sprawdzenia
0
s w numerze, zamiast zamiany na.3
to używa bloku try-catch. Uznanie dla tej wersji należy w całości do Jakube. (Zauważ, że wciąż jest o wiele za dużo dla tłumacza online)źródło
.f&.{`Z.x!s%LZjZT0548
ono trochę razy szybsze (4x - 5x) niż podejście pętli while i ma również tylko 21 bajtów długości.55, 66, 77, 88, 99
wszystkie liczby ze zduplikowanymi cyframi.{
zmieniony, ponieważ zastąpienie go{I
wydaje się działać.GS2 ,
2019 bajtówgs2 używa szerokiej gamy bajtów, a nie tylko drukowalnych znaków ascii. Przedstawię moje rozwiązanie w formie heksadecymalnej.
Oto wyjaśnienie. gs2 jest językiem stosowym, więc nie ma zmiennych. (oprócz 4 rejestrów, z których jednego używam tutaj)
źródło
Python 3,
132128114111104 bajtówIstnieje 548 poniedziałkowych liczb.
źródło
1e8
zamiast parzystego9**9
?'0' not
. Ponadtoi%int(k)==0
może byći%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 bajtówNie golfowany:
Zaoszczędź 7 bajtów dzięki Morisowi Zucca!
źródło
TI-BASIC,
6059 bajtów∟D
to lista cyfr, która jest generowana za pomocą matematyki irandIntNoRep(
polecenia (losowa permutacja wszystkich liczb całkowitych między1
i1+int(log(X
włącznie). Używam nieco skomplikowanego łańcucha instrukcji, aby sprawdzić, czy wszystkie warunki są spełnione:Aby odrzucić liczby, które mają powtarzające się cyfry lub cyfry zerowe, zastępuję zera cyframi
2X
, ponieważX
nigdy nie jest podzielna przez2X
.W przypadku specjalnym 1 ~ 9 (ponieważ
ΔList(
w przypadku błędów na liście jednego elementu) używamIf
instrukcji w czwartym wierszu, aby pominąć kontrolę w piątym wierszu, automatycznie wyświetlając wszystkieX
≤9.Liczby wyjściowe są oddzielone znakami nowej linii.
źródło
Mathematica 105
IntegerDigits
rozpada sięn
na listę swoich cyfri
.FreeQ[i,0]
sprawdza, czy na liście nie ma zer.Length[i]==Length[Union[i]]
sprawdza, czy nie ma powtarzających się cyfr.And@@(Divisible[n,#]&/@i)
sprawdza, czy każda cyfra jest dzielnikiemn
.źródło
9^9
lub1e8
czy cośUnion
na sprawdzeniu duplikatów.Haskell, 77 bajtów
Przykład użycia (pierwsze 20 liczb):
Jak to działa: iteruj po wszystkich liczbach od 1 do 9 ^ 9 i sprawdź warunki. Bieżąca liczba
x
jest zamieniana na jej ciąg znaków (show x
), aby działał na niej jako lista znaków.źródło
R, 99 bajtów
Nieco mniej golfa:
źródło
Perl,
907570 bajtówźródło
^
i$
wokół0
ciebiegrep
, możesz zastąpić&&
poprzednis/./
singlem&
i myślę, że ostatni|0
jest niepotrzebny (chociaż tylko przetestowany do tego czasu1e3
. ..). Cóż i naprawdę pobiłem mój wynik! :)CJam, 25 bajtów
Wypróbuj online . Pamiętaj, że link internetowy działa tylko do 10 000. Nie jestem pewien, czy skończy się on online, jeśli będziesz wystarczająco cierpliwy. Nie przetestował tego w wersji offline CJam, ale spodziewam się, że to się skończy.
Wyjaśnienie:
źródło
DO#,
230227Minęło trochę czasu, odkąd grałem, więc prawdopodobnie zapomniałem kilku sztuczek, aby obniżyć liczbę bajtów. Poprawi się, gdy o nich pomyślę ... Na razie:
Nie golfowany:
źródło
TI-BASIC,
5553 bajtówTo stosunkowo niewielka edycja odpowiedzi Thomasa Kwy , ale przesyłam ją jako nową odpowiedź, ponieważ słyszałem, że wystawił nagrodę na golfa jego Ti-BASIC odpowiedzi.
Moją główną zmianą jest od
randIntNoRep(1,
do,randIntNoRep(0,
co oznacza, że będzie teraz zero na każdej generowanej liście cyfr.Ponieważ w każdym zestawie cyfr jest teraz zero, wpływa to na sumę pozostałych. Zwykle suma pozostałych wynosi 0, ale teraz obecność dodatkowego zera powoduje jedno niepowodzenie naszego testu podzielności.
Aby temu przeciwdziałać, zmieniłem
2Xnot(
naXnot(
. 2 było pierwotnie po to, aby test zakończył się niepowodzeniem przy 0, ale teraz przechodzi do zera. Liczby, które zawierają zero w swoich cyfrach, teraz jednak mająmin(ΔList(∟D
zero (ponieważ na ich listach znajdują się 2 lub więcej zer), więc ta zmiana nie powoduje, że dodatkowe liczby przechodzą test.Zaletą tej metody jest to, że ponieważ są teraz „dwie cyfry” produkowane z liczby 1-9,
ΔList(
funkcja nie generuje błędu, co pozwala nam pozbyć się specjalnego warunku dla liczb jednocyfrowych.źródło
05AB1E ,
302221181413129 bajtów-9 bajtów dzięki pomocy i zachętom @Enigma i @ Mr.Xcoder . Dzięki, że w większości udało mi się to rozgryźć, mimo że miałeś już na myśli 12-bajtowe rozwiązanie, kiedy miałem jeszcze 30 lat. Z tego wyzwania wiele się nauczyłem o 05AB1E!
-3 bajty dzięki @Grimy
Wypróbuj online (wypisuje tylko liczby poniżej 10 3 zamiast 10 7, aby zapobiec przekroczeniu limitu czasu po 60 sekundach).
Wyjaśnienie:
Poprzednia 12 bajtowa wersja (jedna z moich pierwszych odpowiedzi 05AB1E):
UWAGA: Działa tylko w starszej wersji 05AB1E.
Wypróbuj online (wypisuje tylko liczby poniżej 10 3 zamiast 10 7 aby zapobiec przekroczeniu limitu czasu po 60 sekundach).
Wyjaśnienie:
źródło
297
, a nie w sekwencji liczb Lynch-Bell.7°LʒÐÑÃÙQ
Julia, 88 bajtów
To po prostu bierze wszystkie liczby od 1 do największego numeru Lynch-Bell i filtruje je tylko do liczb Lynch-Bell.
Nie golfowany:
źródło
Python 2, 101 bajtów
Możesz pominąć
print
w tłumaczu dostać się do 96. Używany,6**9
ponieważ jest to 8 cyfr, podczas gdy największy numer w poniedziałek to tylko 7 cyfr, coś takiego9**9
prawdopodobnie zabrałoby dużo czasu, 6 ** 9 zajmuje tylko około 10 sekund.źródło
1e7
jest liczbą zmiennoprzecinkową, zakres przyjmuje liczby całkowite.Perl, 97 bajtów
Uruchomienie zajmuje trochę czasu, ale generuje wymagany wynik, zmień na
1e3
na szybszy przykład!źródło
y///c==grep{2>eval"$n=~y/$_//"}/./g
czy mógłbyś użyć czegoś podobnego do tego!/(.).*\1/
?MATLAB, 100
I w bardziej czytelnym formacie:
Zasadniczo liczy się każda liczba pomiędzy1 i 1 × 107 i sprawdza, czy są to numery poniedziałkowe. Każda liczba jest konwertowana na ciąg, dzięki czemu cyfry można traktować indywidualnie.
Kontrole są następujące:
Najpierw sprawdź, czy są jakieś duplikaty. Sortując tablicę, jeśli różnica między dowolnymi kolejnymi cyframi wynosi zero, to są duplikaty
Sprawdź, czy są jakieś zera. ASCII dla 0 wynosi 48, więc sprawdzamy, czy wszystkie cyfry nie są równe.
Sprawdź, czy jest podzielna przez wszystkie cyfry. Sprawdzamy, czy reszta przy dzieleniu przez każdą cyfrę (konwertowaną z ASCII na dziesiętną, a więc -48) wynosi zero.
Na koniec upewniamy się, że
all()
kontrole są prawdziwe, a jeśli tak, to dołączamy je do ciągu wyjściowego oddzielonego przecinkami.MATLAB nie ma STDOUT, więc zamiast tego wypisuję ciąg wyników na końcu za pomocą
disp()
Ten kod jest WOLNY! Nadal go uruchamiam, aby upewnić się, że poprawnie odnajduje wszystkie numery poniedziałkowe, ale na razie wygląda dobrze.
Aktualizacja:
Kod został zakończony. Drukuje następujące:
Co jeśli uruchomisz ten kod z tym jako danymi wejściowymi:
Yeilds 548.
źródło
Ruby, 79
Bardziej interesujące, ale nieco dłuższe rozwiązanie z wyrażeniem regularnym:
W każdym przypadku używamy zdolności Ruby do iteracji po ciągach znaków, tak jakby były liczbami całkowitymi dziesiętnymi:
?1.upto(?9*7)
jest równoważne1.upto(9999999).map(&:to_s).each
. Łączymy ciąg z każdą niezerową cyfrą za pomocą operatora modulo i sprawdzamy wynik, aby sprawdzić podzielność.Bonusowe rozwiązanie Ruby 1.8 (wymaga
-l
flagi do poprawnego wydruku):1.8 pozwoliło iteratorowi bloku być zmienną globalną. Przypisanie
$_
sprawia, że jest niejawnym odbiornikiem operacji na łańcuchach. Łatwiej też interpolujemy tablice do wyrażenia regularnego: w 1.8/[#{[1,2]}]/
ewaluuje do/[12]/
.źródło
digits
funkcję na liczbach całkowitych , możesz zapisać bajty z ewakuacyjnego hacka, ponieważ nie używasz już ciągów! 63 bajty.Pip , 25 bajtów
Wysyła każdą liczbę w osobnym wierszu. Działało to od około 10 minut i do tej pory osiągnęło 984312, ale jestem pewien, że jest poprawne. (Edycja: Kilka godzin później ... kod zakończony, wygenerowano wszystkie 548 z nich.)
Oto interpretacja pseudokodu w języku Python:
#=
Operatora porównuje dwa iterables długością. Jeżeli liczbaU
niQ
znaków w uea
jest taka sama jak liczba znakówa
, nie ma powtórzeń.Sprawdzian podzielny według każdej cyfry pochodzi z jednego z moich przykładowych programów Pip. Napisałem go po obejrzeniu wcześniejszego wyzwania , ale nie opublikowałem go tam, ponieważ język był nowszy niż pytanie. W przeciwnym razie przy 8 bajtach byłaby to zwycięska odpowiedź na to pytanie. Oto wyjaśnienie krok po kroku:
źródło
Couple hours later
To dobrze, że wydajność nie jest brana pod uwagę.JavaScript (ES6),
1069083 bajtówDzieci, nie próbujcie tego w domu; JS nie będzie zadowolony z perspektywy przechodzenia przez każdą cyfrę każdej liczby całkowitej od jednego do dziesięciu milionów z wyrażeniem regularnym.
Pierwsze wyrażenie regularne (rekwizyty do @Jarmex) zwraca,
true
jeśli liczba zawiera zduplikowane cyfry lub zera. Jeśli okaże sięfalse
, przejście programu do drugiego, który zastępuje każdą cyfręj
zi%j
. Wynik to wszystkie zera, jeśli jest podzielny przez wszystkie cyfry, w którym to przypadku przechodzi doconsole.log(i)
.Sugestie mile widziane!
źródło
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.
źródło
Ruby, 130 bytes
... not counting whitespace
New to programming,just wanted to participate
źródło
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.źródło
goto
command being used.CJam, 34 bytes
źródło
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.)
źródło
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.
źródło
Jelly, 11 bytes
This uses the two-week old
œ!
atom. Actually fast enough to run on TIO.Try it online!
How it works
źródło