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>
Jawaban:
Jelly ,
2220 byteCobalah online!
Bagaimana itu bekerja
sumber
Julia,
5248 byteCobalah online!
Latar Belakang
Dalam fungsi menikah On Hofstadter , penulis menunjukkan hal itu
di mana φ menunjukkan rasio emas ,
dan F n menunjukkan n th nomor Fibonacci .
Selanjutnya, dalam Masalah dan Solusi Lanjut, H-187: Fibonacci adalah kuadrat , pengusul menunjukkan itu
di mana L n menunjukkan nomor Lucas ke- n , dan itu - sebaliknya - jika
maka n adalah angka Fibonacci dan m adalah angka Lucas.
Dari ini, kami menyimpulkan itu
setiap kali n> 0 .
Bagaimana itu bekerja
Diberikan input x , kita membangun 2 dengan x matriks, di mana | adalah penambahan pada kolom pertama dan pengurangan di kolom kedua, dan n iterasi atas bilangan bulat antara 1 dan x dalam baris.
Istilah pertama dari F (n - 1) dan M (n - 1) adalah sederhana
n÷φ
.Kami menghitung δ (n) dan ε (n) dengan menghitung 5n² | 4 dan menguji apakah hasilnya milik array kuadrat dari bilangan bulat antara 2 dan 3n . Ini menguji baik untuk kuadrat dan, karena 1 tidak dalam kisaran, untuk n> 1 jika | adalah pengurangan.
Akhirnya kami menambah atau mengurangi Boolean yang dihasilkan dari
5n^2|4∈(2:3n).^2
atau dari bilangan bulat yang dihitung sebelumnya.sumber
Python 2,
7970 byteBerulang daripada rekursif, karena mengapa tidak. Baris pertama memiliki ruang trailing - jika tidak apa-apa itu bisa diperbaiki untuk byte tambahan. -9 byte terima kasih kepada @Dennis.
Berikut adalah beberapa lambda gabungan yang tidak terlalu membantu:
Keduanya mengambil
n
dan parameterk
baik 0 atau 1, menentukan pria / wanita. Lambda pertama mengembalikan elemen n, dan lambda kedua mengembalikan elemen n pertama (dengan runtime eksponensial).sumber
MATL , 23 byte
Cobalah online!
Penjelasan
Ini berfungsi berulang. Setiap urutan disimpan dalam array. Untuk setiap indeks n istilah baru dari setiap urutan dihitung dan dilampirkan ke array yang sesuai. Sebuah
for
loop dengan istilah N −1 digunakan, di mana N adalah nomor input.Pembaruan untuk urutan M perlu dilakukan terlebih dahulu. Ini karena urutan F selalu lebih besar dari atau sama dengan urutan M untuk indeks yang sama, jadi jika kita mencoba untuk memperbarui F pertama kita akan memerlukan istilah M belum dihitung.
Dua persamaan pembaruan adalah pertukaran F dan M. yang sama. Dengan demikian, kode untuk pembaruan digunakan kembali dengan menerapkan
for
loop dengan dua iterasi dan menukar urutan dalam tumpukan.sumber
J, 47 byte
Menggunakan definisi rekursif. Dua baris pertama mendefinisikan kata kerja
f
danm
yang masing-masing mewakili fungsi wanita dan pria. Baris terakhir adalah kata kerja yang mengambil argumen tunggaln
dan menampilkann
istilah pertama dari urutan perempuan dan laki-laki.Pemakaian
sumber
JavaScript (ES6), 75 byte
Saya dapat menyimpan 2 byte jika saya diizinkan untuk mengembalikan urutan Male terlebih dahulu:
sumber
Haskell, 57 byte
Contoh penggunaan:
(<$>[v,w]).take $ 5
->[[1,1,2,2,3],[0,0,1,2,2]]
Fungsi helper
#
membangun daftar tak terbatas dengan nilai awals
dan daftarl
untuk mencari semua elemen lebih lanjut (pada indeks dari nilai sebelumnya).v = w#1
adalah urutan perempuan danw = v#0
laki-laki. Dalam fungsi utama kita mengambiln
elemen pertama dari keduanyav
danw
.sumber
Python 2, 107 byte
Cobalah online
Nilai input yang lebih besar menyebabkan RuntimeError (terlalu banyak rekursi). Jika ini masalah, saya bisa menulis versi di mana kesalahan tidak terjadi.
sumber
Julia, 54 byte
Cobalah online!
sumber
Pyth, 24 byte
Mungkin tidak mungkin digunakan
reduce
untuk mengurangi byte-count.Implementasi langsung.
Cobalah online!
Bagaimana itu bekerja
sumber
Brachylog , 65 byte
Upaya saya untuk menggabungkan kedua predikat untuk pria dan wanita menjadi satu sebenarnya membuat kode lebih lama.
Anda bisa menggunakan liner berikut yang memiliki jumlah byte yang sama:
Catatan : Ini berfungsi dengan transpiler Prolog, bukan yang lama di Jawa.
Penjelasan
Predikat utama:
Predikat 2 (perempuan):
Predikat 3 (pria):
sumber
{:1-:0re.}
, digunakan untuk membuat daftar rentang.Clojure,
132131 byteCukup susun urutan iteratif dari nol ke n.
Versi tidak disatukan
sumber
Pyth, 23 byte
Cobalah online: Demonstrasi
Penjelasan:
Solusi alternatif yang menggunakan fungsi alih-alih mengurangi (juga 23 byte):
sumber
Ruby,
104929782 byteEdit:
f
danm
sekarang satu fungsi berkat HopefullyHelpful . Saya mengubah fungsi kedua untuk mencetakf
kemudianm
. Spasi setelahp
adalah signifikan, karena jika tidak fungsi mencetak(0...n)
bukan hasilmap
.Fungsi ketiga mencetak array pertama dari istilah n pertama
f
, diikuti oleh array dari syarat n pertamam
Fungsi-fungsi ini disebut seperti ini:
sumber
n
dani
n>0?n-f(f(n-1,i),-i):i>0?1:0
f
danm
, saya perlu mencetaknya. Kalau tidak, saya hanya mendapatkan array seperti[[1, 1, 2, 2, 3, 3, 4, 5, 5, 6], [0, 0, 1, 2, 2, 3, 4, 4, 5, 6]]
APL (Dyalog Unicode) ,
4525 byteFungsi diam-diam anonim. Membutuhkan
⎕IO←0
, yang merupakan standar pada banyak sistem APL.Cobalah online!
Ini bekerja dengan menggabungkan F dan M menjadi fungsi diad tunggal dengan argumen kiri Boolean yang memilih fungsi untuk diterapkan. Kami menggunakan 1 untuk F dan 0 untuk M sehingga kami dapat menggunakan pemilih ini sebagai nilai balik untuk F (0) dan M (0). Kami kemudian mengamati bahwa kedua fungsi perlu menyebut diri mereka terlebih dahulu (pada argumen minus satu) dan kemudian fungsi lainnya pada hasil itu, jadi pertama kita kambuh dengan pemilih yang diberikan dan kemudian dengan pemilih yang dinegasikan secara logis.
⍳
ɩ ndices; argumen nol sampai minus satu1 0∘.{
...}
outer (Cartesian) "product" (tetapi dengan fungsi di bawah ini bukan perkalian) menggunakan[1,0]
argumen kiri (⍺
) dan indeks sebagai argumen kanan (⍵
):×⍵
jika argumen yang benar benar-benar positif (lit. tanda dari argumen yang benar):⍵-1
kurangi satu dari argumen yang benar⍺∇
menyebut diri dengan itu sebagai argumen kanan dan argumen kiri sebagai argumen kiri(~⍺)∇
menyebut diri dengan itu sebagai arg kanan dan negasi logis arg kiri sebagai arg kiri⍵-
kurangi itu dari argumen yang benar dan kembalikan hasilnya⋄
lain:⍺
kembalikan argumen kirisumber
n
) + ditambah baris baru.ES6,
898583 byte2 byte disimpan berkat @ Bálint
Implementasi yang naif.
Penjelasan:
sumber
&&
sirkuit pendek, yang diinginkan, tapi saya tetap menghapusnya karena sintaks brace sama pendeknyaMathematica,
6962 byteTerima kasih kepada Sp3000 karena menyarankan bentuk fungsional yang menghemat 14 byte.
Ini mendefinisikan fungsi pembantu bernama
f
dan kemudian mengevaluasi ke fungsi yang tidak disebutkan namanya yang menyelesaikan tugas sebenarnya dari mencetak kedua urutan.sumber
Perl 5.10,
8580 byteMeh, tidak tahu jika saya memiliki lebih banyak ide untuk bermain golf ini ...
Cobalah online!
Saya harus menambahkan
use 5.10.0
Ideone agar dapat menerimasay
fungsi, tetapi tidak dihitung terhadap jumlah byte.Ini adalah implementasi algoritma yang naif,
@a
menjadi daftar "wanita" dan daftar@b
"pria".Dicoret 85 masih 85?
sumber
push
istilah ed, atau titik koma akhir sebelum kurung tutup.Java, total 169 byte
F (), M () 56 byte
rekursif-untuk-loop dan mencetak 77 Bytes
mengeluarkan daftar dalam dua baris yang berbeda 37 Bytes
input: p (
10
)output:
sumber
C, 166 Bytes
Pemakaian:
Keluaran:
Tidak Digubah (331 Bytes)
sumber
8 , 195 byte
Kode
Pemakaian
Penjelasan
Kode ini menggunakan rekursi dan kata yang ditangguhkan
defer: M
- KataM
tersebut dinyatakan akan ditentukan kemudian. Ini adalah kata yang ditangguhkan: F dup not if 1 nip else dup n:1- recurse M n:- then ;
- TetapkanF
secara rekursif untuk menghasilkan angka perempuan sesuai definisi. Harap dicatat bahwaM
belum ditentukan( dup not if 0 nip else dup n:1- recurse F n:- then ) is M
- TetapkanM
secara rekursif untuk menghasilkan angka laki-laki sesuai definisi: FM n:1- dup ( F . space ) 0 rot loop cr ( M . space ) 0 rot loop cr ;
- Kata yang digunakan untuk mencetak urutan nomor perempuan dan laki-lakisumber