Zalicz szczęśliwego nowego roku 2016!

40

Twój wkład będzie liczbą całkowitą między 1970 a 2090 (włącznie), reprezentującą rok. Twój program powinien wypisać następny rok, w którym Nowy Rok przypada w tym samym dniu tygodnia, co rok wejściowy.

Przypadki testowe:

Poniżej znajdują się przykładowe dane wejściowe i wyjściowe

2001 => 2007
2047 => 2058
2014 => 2020
1970 => 1976
1971 => 1982
1977 => 1983
2006 => 2012

20% Premia: Wyjście z dnia tygodnia Nowego Roku

2001 => 2007 (Mon)
2047 => 2058 (Tue)
2014 => 2020 (Wed)
1970 => 1976 (Thu)
1971 => 1982 (Fri)
1977 => 1983 (Sat)
2006 => 2012 (Sun)

30% Premia: WyjścieAdvance Happy New Year, <year>

2010 => Advance Happy New Year, 2016

50% Bonus: Wykonaj oba powyższe bonusy

2010 => Advance Happy New Year, 2016 (Fri)

Napisz program, który odczytuje dane wejściowe ze STDIN lub akceptuje argumenty wiersza poleceń, lub funkcję, która przyjmuje argument.

Uwaga: Dodaj link, aby przetestować kod, jeśli to możliwe.

Tabela liderów:

Vasu Adari
źródło
6
Wydaje mi się, że każde wyzwanie związane z datami wymaga obliczenia lat przestępnych jako podproblemu i robi się nieaktualne.
xnor
Powiązane: to pytanie .
Addison Crump,
@xnor Gdyby tak nie było, byłby to po prostu +7. Tj. „Za szeroki”
Erik the Outgolfer,
@EriktheGolfer Nie. Kiedy napisałem ten komentarz, moja odpowiedź była zaakceptowana.
Dennis,

Odpowiedzi:

1

Galaretka, 9 bajtów

%4*3%7+5+

Jest to monadyczny łańcuch, który przyjmuje jako argument wejściowy argument liczby całkowitej. Wykorzystuje mój (x+5+(x%4)**3%7)algorytm.

Wypróbuj tutaj . Chociaż jest to aktualna wersja Jelly, działa również w tej wersji , która poprzedza wyzwanie. (Dzięki @Dennis!)

lirtosiast
źródło
To jest niesamowite! Mogę potwierdzić, że działa z tą wersją interpretera Jelly, która poprzedza wyzwanie.
Dennis
31

Mathematica, 45 37 27 24 bajtów

#+5[6,6,11][[#~Mod~4]]&

Ulepszenia dzięki @ MartinBüttner (10 bajtów) i @ChipHurst (kolejne 3 bajty).

jaskółka oknówka
źródło
7
Och, wow. Wydaje się, że nikt nie zauważył tego wzoru, ale się sprawdza.
Lynn
4
Oto nieco krótsza wersja:#+5[6,6,11][[#~Mod~4]]&
Chip Hurst,
@ChipHurst bardzo sprytny z 5[6, 6, 11][[0]]:)
martin
18

CJam, 21 12 11 bajtów

{_9587Cb=+}

@martin znalazł bardzo prostą metodę!

Wypróbuj tutaj .

EDYCJA: Dzięki, Dennis!

Lynn
źródło
1
@ Mauris Czy możesz dodać wyjaśnienie?
Vasu Adari,
@Vasu: Ten kod jest anonimową funkcją, która implementuje tę samą 5 6 6 11sztuczkę, co w innych odpowiedziach, ale lista jest zakodowana jako „cyfry 9587 w podstawie 12” .
Lynn
Mam to, dzieki. Chciałem, żebyś dodał wyjaśnienie, aby osoby, które sprawdzą twoją odpowiedź, mogły zrozumieć, jak to działa w języku wrt.
Vasu Adari,
10

gs2, 12 bajtów

V@¶4☻s%☺♀i50

Tłumaczenie mojej odpowiedzi CJam. Jak zwykle zakodowane w CP437. Wypróbuj online !

Lynn
źródło
Link prowadzi do kodu, który produkuje 2spooky4me, a jeśli wytnę i wkleję powyższy kod, otrzymam niewłaściwy rok: imgur.com/VAkXT0k (przez „zły rok”, to znaczy dostaję rok wcześniej niż zamierzony rok)
question_asker
Zapomniałem bajtu. Spróbuj teraz.
Lynn
Zredagowałem też link.
Lynn
Fajnie, teraz działa
question_asker
8

JavaScript (ES6), 50 49 20 bajtów (bez bonusów)

a=>a+[5,6,6,11][a%4]

Algorytm @martin okazuje się być znacznie mniejszy, więc poszedłem z nim.

Wybrałem podejście matematyczne, ponieważ JavaScript jest zwykle pełna. Kod jest na tyle krótki, że premie wydłużają go.

Oto moja poprzednia odpowiedź (49 bajtów) i moja oryginalna odpowiedź (50 bajtów):

F=(a,b=a)=>((a+--a/4|0)-(b++/4+b|0))%7?F(++a,b):b

F=(a,b=a)=>(f=c=>(c--+c/4|0)%7)(a)-f(++b)?F(a,b):b

Działają, biorąc rok i obliczając liczbę (0–6) reprezentującą „początkowy dzień roku”. Ponieważ zakres dat tego wyzwania mieści się w przedziale lat, które są zgodne z prostymi regułami dotyczącymi lat przestępnych (bez pomijania w 2000 r.), Obliczenie jest dość proste. W takim razie wystarczy porównać przyszłość, aby znaleźć lata, które zaczynają się od tej samej wartości. Rekurencja okazała się najbardziej zwięzłym sposobem na zrobienie tego.

Mwr247
źródło
7

Pyth, 14 12 11 bajtów

+QC@"♣♠♠♂"Q

Cztery bajty w ciągu powinny być 05 06 06 0B.

EDYCJA: Dzięki, FryAmTheEggman!

EDYCJA: Dzięki, Dennis!

Lynn
źródło
6

JavaScript (ES6), 104 bajty - 50% bonus = 52

y=>eval('for(a=0;a!=(b=(new Date(""+y++)+"").slice(0,3));a=a||b)`Advance Happy New Year, ${y} (`')+b+")"

Wyjaśnienie

y=>
  eval(`                  // eval enables for loop without {} or return
    for(
      a=0;                // a = first day of input year
      a!=                 // check if the day of the current year is equal to the first
        (b=(new Date(     // b = day of current year
          ""+y++)+"")     // cast everything as strings!
            .slice(0,3)); // the first 3 letters of the date string are the day name
      a=a||b              // set a to the day on the first iteration
    )

      // return the string
      \`Advance Happy New Year, \${y} (\`
  `)+b+")"

Test

użytkownik 81655
źródło
6

Kod maszynowy Z80, 12 bajtów

Procedura Z80, która ma być przechowywana 0000h, wywoływana z wejściem in HL, a wszystkie inne rejestry usuwane:

.org 0000h
              ; Bytes   ; Explanation
  ;---------------------------------------------------------------
  DEC B       ; 05      ; 
  LD B, 6     ; 06 06   ;   
  DEC BC      ; 0B      ;
  LD A, 3     ; 3E 03   ;   A = 3
  AND L       ; A5      ;   A = input & 3
  LD E, A     ; 5F      ;   A = input & 3     DE = input & 3
  LD A, (DE)  ; 1A      ;   A = [input & 3]   DE = input & 3
  LD E, A     ; 5F      ;   A = [input & 3]   DE = [input & 3]
  ADD HL, DE  ; 19      ;   HL = input + offset
  RET         ; C9      ;

Pierwsze trzy instrukcje to „NOP”, ale są indeksowane jako dane w dalszej części kodu. Po powrocie wyjście jest włączone HL.

Lynn
źródło
Tak, dodałem go do postu.
Lynn
Nie wygląda to dobrze w latach 2097 i 2098, które wymagają uzupełnień odpowiednio 7 i 12.
Toby Speight,
1
PO twierdzi, że rok wejściowy jest gwarantowany na lata 1970–2090.
Lynn
6
Naprawdę nie lubię pytań, które zmieniają się po odpowiedzi!
Toby Speight,
2
Czy możesz określić, że wejście jest w, DEa zatem możesz użyć LD A, 3; AND E; LD L, A; LD L, (HL);?
Neil,
5

Python 3, 140 100 102 84,5 154 * 0,5 = 77 bajtów

Prawdopodobnie mógłbym napisać lepsze rozwiązanie z algorytmem Sakamoto, ale na razie to wystarczy

Miałem rację. Oto implementacja wykorzystująca algorytm Sakamoto.

def s(y):
 d=lambda j:(j+j//4)%7
 for i in range(y,y+15):
  if d(i)==d(y-1):return"Advance Happy New Year, %d (%s)"%(-~i,"SMTWTFSuouehranneduit"[d(i)::7])

Wyjaśnienie:

def day_of_the_week(year):
    return (year + year//4 - 1 + 0 + 1) % 7
    # The month code for January is 0, and you add 1 from January *1*.
    # The -1 is to correct for starting on Saturday 
    # and so that it cancels out the 1 from January 1.

def new_years(this_year):
# But in Sakamoto's algorithm, if the month is January or February, we must subtract 1.
    weekdays = "SunMonTueWedThuFriSat"
    for item in range(this_year, this_year + 15):
        if day_of_the_week(this_year - 1) == day_of_the_week(item):
            day = weekdays[day_of_the_week(item)*3 : day_of_the_week(item)*3+3]
            return "Advance Happy New Year, %d (%s)"%(item + 1, day)
        # So we subtract from every year we check, including this_year
        # And add 1 back in at the end
        # And print the greeting, the year, and the corresponding day of the week
Sherlock9
źródło
Zaktualizowałem pytanie. Nie musisz sprawdzać przez sto lat.
Vasu Adari,
1
Co powiesz na w="SMTWTFSuouehranneduit"drukowanie, a następnie drukowanie w[d(i)::7]?
Lynn
4

Poważnie, 35 17 bajtów

[5,6,6,11] trik ratuje dzień.

4,;)%[5,6,6,11]E+

Wypróbuj online

Wyjaśnienie:

4,;)%[5,6,6,11]E+
4,;)%              push input, input % 4
     [5,6,6,11]E   push (input % 4)th element of [5,6,6,11]
                +  add to the input

Stara wersja:

,;;D`45/*≈7@%`;╝ƒ╗35*r+`╛ƒ╜=`M1@íu+

Wypróbuj online

Wyjaśnienie:

,;;D`45/*≈7@%`;╝ƒ╗35*r+`╛ƒ╜=`M1@íu+
,;;                                  push 3 copies of the input (n)
   D                                 decrement the top copy of n
    `45/*≈7@%`;╝                     push Sakamoto's algorithm as a function and save a copy in register 1
                ƒ╗                   call Sakamoto's algorithm function and save result in register 0
                  35*r+              push [n, n+1, ..., n+14]
                       `    `M       map the function:
                        ╛ƒ╜=           push Sakamoto's algorithm, call, push 1 if equal to value in register 0 else 0
                              1@í    get the index of the first 1
                                 u+  increment and add n

Algorytm Sakamoto:

45/*≈7@%
45/*      multiply by 5/4
    ≈     floor
     7@%  mod 7
Mego
źródło
4

C, 31 bajtów

Po edycji pytania, które ogranicza zakres wprowadzania do 1970-2090, staje się to dość trywialne:

f(x){return"\5\6\6\13"[x%4]+x;}

Bez lat, które nie przeskakują, istnieje prosta sekwencja odstępów 5,6,6,11 dla pierwszego powtórzenia tego samego dnia.

Kompletne rozwiązanie pierwotnego problemu (nieograniczone do 2090), 90 bajtów:

f(x){return(x-1)%100>89&&(x+9)/100%4?"\6\14\5\6\6\6\6\7\14\6"[x%10]+x:"\5\6\6\13"[x%4]+x;}

Program testowy:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    while (*++argv)
        printf("Advance Happy New Year, %d\n", f(atoi(*argv)));
    return !argc;
}

Testowe uruchomienie:

$ ./66656 2001 2047 2014 1970 1971 1977 2006
Advance Happy New Year, 2007
Advance Happy New Year, 2058
Advance Happy New Year, 2020
Advance Happy New Year, 1976
Advance Happy New Year, 1982
Advance Happy New Year, 1983
Advance Happy New Year, 2012
Toby Speight
źródło
4

R, 143 136 * 0,5 = 68 bajtów

G=function(y)strftime(paste(y,1,1,sep='-'),'%a')
d=seq(y<-scan(),y+14);sprintf("Advance Happy New Year, %i (%s)",d[G(d)==(w=G(y))][2],w)

Użyj %Adla pełnej nazwy dnia zamiast `% a, zależy od pożądanego stanu.

R, 120 * 0,7 = 84 bajtów

G=function(y)as.POSIXlt(paste(y,1),,"%Y %j")$wday
d=seq(y<-scan(),y+14);cat("Advance Happy New Year,",d[G(d)==G(y)][2])

R, 90 bajtów

G=function(y)as.POSIXlt(paste(y,1),,"%Y %j")$wday
d=seq(y<-scan(),y+14);d[G(d)==G(y)][2]

Wszystkie powyższe odpowiedzi są pochodnymi pracami opartymi na odpowiedzi @plannapus. Używanie ;separatora, aby uniknąć potrzeby sourcepliku lub uruchomić go jako skrypt w wierszu polecenia.

Tensibai
źródło
1
+1 Zupełnie zapomniałem weekdays, miło.
plannapus,
@plannapus Dzięki :) (policzyłem nowe wiersze, pytałem w rzeczywistości system plików, ponieważ jestem pod Windowsem, to 2 bajty, ale nie mam na końcu nowego wiersza, który powinien mieć plik POSIX, więc sprawiedliwie jest zachować go w ten sposób faktycznie)
Tensibai,
3

R, 145 bajtów -50% -> 72,5

y=scan();F=function(y)format(as.POSIXct(paste(y,1),,"%Y %j"),"%a");x=y+1;while(F(x)!=F(y))x=x+1;sprintf("Advance Happy New Year, %i (%s)",x,F(x))

Przykłady:

> y=scan();F=function(y)format(as.POSIXct(paste(y,1),,"%Y %j"),"%a");x=y+1;while(F(x)!=F(y))x=x+1;sprintf("Advance Happy New Year, %i (%s)",x,F(x))
1: 2006
2: 
Read 1 item
[1] "Advance Happy New Year, 2012 (Sun)"
> y=scan();F=function(y)format(as.POSIXct(paste(y,1),,"%Y %j"),"%a");x=y+1;while(F(x)!=F(y))x=x+1;sprintf("Advance Happy New Year, %i (%s)",x,F(x))
1: 1977
2: 
Read 1 item
[1] "Advance Happy New Year, 1983 (Sat)"
> y=scan();F=function(y)format(as.POSIXct(paste(y,1),,"%Y %j"),"%a");x=y+1;while(F(x)!=F(y))x=x+1;sprintf("Advance Happy New Year, %i (%s)",x,F(x))
1: 2014
2: 
Read 1 item
[1] "Advance Happy New Year, 2020 (Wed)"

R, 97 bajtów (bez premii)

y=scan();F=function(y)format(as.POSIXct(paste(y,1),,"%Y %j"),"%w");x=y+1;while(F(x)!=F(y))x=x+1;x

Wcięte, z nowymi liniami:

y = scan() #Takes input from stdin
F = function(y)format(as.POSIXct(paste(y,1),,"%Y %j"),"%w") #Year to Weekday
x = y+1
while(F(x) != F(y)) x = x+1
x

Przypadki testowe:

> y=scan();F=function(y)format(as.POSIXct(paste(y,1),,"%Y %j"),"%w");x=y+1;while(F(x)!=F(y))x=x+1;x
1: 1977
2: 
Read 1 item
[1] 1983
> y=scan();F=function(y)format(as.POSIXct(paste(y,1),,"%Y %j"),"%w");x=y+1;while(F(x)!=F(y))x=x+1;x
1: 2006
2: 
Read 1 item
[1] 2012
> y=scan();F=function(y)format(as.POSIXct(paste(y,1),,"%Y %j"),"%w");x=y+1;while(F(x)!=F(y))x=x+1;x
1: 2016
2: 
Read 1 item
[1] 2021
plannapus
źródło
Nie rozumiem tego pragnienia wejścia na jedną brzydką linię, zwrot karetki nie jest najbardziej kosztowny niż ;...
Tensibai
możesz uratować 1 znak usuwając pierwszy y=scan;i używając x=y<-scan()+1, myślę
Tensibai
i możesz zaoszczędzić jeszcze siedem, używając as.POSIXlt(paste(y,1),,"%Y %j")$wdayciała funkcyjnego
Tensibai,
@ Tensibai, jeśli nie umieścisz go w jednym wierszu i nie wkleisz go bezpośrednio do konsoli, scanodczyta w drugim wierszu jako dane wejściowe. x=y<-scan()+1z 2014 roku jako stdin daje x = y = 2015 i 2015 (czyli przyporządkowanie jest y <- scan()+1) i jeśli spróbujesz zrobić x=1+y<-scan()to daje błąd ( Error in 1 + y <- scan() : target of assignment expands to non-language object), ponieważ stara się przypisać scan()do 1+y.
plannapus,
@Tensibai Jeśli chodzi o twoją ostatnią radę, wynikiem ...$wdayjest numer dnia tygodnia: ale tutaj potrzebuję nazwy dnia tygodnia, aby móc drukowaćAdvance Happy New Year, 2012 (Sun)
plannapus
3

VBA, 130 * 0,50 = 65 bajtów

Sub k(y)
i=1
Do While Weekday(y+i)<>Weekday(y)
i=i+1
Loop
MsgBox "Advance Happy New Year," &y+i &WeekdayName(Weekday(y+i))
End Sub

VBA sprawia, że ​​znalezienie dni tygodnia jest takie proste ... Gdyby tylko nie było o tym tak Pełno.

JimmyJazzx
źródło
3

PHP, 120 139 bajtów - 50% = 60 bajtów

Funkcjonalne podejście:

$s=strtotime;for($d=date(D,$s(($y=$argv[1]).$_="-1-1"));$d!=date(D,$s(++$y.$_)););echo"Advance Happy New Year, $y ($d)";

Pobiera jedno wejście z wiersza poleceń, na przykład:

$ php ahny.php 2001

Sposób OOP wydaje się być dłuższy, jak zawsze (143 bajty):

$s=strtotime;for($d=date(D,$s($x=($y=$argv[1])."-1-1"));$d!=date(D,$s(++$y."-1-1")););echo"Advance Happy New Year, $y ($d)";

Edycje

  • Zapisano 18 bajtów . Zamiast dodawać jeden rok za pomocą modyfikatora PHP +1year, teraz po prostu zwiększam dany rok.
  • Zapisano 1 bajt , przechowując -1-1w zmiennej.
wstawić nazwę tutaj
źródło
3

C, wynik 53 52 (104 bajty)

f(x){x+="0116"[x%4];printf("Advance Happy New Year, %d (%.3s)",x-43,"MonTueWedThuFriSatSun"+x*5/4%7*3);}

Pomysł zapożyczony od Toby Speighta ; dodano wyświetlanie premii dnia tygodnia.

Skrócono ciąg znaków, przesuwając kody znaków do bardziej wygodnego zakresu. Musiałem wybrać odpowiednią kwotę przesunięcia (np. 43), aby kod obliczania krótkiego dnia tygodnia x*5/4%7działał.

anatolig
źródło
Rozumiem, że twój kod znaków ogranicza to do kodowania zgodnego z ASCII?
Toby Speight,
Tak. Kody powinny być większe niż 31, więc minimalna liczba do dodania do kodów wynosiłaby 27, podając ciąg " !!&".
anatolyg
2

Mathematica, 145 * 50% = 74 73,5 72,5 bajtów

d=DateValue;StringForm["Advance Happy New Year, `` (``)",NestWhile[#+1&,(a=#)+1,#!=#2&@@DateObject@{{a},{#}}~d~"DayName"&],{a}~d~"DayNameShort"]&

Korzysta ze standardowych funkcji daty.

LegionMammal978
źródło
2

Pyth, 23 bajty

L%+/b4b7.VQIqyby-Q1+1bB

Nie kwalifikuje się do żadnego z bonusów.

Wypróbuj tutaj .

Podobne do czystej odpowiedzi na python.

                        - Q = eval(input()) (autoassigned)
L                       - y = lambda b:
   /b4                  - b floordiv 4
  +   b                 - + b
 %     7                - mod 7


        .VQ             - for b in range(Q, infinate):
           Iqyby-Q1     - if y(b) == y(Q-1):
                   +1b  - print b+1
                      B - break
niebieski
źródło
2

Java, (1-.2) * 323 (1-.5) * 350 348 339 = 258,4 175 174 169,5 bajtów

import java.text.*;class D{public static void main(String[]a){long y=new Long(a[0]);int i=0;for(;!s(y).equals(s(y+(++i))););System.out.printf("Advance Happy New Year, %d (%s)",y+i,s(y+i));}static String s(long y){try{return new SimpleDateFormat("E").format(new SimpleDateFormat("d/M/yyyy").parse("1/1/"+y));}catch(Exception e){}return"";}}

Ugh.

Nie golfowany:

import java.text.*;
class D{
    public static void main(String[]a){
        long y=new Long(a[0]);
        int i=0;
        for(;!s(y).equals(s(y+(++i))););
        System.out.printf("Advance Happy New Year, %i (%s)",y+i,s(y+i));
    }
    static String s(long y){
        try{
            return new SimpleDateFormat("E").format(new SimpleDateFormat("d/M/yyyy").parse("1/1/"+y));
        }catch(Exception e){}
        return"";
    }
}

Wypróbuj online!

Dzięki @Kenney za wskazanie, że mogę skrócić dzięki new Longi printf! :RE

Addison Crump
źródło
long y=new Long(a[0])zapisuje 6 (12) bajtów, a użycie printfzapisuje kolejne 3 (6).
Kenney
2

Coreutils GNU, 52 51 49 bajtów

(Program 98 bajtów - bonus 50%)

seq -f$1-1-1\ %gyear 28|date -f- +'Advance Happy New Year, %Y (%a)'|sed /`date -d$1-1-1 +%a`/!d\;q

Dane wejściowe pochodzą z argumentu wiersza poleceń, a dane wyjściowe są wysyłane na standardowe wyjście.

Wyjaśnienie

# generate 28 input years from $1 + 1 onwards (28 is always enough)
seq -f '$1-1-1 %g year' 28
|
# convert all of these as potential outputs
date -f- +'Advance Happy New Year, %Y (%a)'
|
 # Select the first one where the dayname matches that of input year
sed "/`date -d$1-1-1 +%a`/!d;q"

Testowe uruchomienie:

Wszystkie ustawienia regionalne mogą być Club POSIX.

$ for i in 2001 2047 2014 1970 1971 1977 2006; do ./66656.sh $i; done
Advance Happy New Year, 2007 (Mon)
Advance Happy New Year, 2058 (Tue)
Advance Happy New Year, 2020 (Wed)
Advance Happy New Year, 1976 (Thu)
Advance Happy New Year, 1982 (Fri)
Advance Happy New Year, 1983 (Sat)
Advance Happy New Year, 2012 (Sun)

Ograniczenie: działa to tylko do roku 2147485519 (chociaż pytanie zostało zmienione, aby umożliwić dolny limit).

Toby Speight
źródło
2

MATL , 28 bajtów

i0:14+t1tI$YO8H$XO!st1)=f2))

Przykład

>> matl i0:14+t1tI$YO8H$XO!st1)=f2))
> 1970
1976

Kod wyjaśniony

i           % input year
0:14+       % vector with that year and the next 14
t1tI$YO     % first day of each year
8H$XO       % transform into three letters specifying weekday
!s          % sum those three letters to reduce to unique numbers
t1)         % get first of those numbers (corresponding to input year)
=f2)        % find index of second matching
)           % index with that to obtain output year
Luis Mendo
źródło
2

Perl 6 ,  70   23 bajtów

{($^a+1...{[==] ($a,$_).map: {Date.new(:year($_)).day-of-week}})[*-1]} # 70 bytes

{($_ X+5,6,6,11)[$_%4]} # 23 bytes

stosowanie:

for «2001 2047 2014 1970 1971 1977 2006 2010» {
  printf "%d => %d\n", $_, {($_ X+5,6,6,11)[$_%4]}( $_ )
}
2001 => 2007
2047 => 2058
2014 => 2020
1970 => 1976
1971 => 1982
1977 => 1983
2006 => 2012
2010 => 2016
Brad Gilbert b2gills
źródło
2

J, 14 bajtów

+5 6 6 11{~4&|
alephalpha
źródło
2

Japt, 12 bajtów

U+"♣♠♠♂"cU%4

Podobnie jak w przypadku odpowiedzi Pyth, cztery bajty w ciągu powinny być 05 06 06 0B. Wypróbuj online!

U+"♣♠♠♂"cU%4  // Implicit: U = input integer
  "♣♠♠♂"      // Take this string.
        cU%4  // Take the char code at U%4.
U+            // Add U.
              // Implicit: output last expression
ETHprodukcje
źródło
2
Dzięki za ten świąteczny prezent z nagrodą! Ale czy ktoś może mi powiedzieć, jak to zarobiłem?
ETHproductions
Przejrzałem historię. Najwyraźniej OP próbował zdobyć nagrodę, ale zapomniał przyznać nagrodę, więc Społeczność zdecydowała się przekazać połowę reputacji na tę odpowiedź (myślę, że opiera swój wybór na ostatnich opiniach).
2

Galaretka , 14 bajtów

%4=0,3×-,5S++6

Wypróbuj online!

Do dzisiaj Jelly nie miała indeksowania tablic, więc powyższe będzie musiało wystarczyć. Od czasu ostatniego zatwierdzenia zaimplementowano indeksowanie tablicy jako , co daje następujące rozwiązanie ( 10 bajtów ).

ị6,6,11,5+

Wypróbuj online!

Dennis
źródło
1
Myślę, że Jelly może zaoszczędzić 7 znaków na stałych 10 ~ 16.
lirtosiast
1

C # (6.0) .Net Framework 4,6 173 bajtów - 30% = 121,1 bajtów

void n(int y)=>Console.Write($"Advance Happy New Year, {Enumerable.Range(1,15).Select(i=>new DateTime(y+i,1,1)).First(x=>x.DayOfWeek==new DateTime(y,1,1).DayOfWeek).Year}");
Stephan Schinkel
źródło
1

JavaScript ES7, 17 bajtów

a=>a+5+(a%4)**3%7

Po raz pierwszy używam JS. Znalazłem to za pomocą skryptu Python i uważam, że jest optymalny. Działa, ponieważ 0**3ma wartość 0 mod 7, 1**3a 2**3oba mają wartość 1 i 3**3wynosi 6.

lirtosiast
źródło
1
Czy operator potęgowania** nie jest funkcją ES7 ? A może używasz Babel ?
inserttusernamehere
@insertusernamehere Naprawiono.
lirtosiast
1

Python, 23 bajty

lambda a:a+5+(a%4)**3%7

Port mojej odpowiedzi JavaScript.

lirtosiast
źródło