Około roku 1637 Pierre de Fermat napisał na marginesie swojej kopii Arytmetyki:
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.
Niestety dla nas margines jest wciąż zbyt wąski, aby pomieścić dowód. Dzisiaj zamierzamy napisać na marginesie prosty program, który potwierdza dowód na arbitralne dane wejściowe.
Wyzwanie
Chcemy programu dla funkcji, który ma moc, dzieli ją na dwie pary dwóch mocy, które są jak najbliżej mocy. Chcemy, aby program, który to robi, był tak mały, jak to możliwe, aby pasował do marginesów.
Wkład
Moc i numer silnika: c
,x
Ograniczenia: c > 2
ix > 2
Dane wejściowe mogą odbywać się za pomocą argumentów programu, argumentów funkcji lub od użytkownika.
Wydajność
Ten dokładny ciąg: „ a^x + b^x < c^x
” o a
, b
, c
, i x
zastąpiono ich dosłownych wartości całkowitych. a
i b
muszą być tak dobrane, aby a^x + b^x < c^x
żadne inne wartości a
lub b
nie zbliżyłyby się do nich c^x
. Również:a>=b>0
Dane wyjściowe mogą być przekazywane przez funkcję zwracaną wartość, standardowe wyjście, zapisywane do pliku lub wyświetlane na ekranie.
Przykłady:
> 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
Ze względu na średnie umiejętności pisania Fermata, znaki niedrukowalne nie są dozwolone. Program z najmniejszą liczbą znaków wygrywa.
Liderów
Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
## Language Name, N characters
Alternatywnie możesz zacząć od:
## Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
## Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:
# [><>](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
lub twój pierwszy przykład byłby nieważny. I dlaczego musimy wyświetlać,<
kiedy chcesz<=
?x
, toc
?Odpowiedzi:
Pyth, 38 bajtów
Pobiera dane wejściowe w tym formacie:
źródło
Matlab,
169153 bajtówWynik może wynosić + -1 w zależności od nierozwiązanych problemów w komentarzach =)Wynik pozostaje taki sam. To tylko brutalne poszukiwanie najlepszej(a,b)
pary.Całkiem rozczarowujące: najpierw próbowałem eksperymentować z niektórymi „fantazyjnymi” rzeczami, a potem zdałem sobie sprawę, że dwa proste zagnieżdżone dla pętli są znacznie krótsze ...
Stara wersja:
źródło
m = 0
? Jednak to nie zbliży cię do mojej odpowiedzi: -PPq=
z definicji funkcjiq
Nigdzie nie widzę tej zmiennej. Możesz ogolić kilka bajtów, wykonującfunction f(c,x)
i usuwając również średnik.Mathematica,
79 9580 bajtówTo może pasować na margines.
Testowanie
źródło
CJam,
514643 bajtówTen pełny program odczytuje moc, a następnie bazę ze STDIN.
Wypróbuj online w interpretatorze CJam .
źródło
Matlab,
141140 bajtówJest to zakodowane jako funkcja wyświetlająca wynik w stdout.
Przykładowe zastosowanie:
Lub wypróbuj online w Octave .
Dzięki @flawr za usunięcie jednego bajtu.
źródło
sprintf
ponieważ wydawało się to tak skomplikowane, a tak naprawdę nie jest! Ibsxfun
znowu zapomniałem , więc to bardzo eleganckie rozwiązanie. Szczególnie podoba mi się sposób, w jaki nadużywałeś indeksowania pojedynczego / podwójnego w ostatnim argumencie =) (Możesz też usunąć spację!)disp
też używam , z wyjątkiem Code Golf :-Pfprintf
zamiastsprintf
, to nie wyświetli „ans”>>
w tym samym wierszu, co jest nieco dziwnefprintf
, ale musisz wstawić ręczny powrót karetki.CJam,
5351 bajtówWypróbuj online
Format wejściowy to
x c
odwrotność kolejności użytej w przykładach.Wyjaśnienie:
źródło
R, 139 znaków
źródło
Python 2,
182161157 bajtówZwykle odpowiadam w MATLAB, ale ponieważ istnieją już dwa rozwiązania w tym języku, pomyślałbym, że spróbuję innego języka :)
Nieskluczony kod z objaśnieniami
Przykład działa
Uruchomiłem to w IPython:
Wypróbuj online!
http://ideone.com/tMjGdh
Jeśli chcesz uruchomić kod, kliknij link edytuj u góry, a następnie zmodyfikuj parametr STDIN za pomocą dwóch liczb całkowitych oddzielonych spacją. Pierwszą liczbą całkowitą jest,
c
a następną jestx
. W tej chwili,c=3
ax=3
jego wynik jest obecnie wyświetlany.źródło
Pyth,
535250 bajtówWypróbuj online.
Bierze jako dane wejściowe
c,x
gdziec
jest liczbą docelową ix
jest bazą.źródło
Pyth, 60 bajtów
Dane wejściowe podano jako c, k
Wypróbuj online
źródło
C, 175 bajtów
Aby dopasować kod do marginesu, wstawiłem znaki nowej linii i podzieliłem literał ciągu powyżej - kod do gry w golfa, który należy policzyć / skompilować, to
Funkcja
f
trwac
ix
jako argumenty i tworzy wynik nastdout
.Wyjaśnienie
Jest to iteracyjne rozwiązanie, które zygzakuje linię zdefiniowaną przez
a^x + b^x = c^x
. Zaczynamy oda=c
ib=1
. Oczywiście stawia nas to po złej stronie linii, ponieważc^x + 1 > c^x
. Zmniejszamy się,a
dopóki nie przekroczymy linii. Kiedy znajdujemy się poniżej linii, zwiększamy,b
dopóki nie przekroczymy jej w innym kierunku. Powtarzaj, ażb
spotykaa
, pamiętając najlepsze rozwiązanie wA
aB
jak idziemy. Następnie wydrukuj.p
jest prostą rekurencyjną implementacjąa^x
(forx>0
), ponieważ C nie zapewnia operatora potęgowania.W pseudokodzie:
Ograniczenia
c^x
muszą być reprezentowalne w zakresieint
. Jeśli to ograniczenie jest zbyt wąska, podpisp
może być trywialny zmodyfikowanylong p(long,int)
idouble p(double,int)
im
iM
nalong
lubdouble
odpowiednio, bez modyfikacjif()
.Program testowy
To akceptuje
c
ix
jako argumenty wiersza polecenia, a następnie drukuje wynik.źródło
Haskell, 120 bajtów
Myślę, że grałem w golfa tak bardzo, jak potrafię:
Nie golfowany:
Stosowanie:
źródło
Haskell,
132128 bajtówPrzykład użycia:
7 # 3
zwraca ciąg"6^3 + 5^3 < 7^3"
.źródło
Perl 5, 119 bajtów
Podprogram:
Użyj jako np .:
źródło
Rubin, 125 bajtów
Funkcja anonimowa. Tworzy listę
a
wartości, używa jej do konstruowaniaa,b
par, a następnie znajduje maksimum dla tych, które pasują do kryteriów, i zwraca stamtąd ciąg.źródło