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:

Vasu Adari
sumber
6
Saya merasa seperti setiap tantangan tanggal tunggal mengharuskan melakukan perhitungan tahun kabisat sebagai subproblem, dan itu sudah basi.
xnor
Terkait: pertanyaan ini .
Addison Crump
@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!)

lirtosiast
sumber
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).

martin
sumber
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!

Lynn
sumber
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 !

Lynn
sumber
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.

Mwr247
sumber
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!

Lynn
sumber
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

pengguna81655
sumber
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.

Lynn
sumber
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
Sherlock9
sumber
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
Mego
sumber
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
Toby Speight
sumber
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.

Tensibai
sumber
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
plannapus
sumber
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.

JimmyJazzx
sumber
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.
masukkan nama pengguna di sini
sumber
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.

anatolyg
sumber
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.

LegionMammal978
sumber
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
Biru
sumber
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

Addison Crump
sumber
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).

Toby Speight
sumber
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
Luis Mendo
sumber
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
Brad Gilbert b2gills
sumber
2

J, 14 byte

+5 6 6 11{~4&|
alephalpha
sumber
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
Produksi ETH
sumber
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!

Dennis
sumber
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}");
Stephan Schinkel
sumber
1

Javascript ES7, 17 byte

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

Ini pertama kalinya saya menggunakan JS. Saya menemukan ini menggunakan skrip Python, dan saya yakin itu optimal. Ini bekerja karena 0**30 mod 7, 1**3dan 2**3keduanya 1, dan 3**36.

lirtosiast
sumber
1
Bukankah Eksponen operator** sebuah ES7 fitur? Atau apakah Anda menggunakan Babel ?
masukkan nama pengguna di sini
@insertusernamedi sini Tetap.
lirtosiast
1

Python, 23 byte

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

Port jawaban JavaScript saya.

lirtosiast
sumber