¿Cuántos goles ha marcado Steven Gerrard?

8

Steven Gerrard nació el 30 de mayo de 1980. Ahora tiene 37 años. ¡Feliz cumpleaños Steven!

Para celebrar su aniversario, su objetivo es recordarle la cantidad de goles que anotó cada año en la Premier League de Liverpool.

No quiere recordar los goles marcados antes o después de jugar para el Liverpool. Es como marcar 0goles.

Entrada

El año de inicio de la temporada de fútbol.

Salida

El número de goles marcados por Steven durante esta temporada para el Liverpool.

Lista de temporadas y goles

1998–99     0
1999–2000   1   
2000–01     7   
2001–02     3   
2002–03     5   
2003–04     4   
2004–05     7   
2005–06     10  
2006–07     7   
2007–08     11  
2008–09     16  
2009–10     9   
2010–11     4   
2011–12     5   
2012–13     9   
2013–14     13  
2014–15     9

Ejemplo

Input    Output
2002     5
2017     0
1990     0
2014     9

Este es el por lo que gana el envío más corto en bytes en cada idioma. Se alientan las explicaciones.

Weedoze
fuente
¿Tenemos que devolver 0 si la fecha está fuera del rango o podemos lanzar una excepción?
TheLethalCoder
8
@TheLethalCoder Steven Gerrard prefiere decir que ha marcado 0goles. Sin excepción
Weedoze,

Respuestas:

3

05AB1E , 25 24 bytes

•3ßÎó‚4Ëǝï•17в15ÝƵÊØ+Ikè

Pruébalo en línea! o como un conjunto de pruebas

Explicación

•3ßÎó‚4Ëǝï•                 # push the number 69255401071877657848
           17в              # convert to list of base-17 digits
                            # produces the list [1,7,3,5,4,7,10,7,11,16,9,4,5,9,13,9,0]

              15Ý           # push the range [0 ... 15]
                 ƵÊØ+       # add the 303rd prime (1999) to each
                     Ik     # get the index of the input in this list
                            # or -1 if outside the range
                       è    # get the element at that index in first list
Emigna
fuente
21

JavaScript (ES6), 47 43 42 39 bytes

y=>+'0723135148933694'[y-1999]+y%20%9|0

¿Cómo?

Calculamos una aproximación x del número de metas para un año dado y con la fórmula:

x = y % 20 % 9

En realidad, esta es una aproximación muy mala, pero siempre es menor o igual que el valor esperado v y nunca menor que v - 9 , lo que permite codificar la diferencia con un solo dígito decimal.

y    | y % 20 | x = y % 20 % 9 | v  | v - x
-----+--------+----------------+----+------
1999 |     19 |              1 |  1 |     0
2000 |      0 |              0 |  7 |     7
2001 |      1 |              1 |  3 |     2
2002 |      2 |              2 |  5 |     3
2003 |      3 |              3 |  4 |     1
2004 |      4 |              4 |  7 |     3
2005 |      5 |              5 | 10 |     5
2006 |      6 |              6 |  7 |     1
2007 |      7 |              7 | 11 |     4
2008 |      8 |              8 | 16 |     8
2009 |      9 |              0 |  9 |     9
2010 |     10 |              1 |  4 |     3
2011 |     11 |              2 |  5 |     3
2012 |     12 |              3 |  9 |     6
2013 |     13 |              4 | 13 |     9
2014 |     14 |              5 |  9 |     4

Manifestación

Arnauld
fuente
Muy bien hecho.
Shaggy
Espere. ¿Está calculando el número de objetivos del año de entrada, en lugar de indexarlo en una base de datos codificada?
SIGSTACKFAULT
@Blacksilver Necesito una primera aproximación para reducir el rango de valores almacenados de 1-16 a 0-9 . Pero todavía hay una tabla de búsqueda codificada para almacenar las diferencias con estos valores calculados.
Arnauld
3

JavaScript, 44 bytes

y=>parseInt("173547a7bg9459d9"[y-1999],17)|0
tristan
fuente
1
Bienvenido a PPCG. Buena primera respuesta :)
Shaggy
1

PowerShell, 65 bytes

(($g=(1,7,3,5,4,7,10,7,11,16,9,4,5,9,13,9)["$args"-1999]),0)[!$g]

usa un formato ternario / matriz para devolver 0 si el año no está en la matriz.

Esto es tan largo porque PowerShell no tiene ningún else return 0formato, y se requiere la matriz completa, si él anotó 9 o menos goles en cada año, podríamos reducir mucho esto indexando en una cadena.

colsw
fuente
1

Bash, 97 93 Bytes

a=(1 7 3 5 4 7 10 7 11 16 9 4 5 9 13 9)
((2014<$1||$1<1999))&&(echo 0)||(echo $[a[$1-1999]])
DrnglVrgs
fuente
0

C #, 79 72 bytes

y=>new[]{0,1,7,3,5,4,7,10,7,11,16,9,4,5,9,13,9}[y>2014|y<1999?0:y-1998];
TheLethalCoder
fuente
0

Braingolf v0.6, 48 bytes

#ߎ-V173547#
792+82*945994+9&,0R!?1-[v>R]v_:0_|;

Esta es rara.

El personaje ߎtiene el ordinal 1998, haciendo el Braingolf sea literal para 1998, que luego se resta de la entrada.

Explicación:

#ߎ-V173547#
792+82*945994+9&,0R!?1-[v>R]v_:0_|;  Implicit input of n
#ߎ-                                  Subtract 1998 from n
   V                                 Create a new stack and switch to it
    173547                           Digit literals 1, 7, 3, 5, 4 and 7
          #<newline>                 Integer literal 10
792                                  Digit literals 7, 9 and 2
   +                                 Sum the last 2 items (9 and 2) to make 11
    82*                              Digit literals 8 and 2 multiplied to make 16
       9459                          Digit literals 9, 4, 5 and 9
           94+                       Digit literals 9 and 4 summed to make 13
              9                      Digit literal 9
               &,                    Reverse stack
                 0                   Digit literal 0
                  R                  Return to main stack
                   !?                If n != 0
                     1-              Decrement n
                       [...]         Loop, repeat n+1 times
                        v>           Move to next stack and rotate to the right
                          R          Return to main stack
                            v_       Move to next stack and output last item
                              :      Else
                               0_    Push zero and output
                                 |   Endif
                                  ;  Suppress implicit output
Skidsdev
fuente
0

JavaScript (ES6), 50 41 bytes

y=>+`0x${"06243696af8348c8"[y-1999]}`+1|0

Intentalo

f=
y=>+`0x${"06243696af8348c8"[y-1999]}`+1|0
oninput=_=>o.innerText=f(+i.value)
o.innerText=f(i.value=1998)
<input id=i type=number><p id=o>

Lanudo
fuente