Urutan Perempuan dan Laki-laki


20

Pertanyaan ini mungkin lebih sulit daripada semua tugas "menghasilkan urutan angka", karena ini membutuhkan DUA urutan yang bekerja bersamaan.

Benar-benar menantikan jawaban!

Dalam bukunya " Gödel, Escher, Bach: An Eternal Golden Braid ", Douglas Hofstadter memiliki beberapa urutan angka di dalamnya, semuanya bergantung pada istilah sebelumnya dalam beberapa cara. Untuk informasi tentang semua urutan, lihat halaman Wikipedia ini .

Sepasang urutan yang benar-benar menarik adalah urutan Perempuan dan Laki-laki, yang didefinisikan seperti ini:

untuk n > 0.

Ini urutan wanita dan urutan pria .

Tugas Anda adalah, ketika diberikan integer nsebagai input, kembalikan daftar urutan Female dan urutan Male, dengan jumlah istilah yang sama dengan n, dalam dua baris output, dengan urutan Female di baris pertama dan urutan Male di kedua.

Input dan output sampel: Input: 5 Output:[1, 1, 2, 2, 3] [0, 0, 1, 2, 2]

Input: 10 Keluaran:[1, 1, 2, 2, 3, 3, 4, 5, 5, 6] [0, 0, 1, 2, 2, 3, 4, 4, 5, 6]

CATATAN: Pemisahan antara daftar menandakan jeda baris.

Ini adalah kode-golf, jadi kode terpendek dalam byte menang. Juga, berikan penjelasan juga untuk kode Anda.

Papan peringkat


5
Bisakah kita mengembalikan sepasang daftar dari fungsi, alih-alih mencetak daftar?
Zgarb

Tantangan lain yang melibatkan urutan Hofstadter: Urutan Q , Urutan figur-figur
Martin Ender

@ Zgarb Anda bisa, selama dua daftar berada di baris yang berbeda.
clismique

2
@DerpfacePython Tidak ada baris dalam sepasang daftar; jika suatu fungsi mengembalikan sepasang daftar, Anda dapat mencetaknya sesuka Anda. Yang sedang berkata, saya bukan penggemar berat persyaratan garis, bahkan ketika mencetak output. Format I / O yang rumit adalah salah satu hal yang harus dihindari ketika menulis tantangan.
Dennis

4
Ini bukan masalah besar untuk beberapa pendekatan / bahasa, tetapi dapat membuat perbedaan besar bagi yang lain. Dalam C, banyak byte yang bisa disimpan dengan mencetak urutan dalam kolom daripada baris. Dalam Python, pendekatan terpendek yang dapat saya pikirkan adalah lambda rekursif mirip dengan jawaban Julia rekursif saya yang mengembalikan sepasang daftar, tetapi harus mengubahnya menjadi string dengan linefeed membuatnya lebih lama, bahkan lebih lama daripada program lengkap diposting oleh Sp3000. Pendekatan lain, seperti solusi rekursif yang menghitung mundur dan bukan ke atas, sepenuhnya dikesampingkan karena tidak mungkin untuk menambahkan baris baru.
Dennis

Jawaban:


3

Jelly , 22 20 byte

ṙṪḢạL}ṭ
çƓḤ¤Ð¡1ṫ-Ṗ€G

Cobalah online!

Bagaimana itu bekerja

çƓḤ¤Ð¡1ṫ-Ṗ€G  Main link. No user arguments. Left argument defaults to 0.
   ¤          Combine the two links to the left into a niladic chain.
 Ɠ              Read an integer from STDIN.
  Ḥ             Unhalve/double it.
ç   С1       Call the helper link that many times. Return all results.
              In the first call, the left and right argument are 0 and 1 resp.
              After each iteration, the left argument is set to the return value
              and the right argument to the prior value of the left one.
       ṫ-     Tail -1; keep the last two items of the list of results.
         Ṗ€   Discard the last item of each list.
           G  Grid; format the pair of lists.


ṙṪḢạL}ṭ       Helper link. Arguments: x, y (lists)

ṙ             Rotate x k units to the left, for each k in y.
 Ṫ            Tail; extract the last rotation.
  Ḣ           Head; extract the last element.
              This essentially computes x[y[-1]] (Python notation), avoiding
              Jelly's 1-based indexing.
    L}        Yield the length of y.
   ạ          Take the absolute difference of the results to both sides.
      ṭ       Tack; append the difference to y and return the result.

5
Dan ini adalah bagian di mana saya merasa bangga pada diri sendiri karena membuat tantangan yang membuat Jelly menggunakan lebih dari 10 byte.
clismique

13

Julia, 52 48 byte

x->[n÷φ|(5n^2|4∈(2:3n).^2)for| =(+,-),n=1:x]

Cobalah online!

Latar Belakang

Dalam fungsi menikah On Hofstadter , penulis menunjukkan hal itu

Formula F / M

di mana φ menunjukkan rasio emas ,

rumus delta / epsilon

dan F n menunjukkan n th nomor Fibonacci .

Selanjutnya, dalam Masalah dan Solusi Lanjut, H-187: Fibonacci adalah kuadrat , pengusul menunjukkan itu

Identitas Fibonacci / Lucas

di mana L n menunjukkan nomor Lucas ke- n , dan itu - sebaliknya - jika

Converse Fibonacci / Lucas identity

maka n adalah angka Fibonacci dan m adalah angka Lucas.

Dari ini, kami menyimpulkan itu

teorema delta / epsilon

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).^2atau dari bilangan bulat yang dihitung sebelumnya.


dapatkah ini diekspresikan dengan cara non-rekursif / berulang?, apa bentuk tertutupnya?
Abr001am

Saya telah menambahkan penjelasan.
Dennis

11

Python 2, 79 70 byte

a=0,;b=1,
exec"a,b=b,a+(len(a)-b[a[-1]],);"*~-input()*2
print b,'\n',a

Berulang 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:

f=lambda n,k:n and n-f(f(n-1,k),k^1)or k
f=lambda n,k:[k][n:]or f(n-1,k)+[n-f(f(n-1,k)[-1],k^1)[-1]]

Keduanya mengambil ndan parameter kbaik 0 atau 1, menentukan pria / wanita. Lambda pertama mengembalikan elemen n, dan lambda kedua mengembalikan elemen n pertama (dengan runtime eksponensial).


9

MATL , 23 byte

1Oiq:"@XJth"yy0)Q)_J+hw

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 forloop 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 forloop dengan dua iterasi dan menukar urutan dalam tumpukan.

1        % Push 1: seed for F sequence
O        % Push 0: seed for M sequence
iq:      % Input N. Generate range [1 2 ... N-1]
"        % For each (i.e. iterate N-1 times)
  @      %   Push current index, n (starting at 1 and ending at N-1)
  XJ     %   Copy to clipboard J
  th     %   Duplicate and concatenate. This generates a length-2 array
  "      %   For each (i.e. iterate twice)
    yy   %   Duplicate top two elements, i.e. F and M sequences
    0)   %     In the *first* iteration: get last entry of M, i.e M(n-1)
    Q)   %     Add 1 and index into F. This is F(M(n-1))
    _J+  %     Negate and add n. This is n-F(M(n-1)), that is, M(n)
    h    %     Concatenate to update M
    w    %     Swap top two elements, to bring F to top.
         %     In the *second* iteration the procedure is repeated to update F,
         %     and then the top two elements are swapped to bring M to top again,
         %     ready for the next iteration of the outer loop
         %   End for implicitly
         % End for implicitly
         % Display implicitly from bottom to top: first line is F, second is M

6

J, 47 byte

f=:1:`(-m@f@<:)@.*
m=:0:`(-f@m@<:)@.*
(f,:m)@i.

Menggunakan definisi rekursif. Dua baris pertama mendefinisikan kata kerja fdan myang masing-masing mewakili fungsi wanita dan pria. Baris terakhir adalah kata kerja yang mengambil argumen tunggal ndan menampilkan nistilah pertama dari urutan perempuan dan laki-laki.

Pemakaian

   (f,:m)@i. 5
1 1 2 2 3
0 0 1 2 2
   (f,:m)@i. 10
1 1 2 2 3 3 4 5 5 6
0 0 1 2 2 3 4 4 5 6

6

JavaScript (ES6), 75 byte

g=n=>--n?([f,m]=g(n),m=[...m,n-f[m[n-1]]],[[...f,n-m[f[n-1]]],m]):[[1],[[0]]

Saya dapat menyimpan 2 byte jika saya diizinkan untuk mengembalikan urutan Male terlebih dahulu:

g=n=>--n?([f,m]=g(n),[m=[...m,n-f[m[n-1]]],[...f,n-m[f[n-1]]]]):[[1],[[0]]

6

Haskell, 57 byte

l#s=scanl(\a b->b-l!!a)s[1..]
v=w#1
w=v#0
(<$>[v,w]).take

Contoh penggunaan: (<$>[v,w]).take $ 5->[[1,1,2,2,3],[0,0,1,2,2]]

Fungsi helper #membangun daftar tak terbatas dengan nilai awal sdan daftar luntuk mencari semua elemen lebih lanjut (pada indeks dari nilai sebelumnya). v = w#1adalah urutan perempuan dan w = v#0laki-laki. Dalam fungsi utama kita mengambil nelemen pertama dari keduanya vdan w.


4

Python 2, 107 byte

F=lambda n:n and n-M(F(n-1))or 1
M=lambda n:n and n-F(M(n-1))
n=range(input())
print map(F,n),'\n',map(M,n)

Cobalah online

Nilai input yang lebih besar menyebabkan RuntimeError (terlalu banyak rekursi). Jika ini masalah, saya bisa menulis versi di mana kesalahan tidak terjadi.



3

Pyth, 24 byte

Mungkin tidak mungkin digunakan reduceuntuk mengurangi byte-count.

Implementasi langsung.

L&b-b'ytbL?b-by'tb1'MQyM

Cobalah online!

Bagaimana itu bekerja

L&b-b'ytb  defines a function y, which is actually the male sequence.

L          def male(b):
 &b            if not b: return b
   -b          else: return b-
     'ytb            female(male(b-1))


L?b-by'tb1 defines a function ', which is actually the female sequence.

L          def female(b):
 ?b            if b:
   -by'tb          return b-male(female(b-1))
         1     else: return 1


'MQ        print(female(i) for i from 0 to input)
yMQ        print(male(i) for i from 0 to input)

Apakah saya menyertakan nama yang dianagramkan atau nama asli Anda di papan peringkat? Juga, kode ini sangat panjang untuk program Pyth.
clismique

Berapa lama Anda di sini ... bagaimana Anda tahu bahwa saya mengubah nama saya? Letakkan nama baru saya di sana.
Leaky Nun

1
Saya sudah cukup lama di sini untuk mengetahui bahwa Anda mengubah nama Anda.
clismique

@DerpfacePython Melihat bahwa jawaban lain hampir 4 kali lebih lama ... Saya akan mengatakan solusi saya tidak terlalu lama.
Leaky Nun

Itu sangat benar, tetapi masih lama dibandingkan dengan program Pyth lain untuk pertanyaan lain.
clismique

3

Brachylog , 65 byte

:{:1-:0re.}fL:2aw,@Nw,L:3aw
0,1.|:1-:2&:3&:?--.
0.|:1-:3&:2&:?--.

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:

:{:1-:0re.}fL:{0,1.|:1-:2&:3&:?--.}aw,@Nw,L:{0.|:1-:3&:2&:?--.}aw

Catatan : Ini berfungsi dengan transpiler Prolog, bukan yang lama di Jawa.

Penjelasan

Predikat utama:

:{:1-:0re.}fL                Build a list L of integers from 0 to Input - 1
             :2aw            Apply predicate 2 to each element of L, write the resulting list
                 ,@Nw        Write a line break
                     ,L:3aw  Apply predicate 3 to each element of L, write the resulting list

Predikat 2 (perempuan):

0,1.                         If Input = 0, unify Output with 1
    |                        Else
     :1-                     Subtract 1 from Input
        :2&                  Call predicate 2 with Input - 1 as argument
           :3&               Call predicate 3 with the Output of the previous predicate 2
              :?-            Subtract Input from the Output of the previous predicate 3
                 -.          Unify the Output with the opposite of the subtraction

Predikat 3 (pria):

0.                           If Input = 0, unify Output with 0
  |                          Else
   :1-                       Subtract 1 from Input
      :3&                    Call predicate 3 with Input - 1 as argument
         :2&                 Call predicate 2 with the Output of the previous predicate 3
            :?-              Subtract Input from the Output of the previous predicate 3
               -.            Unify the Output with the opposite of the subtraction

Tunggu ... predikat 3 mana?
clismique

@DerpfacePython whoops, diperbaiki. Perhatikan juga bahwa predikat satu {:1-:0re.}, digunakan untuk membuat daftar rentang.
Fatalkan

3

Clojure, 132 131 byte

(fn [n](loop[N 1 M[0]F[1]](if(< N n)(let[M(conj M(- N(F(peek M))))F(conj F(- N(M(peek F))))](recur(inc N)M F))(do(prn F)(prn M)))))

Cukup susun urutan iteratif dari nol ke n.

Versi tidak disatukan

(fn [n]
  (loop [N 1 M [0] F [1]]
    (if (< N n)
      (let [M (conj M (- N (F (peek M))))
            F (conj F (- N (M (peek F))))]
        (recur (inc N) M F))
      (do
        (prn F)
        (prn M)))))

Jawaban yang bagus, selamat datang di situs ini! Apakah diperlukan ruang tambahan atau baris baru? Saya menghitung 131+ spasi tambahan.
DJMcMayhem

Tidak, tidak perlu spasi spasi tambahan. Sneaky vim menambahkan baris baru di akhir agar wc menghitung.
tandai

3

Pyth, 23 byte

jCuaG-LHtPs@LGeGr1Q],1Z

Cobalah online: Demonstrasi

Penjelasan:

jCuaG-LHtPs@LGeGr1Q],1Z

  u                ],1Z    start with G = [[1, 0]]
                           (this will be the list of F-M pairs)
  u             r1Q        for each H in [1, 2, ..., Q-1]:
              eG              take the last pair of G [F(H-1), M(H-1)]
           @LG                lookup the pairs of these values:
                              [[F(F(H-1)), M(F(H-1))], [F(M(H-1)), M(M(H-1))]]
          s                   join them:
                              [F(F(H-1)), M(F(H-1)), F(M(H-1)), M(M(H-1))]
        tP                    get rid of the first and last element:
                              [M(F(H-1)), F(M(H-1))]
     -LH                      subtract these values from H
                              [H - M(F(H-1)), H - F(M(H-1))]
   aG                         and append this new pair to G
jC                         at the end: zip G and print each list on a line

Solusi alternatif yang menggunakan fungsi alih-alih mengurangi (juga 23 byte):

L?>b1-LbtPsyMytb,1ZjCyM

Bagus. Memang sangat bagus.
Leaky Nun

3

Ruby, 104 92 97 82 byte

f=->n,i{n>0?n-f[f[n-1,i],-i]:i>0?1:0}
->n{[1,-1].map{|k|p (0...n).map{|i|f[i,k]}}}

Edit: f dan msekarang satu fungsi berkat HopefullyHelpful . Saya mengubah fungsi kedua untuk mencetak fkemudian m. Spasi setelah padalah signifikan, karena jika tidak fungsi mencetak (0...n)bukan hasil map.

Fungsi ketiga mencetak array pertama dari istilah n pertama f, diikuti oleh array dari syarat n pertamam

Fungsi-fungsi ini disebut seperti ini:

> f=->n,i{n>0?n-f[f[n-1,i],-i]:i>0?1:0}
> s=->n{[1,-1].map{|k|p (0...n).map{|i|f[i,k]}}}
> s[10]
[1, 1, 2, 2, 3, 3, 4, 5, 5, 6]
[0, 0, 1, 2, 2, 3, 4, 4, 5, 6]

Anda dapat menjatuhkan p dan parens. Output tidak perlu dicetak. Juga, Anda dapat mengurangi parens di sekitar kisaran.
Bukan berarti Charles

Anda dapat mengganti 2 fungsi dengan 1 yang memiliki 2 argumen ndani n>0?n-f(f(n-1,i),-i):i>0?1:0
Semoga

@HopefullyHelpful Terima kasih banyak: D
Sherlock9

@NotthatCharles Apakah hasilnya tidak perlu dicetak? Di Ruby, jika saya ingin garis itu terputus antara fdan m, 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]]
Sherlock9

oh, katanya "line break". Sangat buruk.
Bukan berarti Charles

3

APL (Dyalog Unicode) , 45 25 byte

Fungsi diam-diam anonim. Membutuhkan ⎕IO←0, yang merupakan standar pada banyak sistem APL.

1 0∘.{×⍵:⍵-(~⍺)∇⍺∇⍵-1⋄⍺}⍳

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 satu

1 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 kiri


Itu bekerja dengan baik, tetapi dengan asumsi input disimpan dalam variabel tidak diizinkan secara default.
Dennis

@ Dennis Tidak juga. Ini adalah tubuh tfn. Ketika saya masih baru di sini, ngn mengatakan kepada saya bahwa saya tidak harus menghitung tfn header (yang akan menjadi dua byte, satu nama char + baris baru, sama seperti nama file sumber tidak dihitung, dan anonim fns diperbolehkan Demikian juga di sini, di mana tajuknya adalah nama 1-char + spasi + nama argumen 1-char ( n) + ditambah baris baru.
Adám

Apa sebenarnya tfn?
Dennis

@Dennis TFN adalah representasi APL tradisional fungsi. Terdiri dari baris kode dengan hampir tidak ada batasan dfns . Misalnya Anda dapat memiliki struktur kontrol yang tepat, dan ekspresi tanpa hasil. Baris "0" adalah tajuk yang menunjukkan sintaks fn .
Adám

2

ES6, 89 85 83 byte

2 byte disimpan berkat @ Bálint

x=>{F=[n=1],M=[0];while(n<x){M.push(n-F[M[n-1]]);F.push(n-M[F[n++-1]])}return[F,M]}

Implementasi yang naif.

Penjelasan:

x => {
    F = [n = 1], //female and term number
    M = [0]; //male
    while (n < x) {
        M.push(n - F[M[n - 1]]); //naïve
        F.push(n - M[F[n++ - 1]]); //post-decrement means n++ acts as n in the calculation
    }
    return [F, M];
}

Saya pikir Anda dapat menjadikannya fungsi anonim, dan ganti && - dengan &
Bálint

Anda tidak bisa, &&sirkuit pendek, yang diinginkan, tapi saya tetap menghapusnya karena sintaks brace sama pendeknya
ASCII-hanya

Maka Anda bisa melakukan `F = [n = 1]
Bálint

2

Mathematica, 69 62 byte

Terima kasih kepada Sp3000 karena menyarankan bentuk fungsional yang menghemat 14 byte.

k_~f~0=1-k
k_~f~n_:=n-f[1-k,f[k,n-1]]
Print/@Array[f,{2,#},0]&

Ini mendefinisikan fungsi pembantu bernama fdan kemudian mengevaluasi ke fungsi yang tidak disebutkan namanya yang menyelesaikan tugas sebenarnya dari mencetak kedua urutan.


2

Perl 5.10, 85 80 byte

Meh, tidak tahu jika saya memiliki lebih banyak ide untuk bermain golf ini ...

@a=1;@b=0;for(1..<>-1){push@a,$_-$b[$a[$_-1]];push@b,$_-$a[$b[$_-1]]}say"@a\n@b"

Cobalah online!

Saya harus menambahkan use 5.10.0Ideone agar dapat menerima sayfungsi, tetapi tidak dihitung terhadap jumlah byte.

Ini adalah implementasi algoritma yang naif, @amenjadi daftar "wanita" dan daftar @b"pria".

Dicoret 85 masih 85?


Penjelasannya, tolong?
clismique

Hampir sama dengan jawaban JS saya
ASCII-hanya

@DerpfacePython Sebenarnya ini adalah implementasi yang naif. :)
Paul Picard

Saya belum menguji, tapi saya pikir Anda tidak perlu tanda kurung di setiap pushistilah ed, atau titik koma akhir sebelum kurung tutup.
msh210

@ msh210 Memang, lupakan ini. Menghemat total 5 byte, terima kasih!
Paul Picard

2

Java, total 169 byte

int f(int n,int i){return n>0?n-f(f(n-1,i),-i):i>0?1:0;}void p(int n,int i){if(n>0)p(n-1,i);System.out.print(i==0?"\n":f(n,i)+" ");}void p(int n){p(n,1);p(0,0);p(n,-1);}

F (), M () 56 byte

int f(int n,int i){
    return n>0?n-f(f(n-1,i),-i):i>0?1:0;
}

rekursif-untuk-loop dan mencetak 77 Bytes

void p(int n,int i) {
    if(n>0) {
        p(n-1,i);
    }
    System.out.print(i==0?"\n":f(n,i)+" ");
}

mengeluarkan daftar dalam dua baris yang berbeda 37 Bytes

void p(int n) {
    p(n,1);
    p(0,0);
    p(n,-1);
}

input: p ( 10)
output:

1 1 2 2 3 3 4 5 5 6 6 7 8 8 9 9 
0 0 1 2 2 3 4 4 5 6 6 7 7 8 9 9

1

C, 166 Bytes

#define P printf
#define L for(i=0;i<a;i++)
f(x);m(x);i;c(a){L P("%d ",f(i));P("\n");L P("%d ",m(i));}f(x){return x==0?1:x-m(f(x-1));}m(x){return x==0?0:x-f(m(x-1));}

Pemakaian:

main()
{
    c(10);
}

Keluaran:

1 1 2 2 3 3 4 5 5 6
0 0 1 2 2 3 4 4 5 6

Tidak Digubah (331 Bytes)

#include <stdio.h>

int female(int x);
int male(int x);
int i;
int count(a){
    for(i=0;i<a;i++){
        printf("%d ",female(i));
    }
    printf("\n");
    for(i=0;i<a;i++){
        printf("%d ",male(i));
    }
}
int female (int x){
    return x==0?1:x-male(female(x-1));
}
int male(x){
    return x==0?0:x-female(male(x-1));
}
int main()
{
    count(10);
}

0

8 , 195 byte

Kode

defer: M
: F dup not if 1 nip else dup n:1- recurse M n:- then ;
( dup not if 0 nip else dup n:1- recurse F n:- then ) is M
: FM n:1- dup ( F . space ) 0 rot loop cr ( M . space ) 0 rot loop cr ;

Pemakaian

ok> 5 FM
1 1 2 2 3 
0 0 1 2 2 

ok> 10 FM
1 1 2 2 3 3 4 5 5 6 
0 0 1 2 2 3 4 4 5 6 

Penjelasan

Kode ini menggunakan rekursi dan kata yang ditangguhkan

defer: M- Kata Mtersebut dinyatakan akan ditentukan kemudian. Ini adalah kata yang ditangguhkan

: F dup not if 1 nip else dup n:1- recurse M n:- then ;- Tetapkan F secara rekursif untuk menghasilkan angka perempuan sesuai definisi. Harap dicatat bahwa Mbelum ditentukan

( dup not if 0 nip else dup n:1- recurse F n:- then ) is M- Tetapkan M 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-laki

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.