Salida de factores distintos de los cuboides
La tarea de hoy es muy simple: dado un entero positivo, genera un representante de cada cuboide formable por sus factores.
Explicaciones
El volumen de un cuboide es el producto de sus tres lados. Por ejemplo, un cuboide de volumen 4 cuyo lado longitudes son números enteros puede tener lados [1, 1, 4]
, [1, 2, 2]
, [1, 4, 1]
, [2, 1, 2]
, [2, 2, 1]
, o [4, 1, 1]
. Sin embargo, algunos de estos representan el mismo cuboide: por ejemplo, [1, 1, 4]
y [4, 1, 1]
son el mismo cuboide rotados. Solo hay dos cuboides distintos con volumen 4 y lados enteros: [1, 1, 4]
y [1, 2, 2]
. La salida puede ser cualquier representación del primer cuboide, y cualquier representación del segundo cuboide.
Entrada
Su programa debe tener un único número entero positivo de 1 ≤ n ≤ 231- 1 .
Salida
Deberá generar todos los cuboides posibles en una lista o de cualquier otra forma aceptable. P.ej
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]]
No es necesario ordenar las sublistas, siempre que sean únicas.
Puntuación
Este es el código de golf, por lo que la respuesta más corta en bytes gana. Las lagunas estándar están prohibidas.
Aquí hay un generador de casos de prueba
Tablas de clasificación
Aquí hay un fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma.
Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:
# Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
# Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento de la tabla de clasificación:
# [><>](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>
Respuestas:
Jalea , 7 bytes
Un enlace monádico que acepta un entero positivo que produce una lista de 3 listas de enteros positivos.
Pruébalo en línea!
¿Cómo?
fuente
JavaScript (V8) ,
6160 bytesImprime los cuboides en STDOUT.
Pruébalo en línea!
Comentado
fuente
Haskell , 52 bytes
Pruébalo en línea!
Las tuplas están en orden descendente. "3" parece ser un número lo suficientemente pequeño como para que escribir los 3 bucles sea más corto que cualquier cosa general que se me ocurra.
fuente
Python 3.8 (prelanzamiento) ,
8380 bytesPruébalo en línea!
... superando una versión de dos bucles por tres bytes:
fuente
Jalea , 11 bytes
Pruébalo en línea!
Un enlace monádico que toma un entero como argumento y devuelve una lista de listas de enteros.
Explicación
fuente
Haskell ,
67 6059 bytesPara una dadanorte , esto produce todas las 3 tuplas de con entradas en { 1 , 2 , ... , n } y filtra los válidos. Para garantizar la unicidad, requerimos que las tuplas estén ordenadas.
Pruébalo en línea!
fuente
Retina , 59 bytes
Pruébalo en línea! El enlace incluye un conjunto de pruebas. Explicación:
Convierte a unario.
Repitiendo dos veces, divida el último número en cada línea en todos sus posibles pares de factores. La mirada atrás es codiciosa y atómica, por lo que una vez que coincida con el prefijo del último número, no retrocederá. Esto genera todas las permutaciones posibles de tres factores.
Eliminar líneas donde los factores no están en orden ascendente.
Convierte a decimal.
fuente
Pyth , 11 bytes
Pruébalo en línea!
fuente
05AB1E , 8 bytes
Pruébalo en línea!
fuente
C (clang) , 89 bytes
Pruébalo en línea!
Puerto de @Arnauld 👍
Guardado 1 gracias a @Jonathan Frech mejor formato de salida
fuente
"%d %d %d\n"
~>"%d,%d,%d "
ahorraría un byte.Icono , 87 bytes
Pruébalo en línea!
Cerca de Python :)
fuente