¡Trump necesita tu ayuda para detener al Starman!

33

¡Un hombre de las estrellas ha venido a la Tierra! Afortunadamente, el presidente de los Estados Unidos, Donald Trump, tiene un dado infinito. ¡Usando este dado, puede evocar un número que usted , el alcalde de Podunk , debe usar para determinar quién debe ser enviado para detener al invasor! ¡Pero tenga cuidado, solo puede enviar una cantidad limitada de bytes en la parte posterior de su rana !

Dada una entrada del usuario (que será un número entero positivo), debe devolver una cadena dependiendo de en qué categoría se encuentre el número.

  • Si el número es un número de Fibonacci , debe generar Ness .
  • Si el número es un número de Lucas , debe generar Lucas .
  • Si el número es tanto un número de Lucas como un número de Fibonacci , debe generar Travis .
  • Si el número no es un número de Lucas ni un número de Fibonacci , debe generar Pippi .

Ejemplos

Aquí hay un montón de casos de prueba:

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

Reglas

  • Este es el , gana la respuesta más corta en bytes.
  • Su programa puede ser un programa completo o una función (no anónima).

Bonos

Hay un par de bonos que puedes usar para ayudar a tu rana a llevar los datos al presidente Trump más rápido:

  • Para -15bytes: si el número de entrada es 2016, debe dar salida Trump, ya que él está en la cima de su presidencia.
fase
fuente
29
Para el registro, no soy uno de esos Starmen.
El'endia Starman
@DavidCarraher Al igual que algunas definiciones comienzan con la serie Fibonacci 0, 1mientras otras comienzan 1, 1, creo que esto depende de la definición que use. No es raro ver que los números de Lucas comienzan 2, 1, por ejemplo, OEIS tiene ambas versiones ( 1 , 2 ), pero la que comienza con 2 es la fase de definición que ha seguido.
Sp3000
2
Se supone que los votos están ocultos, pero aún así diré que realmente no me gusta la política y que ha afectado mi votación sobre esta cuestión. ¿Le importaría al autor de la pregunta eliminar la política de la pregunta o al menos explicarme algún juego de palabras que me haya perdido? Una referencia política está integrada en la especificación para siempre, pero aún puede eliminarse del título.
John Dvorak
3
@ JanDvorak: Creo que es muy irónico. Por ejemplo, considere que los períodos presidenciales son de 4 años, y que las próximas elecciones son en noviembre de 2016. Si Trump está en la cima de su presidencia en 2016 ...
El'endia Starman el

Respuestas:

4

Pyth, 59-15 = 44 bytes

o 42 bytes después de que se solucionó un error

&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

Los primeros dos caracteres ( &Q) son necesarios debido a un error de análisis de Pyth que se produce Qdespués del ."error. Se ha aplicado la corrección. Si el intérprete post-corrección de errores está permitido, -2 bytes.


Sin compresión de cadena ilegible:

Pyth, 63-15 = 48 bytes

49 bytes sin Trump

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

Banco de pruebas

Bastante sencillo, solo genera las secuencias, duplica una y verifica la membresía.

Las secuencias se generan comenzando con [1, 2]y [2, 1], y luego aplicando la regla de Fibonacci.

isaacg
fuente
9

Julia, 146 142 121 120 bytes

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]

Esto crea una función sin nombre que devuelve un valor booleano. Para llamarlo, dale un nombre, por ejemplo f=n->....

Sin golf:

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

Se solucionó un problema y se guardaban 7 bytes gracias a Glen O!

Alex A.
fuente
7

Mathematica 143156-15 (bonificación) = 141 bytes

Con 2 bytes guardados gracias a 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]
DavidC
fuente
1
Falsey Truepuede ser reemplazado 1<0y 1>0respetuosamente.
LegionMammal978
7

Mathematica, 92 87 bytes

Inspirado por la respuesta de Sp3000 .

Travis[Ness,Lucas,Pippi][[{2,1}.Product[Abs@Sign[{Fibonacci@n,LucasL@n}-#],{n,0,2#}]]]&
alephalpha
fuente
5

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

La clave son dos controles puramente aritméticos para los números de Fibonacci y Lucas:

  • nes un número de Fibonacci exactamente si 5*n*n+4o 5*n*n-4es un cuadrado perfecto
  • nes un número de Lucas exactamente si 5*n*n+20o 5*n*n-20es un cuadrado perfecto

Este sitio tiene bocetos de prueba .

Entonces, la salida depende de los valores de 5*n*n+ifor iin {4,-4,20,-20}. La función fprueba un valor de i, verificando si el valor correspondiente no tiene una raíz cuadrada de número entero El absestá ahí solo para evitar un error de tomar la raíz de un negativo para n=1, i=-20.

La función ftoma el valor del número npara probar desde STDIN. Python solo evalúa esto una vez, no una vez por llamada de función.

Si el número no es Fibonacci se evalúa como el f(4)*f(-4)uso de la conversión implícita booleana a número y, de manera similar, no para Lucas, y se toma la cadena correspondiente. Si se permitieran espacios finales, el entrelazado de cuerdas sería más corto.

xnor
fuente
Los bocetos de prueba son un enlace muerto.
SQB
@SQB La página parece haberse caído, no puedo encontrarla de nuevo.
xnor
4

Python 2, 117 bytes

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

Para la lista de cadenas, "Pippi Lucas Ness Travis".split()tiene la misma longitud.

Sp3000
fuente
3

CJam, 58 55 54 bytes

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

Enfoque ingenuo de generar los números de Fibonacci y Lucas y luego contar las ocurrencias en ambos, convertir a binario y elegir la cadena adecuada.

Pruébalo en línea .

Sp3000
fuente
3

En serio, 69 bytes

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

Antes de este desafío, en serio tenía el builtin incorporado f(índice en números de Fibonacci, -1 si no un número de Fibonacci) ... ¡pero no indexado en una lista o "está en la lista"! (Desde entonces se ha agregado como í.)

Como resultado, esto es lo que paso buscando si la entrada es un número de Fibonacci:

,                              f0≤

Esto es lo que paso generando una lista de números de Lucas:

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

Y esto es lo que paso buscando si la entrada está en la lista de números de Lucas:

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

Esa es una cadena que se formatea usando la notación% de Python en algo así :610:=, y se convierte en una función, que luego se asigna sobre la matriz y se suma. (Los números de Lucas son únicos, por lo que la suma siempre es 0 o 1.)

Gracias a @Mego por ese último bit con el formato de cadena.

lirtosiast
fuente
3

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

+1 byte para la -nbandera.

$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

Con líneas nuevas después de punto y coma, para facilitar la lectura:

$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

Manifestación:

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

Trucos:

  • Es posible que se pregunte por qué mi variables se denominan $a, $b, $%, y $d. ¡Esa es una excelente pregunta! De hecho, me permite guardar un byte.

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

    es un byte más corto que

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

    Esto ya no se aplica porque jugué mi código reorganizando las cosas, lo que provocó que el cambio de nombre de la variable dejara de guardar bytes. Lo cambié de nuevo para que los nombres de las variables tengan sentido nuevamente.

  • $_-2?$f+$l*2:3Es ligeramente interesante. Básicamente, tuve que hacer un caso especial 2para los números de Lucas porque mi programa verifica si un número es un número de Lucas después de "actualizar" los números de Fibonacci y Lucas. Entonces 2se consideró un número que no era Lucas. $_-2?foo:bares un char más corto que $_==2?bar:foo. Lo mismo se usa para la 2016prueba.

    Esto ya no es así porque pude reestructurar el programa para que no requiriera una carcasa especial 2. Pero todavía uso en $_-2016?stuff:Trumplugar de $_==2016?Trump:stuff, que es un byte más.

  • Hablando de eso, te estarás preguntando cómo hice esta reestructuración. Acabo de hacer que el programa haga 9 veces más iteraciones de las necesarias, lo que solo cuesta 2 bytes ( *9) pero me permite hacer suposiciones en otros lugares que ayudan a las cosas del golf.

  • Debido a que las variables tienen un valor predeterminado de cero,

    $f+=$_==$a

    es más corto que

    $f=1if$_==$a
  • Perl admite palabras vacías, por lo que no tengo que citar ninguna de mis cadenas (\ o /).

Pomo de la puerta
fuente
¿No son dos bytes más cortos?
Conor O'Brien el
@ CᴏɴᴏʀO'Bʀɪᴇɴ El programa en sí tiene 132 bytes, y agregué uno porque necesita ser llamado con la -nbandera (como se indica en la respuesta).
Pomo de la puerta
Oh ya veo. ¿Qué hace la -nbandera?
Conor O'Brien
1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Asume un while(<>) { ... }ciclo alrededor de su programa. Ver: documentos de Perl .
Pomo de la puerta
1
@DomHastings No lo era, pero <s> convertí </s> lo convencí de que probara Perl.
un espagueti
2

Julia, 101 100 bytes

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

Sin golf:

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
Glen O
fuente
¡Impresionante solución! El enfoque de matriz y trazado es genial. Es una pena que la {}sintaxis alternativa Any[]esté en desuso; eso ahorraría un par de bytes.
Alex A.
2

Octava, 93 bytes

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

Este enfoque es similar a mi respuesta de MATLAB con la excepción de que Octave le permite indexar directamente en una matriz nueva:

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

MATL (no competidor), 57 55 54 (67-15) = 52 bytes

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

Pruébalo en línea!

Explicación

Nuevamente, una lógica similar a mis otras respuestas aquí y aquí .

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
Suever
fuente
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");}

Ungolfed con el uso. Puedo agregar una explicación si me lo solicitan mañana, ¡vaya a la cama ahora!

#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);
    }
}
Zereges
fuente
1
@sysreq No creo que sea por el bono, solo la declaración de inclusión.
fase
@phase Lo sé, estoy dividiendo el tamaño del byte en dos partes (código + incluir), cuando publico solo la función y no todo el programa.
Zereges
1

Javascript (ES6), 108 bytes

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

Misma función para Fibonnacci y Lucas. Es una función recursiva que toma los dos primeros valores como init.

Naouak
fuente
1

Java, 151 bytes

Se podría argumentar que Trump nunca externalizaría esta decisión crucial, por lo que no tendríamos que hacer público el método, ahorrando otros 7 bytes.

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

Sin golf, incluida la invocación de prueba principal

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

}

Hasta ahora no encontré ninguna manera de probar para 2016 y devolver "Trump" en el código que tiene menos de 15 bytes en el código.

janschweizer
fuente
Me encanta esa primera línea de tu explicación!
Scott
1

C (gcc) ,  128   120   116  110 bytes

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

Pruébalo en línea!

Explicación

Vamos a nombrar F(n)el enésimo número de Fibonacci y L(n)el enésimo número de Lucas.
a, bson F(n-1), F(n)respectivamente.
Luego podemos calcular L(n) == F(n-1)+F(n+1) == 2*F(n-1) + F(n) == 2*a+b
Esta función calculará sucesivamente los números de Fibonacci y Lucas, hasta n, y verificará si nes alguno de ellos.
Si nes un número de Fibonacci, el primer bit de ose establecerá en 1
Si nes un número de Lucas, el segundo bit de ose establecerá en 1
oluego se utilizará para determinar qué nombre emitir

Editar

  • Ahorré 8 bytes al jugar golf la condición del ciclo for: comenzando en la segunda iteración, tenemos a<b<cy a<a+c=L(n), entonces ( b<=n || a+c<=n ) => a<n. En realidad necesitaba a<=nmanejarlo correctamenten=1
  • ¡Guardado 4 bytes gracias a ceilingcat! (también corrigió un error, mi código estaba produciendo "2 => Ness")
  • 6 bytes guardados:
    • 2 gracias a ceilingcat nuevamente
    • 4 eliminando la variable c, igual a F(n+1), que era inútil ya que ya podemos calcular F(n+1)con ayb
Annyo
fuente
Sugerir en b+=alugar deb=a+b
ceilingcat
0

Perl 5.10, 119-15 (bonificación) = 104 bytes

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

Sin golf:

# 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

Esto explota el hecho de que

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

es el mayor número de Lucas menor o igual que F (n).

nwellnhof
fuente
0

Groovy, 149 bytes

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

Código de prueba:

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

ges un cierre que genera una lista de números basada en una semilla ( s) y un valor máximo ( m). (g(i,[1,1]).contains(i)?1:0)+(g(i,[2,1]).contains(i)?2:0)encuentra el índice a utilizar en función del número que son lucas o fibonacci.

J Atkin
fuente
0

MATLAB, 122 119 bytes

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

Breve explicacion

Primero creamos una matriz de celdas que contiene los valores para imprimir: {'Pippi', 'Lucas', 'Ness', 'Travis'}. Luego, para determinar qué valor mostrar, verificamos si nes un número de Fibonacci o Lucas.

Para Fibonnaci, utilizamos la siguiente fórmula:

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

Esto verifica si alguno 5*n^2 + 4o 5*n^2 - 4es un cuadrado perfecto. Si alguno anyde ellos es, entonces es un número de Fibonacci.

La fórmula para un número de Lucas es muy similar con la excepción de que usamos +/- 20 en lugar de 4:

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

En esta solución combiné estos dos casos en uno usando la matriz:

M = [-20 -4
      20  4]

Al aplicar la misma ecuación que las anteriores, pero forzar anya considerar solo la primera dimensión, obtengo una matriz lógica de dos elementos donde si el primer elemento es true, entonces es un número de Lucas y si el segundo elemento es true, es un número de Fibonacci .

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

Luego, para calcular el índice en mi matriz de celdas inicial, trato esto como una secuencia binaria realizando la multiplicación de este elemento booleano con [2^0, 2^1]o simplemente [1,2]. Y suma los elementos. Obviamente tengo que agregar 1 debido a la indexación basada en uno de MATLAB.

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

Luego tengo que usar subsrefe substructindexar en la matriz de celdas inicial para obtener el resultado final.

Suever
fuente
0

JavaScript (ES6), 97 bytes

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

El a==1cheque es necesario, de lo contrario no noto que 1 es un número de Lucas.

Neil
fuente
0

Jelly , 47 bytes - 15 = 32 (¿no compite ...?)

+2ḶÆḞ⁸eð+ị“©ḤʠhMṂƁÞḄṭAƓ»Ḳ¤µ2+С-⁸eḤ
“¡Ỵ¦»Ç⁼?⁽¥Ð

Pruébalo en línea!

Erik el Outgolfer
fuente
0

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

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

Pruébelo en línea o verifique todos los casos de prueba .

Explicación:

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
Kevin Cruijssen
fuente