Sekitar tahun 1637, Pierre de Fermat menulis di tepi salinan Arithmetica-nya:
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.
Sayangnya bagi kami, margin masih terlalu sempit untuk memuat buktinya. Hari ini, kita akan menulis ke dalam margin sebuah program sederhana yang mengkonfirmasi bukti untuk input sewenang-wenang.
Tantangan
Kami menginginkan program untuk fungsi yang memberikan daya, pisahkan menjadi dua pasang dua kekuatan yang sedekat mungkin dengan kekuatan. Kami ingin program yang melakukan ini sekecil mungkin sehingga dapat masuk ke dalam margin.
Memasukkan
Kekuatan dan jumlah tenaga: c
,x
Kendala: c > 2
danx > 2
Input dapat melalui argumen program, argumen fungsi, atau dari pengguna.
Keluaran
String sebenarnya ini: " a^x + b^x < c^x
" dengan a
, b
, c
, dan x
diganti dengan nilai-nilai integer literal mereka. a
dan b
harus dipilih sehingga a^x + b^x < c^x
dan tidak ada nilai lain a
atau b
akan membuatnya lebih dekat c^x
. Juga:a>=b>0
Output dapat melalui nilai pengembalian fungsi, stdout, disimpan ke file, atau ditampilkan di layar.
Contoh:
> 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
Karena kemampuan menulis rata-rata Fermat, karakter yang tidak patut tidak diizinkan. Program dengan jumlah karakter paling sedikit menang.
Papan peringkat
Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
## Language Name, N characters
Atau, Anda dapat mulai dengan:
## Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:
## Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:
# [><>](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
atau contoh pertama Anda tidak valid. Dan mengapa kita harus ditampilkan<
ketika Anda menginginkannya<=
?x
, laluc
?Jawaban:
Pyth, 38 byte
Mengambil input dalam format ini:
sumber
Matlab,
169153 byteSkor bisa + -1 tergantung pada masalah yang tidak terpecahkan di komentar =)Skor tetap sama. Ini hanya pencarian bruteforce untuk(a,b)
pasangan terbaik .Cukup mengecewakan: Saya pertama kali mencoba bereksperimen dengan beberapa hal 'mewah' dan kemudian menyadari dua bersarang sederhana untuk loop jauh lebih pendek ...
Versi lama:
sumber
m = 0
? Namun, itu tidak akan membuat Anda dekat dengan jawaban saya: -PPq=
dari definisi fungsiq
variabel yang digunakan di mana pun. Anda dapat mencukur beberapa byte hanya dengan melakukanfunction f(c,x)
dan menghapus titik koma juga.Mathematica,
79 9580 byteIni mungkin cocok dengan margin.
Pengujian
sumber
CJam,
514643 byteProgram lengkap ini membaca daya, lalu basis dari STDIN.
Cobalah online di juru bahasa CJam .
sumber
Matlab,
141140 byteIni dikodekan sebagai fungsi yang menampilkan hasilnya di stdout.
Contoh penggunaan:
Atau coba online di Octave .
Terima kasih kepada @ flawr karena menghapus satu byte.
sumber
sprintf
karena sepertinya sangat rumit padahal sebenarnya tidak! Dan saya lupabsxfun
sekali lagi, jadi itu solusi yang sangat elegan. Saya terutama menyukai cara Anda menyalahgunakan pengindeksan tunggal / ganda dalam argumen terakhir =) (Anda juga dapat menghapus ruang di sana!)disp
juga, kecuali dalam Code Golf :-Pfprintf
alih-alihsprintf
, itu tidak menampilkan "ans">>
di baris yang sama, yang agak anehfprintf
, tetapi Anda harus memasukkan carriage return manual.CJam,
5351 byteCobalah online
Format input adalah
x c
, yang merupakan kebalikan dari urutan yang digunakan dalam contoh.Penjelasan:
sumber
R, 139 karakter
sumber
Python 2,
182161157 byteSaya biasanya menjawab dalam MATLAB, tetapi karena sudah ada dua solusi dalam bahasa itu, saya pikir saya akan mencoba bahasa lain :)
Kode tidak dikunci dengan penjelasan
Contoh Berjalan
Saya menjalankan ini di IPython:
Cobalah online!
http://ideone.com/tMjGdh
Jika Anda ingin menjalankan kode, klik tautan edit di dekat bagian atas, lalu ubah parameter STDIN dengan dua bilangan bulat yang dipisahkan oleh spasi. Bilangan bulat pertama adalah
c
dan yang berikutnya adalahx
. Saat ini,c=3
danx=3
hasilnya ditampilkan saat ini.sumber
Pyth,
535250 byteCobalah online.
Dibawa sebagai input di
c,x
manac
nomor target danx
basis.sumber
Pyth, 60 byte
Input diberikan sebagai c, k
Cobalah secara Online
sumber
C, 175 byte
Untuk memasukkan kode ke margin, saya telah memasukkan baris baru dan membagi string literal di atas - kode golf yang akan dihitung / dikompilasi adalah
Fungsi
f
mengambilc
danx
sebagai argumen, dan menghasilkan hasilnyastdout
.Penjelasan
Ini adalah solusi berulang yang zig-zag pada baris yang didefinisikan oleh
a^x + b^x = c^x
. Kita mulai dengana=c
danb=1
. Jelas, itu menempatkan kita di sisi yang salah dari garis itu, karenac^x + 1 > c^x
. Kami mengurangia
sampai kami melewati batas. Ketika kita berada di bawah garis, kita menambahb
sampai kita melewatinya ke arah lain. Ulangi sampaib
bertemua
, mengingat solusi terbaik diA
danB
saat kita pergi. Kemudian cetak.p
adalah implementasi rekursif sederhana daria^x
(untukx>0
) karena C tidak memberikan operator untuk eksponensial.Dalam pseudo-code:
Keterbatasan
c^x
harus dapat diwakili dalam kisaranint
. Jika batasan itu terlalu ketat, tanda tangan darip
dapat secara sepele dimodifikasi menjadilong p(long,int)
ataudouble p(double,int)
, danm
danM
untuk masinglong
-double
masing, tanpa modifikasi apa pun untukf()
.Program uji
Ini menerima
c
danx
sebagai argumen baris perintah, dan mencetak hasilnya.sumber
Haskell, 120 byte
Saya pikir saya telah bermain golf ini sebanyak yang saya bisa:
Tidak Disatukan:
Pemakaian:
sumber
Haskell,
132128 byteContoh penggunaan:
7 # 3
mengembalikan string"6^3 + 5^3 < 7^3"
.sumber
Perl 5, 119 byte
Subrutin:
Gunakan sebagai contoh:
sumber
Ruby, 125 byte
Fungsi anonim. Buat daftar
a
nilai, gunakan untuk membuata,b
pasangan, lalu temukan maks untuk yang cocok dengan kriteria dan kembalikan string dari sana.sumber