Примерно в 1637 году Пьер де Ферма написал на полях своей копии «Арифметики»:
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.
К сожалению для нас, поле все еще слишком узкое, чтобы содержать доказательства. Сегодня мы собираемся написать на полях простую программу, которая подтверждает доказательство для произвольных входных данных.
Соревнование
Нам нужна программа для функции, которая наделена степенью, разделяет ее на две пары из двух степеней, максимально приближенных к степени. Мы хотим, чтобы программа, которая делает это, была как можно меньше, чтобы она могла вписываться в поля.
вход
Мощность и количество энергии: c
,x
Ограничения: c > 2
иx > 2
Ввод может быть через аргументы программы, аргументы функции или от пользователя.
Выход
Это точная строка: « a^x + b^x < c^x
» с a
, b
, c
и x
заменить их буквального целочисленных значений. a
и b
должны быть выбраны так, чтобы a^x + b^x < c^x
и никакие другие ценности a
или b
не приблизили бы их c^x
. Также:a>=b>0
Вывод может быть выполнен через возвращаемое значение функции, стандартный вывод, сохранен в файл или отображен на экране.
Примеры:
> 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
Из-за средних навыков письма Ферма непечатаемые символы не допускаются. Программа с наименьшим количеством символов выигрывает.
Leaderboards
Вот фрагмент стека, чтобы генерировать как регулярную таблицу лидеров, так и обзор победителей по языкам.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
## Language Name, N characters
Кроме того, вы можете начать с:
## Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш результат равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
## Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать название языка ссылкой, которая затем будет отображаться во фрагменте списка лидеров:
# [><>](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
или ваш первый пример будет неверным. И почему мы должны отображать,<
когда вы хотите, чтобы это было<=
?x
, потомc
?Ответы:
Pyth, 38 байт
Принимает участие в этом формате:
источник
Matlab,
169153 байтаОценка может быть + -1 в зависимости от нерешенных проблем в комментариях =)Оценка остается прежней. Это просто грубый поиск лучшей(a,b)
пары.Довольно разочаровывающе: я сначала попробовал поэкспериментировать с некоторыми «причудливыми» вещами, а потом понял, что два простых вложенных цикла for намного короче ...
Старая версия:
источник
m = 0
? Тем не менее, это не поможет вам приблизиться к моему ответу: -PPq=
из определения функцииq
нигде используемой переменной. Вы можете сбрить пару байтов, просто сделавfunction f(c,x)
и удалив точку с запятой.Mathematica,
79 9580 байтЭто может просто соответствовать краю.
тестирование
источник
CJam,
514643 байтаЭта полная программа считывает мощность, а затем базу от STDIN.
Попробуйте онлайн в интерпретаторе CJam .
источник
Matlab,
141140 байтЭто кодируется как функция, которая отображает результат в stdout.
Пример использования:
Или попробуйте это онлайн в Октаве .
Спасибо @flawr за удаление одного байта.
источник
sprintf
потому что это казалось таким сложным, хотя на самом деле это не так! И я забылbsxfun
еще раз, так что это очень элегантное решение. Мне особенно нравится, как вы злоупотребляли индексированием одинарного / двойного в последнем аргументе =) (Вы также можете удалить пробел там!)disp
тоже обычно пользуюсь , кроме как в Code Golf :-Pfprintf
вместо негоsprintf
, он не отображает «ans»>>
в той же строке, что немного странноfprintf
, но вам придется вставить ручной возврат каретки.CJam,
5351 байтПопробуйте онлайн
Формат ввода -
x c
это обратный порядок, используемый в примерах.Объяснение:
источник
R, 139 символов
источник
Python 2,
182161157 байтЯ обычно отвечаю в MATLAB, но поскольку на этом языке уже есть два решения, я решил бы попробовать другой язык :)
Разоблаченный код с пояснениями
Примеры запусков
Я запустил это в IPython:
Попробуйте онлайн!
http://ideone.com/tMjGdh
Если вы хотите запустить код, нажмите на ссылку редактирования в верхней части, затем измените параметр STDIN с двумя целыми числами, разделенными пробелом. Первое целое число
c
и следующееx
. Прямо сейчас,c=3
аx=3
и в данный момент отображается его результат.источник
Pyth,
535250 байтПопробуйте онлайн.
Принимает в качестве входных данных ,
c,x
гдеc
является целевым числом иx
является базой.источник
Pyth, 60 байт
Вход дан как c, k
Попробуйте онлайн
источник
C 175 байт
Чтобы поместить код в поле, я вставил новые строки и разделил строковый литерал выше - код для подсчета / компиляции
Функция
f
принимаетc
и вx
качестве аргументов, и выдает результат поstdout
.объяснение
Это итеративное решение, которое зигзагами определяет линию, определяемую
a^x + b^x = c^x
. Начнем сa=c
иb=1
. Очевидно, это ставит нас не на ту сторону линии, потому чтоc^x + 1 > c^x
. Мы уменьшаем,a
пока не пересечем черту. Когда мы ниже линии, мы увеличиваем,b
пока не пересечем ее в другом направлении. Повторите доb
встречиa
, помня лучшее решение вA
иB
по ходу дела. Тогда напечатайте это.p
простая рекурсивная реализацияa^x
(дляx>0
), так как C не предоставляет оператора для возведения в степень.В псевдокоде:
Ограничения
c^x
должно быть представимо в пределах диапазонаint
. Если это ограничение является слишком ограничительным, сигнатураp
может быть тривиально изменена наlong p(long,int)
илиdouble p(double,int)
, иm
иM
наlong
илиdouble
соответственно, без каких-либо измененийf()
.Тестовая программа
Это принимает
c
и вx
качестве аргументов командной строки, и печатает результат.источник
Haskell, 120 байт
Я думаю, что я играл в гольф столько, сколько я могу:
Ungolfed:
Использование:
источник
Haskell,
132128 байтовПример использования:
7 # 3
возвращает строку"6^3 + 5^3 < 7^3"
.источник
Perl 5, 119 байт
Подпрограмма:
Используйте как например:
источник
Рубин, 125 байт
Анонимная функция. Создает список
a
значений, использует его для построенияa,b
пар, затем находит максимум для тех, которые соответствуют критериям, и возвращает оттуда строку.источник