Autour de l'année 1637, Pierre de Fermat écrit en marge de sa copie de l'Arithmétique:
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.
Malheureusement pour nous, la marge est encore trop étroite pour contenir la preuve. Aujourd'hui, nous allons écrire dans les marges un programme simple qui confirme la preuve des entrées arbitraires.
Le défi
Nous voulons un programme pour une fonction qui, étant donné une puissance, la sépare en deux paires de deux puissances aussi proches que possible de la puissance. Nous voulons que le programme qui le fait soit aussi petit que possible afin qu'il puisse s'insérer dans les marges.
Contribution
La puissance et le nombre de puissance: c
,x
Contraintes: c > 2
etx > 2
L'entrée peut se faire par le biais d'arguments de programme, d'arguments de fonction ou de l'utilisateur.
Sortie
Cette chaîne exacte: « a^x + b^x < c^x
» avec a
, b
, c
et x
remplacé par leurs valeurs entières littérales. a
et b
doit être choisi de telle sorte que a^x + b^x < c^x
et aucune autre valeur de a
ou b
ne le rendrait plus proche c^x
. Également:a>=b>0
La sortie peut se faire via la valeur de retour de la fonction, stdout, enregistrée dans un fichier ou affichée à l'écran.
Exemples:
> 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
En raison des compétences d'écriture moyennes de Fermat, les caractères non imprimables ne sont pas autorisés. Le programme avec le moins de caractères gagne.
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 s'affiche, veuillez commencer votre réponse avec un titre, en utilisant le modèle Markdown suivant:
## Language Name, N characters
Alternativement, vous pouvez commencer par:
## 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 barrant. 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=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
sinon votre premier exemple serait invalide. Et pourquoi devons-nous afficher<
quand vous le souhaitez<=
?x
, alorsc
?Réponses:
Pyth, 38 octets
Prend entrée dans ce format:
la source
Matlab,
169153 octetsLe score peut être + -1 en fonction des problèmes non résolus dans les commentaires =)Le score reste le même. Ceci est juste une recherche bruteforce pour la meilleure(a,b)
paire.Assez décevant: j'ai d'abord essayé des choses `` fantaisistes '', puis j'ai réalisé que deux boucles imbriquées simples étaient bien plus courtes ...
Ancienne version:
la source
m = 0
? Pourtant, cela ne vous rapprochera pas de ma réponse: -PPq=
de la définition de la fonctionq
variable utilisée nulle part. Vous pouvez raser quelques octets en faisant simplementfunction f(c,x)
et en supprimant également le point-virgule.Mathematica,
79 9580 octetsCela pourrait bien tenir sur la marge.
Essai
la source
CJam,
514643 octetsCe programme complet lit la puissance, puis la base de STDIN.
Essayez-le en ligne dans l' interpréteur CJam .
la source
Matlab,
141140 octetsCeci est codé comme une fonction qui affiche le résultat dans stdout.
Exemple d'utilisation:
Ou essayez-le en ligne dans Octave .
Merci à @flawr d'avoir supprimé un octet.
la source
sprintf
parce que ça semblait si compliqué alors qu'en réalité ça ne l'est vraiment pas! Et j'ai oublié unebsxfun
fois de plus, c'est donc une solution très élégante. J'aime particulièrement la façon dont vous avez abusé de l'indexation simple / double dans le dernier argument =) (Vous pouvez aussi y supprimer un espace!)disp
aussi, sauf dans Code Golf :-Pfprintf
place desprintf
, il n'affiche pas "ans">>
dans la même ligne, ce qui est un peu étrangefprintf
, mais vous devez insérer un retour chariot manuel.CJam,
5351 octetsEssayez-le en ligne
Le format d'entrée est
x c
, qui est l'inverse de l'ordre utilisé dans les exemples.Explication:
la source
R, 139 caractères
la source
Python 2,
182161 161157 octetsJe réponds habituellement dans MATLAB, mais comme il y a déjà deux solutions dans cette langue, je pense que j'essaierais une autre langue :)
Code non golfé avec explications
Exemples d'exécutions
J'ai exécuté ceci dans IPython:
Essayez-le en ligne!
http://ideone.com/tMjGdh
Si vous souhaitez exécuter le code, cliquez sur le lien d' édition en haut, puis modifiez le paramètre STDIN avec deux entiers séparés par un espace. Le premier entier est
c
et le suivant estx
. En ce moment,c=3
etx=3
son résultat est actuellement affiché.la source
Pyth,
535250 octetsEssayez-le en ligne.
Prend en entrée
c,x
oùc
est le nombre cible etx
est la base.la source
Pyth, 60 octets
L'entrée est donnée comme c, k
Essayez-le en ligne
la source
C, 175 octets
Pour ajuster le code dans la marge, j'ai inséré des sauts de ligne et divisé un littéral de chaîne ci-dessus - le code golfé à compter / compiler est
La fonction
f
prendc
etx
comme arguments, et produit le résultat surstdout
.Explication
Il s'agit d'une solution itérative qui zigzague la ligne définie par
a^x + b^x = c^x
. Nous commençons para=c
etb=1
. De toute évidence, cela nous place du mauvais côté de la ligne, carc^x + 1 > c^x
. Nous décrémentonsa
jusqu'à franchir la ligne. Lorsque nous sommes en dessous de la ligne, nous augmentonsb
jusqu'à ce que nous la traversions dans l'autre sens. Répétez jusqu'à ce que vous vousb
réunissieza
, en vous souvenant de la meilleure solutionA
B
fur et à mesure. Imprimez-le ensuite.p
est une implémentation récursive simple dea^x
(pourx>0
) car C ne fournit aucun opérateur pour l'exponentiation.En pseudo-code:
Limites
c^x
doit être représentable dans la plage deint
. Si cette limitation est trop restrictive, la signature dep
pourrait être trivialement modifiée enlong p(long,int)
oudouble p(double,int)
, etm
etM
enlong
oudouble
respectivement, sans aucune modification def()
.Programme de test
Cela accepte
c
etx
comme arguments de ligne de commande et imprime le résultat.la source
Haskell, 120 octets
Je pense que je l'ai joué autant que possible:
Non golfé:
Usage:
la source
Haskell,
132128 octetsExemple d'utilisation:
7 # 3
renvoie la chaîne"6^3 + 5^3 < 7^3"
.la source
Perl 5, 119 octets
Un sous-programme:
Utilisez par exemple:
la source
Rubis, 125 octets
Fonction anonyme. Construit une liste de
a
valeurs, l'utilise pour construire desa,b
paires, puis trouve le maximum pour celles qui correspondent aux critères et renvoie une chaîne à partir de là.la source