Chúc mừng năm mới 2016!


40

Đầu vào của bạn sẽ là một số nguyên trong khoảng từ 1970 đến 2090 (bao gồm), đại diện cho một năm. Chương trình của bạn sẽ xuất ra vào năm tiếp theo mà Ngày Năm Mới rơi vào cùng ngày trong tuần với năm đầu vào.

Các trường hợp thử nghiệm:

Dưới đây là các mẫu đầu vào và đầu ra

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

Tiền thưởng 20%: Xuất ra ngày trong tuần của Năm mới

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

Tiền thưởng 30%: Đầu raAdvance Happy New Year, <year>

2010 => Advance Happy New Year, 2016

Tiền thưởng 50%: Làm cả hai phần thưởng trên

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

Viết chương trình đọc đầu vào từ STDIN hoặc chấp nhận đối số dòng lệnh hoặc hàm lấy đối số.

Lưu ý: Vui lòng thêm một liên kết để kiểm tra mã của bạn nếu có thể.

Bảng xếp hạng:


6
Tôi cảm thấy như mọi thử thách ngày duy nhất đòi hỏi phải thực hiện phép tính năm nhuận như một bài toán con, và nó trở nên cũ kỹ.
xnor


@xnor Nếu đó không phải là trường hợp, nó sẽ chỉ là một GMT. Tức là "quá rộng"
Erik the Outgolfer

@EriktheGolfer Không. Khi tôi viết bình luận đó, câu trả lời của tôi là câu được chấp nhận.
Dennis

Câu trả lời:


1

Thạch, 9 byte

%4*3%7+5+

Đây là một chuỗi đơn âm lấy một đối số dòng lệnh nguyên làm đầu vào. Nó sử dụng (x+5+(x%4)**3%7)thuật toán của tôi .

Hãy thử nó ở đây . Mặc dù đó là phiên bản hiện tại của Jelly, nhưng nó cũng hoạt động trong phiên bản này , trước thách thức. (Cảm ơn @Dennis!)


Thật đáng kinh ngạc! Tôi có thể xác nhận rằng nó hoạt động với phiên bản sửa đổi này của trình thông dịch Jelly, trước thách thức này.
Dennis

31

Toán học, 45 37 27 24 byte

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

Những cải tiến nhờ vào @ MartinBüttner (10 byte) và @ChipHurst (thêm 3 byte).


7
Tuyệt vời. Không ai có thể nhận thấy mô hình này, nhưng nó hoạt động ra.
Lynn

4
Đây là phiên bản ngắn hơn một chút:#+5[6,6,11][[#~Mod~4]]&
Chip Hurst

@ChipHurst rất thông minh với 5[6, 6, 11][[0]]:)
martin

18

CJam, 21 12 11 byte

{_9587Cb=+}

@martin tìm thấy một phương pháp rất đơn giản!

Hãy thử nó ở đây .

EDIT: Cảm ơn, Dennis!


1
@Mauris Bạn có thể thêm một lời giải thích?
Vasu Adari

@Vasu: Mã này là một hàm ẩn danh thực hiện cùng một 5 6 6 11mẹo được sử dụng trong các câu trả lời khác, nhưng danh sách được mã hóa thành "các chữ số 9587 trong cơ sở 12" .
Lynn

Cảm ơn Tôi muốn bạn thêm một lời giải thích để những người kiểm tra câu trả lời của bạn có thể hiểu cách nó hoạt động với ngôn ngữ wrt.
Vasu Adari

10

gs2, 12 byte

V@¶4☻s%☺♀i50

Bản dịch câu trả lời của tôi. Được mã hóa trong CP437 như bình thường. Hãy thử trực tuyến !


Liên kết đến mã tạo ra 2spooky4me và nếu tôi cắt và dán mã ở trên, tôi nhận được năm sai: imgur.com/VAkXT0k (bởi "năm sai", ý tôi là tôi nhận được sớm hơn một năm so với năm dự định)
question_asker

Tôi đã quên một byte. Thử ngay bây giờ.
Lynn

Tôi cũng chỉnh sửa liên kết.
Lynn

Thật tuyệt, nó hoạt động ngay bây giờ
question_asker

8

JavaScript (ES6), 50 49 20 byte (không có tiền thưởng)

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

Thuật toán của @martin chứng tỏ là nhỏ hơn nhiều, vì vậy tôi đã sử dụng nó.

Tôi đã chọn một cách tiếp cận toán học vì JavaScript có xu hướng dài dòng. Mã này đủ ngắn để tiền thưởng chỉ làm cho nó dài hơn.

Đây là câu trả lời trước của tôi (49 byte) và câu trả lời ban đầu của tôi (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

Họ làm việc bằng cách lấy năm và tính một số (0-6) để thể hiện "ngày bắt đầu của năm". Bởi vì phạm vi ngày cho thử thách này nằm trong phạm vi năm tuân theo quy tắc năm nhuận đơn giản (không bỏ qua năm 2000), nên việc tính toán khá đơn giản. Sau đó, chỉ là vấn đề so sánh về phía trước để tìm ra những năm bắt đầu với cùng một giá trị. Đệ quy đã được chứng minh là cách ngắn gọn nhất để làm điều này.


7

Pyth, 14 12 11 byte

+QC@"♣♠♠♂"Q

Bốn byte trong chuỗi nên là 05 06 06 0B.

EDIT: Cảm ơn, FryAmTheEggman!

EDIT: Cảm ơn, Dennis!


6

JavaScript (ES6), 104 byte - Phần thưởng 50% = 52

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

Giải trình

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

Kiểm tra


6

Mã máy Z80, 12 byte

Một thủ tục Z80 sẽ được lưu trữ tại 0000h, được gọi với đầu vào HLvà tất cả các thanh ghi khác đều bị xóa:

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

Ba hướng dẫn đầu tiên là "NOP", nhưng được lập chỉ mục là dữ liệu sau này trong mã. Khi trở về, đầu ra là trong HL.


Đúng, tôi đã thêm nó vào bài viết.
Lynn

Có vẻ không ổn trong năm 2097 và 2098, cần bổ sung lần lượt là 7 và 12.
Toby Speight

1
OP cho biết năm đầu vào được đảm bảo nằm trong khoảng 1970-2090.
Lynn

6
Tôi thực sự không thích những câu hỏi được thay đổi sau khi tôi trả lời!
Toby Speight

2
Bạn có được phép chỉ định rằng đầu vào là trong DEvà do đó bạn có thể sử dụng 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

Tôi có thể có thể viết một giải pháp tốt hơn với thuật toán của Sakamoto, nhưng điều này sẽ làm ngay bây giờ

Tôi đã đúng. Đây là một triển khai sử dụng thuật toán của 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])

Giải trình:

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

Tôi đã cập nhật câu hỏi. Bạn không cần phải kiểm tra trong nhiều năm.
Vasu Adari

1
Làm thế nào về w="SMTWTFSuouehranneduit"và sau đó in ấn w[d(i)::7]?
Lynn

4

Nghiêm túc, 35 17 byte

[5,6,6,11] Thủ thuật tiết kiệm trong ngày.

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

Dùng thử trực tuyến

Giải trình:

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

Phiên bản cũ:

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

Dùng thử trực tuyến

Giải trình:

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

Thuật toán của Sakamoto:

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

4

C, 31 byte

Sau khi chỉnh sửa câu hỏi giới hạn phạm vi đầu vào đến 1970-2090, điều này trở nên khá tầm thường:

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

Nếu không có những năm thế kỷ không nhảy vọt, sẽ có một chuỗi 5,6,6,11 đơn giản cho lần lặp lại đầu tiên trong cùng ngày.

Giải pháp hoàn chỉnh cho vấn đề ban đầu (không bị ràng buộc đến năm 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;}

Chương trình kiểm tra:

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

Chạy thử nghiệm:

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

Sử dụng %Acho tên cả ngày thay vì `% a, tùy thuộc vào trạng thái mong muốn.

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]

Tất cả các câu trả lời ở trên là công việc phái sinh dựa trên câu trả lời @plannapus. Sử dụng ;dấu phân cách để tránh cần sourcetệp hoặc chạy dưới dạng tập lệnh trên dòng lệnh.


1
+1 tôi hoàn toàn quên mất weekdays, tốt đẹp.
plannapus

@plannapus Cảm ơn :) (Tôi đã đếm các dòng mới, thực tế đã hỏi hệ thống tệp, vì tôi ở dưới cửa sổ là 2 byte nhưng cuối cùng tôi không có dòng mới nào nên có tệp POSIX, vì vậy thật công bằng khi giữ nó như thế này thực tế)
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))

Ví dụ:

> 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 (không có tiền thưởng)

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

Được thụt lề, với các dòng mới:

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

Các trường hợp thử nghiệm:

> 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

Tôi không hiểu mong muốn này là được đi trên một tuyến đường xấu xí, việc trả lại xe ngựa không tốn kém hơn nhiều so với ;...
Tensibai

bạn có thể lưu 1 char bằng cách loại bỏ cái đầu tiên y=scan;và sử dụng x=y<-scan()+1tôi nghĩ
Tensibai

và bạn có thể tiết kiệm thêm bảy bằng cách sử dụng as.POSIXlt(paste(y,1),,"%Y %j")$wdaylàm cơ quan chức năng của mình
Tensibai

@Tensibai nếu bạn không đặt nó trên một dòng duy nhất và dán trực tiếp vào bảng điều khiển, scansẽ đọc trong dòng thứ hai làm đầu vào. x=y<-scan()+1với năm 2014 khi stdin sẽ cung cấp cho bạn x = 2015 và y = 2015 (tức là sự phân công là y <- scan()+1) và nếu bạn cố gắng làm x=1+y<-scan()nó sẽ cung cấp cho bạn một lỗi ( Error in 1 + y <- scan() : target of assignment expands to non-language object) bởi vì nó đang cố gắng gán scan()cho 1+y.
plannapus

@Tensibai Theo lời khuyên cuối cùng của bạn, kết quả ...$wdaylà số ngày trong tuần: nhưng ở đây tôi cần tên ngày trong tuần để tôi có thể inAdvance Happy New Year, 2012 (Sun)
plannapus

3

VBA, 130 * 0,50 = 65 byte

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 làm cho việc tìm kiếm các ngày trong tuần trở nên thật dễ dàng .... Giá như nó không quá Verbose về nó.


3

PHP, 120 139 byte - 50% = 60 byte

Một cách tiếp cận chức năng:

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

Lấy một đầu vào từ dòng lệnh, như:

$ php ahny.php 2001

Cách OOP dường như dài hơn, như mọi khi (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)";

Chỉnh sửa

  • Đã lưu 18 byte . Thay vì thêm một năm bằng cách sử dụng công cụ sửa đổi PHP +1year, giờ đây tôi chỉ cần tăng năm đã cho.
  • Đã lưu 1 byte bằng cách lưu trữ -1-1trong một biến.

3

C, điểm 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);}

Ý tưởng mượn từ Toby Speight ; thêm hiển thị phần thưởng của ngày trong tuần.

Rút ngắn chuỗi bằng cách chuyển mã ký tự sang phạm vi thoải mái hơn. Phải chọn số lượng dịch chuyển phù hợp (ví dụ 43) để làm cho mã tính toán ngày trong tuần ngắn x*5/4%7hoạt động.


Tôi lấy nó mã công cụ mã ký tự của bạn giới hạn mã hóa này để mã hóa tương thích ASCII?
Toby Speight

Vâng. Các mã phải lớn hơn 31, vì vậy số lượng tối thiểu để thêm vào mã sẽ là 27, đưa ra chuỗi " !!&".
anatolyg

2

Toán học, 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"]&

Sử dụng các chức năng ngày tiêu chuẩn.


2

Bình thường, 23 byte

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

Không đủ điều kiện cho bất kỳ tiền thưởng.

Hãy thử nó ở đây .

Tương tự như câu trả lời trăn thuần túy.

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

Ung dung:

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

Hãy thử trực tuyến!

Cảm ơn @Kenney đã chỉ ra rằng tôi có thể rút ngắn new Longprintf! : D


long y=new Long(a[0])lưu 6 (12) byte và sử dụng printftiết kiệm thêm 3 (6).
Kenney

2

GNU coreutils, 52 51 49 byte

(Chương trình 98 byte - Phần thưởng 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

Đầu vào là từ đối số dòng lệnh và đầu ra là thiết bị xuất chuẩn.

Giải trình

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

Chạy thử nghiệm:

Tất cả các cài đặt ngôn ngữ có thể Choặc 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)

Giới hạn: điều này chỉ hoạt động cho đến năm 2147485519 (mặc dù câu hỏi hiện đã được thay đổi để cho phép giới hạn thấp hơn).


2

MATL , 28 byte

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

Thí dụ

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

Mã giải thích

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

sử dụng:

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

Như với câu trả lời Pyth, bốn byte trong chuỗi phải là 05 06 06 0B. Hãy thử trực tuyến!

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
Cảm ơn món quà Giáng sinh này của một tiền thưởng! Nhưng ai đó có thể cho tôi biết làm thế nào tôi kiếm được nó?
Sản xuất ETH

Tôi đã xem qua lịch sử. Rõ ràng OP đã cố gắng trả tiền cho một câu trả lời, nhưng quên không trao giải thưởng, vì vậy Cộng đồng đã chọn chuyển một nửa danh tiếng cho câu trả lời này (tôi nghĩ rằng nó dựa trên sự lựa chọn của mình trên các upvote gần đây).

2

Thạch , 14 byte

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

Hãy thử trực tuyến!

Cho đến hôm nay, Jelly không có chỉ mục mảng, vì vậy những điều trên sẽ phải làm. Kể từ lần cam kết mới nhất, việc lập chỉ mục mảng đã được triển khai như là , đưa ra giải pháp sau ( 10 byte ).

ị6,6,11,5+

Hãy thử trực tuyến!


1
Tôi nghĩ rằng Jelly có thể dành 7 ký tự cho 10 ~ 16 hằng số.
lirtosiast


1

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

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

Javascript ES7, 17 byte

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

Đây là lần đầu tiên tôi sử dụng JS. Tôi đã tìm thấy điều này bằng cách sử dụng tập lệnh Python và tôi tin rằng nó là tối ưu. Nó hoạt động vì 0**3là 0 mod 7, 1**32**3cả 1 và 3**36.


1
Không phải là Toán tử **lũy thừa là một tính năng ES7 ? Hay bạn đang sử dụng Babel ?
insertusernamehere

@insertusernamehere Đã sửa.
lirtosiast

1

Python, 23 byte

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

Một cổng câu trả lời JavaScript của tôi.


1

Bình thường , 12 byte

++5%^%Q4 3 7

Hãy thử trực tuyến! hoặc Kiểm tra bộ thử nghiệm.

Bình thường , 18 byte

Cách tiếp cận thứ hai này chủ yếu là một câu trả lời Pyth của @ wizzwizz4 .

J%Q4+?q3J11?qJZ5 6

Hãy thử trực tuyến! hoặc Kiểm tra bộ thử nghiệm.


Giải trình

++ 5% ^% Q4 3 7Q - Q có nghĩa là đầu vào được đánh giá và ẩn ở cuối.

     % Q4 - Đầu vào mod 4.
    ^ 3 - Hình khối.
   % 7 - Mod 7.
 +5 - Cộng 5
+ Q - Cộng với đầu vào.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.