var QUESTION_ID=80608,OVERRIDE_USER=49561;function answersUrl(e){return"https://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"https://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>
Odpowiedzi:
Galaretka ,
2220 bajtówWypróbuj online!
Jak to działa
źródło
Julia,
5248 bajtówWypróbuj online!
tło
W funkcji ślub Hofstadtera jest , że pokazy autorem
gdzie φ oznacza złoty podział ,
a F n oznacza n- tą liczbę Fibonacciego .
Co więcej, w Zaawansowanych problemach i rozwiązaniach H-187: Fibonacci jest kwadratem , o czym mówi wnioskodawca
gdzie L n oznacza n- tą liczbę Lucasa i odwrotnie - jeśli
następnie n jest liczbą Fibonacciego, a m jest liczbą Lucasa.
Z tego wywnioskujemy
ilekroć n> 0 .
Jak to działa
Biorąc pod uwagę wejście x , konstruujemy macierz 2 na x , gdzie | to dodawanie w pierwszej kolumnie i odejmowanie w drugiej, a n przechodzi przez liczby całkowite od 1 do x w wierszach.
Pierwszy składnik zarówno F (n - 1), jak i M (n - 1) jest po prostu
n÷φ
.Obliczamy δ (n) i ε (n) , obliczając 5n² | 4 i testowanie, czy wynik należy do układu kwadratów liczb całkowitych od 2 do 3n . Sprawdza to zarówno kwadratowość, jak i ponieważ 1 nie jest w zakresie, dla n> 1, jeśli | jest odejmowanie.
Na koniec dodajemy lub odejmujemy wartość logiczną wynikającą z
5n^2|4∈(2:3n).^2
do lub z poprzednio obliczonej liczby całkowitej.źródło
Python 2,
7970 bajtówIteracyjny, a nie rekurencyjny, bo dlaczego nie. Pierwszy wiersz ma spację końcową - jeśli nie jest to w porządku, można go ustawić na dodatkowy bajt. -9 bajtów dzięki @Dennis.
Oto kilka połączonych lambdas, które tak naprawdę nie pomogły:
Zarówno przyjmują, jak
n
i parametrk
0 lub 1, określając mężczyznę / kobietę. Pierwsza lambda zwraca n-ty element, a druga lambda zwraca pierwsze n elementów (z wykładniczym środowiskiem uruchomieniowym).źródło
MATL , 23 bajty
Wypróbuj online!
Wyjaśnienie
To działa iteracyjnie. Każda sekwencja jest przechowywana w tablicy. Dla każdego indeksu n obliczany jest nowy termin każdej sekwencji i dołączany do odpowiedniej tablicy.
for
Pętli z N -1 terminów jest używany, w której N jest liczbą wejściowych.Najpierw należy wykonać aktualizację sekwencji M. Wynika to z faktu, że sekwencja F jest zawsze większa lub równa sekwencji M dla tego samego indeksu, więc jeśli spróbujemy najpierw zaktualizować F, potrzebujemy terminu M jeszcze nie obliczonego.
Dwa równania aktualizacji są takie same, zamieniając F i M. Tak więc kod aktualizacji jest ponownie wykorzystywany przez zastosowanie
for
pętli z dwiema iteracjami i zamianę sekwencji na stosie.źródło
J, 47 bajtów
Używa definicji rekurencyjnej. Pierwsze dwie linie zawierające czasowniki
f
im
które reprezentują funkcje płci męskiej i żeńskiej, odpowiednio. Ostatni wiersz jest czasownikiem, który przyjmuje pojedynczy argumentn
i wypisuje pierwszen
wyrażenia sekwencji żeńskiej i męskiej.Stosowanie
źródło
JavaScript (ES6), 75 bajtów
Mógłbym zapisać 2 bajty, jeśli pozwolono mi najpierw zwrócić sekwencję Male:
źródło
Haskell, 57 bajtów
Przykład użycia:
(<$>[v,w]).take $ 5
->[[1,1,2,2,3],[0,0,1,2,2]]
Funkcja pomocnika
#
tworzy nieskończoną listę z wartością początkowąs
i listąl
do wyszukiwania wszystkich dalszych elementów (na indeksie poprzedniej wartości).v = w#1
jestw = v#0
sekwencją żeńską i męską. W głównej funkcji bierzemy pierwszen
elementy zarównov
iw
.źródło
Python 2, 107 bajtów
Wypróbuj online
Większe wartości wejściowe powodują błąd RuntimeError (zbyt duża rekurencja). Jeśli jest to problem, mogę napisać wersję, w której błąd nie występuje.
źródło
Julia, 54 bajty
Wypróbuj online!
źródło
Pyth, 24 bajty
Prawdopodobnie nie można użyć tej funkcji
reduce
do zmniejszenia liczby bajtów.Prosta implementacja.
Wypróbuj online!
Jak to działa
źródło
Brachylog , 65 bajtów
Moja próba połączenia obu predykatów dla mężczyzn i kobiet w jeden faktycznie wydłużyła kod.
Możesz użyć następującego linera, który ma taką samą liczbę bajtów:
Uwaga : Działa to z transpilatorem Prolog, a nie ze starym Java.
Wyjaśnienie
Główny predykat:
Predicate 2 (kobieta):
Predicate 3 (mężczyzna):
źródło
{:1-:0re.}
używany do tworzenia listy zakresów.Clojure,
132131 bajtówPo prostu buduje sekwencje iteracyjnie od zera do n.
Wersja bez golfa
źródło
Pyth, 23 bajty
Wypróbuj online: demonstracja
Wyjaśnienie:
Alternatywne rozwiązanie, które wykorzystuje funkcję zamiast zmniejszania (także 23 bajty):
źródło
Rubin,
104929782 bajtówEdycja:
f
im
są teraz jedną funkcją dzięki HopefullyHelpful .f
Następnie zmieniłem drugą funkcję, aby wydrukowaćm
. Biała spacja pop
jest znacząca, ponieważ w przeciwnym razie funkcja wypisuje(0...n)
zamiast wynikumap
.Trzecia funkcja wypisuje najpierw tablicę pierwszych n terminów
f
, a następnie tablicę pierwszych n terminówm
Funkcje te nazywane są następująco:
źródło
n
ii
n>0?n-f(f(n-1,i),-i):i>0?1:0
f
im
, muszę go wydrukować. W przeciwnym razie otrzymam tablicę typu[[1, 1, 2, 2, 3, 3, 4, 5, 5, 6], [0, 0, 1, 2, 2, 3, 4, 4, 5, 6]]
APL (Dyalog Unicode) ,
4525 bajtówAnonimowa ukryta funkcja. Wymaga
⎕IO←0
, co jest standardem w wielu systemach APL.Wypróbuj online!
Działa to poprzez połączenie F i M w pojedynczą funkcję dyadyczną z logicznym lewym argumentem, który wybiera funkcję do zastosowania. Używamy 1 dla F i 0 dla M , abyśmy mogli użyć tego selektora jako wartości zwracanej dla F (0) i M (0). Następnie obserwujemy, że obie funkcje muszą najpierw wywołać się same (w argumencie minus jeden), a następnie druga funkcja w wyniku tego, więc najpierw ponawiamy z danym selektorem, a następnie z logicznie negowanym selektorem.
⍳
d ndices; od zera do argumentu minus jeden1 0∘.{
…}
Zewnętrzny (kartezjański) „produkt” (ale z poniższą funkcją zamiast mnożenia) wykorzystujący[1,0]
jako lewy argument (⍺
) i indeksy jako prawy argument (⍵
):×⍵
jeśli właściwy argument jest ściśle pozytywny (oznacza znak właściwego argumentu):⍵-1
odejmij jeden z właściwego argumentu⍺∇
nazywaj siebie z prawym argumentem, a lewym argumentem jako lewym argumentem(~⍺)∇
nazywaj siebie tym jako prawym arg, a logiczną negacją lewego arg jako lewym arg⍵-
odejmij to od właściwego argumentu i zwróć wynik⋄
jeszcze:⍺
zwraca lewy argumentźródło
n
) + plus nowa liniaES6,
898583 bajtów2 bajty zapisane dzięki @ Bálint
Wdrażanie naiwne.
Wyjaśnienie:
źródło
&&
zewrzeć, co jest pożądane, ale i tak go usunąłem, ponieważ składnia nawiasów jest tak samo krótkaMathematica,
6962 bajtówDziękujemy Sp3000 za zaproponowanie funkcjonalnej formy, która pozwoliła zaoszczędzić 14 bajtów.
Definiuje nazwaną funkcję pomocnika,
f
a następnie przekształca się w funkcję bez nazwy, która rozwiązuje rzeczywiste zadanie drukowania obu sekwencji.źródło
Perl 5.10,
8580 bajtówMeh, nie wiem, jeśli mam więcej pomysłów na golfa ...
Wypróbuj online!
Musiałem dodać
use 5.10.0
Ideone, aby zaakceptowałsay
funkcję, ale nie liczy się ona do liczby bajtów.Jest to naiwna implementacja algorytmu,
@a
będąca listą „żeńską” i@b
„męską”.Przekreślone 85 to wciąż 85?
źródło
push
semestru ani ostatniego średnika przed wąskim nawiasiem klamrowym.Java, łącznie 169 bajtów
F (), M () 56 bajtów
recursive-for-loop i drukowanie 77 bajtów
wyprowadzanie list w dwóch różnych wierszach 37 bajtów
wejście: p (
10
)wyjście:
źródło
C, 166 bajtów
Stosowanie:
Wynik:
Ungolfed (331 bajtów)
źródło
8 , 195 bajtów
Kod
Stosowanie
Wyjaśnienie
Ten kod używa słowa rekurencyjnego i odroczonego
defer: M
- SłowoM
zostanie zadeklarowane jako zdefiniowane później. To jest odroczone słowo: F dup not if 1 nip else dup n:1- recurse M n:- then ;
- ZdefiniujF
rekurencyjnie, aby wygenerować liczby żeńskie zgodnie z definicją. Pamiętaj, żeM
nie został jeszcze zdefiniowany( dup not if 0 nip else dup n:1- recurse F n:- then ) is M
- ZdefiniujM
rekurencyjnie, aby wygenerować liczby męskie według definicji: FM n:1- dup ( F . space ) 0 rot loop cr ( M . space ) 0 rot loop cr ;
- Słowo używane do drukowania sekwencji liczb żeńskich i męskichźródło