Alrededor del año 1637, Pierre de Fermat escribió al margen de su copia de la Aritmética:
It is impossible to separate a cube into two cubes, or a fourth power
into two fourth powers, or in general, any power higher than the
second, into two like powers. I have discovered a truly marvelous
proof of this, which this margin is too narrow to contain.
Desafortunadamente para nosotros, el margen sigue siendo demasiado estrecho para contener la prueba. Hoy, vamos a escribir en los márgenes un programa simple que confirma la prueba de entradas arbitrarias.
El reto
Queremos un programa para la función que, dado un poder, lo separe en dos pares de dos poderes que estén lo más cerca posible del poder. Queremos que el programa que hace esto sea lo más pequeño posible para que pueda encajar en los márgenes.
Entrada
La potencia y el número de potencia: c
,x
Restricciones: c > 2
yx > 2
La entrada puede ser a través de argumentos de programa, argumentos de función o del usuario.
Salida
Esta cadena exacta: " a^x + b^x < c^x
" con a
, b
, c
, y x
reemplazado con sus valores enteros literales. a
y b
debe elegirse de modo que a^x + b^x < c^x
y ningún otro valor de a
o b
lo acerque más c^x
. También:a>=b>0
La salida puede ser a través del valor de retorno de la función, stdout, guardado en un archivo o mostrado en pantalla.
Ejemplos:
> 3 3
2^3 + 2^3 < 3^3
> 4 3
3^3 + 3^3 < 4^3
> 5 3
4^3 + 3^3 < 5^3
> 6 3
5^3 + 4^3 < 6^3
> 7 3
6^3 + 5^3 < 7^3
> 8 3
7^3 + 5^3 < 8^3
Debido a las habilidades de escritura promedio de Fermat, no se permiten caracteres no imprimibles. El programa con el menor número de caracteres gana.
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 characters
Alternativamente, puede comenzar con:
## 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=57363,OVERRIDE_USER=32700;function answersUrl(e){return"http://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"http://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>
a>=b>0
o su primer ejemplo sería inválido. ¿Y por qué tenemos que mostrar<
cuando quieres que sea<=
?x
, entoncesc
?Respuestas:
Pyth, 38 bytes
Toma entrada en este formato:
fuente
Matlab,
169153bytesEl puntaje puede ser + -1 dependiendo de los problemas no resueltos en los comentarios =)El puntaje permanece igual. Esta es solo una búsqueda de fuerza bruta para el mejor(a,b)
par.Bastante decepcionante: primero intenté experimentar con algunas cosas 'elegantes' y luego me di cuenta de que dos bucles anidados simples son mucho más cortos ...
Versión antigua:
fuente
m = 0
? Aún así, eso no te acercará a mi respuesta: -PPq=
de la definición de la funciónq
variable se use en ningún lado. Puede recortar un par de bytes simplemente haciendofunction f(c,x)
y quitando el punto y coma también.Mathematica,
79 9580 bytesEsto podría encajar en el margen.
Pruebas
fuente
CJam,
514643 bytesEste programa completo lee el poder, luego la base de STDIN.
Pruébelo en línea en el intérprete de CJam .
fuente
Matlab,
141140 bytesEsto se codifica como una función que muestra el resultado en stdout.
Ejemplo de uso:
O pruébelo en línea en Octave .
Gracias a @flawr por eliminar un byte.
fuente
sprintf
porque parecía muy complicado, ¡pero en realidad no lo es! Y me olvidé unabsxfun
vez más, así que esa es una solución muy elegante. En especial me gusta la forma en que abusó de la doble indexación / solo en el último argumento =) (usted podría quitar un espacio allí también)!disp
también uso , excepto en Code Golf :-Pfprintf
lugar desprintf
, no muestra "ans">>
en la misma línea, lo cual es un poco extrañofprintf
, pero tendría que insertar un retorno de carro manual.CJam,
5351 bytesPruébalo en línea
El formato de entrada es
x c
, que es el reverso del orden utilizado en los ejemplos.Explicación:
fuente
R, 139 caracteres
fuente
Python 2,
182161157 bytesNormalmente respondo en MATLAB, pero como ya hay dos soluciones en ese idioma, me imagino que probaría otro idioma :)
Código sin golf con explicaciones
Ejecuciones de ejemplo
Ejecuté esto en IPython:
Pruébalo en línea!
http://ideone.com/tMjGdh
Si desea ejecutar el código, haga clic en el enlace de edición cerca de la parte superior, luego modifique el parámetro STDIN con dos enteros separados por un espacio. El primer entero es
c
y el siguiente esx
. En este momento,c=3
yx=3
su resultado se muestra actualmente.fuente
Pyth,
535250 bytesPruébalo en línea.
Toma como entrada
c,x
dóndec
está el número objetivo yx
es la base.fuente
Pyth, 60 bytes
La entrada se da como c, k
Pruébalo en línea
fuente
C, 175 bytes
Para ajustar el código en el margen, inserté nuevas líneas y dividí un literal de cadena arriba: el código de golf que se contará / compilará es
La función
f
tomac
yx
como argumentos, y produce el resultado enstdout
.Explicación
Esta es una solución iterativa que zigzaguea la línea definida por
a^x + b^x = c^x
. Comenzamos cona=c
yb=1
. Obviamente, eso nos pone del lado equivocado de la línea, porquec^x + 1 > c^x
. Disminuimosa
hasta que cruzamos la línea. Cuando estamos debajo de la línea, incrementamosb
hasta que la cruzamos en la otra dirección. Repita hasta que seb
encuentrea
, recordando la mejor solución enA
yB
sobre la marcha. Luego imprímalo.p
es una implementación recursiva simple dea^x
(parax>0
) ya que C no proporciona ningún operador para la exponenciación.En pseudocódigo:
Limitaciones
c^x
debe ser representable dentro del rango deint
. Si esa limitación es demasiado restrictivo, la firma delp
podría ser modificado trivialmente along p(long,int)
odouble p(double,int)
, ym
yM
along
odouble
respectivamente, sin ninguna modificación af()
.Programa de prueba
Esto acepta
c
yx
como argumentos de línea de comandos, e imprime el resultado.fuente
Haskell, 120 bytes
Creo que he jugado golf tanto como puedo:
Sin golf:
Uso:
fuente
Haskell,
132128bytesEjemplo de uso:
7 # 3
devuelve la cadena"6^3 + 5^3 < 7^3"
.fuente
Perl 5, 119 bytes
Una subrutina:
Usar como por ejemplo:
fuente
Ruby, 125 bytes
Función anónima. Crea una lista de
a
valores, la usa para construira,b
pares, luego encuentra el máximo para los que se ajustan a los criterios y devuelve una cadena desde allí.fuente