Trump'ın Starman'ı durdurmak için yardımına ihtiyacı var!


33

Yıldızlardan bir adam Dünya'ya geldi! Neyse ki, Amerika Birleşik Devletleri Başkanı Donald Trump, sonsuz taraflı bir ölüme sahip. Bu kalıp kullanarak, o bir numara hokkabaz sen , belediye başkanı Podunk , işgalci durdurmak için gönderileceği kişiyi belirlemek için kullanması gerekir! Ancak dikkatli olun, kurbağanın arkasına sadece sınırlı miktarda bayt gönderebilirsiniz !

Bir kullanıcı girişi (pozitif bir tamsayı olacak) verildiğinde, numaranın hangi kategorideki olduğuna bağlı olarak bir dize döndürmeniz gerekir.

  • Sayı ise Fibonacci sayı , çıkış gerekir Ness .
  • Sayı ise Lucas sayı , çıkış gerekir Lucas .
  • Sayı ise hem bir Lucas sayı ve Fibonacci sayı , çıkış gerekir Travis .
  • Sayı ne aa Lucas sayısı ne de bir Fibonacci numarası değilse, Pippi'yi vermelisiniz .

Örnekler

İşte birkaç test vakası:

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

kurallar

  • Bu , bayt cinsinden en kısa cevabı kazanır.
  • Program tam bir program veya (anonim) bir işlev olabilir.

Bonuslar

Kurbağanızın verilerini Başkan Trump'a daha hızlı götürmesine yardımcı olmak için kullanabileceğiniz birkaç bonus var:

  • İçin -15bayt: girdi sayı ise 2016şunları yapmanız gerekir çıktı Trump, onun başkanlığı zirvesinde olduğu gibi.

29
Kayıt için ben o yıldızlardan biri değilim .
El'endia Starman,


@DavidCarraher Bazı tanımların Fibonacci serisini 0, 1diğerleri ile başlarken nasıl başlattığı gibi 1, 1, bunun kullandığınız tanıma bağlı olduğuna inanıyorum. Lucas sayıları ile başlayan görmek nadir değildir 2, 1, örneğin OEIS'in her iki sürümü de vardır ( 1 , 2 ), ancak 2 ile başlayan, tanım aşamasının geçtiği nokta.
Sp3000

2
Oy gizli olması gerekiyordu, ama yine de ben gerçekten siyaset ve öyle yapmak söylerim olan bu sorunda benim oylama etkiledi. Soru soran aklın sorumluluğu siyasetten kaldırır mı yoksa en azından kaçırmış olabileceğim herhangi bir cezayı açıklar mı? Spesifikasyona iyilik için politik bir referans yapılır, ancak yine de başlıktan çıkarılabilir.
John Dvorak

3
@JanDvorak: Çok dilde yanak olduğunu düşünüyorum. Örneğin, başkanlık süreleri 4 yıldır ve bir sonraki seçim Kasım 2016 olduğunu Trump ... 2016 yılında başkanlığının zirvesinde ise düşünün
El'endia Starman

Yanıtlar:


4

Pyth, 59 - 15 = 44 bayt

veya bir hata giderildikten sonra 42 bayt

&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

İlk iki karakter ( &Q) başarısız Qolduktan sonra yapılan Pyth ayrıştırma hatası nedeniyle gereklidir .". Düzeltme uygulandı. Hata düzeltme sonrası tercümana izin verilirse, -2 bayt.


Okunamayan dizge sıkıştırması olmadan:

Pyth, 63 - 15 = 48 bayt

Trump'sız 49 bayt

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

Test odası

Oldukça basit, sadece dizileri oluşturun, birini kopyalayın ve üyeliği kontrol edin.

Diziler başlayarak tarafından oluşturulan [1, 2]ve [2, 1]ve sonra Fibonacci kuralını uygulamak.


9

Julia, 146 142 121 120 bayt

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]

Bu, bir boole döndüren adsız bir işlev oluşturur. Aramak için bir isim verin, örneğin f=n->....

Ungolfed:

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

Sorun giderildi ve Glen O! Sayesinde 7 byte kurtarıldı!


7

Mathematica 143 156 - 15 (bonus) = 141 bayt

LegionMammal978 sayesinde 2 bayt kaydedildi.

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
Falseve Truedeğiştirilebilir 1<0ve 1>0sırası ile.
LegionMammal978


5

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

Anahtar, Fibonacci ve Lucas sayıları için yalnızca iki aritmetik kontrol:

  • ntam bir kare ise 5*n*n+4ya 5*n*n-4da tam kare
  • nLucas sayı tam olarak eğer olduğunu 5*n*n+20ya 5*n*n-20mükemmel bir kare

Bu sitede ispat çizimleri var .

Yani, çıkış değerlerine bağlıdır 5*n*n+iiçin ide {4,-4,20,-20}. Fonksiyon fdeğeri test eden itekabül eden değer eğer kontrol ederek, yok bir tam sayı karekökünü sahip abssadece bir negatif kök alarak bir hatayı önlemek için vardır n=1, i=-20.

İşlev STDIN'den test edilecek fsayı değerini alır n. Python bunu işlev çağrısı başına yalnızca bir kez değerlendirir.

Sayının Fibonacci olmadığı f(4)*f(-4), sayısız dönüşümün örtülü boolean'ı kullandığı ve benzer şekilde Lucas için olmadığı gibi değerlendirilir ve karşılık gelen dize alınır. İzleyen boşluklara izin verilirse, dize serpiştirme daha kısa olacaktır.


İspat eskizleri ölü bir bağlantı.
SQB

@SQB Sayfa açılmış görünüyor, bir daha bulamıyorum.
xnor

4

Python 2, 117 bayt

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

Dize listesi "Pippi Lucas Ness Travis".split()için aynı uzunluktadır.


3

CJam, 58 55 54 bayt

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

Fibonacci ve Lucas sayıları üretmek için naif bir yaklaşım, sonra her ikisinde de sayıları sayma, ikiliye dönüştürme ve uygun dizgiyi seçme.

Çevrimiçi deneyin .


3

Cidden, 69 bayt

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

Bu zorluktan önce, ciddiyetle yerleşik f (Fibonacci sayılarıyla dizin, Fibonacci sayılarıyla değilse -1) ... ama bir listede ya da "listede" bulunmuyordu! (O zamandan beri eklendi í.)

Sonuç olarak, girdi bir Fibonacci numarasıysa bulmak için harcadığım şey budur:

,                              f0≤

Lucas sayıları listesi oluşturmak için harcadığım şey bu:

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

Ve girdi Lucas sayıları listesinde ise bulmak için harcadığım para:

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

Python'un% notasyonu kullanılarak biçimlendirilmiş bir dize. :610:= dönüştürülür ve bir işleve dönüştürülür; bu daha sonra dizinin üzerinde eşlenir ve toplanır. (Lucas numaraları benzersizdir, bu nedenle toplam her zaman 0 veya 1'dir.)

Dize biçimlendirmeli son bit için @Mego'ya teşekkürler.


3

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

-nBayrak için +1 bayt .

$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

Noktalı virgüllerden sonraki yeni satırlarda okunabilirlik için:

$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

Demo:

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

Püf nokta:

  • Benim değişkenler adlandırılır neden merak ediyor olabilir $a, $b, $%ve $d. Bu mükemmel bir soru! Aslında, bir bayt kurtarmamı sağlıyor.

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

    bir bayt daha kısa

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

    Bu artık geçerli değil çünkü kodumu bazı şeyleri yeniden düzenleyerek değiştirdim, değişken isminin artık bayttan tasarruf etmemesine neden oldum. Değişken isimlerinin tekrar anlaşılması için geri değiştirdim.

  • $_-2?$f+$l*2:3hafif ilginçtir. Temel olarak, 2Lucas sayıları için özel bir durum vardı çünkü programım Fibonacci ve Lucas sayıları "güncelledikten" sonra sayının bir Lucas sayısının olup olmadığını kontrol eder . Bu yüzden 2Lucas olmayan bir sayı olarak kabul edildi. $_-2?foo:barbir karakterden daha kısa $_==2?bar:foo. 2016Test için aynı şey kullanılır .

    Bu da artık doğru değil çünkü programı özel kılıf gerektirmeyecek şekilde yapılandırabilirim 2. Ama yine de $_-2016?stuff:Trumpyerine kullanıyorum$_==2016?Trump:stuff bir bayt daha uzun olan .

  • Bunlardan bahsetmişken, bu yeniden yapılanmayı nasıl yaptığımı merak ediyor olabilirsiniz. Programın gereğinden 9 kat daha fazla tekrar yapmasını sağladım, bu sadece 2 byte'a ( *9) mal oldu, ancak başka yerlerde golf oynamaya yardımcı olacak varsayımlarda bulunmama izin veriyor.

  • Çünkü değişkenler varsayılan olarak sıfırdır,

    $f+=$_==$a

    daha kısa

    $f=1if$_==$a
  • Perl korkakları destekliyor, bu yüzden dizelerimden herhangi birini alıntı yapmak zorunda değilim (\ o /).


İki bayt daha kısa değil mi?
Conor O'Brien,

@ CᴏɴᴏʀO'Bʀɪᴇɴ Programın kendisi 132 bayttır ve bir tane ekledim, çünkü -nbayrakla birlikte çağrılması gerekiyor (cevabında belirtildiği gibi).
Doorknob

Ah anlıyorum. -nBayrak ne yapar ?
Conor O'Brien,

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ while(<>) { ... }Programınızın etrafında bir döngü varsayar . Bakınız: Perl docs .
Doorknob

1
@HomHastings O değildi, ama ben <s> dönüştürüldüm </s> onu perl denemeye ikna ettim.
Bir spaghetto

2

Julia, 101 100 bayt

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

Ungolfed:

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

Müthiş bir çözüm! Matris ve iz yaklaşımı dahi. {}Alternatif sözdiziminin Any[]kullanımdan kaldırılması çok kötü . Bu birkaç bayt kurtarır.
Alex A.

2

Octave, 93 bayt

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

Bu yaklaşım benim OctaL'ın doğrudan yeni bir dizine endekslemenizi sağlaması haricinde MATLAB cevabına benzer :

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

2

MATL (Rekabet Etmeyen), 57 55 54 (67-15) = 52 bayt

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

Çevrimiçi Deneyin!

açıklama

Yine, burada ve buradaki diğer cevaplarıma benzer bir mantık .

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 (#include) = 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");}

Kullanım ile affetmez. Yarın talep edilirse açıklama ekleyebilirim, şimdi yatağa gtg!

#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 Bunun bonus için olduğunu sanmıyorum, sadece include deyimi.
faz

@phase Biliyorum, sadece program sonrası fonksiyonlar yazarken, bütün programı değil, bayt boyutunu iki parçaya böldüm (code + include).
Zereges

1

Javascript (ES6), 108 bayt

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

Fibonnacci ve Lucas için de aynı işlev. İlk iki değeri init olarak alan özyinelemeli bir işlevdir.


1

Java, 151 bayt

Trump'ın bu çok önemli kararı asla dış kaynak kullanmayacağını, bu nedenle yöntemi halka açık hale getirmek zorunda kalmayacağımızı ve başka bir 7 byte tasarruf edeceğinizi iddia edebilirsiniz.

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

Test-ana çağırma dahil olmak üzere Ungolfed

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

}

2016'yı test etmek ve kodda 15 bayttan küçük kodda "Trump" ı döndürmek için şu ana kadar bir yol bulamadım.


Açıkladığın ilk satırı seviyorum!
Scott

1

C (gcc) ,  128   120   116  110 bayt

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

Çevrimiçi deneyin!

açıklama

Diyelim isim F(n)n-inci Fibonacci sayı ve L(n)n-inci Lucas numarasını.
a, bOlan F(n-1), F(n)sırasıyla.
Sonra hesaplayabiliriz. L(n) == F(n-1)+F(n+1) == 2*F(n-1) + F(n) == 2*a+b
Bu işlev Fibonacci ve Lucas sayılarını ardışık olarak hesaplar ve bunlardan herhangi birinin nolup olmadığını kontrol neder.
Eğer nbir Fibonacci sayı, 1. bit oayarlanır 1
If nLucas sayı, 2 bit oolarak ayarlanacaktır1
o sonra çıkışa hangi isim belirlemek için kullanılacaktır

Düzenle

  • For-döngüsünün durumunu golf yaparak 8 bayt kurtardı: ikinci yinelemeden başlıyoruz, a<b<cve a<a+c=L(n)öyle ( b<=n || a+c<=n ) => a<n. Aslında a<=ndoğru işlem yapmam gerekiyordun=1
  • Ceilingcat sayesinde 4 byte kurtarıldı! (ayrıca bir hata düzeltildi, kodum "2 => Ness" yazıyordu)
  • 6 bayt kaydedildi:
    • 2 tekrar tavana teşekkürler
    • 4 değişkeni kaldırarak c, e eşit F(n+1)zaten hesaplayabilir çünkü yararsız olan F(n+1)ile aveb

Öner b+=ayerineb=a+b
ceilingcat

0

5,10, 119 - 15 (bonus) = 104 bayt

$_=<>;$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

Ungolfed:

# 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

Bu gerçeği sömürüyor

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

F (n) 'den küçük veya ona eşit en büyük Lucas sayısıdır.


0

Groovy, 149 bayt

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

Test kodu:

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

gbir tohum ( s) ve bir maksimum değere ( m) dayanan bir sayılar listesi üreten bir kapatmadır . (g(i,[1,1]).contains(i)?1:0)+(g(i,[2,1]).contains(i)?2:0)Lucas veya fibonacci olan sayıya göre kullanılacak endeksi bulur.


0

MATLAB, 122 119 bayt

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

Kısa açıklama

Biz ilk yazdırmak için değerler içeren bir hücre dizisi oluşturmak: {'Pippi', 'Lucas', 'Ness', 'Travis'}. Sonra hangi değeri göstereceğimizi bulmak için n, bir Fibonacci veya Lucas numarası olup olmadığını kontrol ederiz .

Fibonnaci için aşağıdaki formülü kullanıyoruz:

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

Bu kontroller görürseniz birine 5*n^2 + 4veya 5*n^2 - 4bir tam kare bulunmaktadır. Eğerany öyleyse, o zaman bir Fibonacci numarasıdır.

Lucas numarası formülü 4 yerine +/- 20 kullandığımız durumlar dışında çok benzer:

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

Bu çözümde bu iki vakayı matris kullanarak bir araya getirdim:

M = [-20 -4
      20  4]

Yukarıdakilerle aynı denklemi uygulayarak, ancak anyyalnızca ilk boyutu göz önünde bulundurmaya zorlayarak , ilk eleman ise true, o zaman bir Lucas numarası ve ikinci eleman ise true, bir fibonacci numarası olduğu iki elemanlı bir mantıksal dizi elde ederim. .

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

Sonra indeksi ilk hücre dizime hesaplamak için, bu boolenin element şeklinde çarpımını yaparak [2^0, 2^1]ya da basitçe yaparak bunu bir ikili dizi olarak ele alıyorum [1,2]. Ve elementleri toplayın. Açıkçası MATLAB'ın tek tabanlı endekslemesi nedeniyle 1 eklemeliyim.

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

Sonra son sonucu elde etmek için ilk hücre dizisine endekslemek subsrefve kullanmak zorundayım substruct.


0

JavaScript (ES6), 97 bayt

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

a==1Çek yoksa ben 1 Lucas sayı olduğunu fark yoktur gereklidir.



0

05AB1E , 39 37 (52 - 15 bonus) bayt

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

Çevrimiçi deneyin veya tüm test durumlarını doğrulayın .

Açıklama:

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