Selamat Tahun Baru Muka, 2016!


40

Masukan Anda akan berupa bilangan bulat antara tahun 1970 dan 2090 (inklusif), mewakili satu tahun. Program Anda harus menampilkan tahun berikutnya di mana Hari Tahun Baru jatuh pada hari yang sama dalam minggu sebagai tahun masukan.

Kasus uji:

Di bawah ini adalah contoh input dan output

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

20% Bonus: Keluarkan hari dalam minggu Hari Tahun Baru

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

30% Bonus: OutputAdvance Happy New Year, <year>

2010 => Advance Happy New Year, 2016

50% Bonus: Lakukan kedua bonus di atas

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

Tulis program yang membaca input dari STDIN atau menerima argumen baris perintah, atau fungsi yang mengambil argumen.

Catatan: Silakan tambahkan tautan untuk menguji kode Anda jika memungkinkan.

Papan peringkat:


6
Saya merasa seperti setiap tantangan tanggal tunggal mengharuskan melakukan perhitungan tahun kabisat sebagai subproblem, dan itu sudah basi.
xnor


@xnor Jika bukan itu masalahnya, itu hanya +7. Yaitu "terlalu luas"
Erik the Outgolfer

@EriktheGolfer No. Ketika saya menulis komentar itu, jawaban saya adalah yang diterima.
Dennis

Jawaban:


1

Jelly, 9 byte

%4*3%7+5+

Ini adalah rantai monadik yang mengambil argumen baris perintah integer sebagai input. Ini menggunakan (x+5+(x%4)**3%7)algoritma saya .

Coba di sini . Meskipun itu versi Jelly saat ini, itu juga berfungsi di versi ini , yang ada sebelum tantangan. (Terima kasih @Dennis!)


Ini luar biasa! Saya dapat mengonfirmasi bahwa ini berhasil dengan revisi penerjemah Jelly ini, yang ada sebelum tantangan.
Dennis

31

Mathematica, 45 37 27 24 byte

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

Perbaikan berkat @ MartinBüttner (10 byte), dan @ChipHurst (3 byte lebih lanjut).


7
Oh wow. Sepertinya tidak ada yang memperhatikan pola ini, tetapi berhasil.
Lynn

4
Ini versi yang sedikit lebih pendek:#+5[6,6,11][[#~Mod~4]]&
Chip Hurst

@ChipHurst sangat pintar dengan 5[6, 6, 11][[0]]:)
martin

18

CJam, 21 12 11 byte

{_9587Cb=+}

@martin menemukan metode yang sangat sederhana!

Coba di sini .

EDIT: Terima kasih, Dennis!


1
@Mauris Bisakah Anda menambahkan penjelasan?
Vasu Adari

@Vasu: Kode ini adalah fungsi anonim yang mengimplementasikan 5 6 6 11trik yang sama dengan yang digunakan dalam jawaban lain, tetapi daftar ini dikodekan sebagai "digit 9587 pada basis 12" .
Lynn

Terima kasih, terima kasih. Saya ingin Anda menambahkan penjelasan sehingga orang yang memeriksa jawaban Anda dapat memahami cara kerjanya bahasa wrt.
Vasu Adari

10

gs2, 12 byte

V@¶4☻s%☺♀i50

Terjemahan jawaban CJam saya. Dikodekan dalam CP437 seperti biasa. Cobalah online !


Tautan tersebut menuju ke kode yang menghasilkan 2spooky4me, dan jika saya memotong dan menempelkan kode di atas, saya mendapatkan tahun yang salah: imgur.com/VAkXT0k (oleh "tahun yang salah", maksud saya saya mendapatkan satu tahun lebih awal dari tahun yang dimaksudkan)
question_asker

Saya lupa satu byte. Coba sekarang.
Lynn

Saya mengedit tautannya juga.
Lynn

Keren, itu berfungsi sekarang
question_asker

8

JavaScript (ES6), 50 49 20 byte (tidak ada bonus)

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

Algoritma oleh @martin terbukti jauh lebih kecil, jadi saya mengikutinya.

Saya memilih pendekatan matematika karena JavaScript cenderung verbose. Kode ini cukup pendek sehingga bonus hanya membuatnya lebih lama.

Inilah jawaban saya sebelumnya (49 byte), dan jawaban asli saya (50 byte):

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

Mereka bekerja dengan mengambil tahun dan menghitung angka (0-6) untuk mewakili "hari awal tahun". Karena rentang tanggal untuk tantangan ini adalah dalam rentang tahun yang mengikuti aturan tahun kabisat sederhana (tidak ada yang terlewati pada tahun 2000), ini cukup mudah untuk dihitung. Maka itu hanya masalah membandingkan maju untuk menemukan tahun yang dimulai dengan nilai yang sama. Rekursi terbukti menjadi cara paling ringkas untuk melakukan ini.


7

Pyth, 14 12 11 byte

+QC@"♣♠♠♂"Q

Empat byte dalam string seharusnya 05 06 06 0B.

EDIT: Terima kasih, FryAmTheEggman!

EDIT: Terima kasih, Dennis!


6

JavaScript (ES6), 104 byte - 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+")"

Penjelasan

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+")"

Uji


6

Kode mesin Z80, 12 byte

Prosedur Z80 untuk disimpan 0000h, dipanggil dengan input HL, dan semua register lainnya dihapus:

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

Tiga instruksi pertama adalah "NOP", tetapi diindeks sebagai data nanti dalam kode. Setelah kembali, output dalam HL.


Yap, saya sudah menambahkannya ke posting.
Lynn

Tidak terlihat cocok untuk tahun 2097 dan 2098, yang masing-masing membutuhkan tambahan 7 dan 12.
Toby Speight

1
OP mengatakan tahun input dijamin berada dalam kisaran 1970-2090.
Lynn

6
Saya benar-benar tidak suka pertanyaan yang diubah setelah saya menjawab!
Toby Speight

2
Apakah Anda diizinkan menentukan bahwa inputnya ada DEdan karena itu Anda dapat menggunakannya LD A, 3; AND E; LD L, A; LD L, (HL);?
Neil

5

Python 3, 140 100 102 84.5 154 * 0,5 = 77 byte

Saya mungkin bisa menulis solusi yang lebih baik dengan algoritma Sakamoto, tetapi ini akan dilakukan untuk saat ini

Saya benar. Berikut ini adalah implementasi menggunakan algoritma 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])

Penjelasan:

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

Saya telah memperbarui pertanyaan. Anda tidak perlu memeriksa selama berabad-abad.
Vasu Adari

1
Bagaimana dengan w="SMTWTFSuouehranneduit"kemudian mencetak w[d(i)::7]?
Lynn

4

Serius, 35 17 byte

[5,6,6,11] Trik menyelamatkan hari.

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

Cobalah online

Penjelasan:

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

Versi lama:

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

Cobalah online

Penjelasan:

,;;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

Algoritma Sakamoto:

45/*≈7@%
45/*      multiply by 5/4
    ≈     floor
     7@%  mod 7

4

C, 31 byte

Setelah diedit ke pertanyaan yang membatasi rentang input hingga 1970-2090, ini menjadi sangat sepele:

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

Tanpa abad tanpa lompatan tahun, ada urutan 5,6,6,11 interval sederhana untuk pengulangan pertama pada hari yang sama.

Solusi lengkap untuk masalah asli (tidak dibatasi hingga 2090), 90 byte:

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 uji:

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

Uji coba:

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

4

R, 143 136 * 0,5 = 68 byte

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)

Gunakan %Auntuk nama hari penuh alih-alih `% a, tergantung pada status yang diinginkan.

R, 120 * 0,7 = 84 byte

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 byte

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

Semua jawaban di atas adalah karya turunan berdasarkan jawaban @plannapus. Menggunakan ;pemisah untuk menghindari perlunya sourcefile atau menjalankannya sebagai skrip pada baris perintah.


1
+1 Saya benar-benar lupa weekdays, bagus.
plannapus

@plannapus Terima kasih :) (Saya menghitung baris baru, meminta sistem file pada kenyataannya, karena saya di bawah windows itu 2 byte tapi saya tidak punya baris baru di mana file POSIX seharusnya, jadi adil untuk tetap seperti ini sebenarnya)
Tensibai

3

R, 145 byte -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))

Contoh:

> 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 byte (tanpa bonus)

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

Diindentasi, dengan baris baru:

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

Kasus uji:

> 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

Saya tidak mengerti keinginan mendapatkan jalur yang jelek, pengembalian kereta tidak lebih mahal daripada ;...
Tensibai

Anda dapat menyimpan 1 char dengan menghapus yang pertama y=scan;dan menggunakan x=y<-scan()+1I think
Tensibai

dan Anda dapat menyimpan tujuh lagi dengan menggunakan as.POSIXlt(paste(y,1),,"%Y %j")$wdayfungsi tubuh Anda
Tensibai

@Tensibai jika Anda tidak meletakkannya di satu baris dan menempelnya langsung ke konsol, scanakan membaca di baris kedua sebagai input. x=y<-scan()+1dengan 2014 sebagai stdin akan memberikan x = 2015 dan y = 2015 (yaitu tugas adalah y <- scan()+1) dan jika Anda mencoba untuk melakukan x=1+y<-scan()hal itu akan memberikan Anda sebuah kesalahan ( Error in 1 + y <- scan() : target of assignment expands to non-language object) karena itu mencoba untuk menetapkan scan()ke 1+y.
plannapus

@Tensibai Adapun saran terakhir Anda, hasilnya ...$wdayadalah nomor hari kerja: tapi di sini saya perlu nama hari kerja sehingga saya bisa mencetakAdvance Happy New Year, 2012 (Sun)
plannapus

3

VBA, 130 * 0,50 = 65 Bytes

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 membuat menemukan hari-hari minggu begitu mudah .... Kalau saja tidak begitu Verbose tentang hal itu.


3

PHP, 120 139 byte - 50% = 60 byte

Pendekatan fungsional:

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

Mengambil satu input dari baris perintah, seperti:

$ php ahny.php 2001

Cara OOP tampaknya lebih panjang, seperti biasa (143 byte):

$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)";

Suntingan

  • Disimpan 18 byte . Alih-alih menambahkan satu tahun menggunakan pengubah PHP +1year, saya sekarang hanya menambah tahun yang diberikan.
  • Disimpan 1 byte dengan menyimpan -1-1dalam suatu variabel.

3

C, skor 53 52 (104 byte)

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

Ide dipinjam dari Toby Speight ; menambahkan tampilan bonus pada hari kerja.

Memperpendek string dengan menggeser kode karakter ke rentang yang lebih nyaman. Harus memilih jumlah pemindahan yang tepat (mis. 43) untuk membuat kode perhitungan hari kerja pendek x*5/4%7bekerja.


Saya bawa barang kode karakter Anda membatasi ini untuk pengkodean yang kompatibel dengan ASCII?
Toby Speight

Iya nih. Kode harus lebih besar dari 31, sehingga jumlah minimal untuk ditambahkan ke kode adalah 27, memberikan string " !!&".
anatolyg

2

Mathematica, 145 * 50% = 74 73,5 72,5 byte

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

Menggunakan fungsi tanggal standar.


2

Pyth, 23 byte

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

Tidak memenuhi syarat untuk bonus apa pun.

Coba di sini .

Mirip dengan jawaban python murni.

                        - 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

2

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

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.

Tidak Disatukan:

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

Cobalah online!

Terima kasih kepada @Kenney karena telah menunjukkan bahwa saya dapat mempersingkat new Longdan printf! : D


long y=new Long(a[0])menyimpan 6 (12) byte, dan menggunakan printfmenyimpan 3 (6) lainnya.
Kenney

2

GNU coreutils, 52 51 49 byte

(Program 98 byte - 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

Input dari argumen command-line, dan output ke stdout.

Penjelasan

# 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"

Uji coba:

Semua pengaturan lokal dapat Catau 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)

Batasan: ini hanya berfungsi hingga tahun 2147485519 (meskipun pertanyaannya sekarang diubah untuk mengizinkan batas bawah).


2

MATL , 28 byte

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

Contoh

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

Kode dijelaskan

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

2

Perl 6 ,  70   23 byte

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

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

pemakaian:

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


2

Japt, 12 byte

U+"♣♠♠♂"cU%4

Seperti dengan jawaban Pyth, empat byte dalam string seharusnya 05 06 06 0B. Cobalah 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

2
Terima kasih atas hadiah Natal karunia ini! Tetapi bisakah seseorang memberi tahu saya bagaimana cara saya mendapatkannya?
ETHproduksi

Saya melihat-lihat sejarah. Rupanya OP berusaha memberikan hadiah, tetapi lupa memberi hadiah, jadi Komunitas memilih untuk meneruskan setengah reputasi ke jawaban ini (saya pikir itu berdasarkan pilihan pada upvotes baru-baru ini).

2

Jelly , 14 byte

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

Cobalah online!

Sampai hari ini, Jelly tidak memiliki pengindeksan array, jadi hal di atas harus dilakukan. Sejak komit terbaru, pengindeksan array telah diimplementasikan sebagai , memberikan solusi berikut ( 10 byte ).

ị6,6,11,5+

Cobalah online!


1
Saya pikir Jelly dapat menyimpan 7 karakter untuk 10 ~ 16 konstanta.
lirtosiast


1

C # (6.0) .Net Framework 4.6 173 Bytes - 30% = 121.1 Bytes

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


1

Python, 23 byte

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

Port jawaban JavaScript saya.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.