Herausforderung:
Überprüfen Sie bei einem Array nicht negativer ganzer Zahlen im Bereich von0 to Infinity
, ob alle Primzahlen sind oder nicht. (Sie können die Eingabe auch als Zeichenfolge übernehmen, wenn Sie möchten.)
Eingang:
Eingabe: Ein Array von Zahlen
Ausgabe: Das Array, bei dem jedes Element durch eines der folgenden Elemente ersetzt wird:
-1 -----> If 0, 1
1 -----> If it is a prime number greater than 1
the highest factor -----> If that number is not prime
Rückgabe entweder -1 (0, 1), 1 (für Primzahlen> = 2) oder des höchsten Faktors der angegebenen Zahl (für Nicht-Primzahlen)
Beispiele:
[1, 2, 3, 4, 10, 11, 13] ---> [-1, 1, 1, 2, 5, 1, 1]
[100, 200, 231321, 12312, 0, 111381209, 123123] ---> [50, 100, 77107, 6156, -1, 1, 41041]
Hinweis:
Die Eingabe ist immer gültig, dh sie besteht nur aus Zahlen und Dezimalstellen, auf die nicht geprüft wurde. Das Array kann leer sein. Wenn dies der Fall ist, geben Sie das leere Array zurück.
Beschränkung:
Dies ist Code-Golf, so dass der kürzeste Code in Bytes für jede Sprache gewinnt.
Bestenliste :
Hier ist ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu generieren.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
# Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
# Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Leaderboard-Snippet angezeigt wird:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
var QUESTION_ID=163882,OVERRIDE_USER=8478;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 ,
76 BytesEin monadischer Link, der eine Liste nicht negativer Ganzzahlen akzeptiert und eine Liste von Ganzzahlen größer oder gleich -1 beibehält.
Probieren Sie es online!
Wie?
Beachten Sie, dass:
ÆḌ
liefert eine Liste der richtigen Teiler in aufsteigender ReihenfolgeṪ
auf eine leere Liste ergibt Nullquelle
Gelee ,
98 Bytes1 Byte dank @Dennis gespeichert
Probieren Sie es online! oder führen Sie alle Testfälle aus
Kommentiert
Wir nutzen die Tatsache, dass beide
nan
undinf
werden0
in Jelly, wenn ein bitweises NICHT auf sie angewendet wird.quelle
~~
.:ÆfṂ€$~~
Spart ein Byte, indem die Hilfsverknüpfung entfernt wird.$
ist, wonach ich gesucht habe. :) Vielen Dank!R,
6862 BytesEine Lösung, die nur Base R verwendet, keine Bibliotheken! Vielen Dank an Giuseppe für die 6 Bytes.
Verwendet
scan
, um eine durch Leerzeichen getrennte Liste von Zahlen einzulesen, um%%
zu identifizieren, welche Faktoren sind.v
enthält dann einen Vektor aller Faktoren in aufsteigender Reihenfolge (einschließlich 1 und n). Dies hat die nette Eigenschaft, dass, wenn wir esrev
ersetzenv
, die gewünschte Nummer an zweiter Stelle steht, um einen teuren Anruf zu vermeidenlength
odertail
(wennn
es Primzahl war,v
enthält esn 1
, sonst enthält es)n (factors in descending order) 1
).Beispielausgabe (TIO Link hier ):
Wenn Sie der Meinung sind, dass eine Liste kein akzeptabler Rückgabetyp ist, tauschen Sie sie
Map
aussapply
und fügen Sie 3 Bytes hinzu.quelle
!
05AB1E ,
1198 Bytes-3 Bytes dank @Emigna , wechselt
©d1-®+
zuDd<+
und۬ۈ
nachε¨à
.Nur meine zweite 05AB1E Antwort
kann also definitiv golfen werden.Probieren Sie es online aus.
Erläuterung:
quelle
Dd<+
sollte funktionieren statt©d1-®+
. Das brauchst du auch nicht,ï
da sie noch ints sind. Sie könnten es in der Fußzeile haben, um eine schönere Ausgabe zu erhalten.1-
stattdessen<
war das ziemlich doof .. Danke für dieD
stattdessen©...®
! Und das habe ich jaï
jetzt in die Fußzeile gestellt.Ñε¨àDd<+
J , 21 Bytes
Probieren Sie es online!
Erläuterung:
(>&1)"0
ist jede Zahl größer als 1?@.
Wenn nicht, kehre zurück_1:
(%{.@q:)
Wenn es 2 oder mehr ist, teilen Sie%
die Zahl durch den ersten{.
der Primfaktorenq:
quelle
Japt , 6 Bytes
Nach dem Golfen war er fast identisch mit und genauso kurz wie Jonathans Lösung.
Versuch es
Erläuterung
quelle
-m
Python 3 , 62 Bytes
Probieren Sie es online!
Für
0
und1
range(1,n)
ist leer, daher wird der Code zu ausgewertetmax([]+[-1]) = -1
. Bei Primzahlen ist der einzige Teiler in [1, n)1
der gewünschte Ausgang.Kokosnuss , 50 Bytes
Probieren Sie es online!
quelle
Java 8,
10510387 BytesÄndert das Eingabearray, anstatt ein neues zurückzugeben, um Bytes zu sparen.
Probieren Sie es online aus.
Erläuterung:
quelle
Haskell,
5249 BytesProbieren Sie es online!
quelle
Schale , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
Attache , 23 Bytes
Probieren Sie es online!
29 Bytes, ohne Punkte:
@(Max&-1@Last@ProperDivisors)
24 Bytes, auch ohne Punkt:
@(Max&-1@`@&-2@Divisors)
Dies wird einfach der vorletzte Teiler von
n
dann das Maximum davon und-1
. Das vorletzte Element in einem Array mit weniger als zwei Elementen istnil
undMax[-1, nil]
ist-1
.@
vektorisiert einfach diese Funktion und lässt sie auf jedes Atom zutreffen.quelle
Wolfram Language (Mathematica) , 33 Byte
Probieren Sie es online!
quelle
R +
numbers
,8879 BytesVielen Dank an die Kommentare für einige Ratschläge vor allem zur Einreichung von Beiträgen.
Verwendet das Produkt aller Primfaktoren mit Ausnahme des kleinsten und die Tatsache, dass das Produkt der Elemente eines leeren Vektors definiert ist
1
.Probieren Sie es online!
quelle
library
Aufruf wegzulassen undnumbers::primeFactors
direkt zu verwenden.Brachylog , 10 Bytes
Probieren Sie es online!
Die folgende Erklärung wird zumeist der Kürze halber zwingend formuliert und spiegelt die deklarative Natur von Brachylog nicht genau wider.
Ich beschloss, Brachylog zu lernen, damit ich ein bisschen Spaß mit Codegolf haben konnte und hoffte, durch Osmose etwas über das Verhalten von tatsächlichem Prolog zu lernen Ausführungskontrollzeichen funktionieren.
quelle
.∨
statt|∧
(ich vermute , Sie das vergessen haben.
), aber es ist das gleiche Byte - Zählung. Willkommen bei PPCG (und vor allem Brachylog: p) übrigens!Stax ,
1413 BytesFühren Sie es aus und debuggen Sie es
Erklärung (ausgepackt):
Pseudocode innerhalb der Karte:
quelle
Pyth, 12 Bytes
Probieren Sie es hier aus
Erläuterung
quelle
J , 14 Bytes
Probieren Sie es online!
Nehmen Sie stattdessen für jede Zahl n das Maximum von (n, 1).
Hänge die negierte Zahl an die Liste ihrer Primfaktoren an (leere Liste für 1) und dividiere die Zahl durch den ersten Punkt in der Liste.
Auch 14 Bytes
Probieren Sie es online!
Teilen Sie jede Zahl durch den ersten ihrer Primfaktoren. 0 löst einen Domain-Fehler mit aus
q:
und wir suchen nach dem 0. Element in einer leeren Liste für 1 - das ist auch ein Fehler. Geben Sie für jede Zahl, die Fehler enthält, −1 zurück.quelle
Japt ,
14118 BytesProbieren Sie es online!
Dank Shaggy wurden diese drei nervigen Bytes abgeschabt .
quelle
k
gibt die Primfaktoren von zurückN
- dies®/k v)ªÉ
JavaScript (Node.js) ,
61Byte-6 Bytes dank @shaggy
Probieren Sie es online!
Erklärung:
Dies ist immer noch für alten Code nicht aktualisiert.
ES5 freundlich auch:
quelle
Bash + GNU-Dienstprogramme, 49
Erläuterung
factor
Liest Eingangsnummern von STDIN, eine pro Zeile und gibt sie im Format aus<input number>: <space-separated list of prime factors (ascending)>
sed
verarbeitet dies wie folgt:/:$/c-1
Die Eingangsnummern 0 und 1 haben keine Primfaktoren und werden durch ersetzt-1
/: \w+$/c1
Zahlen mit einem Primfaktor sind Primzahlen. Ersetzen Sie diese durch1
s%: %/%
Ersetzen:
durch/
. Dadurch wird ein arithmetischer Ausdruck erstellt, um die (Nicht-Prim) -Eingabezahl durch ihren kleinsten Primfaktor zu teilen und den größten Faktor zu erhalteny/ /#/
Entfernen Sie die Liste der anderen (nicht benötigten) Faktoren (durch Auskommentieren)bc
Arithmetisch auswerten und anzeigenProbieren Sie es online!
quelle
-r
, und für die ersten beidens
können Sie/regex/cvalue
ein Byte Golf spielen. Wenn Sie diesen regulären Ausdruck weiter vereinfachen, können Sie mehr sparen, und Sie können ein Byte in den letzten beiden regulären Ausdrücken speichern, indem Sie nur das:
durch/
, und ersetzen Kommentieren Sie dann den unerwünschten Teil wie folgt ausPython 2 ,
6159 BytesProbieren Sie es online!
Verbesserungen
quelle
JavaScript (Node.js) , 37 Byte
Probieren Sie es online!
Rekursiver Stapelüberlauf für große Eingaben
JavaScript (Node.js) , 41 Byte
Probieren Sie es online!
quelle
Pari / GP , 37 Bytes
Probieren Sie es online!
quelle
Schläger , 105 Bytes
Probieren Sie es online!
quelle
Befunge-98 (FBBI) , 39 Bytes
Probieren Sie es online!
Endet mit dem
&
wenn keine Nummern mehr vorhanden sind. Dadurch wird das Programm 60 Sekunden lang angehalten, bis TIO das Programm beendet. Dies ist bei Befunge-98 unvermeidlich, zumindest bei TIO, da beide Interpreter dies tun. Nachdem Sie die Wiedergabe beendet haben, können Sie das Programm nach einer Weile stoppen, um zu sehen, was ausgegeben wird, wenn Sie die Minute gewartet haben.Im Grunde genommen verwandelt es jede neue Zahl, wenn sie 0 ist, in eine 1. Dann legt es eine -1 auf den Stapel, gefolgt von einer Zahl, die von 1 beginnt und hochzählt, bis sie die eingegebene Zahl erreicht, in welchem Fall sie Gibt die zweite Zahl auf dem Stapel aus (-1 für eine Eingabe von 0 oder 1 und den höchsten Faktor für andere). Jedes Mal, wenn wir die Schleife durchlaufen, fügen wir den Wert des Iterators dem Stapel dahinter hinzu, wenn (
input % iterator == 0
). Dies bedeutet, dass wir bei der Eingabe nur den Iterator wegwerfen und drucken müssen. Dann räumen wir den Stapel mitn
und kehren zur Leseeingabefunktion zurück.Ich kann die Erklärung später erweitern, wir werden sehen ...
quelle
Retina 0.8.2 , 33 Bytes
Probieren Sie es online! Link enthält die Testfälle, die nicht zu langsam sind. Erläuterung:
Schleife über jede Eingangsnummer.
Sonderfall 0 und 1.
In Unary konvertieren (hat keinen Einfluss auf -1).
Ersetzen Sie jede Zahl durch den größten korrekten Dezimalfaktor.
quelle
tinylisp , 75 bytes
Probieren Sie es online! (Enthält 4 zusätzliche Bytes, um der anonymen Funktion einen Namen zu geben, damit wir sie in der Fußzeile aufrufen können.)
Ungolfed / Erklärung
Beachten Sie, dass für prime 1 zurückgegeben wirdn und der größte Faktor weniger als n für Composite n kann in die Rückkehr kombiniert werden n / p wo p ist der kleinste Primfaktor von n .
quelle