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>
Antworten:
Gelee , 8 Bytes
Läuft vor Ort in weniger als acht Minuten.
Probieren Sie es online! (Geändert, um Zahlen mit sechs oder weniger Ziffern zu finden.)
Wie es funktioniert
quelle
Python 2, 85 Bytes
Druckt eine Liste.
Grundsätzlich kombiniere ich zwei meiner Antworten auf frühere Herausforderungen:
Prüfen, ob eine Zahl durch jede ihrer Ziffern teilbar ist
(Danke an FryAmTheEggman, der mich daran erinnert hat).
Bestimmen Sie, ob alle Dezimalstellen eindeutig sind
Dank xsot für 1 Byte gespart durch die Kombination der Bedingungen besser.
quelle
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 Bytes46 Byte Code + 1 Byte Befehlszeilenparameter.
Verwendung:
Erläuterung
/(.).*\1|0/
Gibt 1 zurück, wenn die zu testende Nummer ein doppeltes Zeichen oder eine 0 enthälts/./$_%$&/rge
Ersetzt jede Ziffer durch den Wert der zu testenden Zahl% der Ziffer. Zum Beispiel 15 -> 00, 16 -> 04 (da 16% 6 = 4). Dies bedeutet, dass jede Eingabe, die durch alle Ziffern teilbar ist, aus allen Nullen besteht, andernfalls enthält sie eine Ziffer> 0. Um dies als Zahl zu behandeln, geben wir * 1 zurück, was bedeutet, dass eine zu testende Zahl für diesen Block 0 zurückgibt, wenn sie durch alle ihre Ziffern teilbar ist, andernfalls> 0.Wenn Sie diese beiden Anweisungen und den Ausdruck durch 'oder' trennen und eine der beiden ersten Bedingungen> 0 zurückgibt, stimmt die Bedingung überein, und die nachfolgenden Teile des Ausdrucks werden nicht ausgewertet. Wenn und nur wenn beide vorherigen Bedingungen 0 sind, wird der Druck ausgeführt. Das
-l
Flag stellt sicher, dass nach jedem Druck eine neue Zeile eingefügt wird.quelle
say
anstelle vonprint
+-l
:-)say
, zuerst eine explizite Erklärung erforderlich ?use feature 'say'
oderuse 5.012
umsonst - ich erwähne immer, wann ich es tue, und niemand hat es jemals angefochten. Ich habe ein paar andere gesehen, die das gleichemap
undsay
bis zu 43: Probieren Sie es online aus!Pyth,
2221Vielen Dank an Jakube für das Abschlagen von 1 Byte unnötiger Formatierung.
Stark inspiriert von dieser CW-Antwort auf die verwandte Frage.
Ich habe eine Paste des Ergebnisses hier , von dem Zeitpunkt an, an dem es als Zeilenvorschub getrennt gedruckt wurde, jetzt als Python-Liste.
Ich würde empfehlen , es nicht online zu versuchen, es sei denn, Sie verwenden eine Zahl kleiner als 7 ... Ich habe es in diesem Link auf 2 gesetzt.
Filter von
1
bis10^7-1
die alle notwendigen Werte abdecken. Diese Version kann einen Speicherfehler verursachen, wenn die Liste nicht erstellt werden kannS^T7
, ähnlich wielist(range(1,10**7))
in Python 3 (funktioniert jedoch bei mir einwandfrei). Wenn ja, könnten Sie versuchen:Womit die ersten 548 Montagszahlen gefunden werden. Dies zeigt auch eine andere Möglichkeit, die
0
s in der Nummer zu überprüfen , anstatt sie durch.3
einen Try-Catch-Block zu ersetzen . Dank für diese Version geht ganz an Jakube. (Beachten Sie, dass dies für den Online-Dolmetscher immer noch viel zu langsam ist.)quelle
.f&.{`Z.x!s%LZjZT0548
Es ist ziemlich viel schneller (4x - 5x) als Ihr While-Loop-Ansatz und hat auch nur eine Länge von 21 Bytes.55, 66, 77, 88, 99
, alle Zahlen mit doppelten Ziffern ...{
geändert worden sein, da das Ersetzen durch{I
zu funktionieren scheint.GS2 ,
20 bis19 Bytesgs2 verwendet eine Vielzahl von Bytes, nicht nur druckbare ASCII-Zeichen. Ich werde meine Lösung in hex präsentieren.
Hier ist eine Erklärung. gs2 ist eine stapelbasierte Sprache, daher gibt es keine Variablen. (abgesehen von 4 Registern, von denen ich hier eins benutze)
quelle
Python 3,
132128114111104 BytesEs gibt 548 Montagszahlen.
quelle
1e8
anstelle von sogar verwenden9**9
?'0' not
. Auchi%int(k)==0
kann wohl seini%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:
7 Bytes gespart dank Moris Zucca!
quelle
TI-BASIC,
6059 Bytes∟D
ist die Liste der Ziffern, die mit math und demrandIntNoRep(
Befehl generiert wird (zufällige Permutation aller ganzen Zahlen zwischen1
und1+int(log(X
einschließlich). Ich benutze eine etwas komplizierte Anweisungskette, um zu prüfen, ob alle Bedingungen erfüllt sind:Um Zahlen mit wiederholten Ziffern oder mit Nullen zu versagen, ersetze ich Nullen durch
2X
, da dieseX
niemals durch teilbar sind2X
.Für den Sonderfall 1 ~ 9 (weil
ΔList(
bei einer Liste mit einem Element Fehler aufgetreten sind ) verwende ich dieIf
Anweisung in der vierten Zeile, um die Prüfung in der fünften Zeile zu überspringen und automatisch alleX
≤9 anzuzeigen.Die Ausgabenummern werden durch Zeilenumbrüche getrennt.
quelle
Mathematica 105
IntegerDigits
aufbrichtn
, in eine Liste ihrer Zifferni
.FreeQ[i,0]
prüft, ob die Liste keine Nullen enthält.Length[i]==Length[Union[i]]
prüft, ob es keine wiederholten Ziffern gibt.And@@(Divisible[n,#]&/@i)
prüft, ob jede Ziffer ein Teiler von istn
.quelle
9^9
1e8
Union
nach Duplikaten sucht.Haskell, 77 Bytes
Anwendungsbeispiel (die ersten 20 Zahlen):
So funktioniert es: iteriere über alle Zahlen von 1 bis 9 ^ 9 und überprüfe die Bedingungen. Die aktuelle Nummer
x
wird in ihre Zeichenfolgendarstellung (show x
) umgewandelt, um sie als Liste von Zeichen zu bearbeiten.quelle
R, 99 Bytes
Etwas weniger Golf gespielt:
quelle
Perl,
907570 Bytesquelle
^
und die$
um die0
in Ihremgrep
, können Sie die ersetzen können ,&&
bevors/./
mit einem einzigen&
und ich glaube , das letzte|0
nicht mehr benötigte (obwohl nur getestet up-to1e3
. ..). Gut und wahrhaftig meine Punktzahl verprügelt! :)CJam, 25 Bytes
Probieren Sie es online aus . Beachten Sie, dass der Online-Link nur zu 10.000 ausgeführt wird. Ich bin mir nicht sicher, ob es online enden würde, wenn Sie geduldig genug sind. Es wurde nicht mit der Offline-Version von CJam getestet, aber ich gehe davon aus, dass es beendet wird.
Erläuterung:
quelle
C #,
230227Es ist schon eine Weile her, dass ich golfen habe, also habe ich wahrscheinlich ein paar Tricks vergessen, um den Bytecount zu senken. Wird sich verbessern, wenn ich an sie denke ...
Ungolfed:
quelle
TI-BASIC,
5553 BytesDies ist eine relativ geringfügige Änderung von Thomas Kwas Antwort , aber ich sende sie als neue Antwort ein, weil ich gehört habe, dass er das Golfen seiner TI-BASIC-Antworten mit einer Prämie belegt hat .
Meine Hauptänderung ist von zu
randIntNoRep(1,
zurandIntNoRep(0,
bedeuten, dass es jetzt eine Null in jeder erzeugten Liste der Stellen gibt.Da jetzt in jedem Ziffernsatz eine Null steht, wirkt sich dies auf die Summe der Reste aus. Normalerweise ist die Summe der Reste 0, aber jetzt führt das Vorhandensein einer zusätzlichen Null zu einem Fehlschlag unseres Teilbarkeitstests.
Um dem entgegenzuwirken, wechselte ich
2Xnot(
zuXnot(
. Die 2 war ursprünglich da, um den Test bei 0 fehlschlagen zu lassen, aber jetzt geht es bei Null. Zahlen, deren Ziffern eine Null enthalten, haben jetztmin(ΔList(∟D
sowieso eine Null (da ihre Listen 2 oder mehr Nullen enthalten), sodass diese Änderung nicht dazu führt, dass zusätzliche Zahlen den Test bestehen.Der Vorteil dieser Methode besteht darin, dass die Funktion, da jetzt "zwei Ziffern" aus der Zahl 1-9 erzeugt werden,
ΔList(
keinen Fehler erzeugt, wodurch wir eine spezielle Bedingung für einstellige Zahlen beseitigen können.quelle
05AB1E ,
302221181413129 Bytes-9 byte dank der hilfe und ermutigung von @Enigma und @ Mr.Xcoder . Vielen Dank, dass ich es größtenteils selbst herausfinden durfte, obwohl ich bereits mit 30 Jahren eine 12-Byte-Lösung im Sinn hatte. Ich habe viel über 05AB1E aus dieser Herausforderung gelernt!
-3 Bytes dank @Grimy
Probieren Sie es online aus (gibt nur Zahlen unter 10 3 statt 10 7 aus , um eine Zeitüberschreitung nach 60 Sekunden zu vermeiden).
Erläuterung:
Vorherige 12-Byte-Version (eine meiner allerersten 05AB1E-Antworten):
HINWEIS: Funktioniert nur in der älteren Version von 05AB1E.
Probieren Sie es online aus (gibt nur Zahlen unter 10 3 statt 10 7 aus , um eine Zeitüberschreitung nach 60 Sekunden zu vermeiden).
Erläuterung:
quelle
297
, die nicht in der Reihenfolge der Lynch-Bell-Nummern liegt.7°LʒÐÑÃÙQ
Julia, 88 Bytes
Dies nimmt einfach alle Zahlen von 1 bis zur größten Lynch-Bell-Zahl und filtert sie nur bis zu den Lynch-Bell-Zahlen.
Ungolfed:
quelle
Python 2, 101 Bytes
Sie können das
print
im Interpreter weglassen , um 96 zu erhalten. Verwendet,6**9
da es 8 Stellen ist, während die größte Montagszahl nur 7 Stellen ist, so etwas9**9
würde wahrscheinlich lange dauern, 6 ** 9 dauert nur ungefähr 10 Sekunden.quelle
1e7
ist ein Float, Range nimmt ganze Zahlen.Perl, 97 Bytes
Dauert eine Weile laufen, aber erzeugt die erforderliche Leistung, Veränderung
1e3
für ein schnelleres Beispiel!quelle
y///c==grep{2>eval"$n=~y/$_//"}/./g
etwas in der Art von verwenden!/(.).*\1/
?MATLAB, 100
Und in einem besser lesbaren Format:
Die Prüfungen sind wie folgt:
Überprüfen Sie zunächst, ob Duplikate vorhanden sind. Wenn durch Sortieren des Arrays die Differenz zwischen aufeinanderfolgenden Ziffern Null ist, gibt es Duplikate
Überprüfen Sie, ob es Nullen gibt. Der ASCII-Wert für 0 ist 48, daher prüfen wir, ob nicht alle Ziffern gleich sind.
Prüfen Sie, ob es durch alle Ziffern teilbar ist. Wir überprüfen, ob der Rest beim Teilen durch jede Ziffer (konvertiert von ASCII zu Dezimalzahl, daher -48) Null ist.
Schließlich stellen wir sicher, dass
all()
die Prüfungen wahr sind, und hängen sie an eine durch Kommas getrennte Ausgabezeichenfolge an.MATLAB hat kein STDOUT, also drucke ich stattdessen die Ergebniszeichenfolge am Ende mit
disp()
Dieser Code ist LANGSAM! Ich führe es immer noch aus, um sicherzustellen, dass es alle Montagszahlen korrekt findet, aber es sieht bis jetzt gut aus.
Aktualisieren:
Der Code wurde ausgeführt. Es wird Folgendes gedruckt:
Was, wenn Sie diesen Code mit dem als Eingabe ausführen:
Yeilds 548.
quelle
Rubin, 79
Interessantere, aber etwas längere Lösung mit Regex:
In jedem Fall verwenden wir Rubys Fähigkeit, Strings zu durchlaufen, als wären es Dezimalzahlen:
?1.upto(?9*7)
entspricht1.upto(9999999).map(&:to_s).each
. Wir verbinden die Zeichenkette mit jeder Ziffer ungleich Null unter Verwendung des Modulo-Operators und werten das Ergebnis aus, um die Teilbarkeit zu überprüfen.Bonus Ruby 1.8 Lösung (
-l
Flag für korrekte Ausgabe erforderlich ):1.8 erlaubte dem Blockiterator, eine globale Variable zu sein. Durch das Zuweisen von
$_
wird es zum impliziten Empfänger für Zeichenfolgenoperationen. Wir können Arrays auch leichter in den regulären Ausdruck interpolieren: in 1.8/[#{[1,2]}]/
ergibt sich/[12]/
.quelle
digits
Funktion für Ganzzahlen hat , können Sie Bytes aus dem eval-Hack speichern, da Sie nicht mehr mit Strings arbeiten! 63 Bytes.Pip , 25 Bytes
Gibt jede Nummer in einer eigenen Zeile aus. Dies hat ungefähr 10 Minuten gedauert und ist bis jetzt auf 984312 aufgestiegen, aber ich bin mir ziemlich sicher, dass es richtig ist. (Edit: Paar Stunden später ... Code fertig, alle 548 von ihnen generiert.)
Hier ist eine Python-ähnliche Pseudocode-Wiedergabe:
Der
#=
Operator vergleicht zwei Iterablen nach ihrer Länge. Wenn die Anzahl derU
niQ
ue Zeichen ina
die gleiche wie die Anzahl der Zeichen in ista
, gibt es keine Wiederholungen.Die durch jede Ziffer teilbare Prüfung stammt aus einem meiner Pip-Beispielprogramme. Ich habe es geschrieben, nachdem ich die frühere Herausforderung gesehen hatte , aber es dort nicht gepostet, weil die Sprache neuer war als die Frage. Andernfalls wäre es bei 8 Bytes die beste Antwort auf diese Frage. Hier ist eine schrittweise Erklärung:
quelle
Couple hours later
Es ist gut, dass die Leistung nicht berücksichtigt wird.Javascript (ES6),
1069083 BytesKinder, versuchen Sie das nicht zu Hause. JS wird sich nicht über die Aussicht freuen, mit einem regulären Ausdruck jede Ziffer einer ganzen Zahl von eins bis zehn Millionen zu durchlaufen.
Der erste reguläre Ausdruck (Requisiten an @Jarmex) gibt zurück,
true
wenn die Nummer doppelte Ziffern oder Nullen enthält. Wenn sich herausstelltfalse
, geht das Programm zur zweiten weiter, die jede Zifferj
durch ersetzti%j
. Das Ergebnis sind alle Nullen, wenn es durch alle Ziffern teilbar ist. In diesem Fall geht es weiter zuconsole.log(i)
.Vorschläge willkommen!
quelle
JavaScript (ES6), 76
Der Regexp-Test für 0 oder wiederholte Ziffern. Dann wird das Ziffernarray überprüft, um nach einem Modulo ungleich Null für eine beliebige Ziffer zu suchen.
hier ist die erklärung der 7 stelligen max.
quelle
Ruby, 130 Bytes
... ohne Leerzeichen
Neu in der Programmierung, wollte nur teilnehmen
quelle
C 122 Bytes
Schöner:
Für jeden Kandidaten
i
iterieren wir seine Zifferna
in Little-Endian-Reihenfolge und verfolgen die angezeigten Ziffern in den Bits vonm
. Wenn die Schleife abgeschlossen ist, sind alle Ziffern Faktoren voni
und wir haben keine Nullen oder wiederholten Ziffern gesehen. Drucken Sie sie also aus. Andernfalls verlassen wir die Schleife vorzeitig, um die äußere Schleife fortzusetzen.quelle
goto
Befehl, der verwendet wird.CJam, 34 Bytes
quelle
Lua, 129 Bytes
Ich habe den String-Ansatz für reines Knacken von Ziffern vermieden, was etwas schneller zu sein scheint und mir wahrscheinlich auch ein paar Bytes erspart hat. (Ich werde diese Theorie testen lassen, aber der Umgang mit Lua-Strings ist im Vergleich zu einigen anderen Sprachen ziemlich ausführlich.)
quelle
gawk, 99 bytes
Ich könnte das auf 97 reduzieren, wenn ich
END
stattdessen verwenden würdeBEGIN
, aber dann müsste man Strg-D drücken, um die eigentliche Ausgabe zu starten, was signalisiert, dass es keine Eingabe geben wird.Ich könnte es sogar auf 94 reduzieren, wenn ich nichts anstelle von
BEGIN
oder schreiben würdeEND
, aber dann müsste man die Eingabetaste einmal drücken, um es zu starten, was als Eingabe gezählt werden könnte.Es geht einfach über die Ziffern jeder Zahl und prüft, ob die Kriterien erfüllt sind.
Bei meinem Core 2 Duo dauert die Beendigung 140 Sekunden.
quelle
Jelly , 11 Bytes
Dies verwendet das zwei Wochen alte
œ!
Atom. Eigentlich schnell genug, um mit TIO zu laufen.Probieren Sie es online!
Wie es funktioniert
quelle