Wie viele Tore hat Steven Gerrard erzielt?

8

Steven Gerrard wurde am 30. Mai 1980 geboren. Er ist jetzt 37 Jahre alt. Alles Gute zum Geburtstag Steven!

Um sein Jubiläum zu feiern, möchten Sie ihn daran erinnern, wie viele Tore er jedes Jahr in der Premier League für Liverpool erzielt hat.

Er möchte sich nicht an die Tore erinnern, die vor oder nach dem Spiel für Liverpool erzielt wurden. Es ist wie 0Tore zu schießen .

Eingang

Das Startjahr der Fußballsaison.

Ausgabe

Die Anzahl der Tore, die Steven in dieser Saison für Liverpool erzielt hat.

Liste der Jahreszeiten und Ziele

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

Beispiel

Input    Output
2002     5
2017     0
1990     0
2014     9

Dies ist so dass die kürzeste Übermittlung in Bytes in jeder Sprache gewinnt. Erklärungen sind erwünscht.

Weedoze
quelle
Müssen wir 0 zurückgeben, wenn das Datum außerhalb des Bereichs liegt, oder können wir eine Ausnahme auslösen?
TheLethalCoder
8
@ TheLethalCoder Steven Gerrard sagt lieber, dass er Tore 0geschossen hat. Keine Ausnahme
Weedoze

Antworten:

3

05AB1E , 25 24 Bytes

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

Probieren Sie es online aus! oder als Testsuite

Erläuterung

•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
quelle
21

JavaScript (ES6), 47 43 42 39 Byte

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

Wie?

Wir berechnen eine Näherung x der Anzahl der Ziele für ein bestimmtes Jahr y mit der Formel:

x = y % 20 % 9

Dies ist eigentlich eine sehr schlechte Annäherung, aber sie ist immer kleiner oder gleich dem erwarteten Wert v und niemals kleiner als v - 9 , wodurch die Differenz mit einer einzelnen Dezimalstelle codiert werden kann.

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

Demo

Arnauld
quelle
Sehr schön gemacht.
Shaggy
Warten. Sie berechnen die Anzahl der Ziele aus dem Eingabejahr, anstatt sie in einer fest codierten Datenbank zu indizieren?
SIGSTACKFAULT
@Blacksilver Ich benötige eine erste Annäherung, um den Bereich der gespeicherten Werte von 1-16 auf 0-9 zu verringern . Es gibt jedoch immer noch eine fest codierte Nachschlagetabelle, in der die Unterschiede zu diesen berechneten Werten gespeichert werden.
Arnauld
3

JavaScript, 44 Bytes

y=>parseInt("173547a7bg9459d9"[y-1999],17)|0
Tristan
quelle
1
Willkommen bei PPCG. Schöne erste Antwort :)
Shaggy
1

PowerShell, 65 Byte

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

verwendet ein ternäres / Array-Format, um 0 zurückzugeben, wenn das Jahr nicht im Array enthalten ist.

Dies ist so lang, weil Powershell kein else return 0Format hat und das gesamte Array erforderlich ist. Wenn er in jedem Jahr 9 oder weniger Tore erzielt, können wir dies erheblich reduzieren, indem wir stattdessen in eine Zeichenfolge indizieren.

colsw
quelle
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
quelle
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
quelle
0

Braingolf v0.6, 48 Bytes

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

Das ist komisch.

Der Charakter ߎhat die Ordnungszahl 1998, wodurch das Braingolf-Literal für 1998 wörtlich wird, das dann von der Eingabe abgezogen wird.

Erläuterung:

#ߎ-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
quelle
0

JavaScript (ES6), 50 41 Byte

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

Versuch es

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>

Zottelig
quelle