Ausgabe von Distinct Factor Cuboids
Die heutige Aufgabe ist sehr einfach: Geben Sie bei einer positiven ganzen Zahl einen Repräsentanten jedes Quaders aus, der durch seine Faktoren formbar ist.
Erklärungen
Das Volumen eines Quaders ist das Produkt seiner drei Seitenlängen. Zum Beispiel kann ein quader von Band 4 , deren Seitenlängen ganze Zahlen sind , können Seiten haben [1, 1, 4]
, [1, 2, 2]
, [1, 4, 1]
, [2, 1, 2]
, [2, 2, 1]
, oder [4, 1, 1]
. Einige davon stellen jedoch den gleichen Quader dar: z. B. [1, 1, 4]
und [4, 1, 1]
sind der gleiche Quader gedreht. Es gibt nur zwei verschiedene Quader mit Volumen 4 und ganzzahligen Seiten: [1, 1, 4]
und [1, 2, 2]
. Die Ausgabe kann eine beliebige Darstellung des ersten Quaders und eine beliebige Darstellung des zweiten Quaders sein.
Eingang
Ihr Programm muss eine einzelne positive ganze Zahl 1 ≤ n ≤ 231- 1 annehmen .
Ausgabe
Sie müssen alle möglichen Quader in einer Liste oder auf eine andere akzeptable Weise ausgeben. Z.B
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]]
Unterlisten müssen nicht sortiert werden, solange sie eindeutig sind.
Wertung
Dies ist Codegolf, daher gewinnt die kürzeste Antwort in Bytes. Standardlücken sind verboten.
Hier ist ein Testfallgenerator
Bestenlisten
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=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>
Antworten:
Gelee , 7 Bytes
Ein monadischer Link, der eine positive Ganzzahl akzeptiert, die eine Liste von 3 Listen positiver Ganzzahlen ergibt.
Probieren Sie es online!
Wie?
quelle
JavaScript (V8) ,
61 bis60 ByteDruckt die Quader nach STDOUT.
Probieren Sie es online!
Kommentiert
quelle
Haskell , 52 Bytes
Probieren Sie es online!
Die Tupel sind absteigend sortiert. "3" scheint eine ausreichend kleine Zahl zu sein, bei der das Ausschreiben der 3 Schleifen kürzer war als alles, was mir allgemein einfiel.
quelle
Python 3.8 (Vorabversion) ,
83 bis80 ByteProbieren Sie es online!
... eine Zwei-Schleifen-Version um drei Bytes schlagen:
quelle
Gelee , 11 Bytes
Probieren Sie es online!
Ein monadischer Link, der eine ganze Zahl als Argument verwendet und eine Liste mit ganzen Zahlen zurückgibt.
Erläuterung
quelle
Haskell ,
67 6059 BytesProbieren Sie es online!
quelle
Netzhaut , 59 Bytes
Probieren Sie es online! Link enthält Testsuite. Erläuterung:
In Unary konvertieren.
Durch zweimaliges Wiederholen teilen Sie die letzte Zahl in jeder Zeile in alle möglichen Faktorenpaare. Der Lookbehind ist gierig und atomar. Wenn er mit dem Präfix der letzten Zahl übereinstimmt, wird er nicht zurückverfolgt. Dies erzeugt alle möglichen Permutationen von drei Faktoren.
Löschen Sie Zeilen, in denen die Faktoren nicht aufsteigend sortiert sind.
In Dezimalzahl konvertieren.
quelle
Pyth , 11 Bytes
Probieren Sie es online!
quelle
05AB1E , 8 Bytes
Probieren Sie es online!
quelle
C (clang) 89 Bytes
Probieren Sie es online!
Hafen von @Arnauld 👍
1 dank @Jonathan Frech besseres Ausgabeformat gespeichert
quelle
"%d %d %d\n"
~>"%d,%d,%d "
würde ein Byte speichern.Icon , 87 Bytes
Probieren Sie es online!
In der Nähe von Python :)
quelle