Défi:
Étant donné un tableau de nombres entiers non négatifs dans la plage de0 to Infinity
, vérifiez si tous sont des nombres premiers ou non. (Vous pouvez également prendre l'entrée comme une chaîne si vous le souhaitez)
Contribution:
Entrée: un tableau de nombres
Sortie: le tableau avec chaque élément remplacé par l'un d'eux:
-1 -----> If 0, 1
1 -----> If it is a prime number greater than 1
the highest factor -----> If that number is not prime
Renvoie -1 (0, 1), 1 (pour les nombres premiers> = 2) ou le facteur le plus élevé du nombre donné (pour les nombres non premiers)
Exemples:
[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]
Remarque:
L'entrée sera toujours valide, c'est-à-dire qu'elle ne consistera qu'en nombres et les décimales ne sont pas testées. Le tableau peut être vide, si c'est le cas, renvoyez le tableau vide.
Restriction:
C'est le code-golf donc le code le plus court en octets pour chaque langue gagne.
Classement :
Voici un extrait de pile pour générer à la fois un classement régulier et un aperçu des gagnants par langue.
Pour vous assurer que votre réponse s'affiche, veuillez commencer votre réponse avec un titre, en utilisant le modèle de démarque suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les barrant. Par exemple:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou que vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:
# Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de classement:
# [><>](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>
Réponses:
Gelée ,
76 octetsUn lien monadique acceptant une liste d'entiers non négatifs et conservant une liste d'entiers supérieurs ou égaux à -1.
Essayez-le en ligne!
Comment?
Notez que:
ÆḌ
, donne une liste des diviseurs appropriés dans l'ordre croissantṪ
à une liste vide donne zérola source
Gelée ,
98 octets1 octet enregistré grâce à @Dennis
Essayez-le en ligne! ou exécutez tous les cas de test
Commenté
Nous profitons du fait que les deux
nan
etinf
devenir0
en gelée quand Bitwise pas leur est appliquée.la source
~~
.:ÆfṂ€$~~
enregistre un octet en éliminant le lien d'assistance.$
c'est ce que je cherchais. :) Merci!R,
6862 octetsUne solution utilisant uniquement la base R, pas de bibliothèques! Merci à Giuseppe d'avoir joué au golf 6 octets.
Utilise
scan
pour lire dans une liste de nombres séparés par des espaces,%%
pour identifier quels sont les facteurs.v
contient alors un vecteur de tous les facteurs dans l'ordre croissant (y compris 1 et n). Cela a la belle propriété que lorsque nousrev
ersonsv
, le numéro que nous voulons sera à la deuxième place, évitant un appel coûteux àlength
outail
(s'iln
était premier,v
contientn 1
, sinon il contientn (factors in descending order) 1
).Exemple de sortie (lien TIO ici ):
Si vous pensez que la liste n'est pas un type de retour acceptable, permuter
Map
poursapply
et ajouter 3 octets.la source
!
05AB1E ,
1198 octets-3 octets grâce à @Emigna , en changeant
©d1-®+
versDd<+
et۬ۈ
versε¨à
.Seule ma deuxième réponse 05AB1E,
peut donc certainement être jouée.Essayez-le en ligne.
Explication:
la source
Dd<+
devrait fonctionner au lieu de©d1-®+
. Vous n'avez pas non plus besoin duï
car ils sont toujours des pouces. Vous pouvez l'avoir dans le pied de page pour une sortie plus agréable.1-
au lieu de<
était assez stupide .. Merci pour leD
lieu de©...®
! Et j'ai en effet misï
le pied de page maintenant.Ñε¨àDd<+
J , 21 octets
Essayez-le en ligne!
Explication:
(>&1)"0
chaque nombre est-il supérieur à 1?@.
sinon, retournez_1:
(%{.@q:)
si son 2 ou plus, divisez%
le nombre par le premier{.
des facteurs premiersq:
la source
Japt , 6 octets
Après le golf, a fini par être presque identique à la solution de Jonathan et tout aussi courte que celle-ci.
Essayez-le
Explication
la source
-m
Python 3 , 62 octets
Essayez-le en ligne!
Pour
0
et1
range(1,n)
est vide, le code est donc évalué àmax([]+[-1]) = -1
. Pour les nombres premiers, le seul diviseur dans [1, n) est1
, qui est la sortie souhaitée.Noix de coco , 50 octets
Essayez-le en ligne!
la source
Java 8,
10510387 bytesModifie le tableau d'entrée au lieu d'en renvoyer un nouveau pour économiser des octets.
Essayez-le en ligne.
Explication:
la source
Haskell,
5249 octetsEssayez-le en ligne!
la source
Husk , 8 octets
Essayez-le en ligne!
Explication
la source
Attaché , 23 octets
Essayez-le en ligne!
29 octets, sans point:
@(Max&-1@Last@ProperDivisors)
24 octets, également sans point:
@(Max&-1@`@&-2@Divisors)
Cela obtient simplement l'avant-dernier diviseur de
n
puis en prend le maximum et-1
. L'avant-dernier élément d'un tableau contenant moins de deux éléments estnil
etMax[-1, nil]
est-1
.@
vectorise simplement cette fonction, la faisant s'appliquer à chaque atome.la source
Wolfram Language (Mathematica) , 33 octets
Essayez-le en ligne!
la source
R +
numbers
,8879 octetsMerci aux commentaires pour quelques conseils principalement sur la façon de faire des soumissions.
Utilise le produit de tous les facteurs premiers, sauf le plus petit, et le fait que le produit des éléments d'un vecteur vide est défini comme étant
1
.Essayez-le en ligne!
la source
library
appel et l'utilisernumbers::primeFactors
directement.Brachylog , 10 octets
Essayez-le en ligne!
L'explication suivante est principalement formulée impérativement par souci de concision et ne reflète pas fidèlement la nature déclarative de Brachylog.
J'ai décidé d'apprendre Brachylog afin de pouvoir m'amuser avec le golf de code tout en espérant apprendre le comportement du Prolog réel par osmose, et je l'apprécie vraiment jusqu'à présent, même si je ne suis pas tout à fait sûr de savoir comment le les caractères de contrôle d'exécution fonctionnent.
la source
.∨
place de|∧
(je suppose que vous l'avez oublié.
), mais c'est le même nombre d'octets. Bienvenue à PPCG (et Brachylog plus important encore: p) au fait!Stax ,
1413 octetsExécuter et déboguer
Explication (déballé):
Pseudocode à l'intérieur de la carte:
la source
Pyth, 12 octets
Essayez-le ici
Explication
la source
J , 14 octets
Essayez-le en ligne!
Pour chaque nombre n, prenez à la place le maximum de (n, 1).
Ajoutez le nombre négatif à la liste de ses facteurs premiers (liste vide pour 1) et divisez le nombre par le premier élément de la liste.
Aussi 14 octets
Essayez-le en ligne!
Divisez chaque nombre par le premier de ses facteurs premiers. 0 déclenche une erreur de domaine avec
q:
, et nous recherchons le 0ème élément dans une liste vide pour 1 - c'est également une erreur. Pour tout nombre contenant des erreurs, renvoyez −1.la source
Japt ,
14118 octetsEssayez-le en ligne!
Rasé ces trois octets embêtants grâce à Shaggy .
la source
k
renvoie les facteurs premiers deN
- donc cela devient 8 octets:®/k v)ªÉ
JavaScript (Node.js) ,
6155 octets-6 octets grâce à @shaggy
Essayez-le en ligne!
Explication:
C'est toujours pour l'ancien code que je n'ai pas mis à jour.
Convient également à ES5:
la source
Utilitaires Bash + GNU, 49
Explication
factor
lit les numéros d'entrée de STDIN, un par ligne et les sorties au format<input number>: <space-separated list of prime factors (ascending)>
sed
traite cela comme suit:/:$/c-1
Les nombres d'entrée 0 et 1 n'ont pas de facteurs premiers et sont remplacés par-1
/: \w+$/c1
Les nombres avec un facteur premier (eux-mêmes) sont premiers. Remplacez-les par1
s%: %/%
Remplacez:
par/
. Cela construit une expression arithmétique pour diviser le nombre d'entrée (non premier) par son plus petit facteur premier pour donner le plus grand facteury/ /#/
Supprimer la liste des autres facteurs (inutiles) (en commentant)bc
Évaluation et affichage arithmétiquesEssayez-le en ligne!
la source
-r
, et pour les deux premierss
, vous pouvez utiliser/regex/cvalue
pour jouer un octet, simplifier davantage cette expression régulière peut économiser davantage, et vous pouvez enregistrer un octet dans les deux dernières expressions régulières en remplaçant uniquement le:
par le/
, et puis commentant la partie indésirable, comme ça, tio.run/##JYlBCoMwFET3c4qABhdSfuZ/…Python 2 ,
6159 octetsEssayez-le en ligne!
Améliorations
la source
JavaScript (Node.js) , 37 octets
Essayez-le en ligne!
Récursif, débordement de pile pour les entrées volumineuses
JavaScript (Node.js) , 41 octets
Essayez-le en ligne!
la source
Pari / GP , 37 octets
Essayez-le en ligne!
la source
Raquette , 105 octets
Essayez-le en ligne!
la source
Befunge-98 (FBBI) , 39 octets
Essayez-le en ligne!
Se termine par
&
quand il n'y a plus de numéros. Cela provoque le blocage du programme pendant 60 secondes jusqu'à ce que TIO termine le programme. C'est inévitable pour Befunge-98, au moins sur TIO car les deux interprètes le font. Après avoir joué, vous pouvez arrêter le programme après un moment afin de voir ce qui serait sorti si vous attendiez la minute.Essentiellement, pour chaque nouveau nombre, s'il est 0, il le transforme en un 1. Ensuite, il met un -1 sur la pile suivi d'un nombre qui part de 1 et compte jusqu'à ce qu'il atteigne le numéro d'entrée, auquel cas il imprime le deuxième nombre sur la pile (-1 pour une entrée de 0 ou 1, et le facteur le plus élevé pour les autres). Chaque fois dans la boucle, nous ajoutons la valeur de l'itérateur à la pile derrière lui if (
input % iterator == 0
). Cela signifie que lorsque nous arrivons à l'entrée, il nous suffit de jeter l'itérateur et d'imprimer. Ensuite, nous effaçons la pile avecn
et revenons à la fonction d'entrée de lecture.Je peux développer l'explication plus tard, nous verrons ...
la source
Retina 0.8.2 , 33 octets
Essayez-le en ligne! Link inclut les cas de test qui ne sont pas trop lents. Explication:
Faites une boucle sur chaque numéro d'entrée.
Cas particulier 0 et 1.
Convertir en unaire (n'affecte pas -1).
Remplacez chaque nombre par son plus grand facteur approprié en décimal.
la source
tinylisp , 75 octets
Essayez-le en ligne! (Contient 4 octets supplémentaires pour donner un nom à la fonction anonyme afin que nous puissions l'appeler dans le pied de page.)
Non golfé / explication
Observez que renvoyer 1 pour primen et le plus grand facteur inférieur à n pour composite n peut être combiné en retour n / p où p est le plus petit facteur premier de n .
la source