Fibre xen kẽ


17

Trong chuỗi Fibonacci xen kẽ, trước tiên bạn bắt đầu với 11như bình thường.

Tuy nhiên, thay vì luôn luôn thêm hai giá trị cuối cùng để có được số tiếp theo, bạn thay thế bắt đầu bằng việc thêm và mỗi lần thay vào đó bạn trừ đi.

Trình tự bắt đầu như thế này:

1
1
2    # 1 + 1
-1   # 1 - 2
1    # 2 + -1
-2   # -1 - 1
-1   # 1 + -2
-1   # -2 - -1
-2   # -1 + -1
1    # -1 - -2
-1   # -2 + 1
2    # 1 - -1
1    # -1 + 2
1    # 2 - 1

Vân vân.

Chú ý rằng sau khi nó bắt đầu hơn một khi nó được đến 11một lần nữa.

Cho một số N , in thuật ngữ thứ N của chuỗi xen kẽ.

Hãy nhớ rằng, đây là , vì vậy mã có số byte nhỏ nhất sẽ thắng.


Là chuỗi 0 được lập chỉ mục hoặc 1 chỉ mục (hoặc một trong hai)?
Doorknob

@Doorknob Hoặc là một. Chỉ định trong câu trả lời của bạn.
Oliver Ni

Chúng ta có thể trở lại truecho 1?
Sản phẩm ETH

Hai 1giá trị đầu tiên có được tính là giá trị ban đầu cho đầu ra không? Hay chúng ta bắt đầu trực tiếp với 2?
Luis Mendo

@LuisMendo Hai lần đầu tiên.
Oliver Ni

Câu trả lời:


17

JavaScript (ES6), 25 byte

n=>"334130110314"[n%12]-2

Chỉ số 0. Bạn có thể rút ngắn chuỗi với phiên bản đệ quy nhẹ, mặc dù nó thêm 6 byte:

f=n=>"3341301"[n]-2||f(13-n%12)

Điều này vẫn còn ngắn hơn công thức đệ quy dứt khoát:

f=n=>n<2||f(n-2)+f(n-1)*(-n%2|1)

8

Python, 31 byte

lambda n:2-33107256/5**(n%12)%5

Không bận tâm đến việc cố gắng tính toán giá trị. Chỉ cần nhìn lên trong danh sách chiều dài peroidic-12 [1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2], được nén trong cơ sở 5.

So sánh với một giải pháp đệ quy (37 byte) với True's cho 1:

f=lambda n:n<2or(-1)**n*f(n-1)+f(n-2)

hoặc để lưu trữ chuỗi

lambda n:int('334130110314'[n%12])-2

hoặc một nỗ lực tại một biểu thức số học.

lambda n:4**n%7%3*(-1)**((n+n%2*4)/6)

7

Ốc đảo , 10 byte

Nhắc tôi thực hiện thêm một số tích hợp: p. Đầu vào là 0-index .

Mã số:

n>2%x<*c+V

Phiên bản dịch:

a(n) = (2*((n+1)%2)-1) * a(n-1) + a(n-2)
a(1) = 1
a(0) = 1

Và tính toán thuật ngữ thứ n .

Hãy thử trực tuyến!




4

Thạch, 12 byte

“½Ġ⁻S’b5_2⁸ị

Dùng thử trực tuyến!

Dựa trên 1, cho các giá trị thứ nhất và thứ hai là 1 .

Không chắc điều này có ngắn hơn không, nhưng đối với điều này tôi đã lưu ý rằng bộ truyện có thời gian là 12:
[1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2]

Vì vậy, tôi lấy nó và thêm vào 2để
[3, 3, 4, 1, 3, 0, 1, 1, 0, 3, 1, 4]
sau đó chuyển đổi nó thành 5số cơ sở thành cơ sở 250, để cho:
[11, 197, 140, 84]
(đó là 184222584).

“½Ġ⁻S’b5_2⁸ị - Main link: n
“½Ġ⁻S’       - base 250 number      184222584
      b5     - convert to base 5   [3, 3, 4, 1, 3, 0, 1, 1, 0, 3, 1, 4]
        _2   - subtract 2          [1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2]
          ⁸  - left argument, n
           ị - index into (1-based and modular)


3

Toán học, 40 byte

Chỉ cần tạo một bảng tra cứu và truy cập nó theo chu kỳ, như trong câu trả lời của ETHproductions. Hàm không tên, 1 chỉ mục.

Join[s={2,1,1,2,-1,1},-s][[#~Mod~12+1]]&

3

MATL , 17 16 15 byte

'"Bl)e'F5Za2-i)

Đầu vào là 1 dựa trên.

Hãy thử trực tuyến!

Giải trình

Trình tự có thời gian [1 1 2 -1 1 -2 -1 -1 -2 1 -1 2].

'"Bl)e     % Compressed array [1 1 2 -1 1 -2 -1 -1 -2 1 -1 2] with source 
           % alphabet [-2 -1 0 1 2]
F5Za       % Decompress with target alphabet [0 1 2 3 4]
2-         % Subtract 2 to transform alphabet into [-2 -1 0 1 2]
i)         % Input N and use as (modular, 1-based) index into the sequence

3

WinDbg, 26 byte

?(85824331b>>@$t0%c*3&7)-2

Đầu vào được truyền qua thanh ghi giả $t0. Chỉ số 0. +2 của mỗi số hạng trong chuỗi được lưu trữ trong 3 bit 85824331b.

Làm thế nào nó hoạt động:

? (85824331b >> @$t0 % c * 3 & 7) - 2 ;*? Evalutes the expression. Shifts 85824331b to get
                                       *the 3 bits for the @$t0'th term (mod c (12) when
                                       *the sequence repeats). Bitwise AND by 7 to get the
                                       *desired 3 bits, finally subtract 2 since the terms
                                       *where stored as +2.

Đầu ra mẫu, một vòng lặp in 14 giá trị đầu tiên của chuỗi:

0:000> .for(r$t0=0;@$t0<e;r$t0=@$t0+1){?(85824331b>>@$t0%c*3&7)-2}
Evaluate expression: 1 = 00000001
Evaluate expression: 1 = 00000001
Evaluate expression: 2 = 00000002
Evaluate expression: -1 = ffffffff
Evaluate expression: 1 = 00000001
Evaluate expression: -2 = fffffffe
Evaluate expression: -1 = ffffffff
Evaluate expression: -1 = ffffffff
Evaluate expression: -2 = fffffffe
Evaluate expression: 1 = 00000001
Evaluate expression: -1 = ffffffff
Evaluate expression: 2 = 00000002
Evaluate expression: 1 = 00000001
Evaluate expression: 1 = 00000001

3

Java, 32 byte

n->"334130110314".charAt(n%12)-50

Vì đây là Java, nên câu trả lời là 0-index.

Kiểm tra và không được phép:

class Ideone {
  public static void main (String[] args) throws Exception {
    java.util.function.IntFunction f = n->"334130110314".charAt(n%12)-50;
    for (int i = 0; i < 12; i++) {
      System.out.printf("%d -> %d%n", i, f.apply(i));
    }
  }
}

Thử nghiệm trên Ideone


2

Toán học, 45 41 38 byte

Cảm ơn @MartinEnder cho 3 byte.

±0=±1=1;±n_:=±(n-2)+±(n-1)(1-2n~Mod~2)

Chỉ số 0.

Sử dụng

±5

-2


2
Bạn có thể có thể lưu ba byte bằng cách xác định một toán tử đơn nguyên ±thay vì một hàm a.
Martin Ender

1

Perl 6 ,  39 35  32 byte

{(1,1,{|(($/=$^a+$^b),$b-$/)}...*)[$_]}
{(|(334130110314.comb X-2)xx*)[$_]}
{(|334130110314.comb xx*)[$_]-2}
{334130110314.substr($_%12,1)-2}

1

C #, 117 byte

Chơi gôn

int A(int n){var f=new List<int>{0,1,1};for(int i=3;i<=n;i++){f.Add(i%2>0?f[i-1]+f[i-2]:f[i-2]-f[i-1]);}return f[n];}

Ung dung:

public int A(int n)
{
  var f = new List<int> { 0, 1, 1 };

  for (int i = 3; i <= n; i++)
  {
    f.Add(i % 2 > 0 ? f[i - 1] + f[i - 2] : f[i - 2] - f[i - 1]);
  }

  return f[n];
}

Kiểm tra:

var alternatingFibonacci = new AlternatingFibonacci();
Console.WriteLine(alternatingFibonacci.B(10));
1

Biên dịch thành Func <int, int> vì vậy public int A(int n)bây giờ n=>, bạn có thể loại bỏ các dấu ngoặc xung quanh câu lệnh để lưu 2 byte, bạn có thể tăng trước itrong vòng lặp tức là ++i <= nvà đặt i = 2lưu 3 byte vì nó sẽ xóa i++phần cuối của câu lệnh
TheLethalCoder

Cũng xem câu trả lời của tôi nếu bạn theo dõi các biến trước đó thay vì tạo danh sách tất cả các biến đó ngắn hơn rất nhiều
TheLethalCoder

1

R, 38 byte

Sử dụng giải pháp bảng tra cứu lấy cảm hứng từ câu trả lời của @ETHproductions JS.

c(s<-c(2,1,1,2,-1,1),-s)[scan()%%12+1]

Chỉnh sửa: Quên đề cập rằng đây là 1 chỉ mục.



1

Java 7, 88 82 79 byte

đánh gôn

int f(int n){int c,i=0,a=1,b=1;for(;i<n;){c=i++%2>0?a-b:a+b;a=b;b=c;}return b;}

vô dụng:

int f(int n)
{
    int c, i = 0, a = 1, b = 1;
    for (; i < n;)
    {
        c = i++ % 2 > 0 ? a - b : a + b;
        a = b;
        b = c;
    }
    return b;
}

Dùng thử trực tuyến


1
Vì bạn đi theo cách "hợp lý", đây là một số gợi ý: 1. bạn quên khai báo intlà kiểu trả về. 2. bạn có thể dự phòng byte bằng cách di chuyển phép gán 0 sang khai báo i: int c,i=0for(;i<n;){. 3. Bạn có thể loại bỏ dấu ngoặc đơn xung quanh điều kiện toán tử ternary.
Olivier Grégoire

1
@ OlivierGrégoire cảm ơn anh chàng :) đã sửa. giải pháp tốt đẹp btw
p336

1

DC, 55 byte

?sd[ln1+snly[[+2Q]sEln2%1=E-]xlyrsylnld>r]sr1sy0sn1lrxp

Chỉ số 0.

?sd                                                     takes input and stores
                                                        it in register d

                                            1sy0sn1     stores 1 in register y
                                                        and 0 in register n and
                                                        appends 1 to the stack

   [ln1+snly                                            adds 1 to register n and
                                                        appends the value of
                                                        register y to the stack

            [[+2Q]sEln2%1=E-]                           adds or subtracts the
                                                        the two values on the
                                                        stack depending on
                                                        parity of n

                             xlyrsylnld>r]              does the rest of the
                                                        stuff required to store
                                                        the new values properly
                                                        and quits if it has
                                                        done enough iterations

                                          sr            stores the main macro
                                                        in register r

                                                   lrxp executes the macro and
                                                        prints the stack

Đăng ký d lưu chỉ số của giá trị. Đăng ký n đếm số lần lặp hoàn thành. Đăng ký r lưu trữ macro chính. Đăng ký y lưu giá trị sau trong chuỗi, trong khi ngăn xếp chứa giá trị trước đó trong chuỗi.

Giải thích trực quan về những gì đang diễn ra trong vòng lặp lớn (giả sử bổ sung):

register: y=1     y=1   y=1    y=1   y=1    y=2
stack:     1      1 1    2     2 1   1 2     1
               ly     +     ly     r     sy

Việc kiểm tra để xác định xem nên cộng hay trừ lấy modulo hai bộ đếm và sử dụng thủ thuật này để thực hiện nếu sau đó xây dựng khác.

Ở cuối ngăn xếp chứa một số duy nhất, giá trị mong muốn, được in bằng p .

(Tôi mới tham gia dc, vì vậy tôi hy vọng sẽ có một số cải tiến rõ ràng được thực hiện ở đây.)


0

ForceLang , 153 byte

def s set
s a 1
s b 1
s p 1
s k io.readnum()
if k=0
goto b
label a
s c b.mult p
s c a+c
s a b
s b c
s p p.mult -1
s k k+-1
if k
goto a
label b
io.write a

0

Turtlèd , 35 byte

#112-1_--_1-2#?:[*l+].(-r'1)(_"-2")

0 được lập chỉ mục

Giải trình:

#112-1_--_1-2#                      the 12 values of sequence. - is -1, _ is -2
              ?:                    input a number and move right that many
                [*l+]               move back to the asterisk on start cell, 
                                    increment sting pointer by amount moved
                     .              write pointed char
                      (-r'1)        if it was -, move right, write 1
                            (_"-2") if it was _, write "-2"
      [print grid]

Hãy thử trực tuyến!


0

ABCR, 43 byte

)AAB)ABB..A))A..A)AA(ABB.)A+A)))AiB5aAb(Bxo

Giải thích: phần đầu tiên ( )AAB)ABB..A))A..A)AA(ABB.)A+A)))A) thiết lập hàng đợi A để chứa [1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2], giữ tất cả các hàng đợi khác . iBlưu trữ thuật ngữ mong muốn của chúng tôi và vòng lặp 5aAb(Bxchu kỳ thông qua hàng đợi nhiều lần. oin mặt trước của hàng đợi dưới dạng số, sau đó sẽ là câu trả lời mong muốn của chúng tôi.


0

Mẻ, 49 byte

@cmd/cset/a"n=%1%%12,~!(n%%3)*(1|-!(n%%5*(n/4)))"

Lấy đầu vào là một tham số dòng lệnh. Giải thích: Dạng đóng sử dụng các quan sát sau:

  • Trình tự là chu kỳ với chu kỳ 12
  • Mỗi thuật ngữ thứ ba là ± 2 trong khi các điều khoản khác là ± 1
  • Các điều khoản sau phần ba là âm ngoại trừ bội số của 5 (sau khi giảm modulo 12)

Do đó, chúng tôi bắt đầu bằng cách giảm modulo 12 (để tiết kiệm 2 byte). Sau đó, chúng tôi giảm modulo ba và đảo ngược kết quả, bằng 1 cho bội số của 3 hoặc 0 nếu không. Sau đó, chúng tôi bit bit không phải là giá trị đó, cho chúng tôi -2 cho bội số của 3 hoặc -1 nếu không. Sau đó, chúng tôi giảm modulo 5 và chia riêng cho 4, đưa ra 0 cho các số hạng 1, 2, 3, 5, 10 và 12 (0). Đảo ngược và phủ định cho chúng ta -1 cho các giá trị đó và 0 cho các giá trị khác. Chúng tôi sau đó bitwise hoặc đó với 1 và nhân với phép tính trước đó.


0

TI-Basic, 26 byte

Thật không may, cách tiếp cận rất không thú vị. Tôi không thể tìm thấy bất cứ điều gì ngắn hơn. Danh sách này là 1 chỉ mục.

Input :{1,1,2,-1,1,-2:augment(Ans,-Ans:Ans(X

0

C #, 73 71 byte

Điều này sử dụng các giá trị 0 chỉ mục của n.

n=>{int a=1,b=1,i=0,r;for(;++i<n;){r=i%2>0?a+b:a-b;a=b;b=r;}return b;};

Phiên bản được định dạng:

Func<int, int> f = n =>
{
    int a = 1, b = 1, i = 0, r;

    for(; ++i < n;)
    {
        r = i % 2 > 0 ? a + b : a - b;
        a = b;
        b = r;
    }

    return b;
};
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.