Kadın ve Erkek Dizileri


20

Bu soru muhtemelen "sayı dizisi oluştur" görevlerinin hepsinden daha zordur, çünkü bu birlikte çalışan İKİ dizi gerektirir.

Gerçekten cevapları dört gözle bekliyorum!

" Gödel, Escher, Bach: Ebedi Altın Örgü " adlı kitabında Douglas Hofstadter'in içinde birkaç sayı dizisi var, hepsi bir şekilde önceki döneme güveniyor. Tüm diziler hakkında bilgi için bu Wikipedia sayfasına bakın .

Gerçekten ilginç olan bir çift dizi, şu şekilde tanımlanan Kadın ve Erkek dizileridir:

için n > 0.

İşte Kadın sırası ve Erkek sırası .

Göreviniz, ngirdi olarak bir tamsayı verildiğinde , Dişi dizinin ve Erkek dizisinin bir listesini n, ilk çıktıdaki Dişi dizinin ve Erkek dizisinin açık olduğu iki çıktı satırında eşit olan terimlerin miktarını döndürmektir . ikinci.

Örnek giriş ve çıkışlar: Giriş: 5 Çıkış:[1, 1, 2, 2, 3] [0, 0, 1, 2, 2]

Giriş: 10 Çıkış:[1, 1, 2, 2, 3, 3, 4, 5, 5, 6] [0, 0, 1, 2, 2, 3, 4, 4, 5, 6]

NOT: Listeler arasındaki ayrım satır sonunu belirtir.

Bu kod golf, bayt en kısa kod kazanır. Ayrıca, kodunuz için de bir açıklama ekleyin.

Liderler Sıralaması


5
Listeleri yazdırmak yerine bir işlevden bir çift liste döndürebilir miyiz?
Zgarb

Hofstadter dizilerini içeren diğer zorluklar: Q dizisi , şekil-şekil dizisi
Martin Ender

@Zgarb İki liste farklı satırlarda olduğu sürece yapabilirsiniz.
clismique

2
@DerpfacePython Bir çift listede satır yok ; bir işlev bir çift liste döndürürse , bunları istediğiniz gibi yazdırabilirsiniz. Bununla birlikte, çıktıyı yazdırırken bile hat gereksiniminin büyük bir hayranı değilim. Zorlu G / Ç formatları zorlukları yazarken kaçınılması gereken şeylerden biridir.
Dennis

4
Bazı yaklaşımlar / diller için önemli değildir, ancak diğerleri için büyük bir fark yaratabilir. C'de, dizileri satırlar yerine sütunlar halinde yazdırarak çok sayıda bayt kaydedilebilir. Python'da aklıma gelen en kısa yaklaşım, bir çift liste döndüren özyinelemeli Julia cevabına benzer bir özyinelemeli lambdadır, ancak bunu satır beslemeli bir dizeye dönüştürmek zorunda kaldığınızda, programı tüm programdan çok daha uzun, hatta daha uzun yapar Sp3000 tarafından gönderildi. Yukarı satır yerine geriye doğru sayan özyinelemeli bir çözüm gibi diğer yaklaşımlar da tamamen reddedilir, çünkü satırsonu eklemek imkansızdır.
Dennis

Yanıtlar:


3

Jöle , 22 20 bayt

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

Çevrimiçi deneyin!

Nasıl çalışır

çƓḤ¤Ð¡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
Ve bu, Jelly'i 10 bayttan fazla kullanan bir meydan okuma için kendimle gurur duyduğum kısım.
clismique

13

Julia, 52 48 bayt

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

Çevrimiçi deneyin!

Arka fon

In On Hofstadter evli fonksiyonları , yazar gösterileri olduğunu

F / M formülü

burada φ belirtmektedir altın oranı ,

delta / epsilon formülü

ve F N anlamına gelir n inci Fibonacci sayısı .

Dahası, İleri Sorunlar ve Çözümlerde H-187: Fibonacci bir kare ,

Fibonacci / Lucas kimliği

burada L , n temsil eder n inci Lucas numarası , ve - diğer taraftan - eğer

converse Fibonacci / Lucas kimliği

o zaman n bir Fibonacci numarasıdır ve m bir Lucas numarasıdır.

Bundan, şunu çıkarıyoruz:

delta / epsilon teoremi

n> 0 olduğunda .

Nasıl çalışır

Giriş Verilen x , bir inşa 2 ile x matrisinin, nerede | , birinci sütuna toplama ve ikincide çıkarmadır ve n , satırlardaki 1 ile x arasındaki tamsayılar üzerinde tekrar eder .

Hem F (n - 1) hem de M (n - 1) ' nin ilk terimi basittir n÷φ.

Biz hesaplama δ (n) ve ε (n) hesaplayarak 5n² | 4 ve sonucun 2 ve 3n arasındaki tamsayıların kareler dizisine ait olup olmadığının test edilmesi . Bu hem kare için hem de 1 aralıkta olmadığından n> 1 için | çıkarma.

Son olarak 5n^2|4∈(2:3n).^2, önceden hesaplanmış tamsayıdan veya daha önce hesaplanan tamsayıdan kaynaklanan Boole ekleriz veya çıkarırız .


bu özyinelemeli olmayan / yinelemeli olarak ifade edilebilir mi, bunun için kapalı form nedir?
Abr001am

Bir açıklama ekledim.
Dennis

11

Python 2, 79 70 bayt

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

Özyinelemeden ziyade yinelemeli, çünkü neden olmasın. İlk satırın sonunda bir boşluk var - eğer bu iyi değilse ekstra bir bayt için sabitlenebilir. @Dennis sayesinde -9 bayt.

İşte gerçekten yardım etmeyen bazı kombine lambdalar:

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]]

Hem erkek hem de dişi belirten 0 veya 1 nparametresini alır k. İlk lambda n. Elemanı döndürür ve ikinci lambda ilk n elemanı döndürür (üstel çalışma süresiyle).


9

MATL , 23 bayt

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

Çevrimiçi deneyin!

açıklama

Bu yinelemeli olarak çalışır. Her dizi bir dizide tutulur. Her dizin n için, her dizinin yeni terimi hesaplanır ve karşılık gelen diziye eklenir. N −1 terimli bir fordöngü kullanılır; burada N , giriş numarasıdır.

Önce M dizisi güncellemesinin yapılması gerekir. Bunun nedeni, F dizisinin her zaman aynı indeks için M dizisinden büyük veya ona eşit olmasıdır, bu nedenle önce F'yi güncellemeye çalışırsak, henüz hesaplanmayan bir M terimine ihtiyacımız olurdu.

İki güncelleme denklemi aynı F ve M ile aynıdır. Bu nedenle güncelleme kodu for, iki iterasyona sahip bir döngü uygulanarak ve yığındaki diziler değiştirilerek yeniden kullanılır .

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 bayt

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

Özyinelemeli tanımı kullanır. İlk iki satır fiiller tanımlar fve mbu, sırasıyla dişi ve erkek işlevlerini gösterir. Son satır, tek bir argüman alan nve nkadın ve erkek dizilerinin ilk terimlerini çıkaran bir fiildir .

kullanım

   (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 bayt

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

Önce Male sekansını döndürmeme izin verilirse 2 bayt kaydedebilirim:

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 bayt

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

Kullanım örneği: (<$>[v,w]).take $ 5->[[1,1,2,2,3],[0,0,1,2,2]]

Yardımcı işlev #, başlangıç ​​değeri olan sonsuz bir liste sve ldiğer tüm öğeleri aramak için bir liste oluşturur (önceki değerin dizininde). v = w#1kadın ve w = v#0erkek dizisidir. Ana işlevde nhem vve ' nin ilk öğelerini alırız w.


4

Python 2, 107 bayt

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)

Çevrimiçi deneyin

Daha büyük giriş değerleri bir RuntimeError hatasına (çok fazla özyineleme) neden olur. Bu bir sorunsa, hatanın gerçekleşmediği bir sürüm yazabilirim.



3

Pyth, 24 bayt

reduceBayt sayısını azaltmak için muhtemelen imkansızdır .

Kolay uygulama.

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

Çevrimiçi deneyin!

Nasıl çalışır

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)

Anagramlaştırılmış adı veya orijinal adınızı skor tablosuna ekleyebilir miyim? Ayrıca, bu kod bir Pyth programı için çok uzun.
clismique

Ne zamandır buradasın ... adımı değiştirdiğimi nereden biliyorsun? Yeni adımı oraya koy.
Sızdıran Rahibe

1
Adınızı değiştirdiğinizi bilecek kadar uzun süredir buradayım.
clismique

@DerpfacePython Diğer yanıtların neredeyse 4 kat daha uzun olduğunu görünce ... Çözümümün çok uzun olmadığını söyleyebilirim.
Sızdıran Rahibe

Bu çok doğru, ama diğer sorular için hala diğer Pyth programlarına kıyasla uzun.
clismique

3

Brachylog , 65 bayt

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

Hem erkek hem de kadın için tahminleri bir araya getirme girişimi kodu daha uzun hale getirdi.

Aynı sayıda bayta sahip aşağıdaki bir astarı kullanabilirsiniz:

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

Not : Bu, eski Java ile değil, Prolog transpiler ile çalışır.

açıklama

Ana yüklem:

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

Tahmin 2 (kadın):

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

Tahmin 3 (erkek):

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

Bekle ... hangisi yüklem 3?
clismique

@DerpfacePython whoops, düzeltildi. Ayrıca {:1-:0re.}, aralık listesini oluşturmak için kullanılan yüklemin kullanıldığını unutmayın .
16:55

3

Clojure, 132 131 bayt

(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)))))

Dizileri sıfırdan n'ye kadar yinelemeli olarak oluşturur.

Ungolfed sürümü

(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)))))

Güzel cevap, siteye hoş geldiniz! Sondaki boşluk veya yeni satır gerekli mi? Ben 131 + sondaki boşlukları sayıyorum.
DJMcMayhem

Hayır, sondaki boşluklara gerek yok. Sneaky vim, wc'nin sayması için sonuna yeni bir satır ekledi.
işaretleyin

3

Pyth, 23 bayt

jCuaG-LHtPs@LGeGr1Q],1Z

Çevrimiçi deneyin: Gösteri

Açıklama:

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

Azaltma yerine bir işlev kullanan alternatif çözüm (ayrıca 23 bayt):

L?>b1-LbtPsyMytb,1ZjCyM

Güzel. Gerçekten çok iyi.
Sızdıran Rahibe

3

Yakut, 104 92 97 82 bayt

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 ve mşimdi HopefullyHelpful sayesinde bir işlev vardır . Ben yazdırmak için ikinci işlevini değiştirdi fsonra m. Sonra boşluk pönemlidir, aksi takdirde işlev (0...n)sonucu yerine yazdırır map.

Üçüncü işlev önce ilk n terimlerin fbir dizisini, ardından ilk n terimlerin bir dizisini yazdırırm

Bu işlevler şu şekilde adlandırılır:

> 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]

p ve parens bırakabilirsiniz. Çıktıların yazdırılması gerekli değildir. Ayrıca, aralık etrafında parens dorp.
Charles

2 işlevini 2 bağımsız değişkeni olan 1 ile değiştirebilir nvei n>0?n-f(f(n-1,i),-i):i>0?1:0
Umarım

@HopefullyHelpful Çok teşekkürler: D
Sherlock9

@NotthatCharles Çıktının yazdırılması gerekli değil mi? Ruby'de, fve arasındaki çizginin kesilmesini istiyorsam, myazdırmam gerekiyor. Aksi takdirde, sadece bir dizi alıyorum[[1, 1, 2, 2, 3, 3, 4, 5, 5, 6], [0, 0, 1, 2, 2, 3, 4, 4, 5, 6]]
Sherlock9

"satır sonu" yazıyor. Çok kötü.
Charles

3

APL (Dyalog Unicode) , 45 25 bayt

Anonim zımni fonksiyonu. ⎕IO←0Birçok APL sisteminde standart olan gerektirir .

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

Çevrimiçi deneyin!

Bu, F ve M'yi uygulanacak işlevi seçen bir Boole sol argümanıyla tek bir ikili işleve birleştirerek çalışır . Biz kullandığımız 1 F ve 0 M biz dönüş değeri olarak bu seçiciyi kullanın böylece F  (0) ve M  (0). Daha sonra her iki işlevin önce (eksi bir argümanında) ve daha sonra bunun sonucundaki diğer işlevi çağırması gerektiğini gözlemleriz, bu yüzden önce verilen seçiciyle ve sonra mantıksal olarak reddedilen seçiciyle çektik.

ɩ ndices; eksi bir eksi üzerinden sıfır

1 0∘.{} Dış (Kartezyen) "ürün" (ancak çarpma yerine aşağıdaki işlevle) [1,0]sol argümanlar ( ) ve indeksler sağ argümanlar ( ) olarak kullanılır:

×⍵ eğer doğru argüman kesinlikle pozitifse (doğru argümanın işareti):

  ⍵-1 birini doğru argümandan çıkar

  ⍺∇ kendisiyle bunu sağ argüman olarak ve sol argümanı sol argüman olarak

  (~⍺)∇ kendisiyle bunu sağ arg olarak ve sol argümanın mantıksal olumsuzlamasını sol arg olarak adlandır

  ⍵- bunu doğru argümandan çıkarın ve sonucu döndürün

 Başka:

   sol argümanı geri ver


Bu iyi çalışıyor, ancak girdinin bir değişkende saklandığı varsayılarak varsayılan olarak izin verilmez.
Dennis

@Dennis Gerçekten değil. Bu bir tfn gövdesidir. Burada yeni olduğumda, ngn bana tfn başlığını saymam gerektiğini söyledi (iki bayt, tek karakter adı + yeni satır, tıpkı kaynak dosya adının sayılmadığı ve anonim fns'e izin verildiği gibi) Burada da, üstbilginin 1 karakterlik bir ad + boşluk + 1 karakterlik bir bağımsız değişken adı ( n) + artı bir yeni satır olduğu yer
Adám

TFN tam olarak nedir?
Dennis

@Dennis Tfns , fonksiyonların geleneksel APL temsilidir. Dfns'ın kısıtlamalarının neredeyse hiçbirini içermeyen kod satırlarından oluşur . Örneğin, uygun kontrol yapılarına ve sonuçsuz ifadelere sahip olabilirsiniz. "0" satırı, fn'nin sözdizimini gösteren bir üstbilgidir .
Adám

2

ES6, 89 85 83 bayt

@ Bálint sayesinde 2 byte tasarruf edildi

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]}

Saf uygulama.

Açıklama:

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];
}

Bunu anonim bir işlev haline getirebileceğinizi ve && - s yerine &
Bálint'i

Yapamazsınız, &&kısa devreler, istenen, ama yine de kaldırdım çünkü brace sözdizimi yine de eşit derecede kısa
ASCII-sadece

Sonra `` F = [n = 1]
Bálint

2

Mathematica, 69 62 bayt

14 bayt tasarruf sağlayan fonksiyonel bir form önerdiği için Sp3000'e teşekkürler.

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

Bu, adlandırılmış bir yardımcı işlevi tanımlar fve daha sonra, her iki diziyi yazdırma gerçek görevini çözen adlandırılmamış bir işlevi değerlendirir.


2

Perl 5.10, 85 80 bayt

Meh, bunu golf oynamak için daha fazla fikrim varsa ...

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

Çevrimiçi deneyin!

use 5.10.0İşlevi kabul edebilmesi için Ideone eklemeliydim say, ancak bayt sayısına dahil edilmiyor.

Algoritmanın saf bir uygulaması @a, "dişi" listesi ve @b"erkek" listesi.

Çarpılan 85 hala 85 mi?


Açıklama, lütfen?
clismique

JS yanıtımla hemen hemen aynı
sadece ASCII-

@DerpfacePython Aslında naif bir uygulama. :)
Paul Picard

Test etmedim, ama her pushed terimi etrafında parantezlere veya yakın parantez öncesi son noktalı virgüllere ihtiyacınız olduğunu düşünmüyorum .
msh210

@ msh210 Gerçekten, bunu unuttum. Toplam 5 bayt tasarruf, teşekkürler!
Paul Picard

2

Java, toplam 169 bayt

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 bayt

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

döngü için özyineleme ve yazdırma 77 Bayt

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

listelerin iki farklı satıra çıkması 37 Bayt

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

giriş: p ( 10)
çıkış:

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 Bayt

#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));}

Kullanımı:

main()
{
    c(10);
}

Çıktı:

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

Ungolfed (331 Bayt)

#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 bayt

kod

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 ;

kullanım

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 

açıklama

Bu kod özyineleme ve ertelenmiş sözcük kullanıyor

defer: M- Kelimenin Mdaha sonra tanımlanacağı bildirildi. Bu ertelenmiş bir kelimedir

: F dup not if 1 nip else dup n:1- recurse M n:- then ;- Tanıma göre kadın sayıları üretmek için F özyinelemeli olarak tanımlayın . Lütfen Mhenüz tanımlanmadığını unutmayın

( dup not if 0 nip else dup n:1- recurse F n:- then ) is M- Tanıma göre erkek sayıları oluşturmak için M özyinelemeli tanımlayın

: FM n:1- dup ( F . space ) 0 rot loop cr ( M . space ) 0 rot loop cr ; - Kadın ve erkek sayı dizilerini yazdırmak için kullanılan kelime

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.