Cuboïdes à facteur distinct de sortie
La tâche d'aujourd'hui est très simple: étant donné un entier positif, produire un représentant de chaque cuboïde formable par ses facteurs.
Explications
Le volume d'un cuboïde est le produit de ses trois longueurs latérales. Par exemple, un parallélépipède du volume 4 dont les longueurs de côté sont des nombres entiers pouvant avoir des côtés [1, 1, 4]
, [1, 2, 2]
, [1, 4, 1]
, [2, 1, 2]
, [2, 2, 1]
, ou [4, 1, 1]
. Cependant, certains d'entre eux représentent le même cuboïde: par exemple [1, 1, 4]
et [4, 1, 1]
sont le même cuboïde tourné. Il n'y a que deux cuboïdes distincts avec le volume 4 et les côtés entiers: [1, 1, 4]
et [1, 2, 2]
. La sortie peut être n'importe quelle représentation du premier cuboïde et n'importe quelle représentation du deuxième cuboïde.
Contribution
Votre programme doit prendre un seul entier positif 1≤n≤231−1 .
Production
Vous devrez sortir tous les cuboïdes possibles dans une liste ou de toute autre manière acceptable. Par exemple
Input Output
1 [[1, 1, 1]]
2 [[1, 1, 2]]
3 [[1, 1, 3]]
4 [[1, 1, 4], [1, 2, 2]]
8 [[1, 1, 8], [1, 2, 4], [2, 2, 2]]
12 [[1, 1, 12], [1, 2, 6], [1, 3, 4], [2, 2, 3]]
13 [[1, 1, 13]]
15 [[1, 1, 15], [1, 3, 5]]
18 [[1, 1, 18], [1, 2, 9], [1, 3, 6], [2, 3, 3]]
23 [[1, 1, 23]]
27 [[1, 1, 27], [1, 3, 9], [3, 3, 3]]
32 [[1, 1, 32], [1, 2, 16], [1, 4, 8], [2, 2, 8], [2, 4, 4]]
36 [[1, 1, 36], [1, 2, 18], [1, 3, 12],[1, 4, 9], [1, 6, 6], [2, 2, 9], [2, 3, 6], [3, 3, 4]]
Les sous-listes n'ont pas besoin d'être triées, tant qu'elles sont uniques.
Notation
C'est le golf de code, donc la réponse la plus courte en octets l'emporte. Les failles standard sont interdites.
Voici un générateur de cas de test
Classements
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 apparaît, 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 rayant. 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 si 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=192852;
var OVERRIDE_USER=8478;
var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;function answersUrl(d){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+d+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(d,e){return"https://api.stackexchange.com/2.2/answers/"+e.join(";")+"/comments?page="+d+"&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(d){answers.push.apply(answers,d.items),answers_hash=[],answer_ids=[],d.items.forEach(function(e){e.comments=[];var f=+e.share_link.match(/\d+/);answer_ids.push(f),answers_hash[f]=e}),d.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(d){d.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),d.has_more?getComments():more_answers?getAnswers():process()}})}getAnswers();var SCORE_REG=function(){var d=String.raw`h\d`,e=String.raw`\-?\d+\.?\d*`,f=String.raw`[^\n<>]*`,g=String.raw`<s>${f}</s>|<strike>${f}</strike>|<del>${f}</del>`,h=String.raw`[^\n\d<>]*`,j=String.raw`<[^\n<>]+>`;return new RegExp(String.raw`<${d}>`+String.raw`\s*([^\n,]*[^\s,]),.*?`+String.raw`(${e})`+String.raw`(?=`+String.raw`${h}`+String.raw`(?:(?:${g}|${j})${h})*`+String.raw`</${d}>`+String.raw`)`)}(),OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(d){return d.owner.display_name}function process(){var d=[];answers.forEach(function(n){var o=n.body;n.comments.forEach(function(q){OVERRIDE_REG.test(q.body)&&(o="<h1>"+q.body.replace(OVERRIDE_REG,"")+"</h1>")});var p=o.match(SCORE_REG);p&&d.push({user:getAuthorName(n),size:+p[2],language:p[1],link:n.share_link})}),d.sort(function(n,o){var p=n.size,q=o.size;return p-q});var e={},f=1,g=null,h=1;d.forEach(function(n){n.size!=g&&(h=f),g=n.size,++f;var o=jQuery("#answer-template").html();o=o.replace("{{PLACE}}",h+".").replace("{{NAME}}",n.user).replace("{{LANGUAGE}}",n.language).replace("{{SIZE}}",n.size).replace("{{LINK}}",n.link),o=jQuery(o),jQuery("#answers").append(o);var p=n.language;p=jQuery("<i>"+n.language+"</i>").text().toLowerCase(),e[p]=e[p]||{lang:n.language,user:n.user,size:n.size,link:n.link,uniq:p}});var j=[];for(var k in e)e.hasOwnProperty(k)&&j.push(e[k]);j.sort(function(n,o){return n.uniq>o.uniq?1:n.uniq<o.uniq?-1:0});for(var l=0;l<j.length;++l){var m=jQuery("#language-template").html(),k=j[l];m=m.replace("{{LANGUAGE}}",k.lang).replace("{{NAME}}",k.user).replace("{{SIZE}}",k.size).replace("{{LINK}}",k.link),m=jQuery(m),jQuery("#languages").append(m)}}
body{text-align:left!important}#answer-list{padding:10px;float:left}#language-list{padding:10px;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="https://cdn.sstatic.net/Sites/codegolf/primary.css?v=f52df912b654"> <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><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><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td><a href="{{LINK}}">{{SIZE}}</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td><a href="{{LINK}}">{{SIZE}}</a></td></tr></tbody> </table>
Réponses:
Gelée , 7 octets
Un lien monadique acceptant un entier positif qui donne une liste de 3 listes d'entiers positifs.
Essayez-le en ligne!
Comment?
la source
JavaScript (V8) ,
6160 octetsImprime les cuboïdes dans STDOUT.
Essayez-le en ligne!
Commenté
la source
Haskell , 52 octets
Essayez-le en ligne!
Les tuples sont en ordre décroissant. "3" semble être un nombre suffisamment petit pour que l'écriture des 3 boucles soit plus courte que tout ce que je pouvais trouver.
la source
Python 3.8 (pré-version) ,
8380 octetsEssayez-le en ligne!
... battant une version à deux boucles de trois octets:
la source
Gelée , 11 octets
Essayez-le en ligne!
Un lien monadique prenant un entier comme argument et renvoyant une liste de listes d'entiers.
Explication
la source
Haskell ,
67 6059 octetsPour une donnéen { 1 , 2 , … , n }
Essayez-le en ligne!
la source
Rétine , 59 octets
Essayez-le en ligne! Le lien inclut une suite de tests. Explication:
Convertissez en unaire.
En répétant deux fois, divisez le dernier nombre de chaque ligne en toutes ses paires de facteurs possibles. Le lookbehind est gourmand et atomique, donc une fois qu'il correspond au préfixe du dernier numéro, il ne reviendra pas en arrière. Cela génère toutes les permutations possibles de trois facteurs.
Supprimez les lignes où les facteurs ne sont pas dans l'ordre croissant.
Convertissez en décimal.
la source
Pyth , 11 octets
Essayez-le en ligne!
la source
05AB1E , 8 octets
Essayez-le en ligne!
la source
C (clang) , 89 octets
Essayez-le en ligne!
Port de @Arnauld 👍
Enregistré 1 grâce à @Jonathan Frech meilleur format de sortie
la source
"%d %d %d\n"
~>"%d,%d,%d "
sauverait un octet.Icône , 87 octets
Essayez-le en ligne!
Près de Python :)
la source