Prostopadłościany o charakterystyce wyjściowej
Dzisiejsze zadanie jest bardzo proste: biorąc pod uwagę dodatnią liczbę całkowitą, wypisuje reprezentant każdego prostopadłościanu formowalnego przez jego czynniki.
Objaśnienia
Objętość prostopadłościanu jest iloczynem jego trzech długości boków. Na przykład, sześcienna tom 4, których długości boków są liczbami całkowitymi może mieć boki [1, 1, 4]
, [1, 2, 2]
, [1, 4, 1]
, [2, 1, 2]
, [2, 2, 1]
, i [4, 1, 1]
. Jednak niektóre z nich reprezentują ten sam prostopadłościan: np. [1, 1, 4]
I [4, 1, 1]
są obrócone o tę samą prostopadłościan. Istnieją tylko dwie wyraźne prostopadłościany o objętości 4 i bokach całkowitych: [1, 1, 4]
i [1, 2, 2]
. Wyjściem może być dowolna reprezentacja pierwszego prostopadłościanu i dowolna reprezentacja drugiego prostopadłościanu.
Wejście
Twój program musi przyjąć jedną dodatnią liczbę całkowitą .1 ≤ n ≤ 231- 1
Wynik
Musisz wyprowadzić wszystkie możliwe prostopadłościany w formie listy lub w inny dopuszczalny sposób. Na przykład
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]]
Podlisty nie muszą być sortowane, o ile są unikalne.
Punktacja
To jest golf golfowy, więc wygrywa najkrótsza odpowiedź w bajtach. Standardowe luki są zabronione.
Oto generator przypadków testowych
Liderów
Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
# Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
# Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:
# [><>](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>
Odpowiedzi:
Galaretka , 7 bajtów
Monadyczny link akceptujący dodatnią liczbę całkowitą, która daje listę 3-list dodatnich liczb całkowitych.
Wypróbuj online!
W jaki sposób?
źródło
JavaScript (V8) ,
6160 bajtówDrukuje prostopadłościany do STDOUT.
Wypróbuj online!
Skomentował
źródło
Haskell , 52 bajty
Wypróbuj online!
Krotki są w kolejności malejącej. „3” wydaje się być wystarczająco małą liczbą, aby napisanie 3 pętli było krótsze niż cokolwiek innego, co mogłem wymyślić.
źródło
Python 3.8 (wersja wstępna) ,
8380 bajtówWypróbuj online!
... pokonując wersję dwupętlową o trzy bajty:
źródło
Galaretka , 11 bajtów
Wypróbuj online!
Monadyczny link przyjmujący za argument liczbę całkowitą i zwracający listę list liczb całkowitych.
Wyjaśnienie
źródło
Haskell ,
67 6059 bajtówWypróbuj online!
źródło
Siatkówka , 59 bajtów
Wypróbuj online! Link zawiera pakiet testowy. Wyjaśnienie:
Konwertuj na unary.
Powtarzając dwa razy, podziel ostatnią liczbę w każdej linii na wszystkie możliwe pary czynników. Wygląd jest chciwy i atomowy, więc po dopasowaniu prefiksu ostatniego numeru nie będzie się cofał. To generuje wszystkie możliwe kombinacje trzech czynników.
Usuń wiersze, w których czynniki nie są w porządku rosnącym.
Konwertuj na dziesiętny.
źródło
Pyth , 11 bajtów
Wypróbuj online!
źródło
05AB1E , 8 bajtów
Wypróbuj online!
źródło
C (brzęk) , 89 bajtów
Wypróbuj online!
Port @Arnauld 👍
Zapisano 1 dzięki lepszemu formatowi wyjściowemu @Jonathan Frech
źródło
"%d %d %d\n"
~>"%d,%d,%d "
uratuje bajt.Ikona , 87 bajtów
Wypróbuj online!
Blisko do Pythona :)
źródło