Trump cần sự giúp đỡ của bạn để ngăn chặn Starman!


33

Một người đàn ông từ các vì sao đã đến Trái đất! May mắn thay, tổng thống Hoa Kỳ, Donald Trump, có một cái chết vô cực. Sử dụng cái chết này, anh ta có thể gợi lên một con số mà bạn , thị trưởng của Podunk , phải sử dụng để xác định ai sẽ được gửi đến để ngăn chặn kẻ xâm lược! Nhưng hãy cẩn thận, bạn chỉ có thể gửi một lượng byte hạn chế ở mặt sau của con ếch của bạn !

Đưa ra một đầu vào của người dùng (sẽ là một số nguyên dương), bạn phải trả về một chuỗi tùy thuộc vào loại mà số đó nằm trong.

  • Nếu số này là số Fibonacci , bạn phải xuất Ness .
  • Nếu số này là số Lucas , bạn phải xuất Lucas .
  • Nếu số là cả một số Lucas và một số Fibonacci , bạn phải đầu ra Travis .
  • Nếu con số này không phải aa số Lucas cũng không phải là số Fibonacci , bạn phải đầu ra Pippi .

Ví dụ

Dưới đây là một loạt các trường hợp thử nghiệm:

1 => Travis
2 => Travis
3 => Travis
4 => Lucas
5 => Không
6 => Pippi
7 => Lucas
8 => Không
610 => Không
722 => Pippi
843 => Lucas

Quy tắc

  • Đây là , câu trả lời ngắn nhất trong byte thắng.
  • Chương trình của bạn có thể là một chương trình đầy đủ hoặc một chức năng (n nặc danh).

Tiền thưởng

Có một số phần thưởng mà bạn có thể sử dụng để giúp chú ếch của bạn có được dữ liệu cho Tổng thống Trump nhanh hơn:

  • Đối với -15byte: Nếu số đầu vào là 2016, bạn phải xuất ra Trump, vì anh ta đang ở đỉnh cao của nhiệm kỳ tổng thống của mình.

29
Đối với hồ sơ, tôi không phải là một trong những Starmen.
El'endia Starman


@DavidCarraher Giống như cách một số định nghĩa bắt đầu chuỗi Fibonacci 0, 1trong khi những định nghĩa khác bắt đầu 1, 1, tôi tin rằng điều này phụ thuộc vào định nghĩa bạn sử dụng. Không có gì lạ khi thấy các số Lucas bắt đầu bằng 2, 1, ví dụ OEIS có cả hai phiên bản ( 1 , 2 ), nhưng phiên bản bắt đầu bằng 2 là giai đoạn định nghĩa đã đi cùng.
Sp3000

2
Phiếu bầu được cho là bị ẩn, nhưng tôi vẫn sẽ nói rằng tôi thực sự không thích chính trị và nó đã ảnh hưởng đến việc bỏ phiếu của tôi cho câu hỏi này. Người hỏi có thể loại bỏ chính trị khỏi câu hỏi hoặc ít nhất là giải thích cho tôi bất kỳ sự chơi chữ nào tôi có thể đã bỏ lỡ? Một tài liệu tham khảo chính trị được đưa vào thông số kỹ thuật cho tốt, nhưng nó vẫn có thể bị xóa khỏi tiêu đề.
John Dvorak

3
@JanDvorak: Tôi nghĩ rằng nó rất tặc lưỡi. Ví dụ, hãy xem xét rằng các nhiệm kỳ tổng thống là 4 năm và cuộc bầu cử tiếp theo là vào tháng 11 năm 2016. Nếu Trump đang ở đỉnh cao của nhiệm kỳ tổng thống vào năm 2016 ...
El'endia Starman

Câu trả lời:


4

Pyth, 59 - 15 = 44 byte

hoặc 42 byte sau khi sửa lỗi

&Qr@c."av�a�(s��kW���"\b?q2016Q4/hMst*2.uL,eNsNQ_BS2Q4

Hexdump:

0000000: 2651 7240 632e 2261 7601 c061 15dc 2873  &Qr@c."av..a..(s
0000010: fde0 6b57 8bd0 a1ed ed0f 225c 623f 7132  ..kW......"\b?q2
0000020: 3031 3651 342f 684d 7374 2a32 2e75 4c2c  016Q4/hMst*2.uL,
0000030: 654e 734e 515f 4253 3251 34              eNsNQ_BS2Q4

Hai ký tự đầu tiên ( &Q) là cần thiết vì lỗi phân tích cú pháp Pyth gây ra Qsau khi ."thất bại. Sửa chữa đã được áp dụng. Nếu trình thông dịch hậu sửa lỗi được cho phép, -2 byte.


Nếu không nén chuỗi không thể đọc được:

Pyth, 63 - 15 = 48 byte

49 byte không có Trump

@c"Pippi Ness Lucas Travis Trump")?nQ2016/hMst*2.uL,eNsNQ_BS2Q4

Phòng thử nghiệm

Khá đơn giản, chỉ cần tạo các chuỗi, sao chép một chuỗi và kiểm tra tư cách thành viên.

Chuỗi được tạo bằng cách bắt đầu bằng [1, 2][2, 1], sau đó áp dụng quy tắc MySpace.


9

Julia, 146 142 121 120 byte

n->split("Pippi Lucas Ness Travis")[2any(isinteger,sqrt([5n^2+4,5n^2-4]))+(n∈[2;[(g=golden)^i+(-g)^-i for i=1:n]])+1]

Điều này tạo ra một hàm không tên trả về boolean. Để gọi nó, đặt tên cho nó, vd f=n->....

Ung dung:

function trump(n::Integer)
    # Determine if n is a Fibonacci number by checking whether
    # 5n^2 ± 4 is a perfect square
    F = any(isinteger, sqrt([5n^2 + 4, 5n^2 - 4]))

    # Determine if n is a Lucas number by generating Lucas
    # numbers and testing for membership
    # golden is a built-in constant containing the golden ratio
    L = n  [2; [golden^i + (-golden)^-i for i = 1:n]]

    # Select the appropriate Earthbound charater using array
    # indexing on a string split into an array on spaces
    return split("Pippi Lucas Ness Travis")[2F+L+1]
end

Đã khắc phục sự cố và lưu 7 byte nhờ Glen O!


7

Mathicala 143 156 - 15 (tiền thưởng) = 141 byte

Với 2 byte được lưu nhờ vào LegionMammal978.

t_~g~l_:=(r=1<0;n=1;While[(z=l@n)<=t,If[z==t,r=1>0];n++];r);a=g[k=Input[],LucasL];
b=k~g~Fibonacci;Which[k==2016,Trump,a&&b,Travis,a,Lucas,b,Ness,2<3,Pippi]

1
FalseTruecó thể được thay thế bằng 1<01>0hô hấp.
LegionMammal978


5

Trăn 2, 107

f=lambda i,n=input():abs(5*n*n+i)**.5%1>0
print["Travis","Lucas","Ness","Pippi"][f(4)*f(-4)+2*f(20)*f(-20)]

Điều quan trọng là hai kiểm tra hoàn toàn đối xứng cho các số Fibonacci và Lucas:

  • nlà một số Fibonacci chính xác nếu 5*n*n+4hoặc 5*n*n-4là một hình vuông hoàn hảo
  • nlà một số Lucas chính xác nếu 5*n*n+20hoặc 5*n*n-20là một hình vuông hoàn hảo

Trang web này có bản phác thảo bằng chứng .

Vì vậy, sản lượng phụ thuộc vào các giá trị của 5*n*n+iđể i{4,-4,20,-20}. Hàm fkiểm tra một giá trị của i, bằng cách kiểm tra xem giá trị tương ứng không có căn bậc hai số nguyên Có absđể tránh lỗi lấy gốc của âm cho n=1, i=-20.

Hàm flấy giá trị của số nđể kiểm tra từ STDIN. Python chỉ đánh giá điều này một lần, không phải một lần cho mỗi lần gọi hàm.

Cho dù số đó không phải là Fibonacci được đánh giá là f(4)*f(-4)sử dụng boolean ẩn để chuyển đổi số và tương tự không phải là Lucas, và chuỗi tương ứng được thực hiện. Nếu không gian dấu được cho phép, chuỗi xen kẽ sẽ ngắn hơn.


Các bản phác thảo bằng chứng là một liên kết chết.
SQB

@SQB Trang dường như đã bị sập, tôi không thể tìm lại được.
xnor

4

Python 2, 117 byte

F=[1]
L=[2,1]
n=input()
exec 2*n*"F,L=L+[sum(L[-2:])],F;"
print["Pippi","Lucas","Ness","Travis"][(n in F)*2+(n in L)]

Đối với danh sách chuỗi, "Pippi Lucas Ness Travis".split()có cùng độ dài.


3

CJam, 58 55 54 byte

ri5Zbe!f{1${_-2>:++}*&!}2b"Travis Ness Lucas Pippi"S/=

Cách tiếp cận ngây thơ của việc tạo ra các số Fibonacci và Lucas sau đó đếm các lần xuất hiện trong cả hai, chuyển đổi thành nhị phân và chọn chuỗi thích hợp.

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


3

Nghiêm túc, 69 byte

,;;r`;F@2+F+`M2@q@#"%d="%£MΣ@f0≤2*+["Pippi","Lucas","Ness","Travis"]E

Trước thử thách này, Nghiêm túc có phần dựng sẵn f(chỉ số theo số Fibonacci, -1 nếu không phải là số Fibonacci) ... nhưng không phải là chỉ mục trong danh sách hoặc "nằm trong danh sách"! (Kể từ khi được thêm vào í.)

Kết quả là, đây là những gì tôi dành để tìm kiếm nếu đầu vào là một số Fibonacci:

,                              f0≤

Đây là những gì tôi dành để tạo ra một danh sách các số Lucas:

  ;r`;F@2+F+`M2@q

Và đây là những gì tôi dành để tìm nếu đầu vào nằm trong danh sách các số Lucas:

 ;                @#":%d:="%£MΣ

Đó là một chuỗi được định dạng bằng cách sử dụng ký hiệu% của Python thành một cái gì đó giống như :610:=và được chuyển đổi thành một hàm, sau đó được ánh xạ qua mảng và được tóm tắt. (Các số Lucas là duy nhất, vì vậy tổng luôn là 0 hoặc 1.)

Cảm ơn @Mego cho bit cuối cùng với định dạng chuỗi.


3

Perl, 133 (146-15 =) 131 (144-15 =) 129 (136-15 =) 121 byte

+1 byte cho -ncờ.

$a=$d=1;$b=$c=2;$f+=$_==$a,$l+=$_==$c,($a,$b,$c,$d)=($b,$a+$b,$d,$c+$d)while$a<$_*9;say$_-2016?(Pippi,Ness,Lucas,Travis)[$f+$l*2]:Trump

Với dòng mới sau dấu chấm phẩy, để dễ đọc:

$a=$d=1;$b=$c=2;
$f+=$_==$a,$l+=$_==$c,($a,$b,$c,$d)=($b,$a+$b,$d,$c+$d)while$a<$_*9;
say$_-2016?(Pippi,Ness,Lucas,Travis)[$f+$l*2]:Trump

Bản giới thiệu:

llama@llama:...code/perl/ppcg64476trump$ for x in 1 2 3 4 5 6 7 8 610 722 843 2016; do echo -n "$x => "; echo $x | perl -n trump.pl; done
1 => Travis
2 => Travis
3 => Travis
4 => Lucas
5 => Ness
6 => Pippi
7 => Lucas
8 => Ness
610 => Ness
722 => Pippi
843 => Lucas
2016 => Trump

Thủ thuật:

  • Bạn có thể tự hỏi tại sao các biến của tôi được đặt tên $a, $b, $%, và $d. Đây là một câu hỏi xuất sắc! Trong thực tế, nó cho phép tôi lưu một byte.

    (stuff) ... ,$l+=$_==$%while$a<$_

    ngắn hơn một byte so với

    (stuff) ... ,$l+=$_==$c while $a<$_

    Điều này không còn áp dụng vì tôi đã đánh mã mã của mình bằng cách sắp xếp lại mọi thứ, khiến việc thay đổi tên biến thành không còn lưu byte. Tôi đã thay đổi nó trở lại để tên biến có ý nghĩa một lần nữa.

  • $_-2?$f+$l*2:3là thú vị nhẹ. Về cơ bản, tôi đã phải sử dụng trường hợp đặc biệt 2cho các số Lucas vì chương trình của tôi kiểm tra xem một số có phải là số Lucas sau khi "cập nhật" các số Fibonacci và Lucas không. Vì vậy, 2được coi là một số không Lucas. $_-2?foo:barlà một char ngắn hơn $_==2?bar:foo. Điều tương tự được sử dụng cho các 2016bài kiểm tra.

    Điều này cũng không còn đúng nữa vì tôi đã có thể cơ cấu lại chương trình để không yêu cầu đặc biệt 2. Nhưng tôi vẫn sử dụng $_-2016?stuff:Trumpthay vì $_==2016?Trump:stuff, đó là một byte dài hơn.

  • Nói về điều này, bạn có thể tự hỏi làm thế nào tôi thực hiện tái cấu trúc này. Tôi chỉ làm cho chương trình thực hiện nhiều lần lặp hơn 9 lần so với mức cần thiết, chỉ tốn 2 byte ( *9) nhưng cho phép tôi đưa ra các giả định ở nơi khác giúp công cụ chơi golf giảm bớt.

  • Bởi vì các biến mặc định là 0

    $f+=$_==$a

    ngắn hơn

    $f=1if$_==$a
  • Perl hỗ trợ barewords, vì vậy tôi không phải trích dẫn bất kỳ chuỗi nào của mình (\ o /).


Nó không phải là hai byte ngắn hơn?
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Bản thân chương trình là 132 byte và tôi đã thêm một vì nó cần được gọi bằng -ncờ (như đã lưu ý trong câu trả lời).
Doorknob

Ồ, tôi hiểu rồi. Không những gì -ncờ làm gì?
Conor O'Brien

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Nó giả định một while(<>) { ... }vòng lặp xung quanh chương trình của bạn. Xem: tài liệu Perl .
Doorknob

1
@DomHastings Anh ấy không như vậy, nhưng tôi <s> đã chuyển đổi </ s> đã thuyết phục anh ấy thử perl.
một spaghetto

2

Julia, 101 100 byte

n->split("Pippi Lucas Ness Travis")[[2;1]⋅(sum(i->[i[];trace(i)].==n,Any[[1 1;1 0]].^(0:n)).>0)+1]

Ung dung:

function f(n)
  k=Any[[1 1;1 0]].^(0:n) # Produces characteristic matrices of Fibonacci
                          # numbers from 0 to n
  F=sum(i->i[]==n,k)      # Check if n is a Fibonacci number by checking
                          # the first value in each matrix for n
  L=sum(i->trace(i)==n,k) # Check if n is a Lucas number by checking
                          # the trace of each matrix for n
  I=[2;1]⋅[F;L]+1         # Calculate 2F+L+1, which is the index for the next step
  S=split("Pippi Lucas Ness Travis") # Creates array with four strings
                          # saves a byte compared with directly creating array
  return S[I]
      # This uses the above calculations to determine which of the four to return
end

Giải pháp tuyệt vời! Cách tiếp cận ma trận và dấu vết là thiên tài. Thật tệ khi {}cú pháp thay thế Any[]bị phản đối; Điều đó sẽ tiết kiệm một vài byte.
Alex A.

2

Octave, 93 byte

@(n){'Pippi','Lucas','Ness','Travis'}{(1:2)*any(~rem(real(sqrt(5*n^2+[-20,-4;20,4])),1)).'+1}

Cách tiếp cận này tương tự như câu trả lời MATLAB của tôi với ngoại lệ là Octave cho phép bạn lập chỉ mục trực tiếp thành một mảng mới:

{'a', 'b', 'c'}{2}    %// b

2

MATL (Không cạnh tranh), 57 55 54 (67-15) = 52 byte

20Kht_vi2^5*+X^Xj1\~a2:*sG2016=-'Lucas Ness Travis Trump Pippi'Ybw)

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

Giải trình

Một lần nữa, logic tương tự với các câu trả lời khác của tôi ở đâyở đây .

20      % Number literal
K       % Retrieve the number 4 from the K clipboard (the default value)
h       % Horizontal concatenation to produce [20 4]
t       % Duplicate elements
_v      % Negate and vertically append elements (yields [20, 4; -20 -4])
i2^     % Explicitly grab the input and square it
5*      % Multiply by 5
+       % Add this to the matrix ([20, 4; -20 -4])
X^      % Take the square root
Xj      % Ensure that the result is a real number
1\      % Get the decimal component
~       % Create a logical arrays where we have TRUE when no remainder
a       % For each column determine if any element is TRUE
2:      % Create the array 1:2
*       % Perform element-wise multiplication with boolean
s       % Sum the result to yield an index
G       % Explicitly grab the input (again)
2016=   % Check to see if it is 2016 (yields TRUE (1) if equal)
-       % Then subtract the boolean from the index. Since 2016 is NOT a
        % Fibonacci or Lucas number, the original index is 0. Subtracting
        % this boolean, will make this index now -1. For all other non-2016
        % numbers this will have no effect on the index.
'Lucas Ness Travis Trump Pippi' % Create the possible strings values 
        % Note: the 0 index wraps around to the end hence Pippi being at the end.
        % The next to last entry ('Trump') is ONLY accessible via a -1 index as
        % discussed above
Yb      % Split at the spaces to create a cell array
w       % Flip the top two stack elements
)       % Retrieve the desired value from the cell array

1

C ++ 11, 176 + 15 (#incoide) = 191

#include<mutex>
[](int n){std::function<int(int,int)>c=[&](int f,int s){return f-s>n?0:s-n?c(s,f+s):1;};int l=c(2,1),f=c(1,1);l&f?puts("Travis"):l?puts("Lucas"):f?puts("Ness"):puts("Pippi");}

Vô dụng với cách sử dụng. Tôi có thể thêm lời giải thích nếu được yêu cầu vào ngày mai, gtg đi ngủ ngay bây giờ!

#include <functional>
#include <cstdio>
int main()
{
    auto r = [](int n)
    {
        std::function<int(int, int)> c = [&](int f, int s)
        {
            return f - s > n ? 0 : f - n ? c(s, f + s) : 1;
        };
        int l = c(2, 1), f = c(1, 1);
        l & f ? puts("Travis") : l ? puts("Lucas") : f ? puts("Ness") : puts("Pippi");
    };

    for (int i : { 1, 2, 3, 4, 5, 6, 7, 8, 610, 722, 843 })
    {
        printf("%i - ", i); r(i);
    }
}

1
@sysreq Tôi không nghĩ đó là tiền thưởng, chỉ là tuyên bố bao gồm.
giai đoạn

@phase Tôi biết, tôi đang chia kích thước byte thành hai phần (mã + bao gồm), khi tôi chỉ đăng bài và không phải toàn bộ chương trình.
Zereges

1

Javascript (ES6), 108 byte

x=>(f=(a,x,y)=>a==y||a==x?1:a<y?0:f(a,y,x+y),b=f(x,0,1),c=f(x,2,1),b&&c?'Travis':b?'Ness':c?'Lucas':'Pippi')

Chức năng tương tự cho Fibonnacci và Lucas. Đây là một hàm đệ quy lấy hai giá trị đầu tiên là init.


1

Java, 151 byte

Bạn có thể lập luận rằng Trump sẽ không bao giờ thuê ngoài quyết định quan trọng này, vì vậy chúng tôi sẽ không phải công khai phương thức này, tiết kiệm thêm 7 byte.

public String t(int n){return"Pippi,Lucas,Ness,Travis".split(",")[2*f(n,1,1)+f(n,2,1)];}int f(int a,int x,int y){return a==x||a==y?1:a<y?0:f(a,y,x+y);}

Ungolfed bao gồm cả lời mời chính

public class Trump {

    //Test Invokation
    public static void main(String[] args) {
        int[] n = {1, 2, 3, 4, 5, 6, 7, 8, 610, 722, 843, 2016 };
        for(int i = 0; i < n.length; ++i) {
            System.out.println(""+ n[i] + " => " + new Trump().t(n[i]));
        }
    }


    public String t(int n) {        
        return "Pippi,Lucas,Ness,Travis".split(",")[2*f(n,1,1)+f(n,2,1)];               
    }
    int f(int a,int x,int y) {             
        return a==x||a==y?1:a<y?0:f(a,y,x+y);           
    }

}

Tôi không tìm thấy cách nào để thử nghiệm cho năm 2016 và trả lại "Trump" trong mã có ít hơn 15 byte mã.


Yêu dòng đầu tiên của lời giải thích của bạn!
Scott

1

C (gcc) ,  128   120   116  110 byte

a;b;o;f(n){for(o=b=0,a=1;a<=n;b=a+b,a=b-a)o|=(b==n)+2*(2*a+b==n);n=o?o-1?o-2?"Travis":"Lucas":"Ness":"Pippi";}

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

Giải trình

Hãy đặt tên F(n)cho số Fibonacci thứ L(n)n và số Lucas thứ n.
a, bF(n-1), F(n)tương ứng.
Sau đó, chúng ta có thể tính toán L(n) == F(n-1)+F(n+1) == 2*F(n-1) + F(n) == 2*a+b
Hàm này sẽ liên tiếp tính toán các số Fibonacci và Lucas, tối đa nvà kiểm tra xem ncó bất kỳ số nào trong số chúng không.
Nếu nlà số Fibonacci, bit thứ 1 osẽ được đặt thành 1
Nếu nlà số Lucas, bit thứ 2 osẽ được đặt thành 1
osau đó sẽ được sử dụng để xác định tên nào sẽ xuất ra

Chỉnh sửa

  • Đã lưu 8 byte bằng cách đánh golf điều kiện của vòng lặp for: bắt đầu từ lần lặp thứ hai, chúng ta có a<b<ca<a+c=L(n), vì vậy ( b<=n || a+c<=n ) => a<n. Tôi thực sự cần a<=nphải xử lý chính xácn=1
  • Đã lưu 4 byte nhờ vào trần nhà! (cũng đã sửa một lỗi, mã của tôi đã xuất ra "2 => Ness")
  • Đã lưu 6 byte:
    • 2 nhờ trần nhà một lần nữa
    • 4 bằng cách loại bỏ biến c, bằng F(n+1), vô dụng vì chúng ta đã có thể tính toán F(n+1)với ab

Đề xuất b+=athay vìb=a+b
trần

0

Perl 5.10, 119 - 15 (tiền thưởng) = 104 byte

$_=<>;$j=1;($i,$j)=($j,$i+$j)while$_>$i;say$_-2016?(Pippi,Lucas,Ness,Travis)[($_==$i)*2|$_==3*$j-4*$i|$_-1>>1==0]:Trump

Ung dung:

# Read line from stdin
$_ = <>;

# Find first Fibonacci number greater than or equal to input.
# Store this number in $i and the next Fibonacci number in $j.
$j = 1;
($i, $j) = ($j, $i + $j) while $_ > $i;

say $_ - 2016
  ? (Pippi,Lucas,Ness,Travis)[
      ($_ == $i) * 2 |          # Bitwise OR with 2 if Fibonacci number
      $_ == 3 * $j - 4 * $i |   # Bitwise OR with 1 if Lucas number >= 3
      $_ - 1 >> 1 == 0          # Bitwise OR with 1 if Lucas number <= 2
    ]
  : Trump

Điều này khai thác thực tế rằng

L(n-2) = 3 * F(n+1) - 4 * F(n)

là số Lucas lớn nhất thấp hơn hoặc bằng F (n).


0

Groovy, 149 byte

f={i->g={m,s->while(s[-2]<=m)s<<s[-2]+s[-1];s}
println(["Pippi","Ness","Lucas","Travis"][(g(i,[1,1]).contains(i)?1:0)+(g(i,[2,1]).contains(i)?2:0)])}

Mã kiểm tra:

[1,2,3,4,5,6,7,8,610,722,843].each {
    print "$it => "
    f(it)
}

glà một bao đóng tạo ra một danh sách các số dựa trên hạt giống ( s) và giá trị tối đa ( m). (g(i,[1,1]).contains(i)?1:0)+(g(i,[2,1]).contains(i)?2:0)tìm chỉ mục để sử dụng dựa trên số lượng là lucas hoặc Dailymotion.


0

MATLAB, 122 119 byte

@(n)subsref({'Pippi','Lucas','Ness','Travis'},substruct('{}',{(1:2)*any(~rem(real(sqrt(5*n^2+[-20,-4;20,4])),1)).'+1}))

Giải thích ngắn gọn

Đầu tiên chúng ta tạo một mảng ô chứa các giá trị cần in : {'Pippi', 'Lucas', 'Ness', 'Travis'}. Sau đó, để tìm ra giá trị nào sẽ hiển thị, chúng tôi kiểm tra xem liệu đó nlà số Fibonacci hay Lucas.

Đối với Fibonnaci, chúng tôi sử dụng công thức sau:

any(~rem(sqrt(5*n^2 + [-4 4]), 1))

Kiểm tra này để xem nếu một 5*n^2 + 4hoặc 5*n^2 - 4là một hình vuông hoàn hảo. Nếu anytrong số chúng là, thì đó là một số Fibonacci.

Công thức cho số Lucas rất giống với ngoại lệ mà chúng tôi sử dụng +/- 20 thay vì 4:

any(~rem(sqrt(5*n^2 + [-20 20]), 1))

Trong giải pháp này, tôi đã kết hợp hai trường hợp này thành một bằng cách sử dụng ma trận:

M = [-20 -4
      20  4]

Bằng cách áp dụng cùng một phương trình như ở trên, nhưng buộc anychỉ xem xét chiều thứ nhất, tôi nhận được một mảng logic hai phần tử trong đó nếu phần tử thứ nhất là truesố Lucas và nếu phần tử thứ hai là true, đó là số của Wikipedia .

any(~rem(sqrt(5*n^2 + [-20 -4;20 4]), 1))

Sau đó, để tính toán chỉ mục vào mảng ô ban đầu của tôi, tôi coi đây là một chuỗi nhị phân bằng cách thực hiện phép nhân phần tử của phép boolean này với [2^0, 2^1]hoặc đơn giản [1,2]. Và tổng hợp các yếu tố. Rõ ràng tôi phải thêm 1 vì lập chỉ mục một lần của MATLAB.

index = (1:2) * any(~rem(real(sqrt(5*n^2+[-20,-4;20,4])),1)).' + 1;

Sau đó, tôi phải sử dụng subsrefsubstructlập chỉ mục vào mảng ô ban đầu để có được kết quả cuối cùng.


0

JavaScript (ES6), 97 byte

x=>[['Pippi','Lucas'],['Ness','Travis'],f=(a,x,y=1)=>a>x?f(a,y,x+y):a==x||a==1][+f(x,0)][+f(x,2)]

Các a==1kiểm tra là cần thiết nếu không tôi không nhận thấy rằng 1 là một số Lucas.



0

05AB1E , 39 37 (52 - 15 phần thưởng) byte

2016Qi.•ªb‚•ë>ÅG¹å_¹ÅF¹åi.•F_ïk|»9•ë.•?®B'5n•}2äsè}™

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

2016Qi                # If the input equals 2016:
      .•ªb‚•          #  Push "trump" to the stack
ë                     # Else:
 >ÅG                  #  List of Lucas numbers up to and including the input+1
    ¹å                #  Check if the input is in this list (1 if truthy; 0 if falsey)
      _               #  Invert the boolean (0→1 and 1→0)
 ¹ÅF                  #  List of Fibonacci numbers up to and including the input
    ¹åi               #  If the input is in this list:
       .•F_ïk|»9•     #   Push string "travisnessi" to the stack
    ë                 #  Else:
     .•?®B'5n•        #   Push string "pippilucas" to the stack
    }                 #  Close the inner if-else
     2ä               #  Split the string into two parts
                      #   i.e. "travisnessi" → ["travis","nessi"]
                      #   i.e. "pippilucas" → ["pippi","lucas"]
       sè             #  Index the Lucas result into the list of two strings
}                     # Close the outer if-else
 ™                    # And output the top of the stack in title-case
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.