Yeni Yılınız Kutlu Olsun, 2016!


40

Girişiniz 1970 ile 2090 (dahil) arasında bir yılı temsil eden bir tam sayı olacaktır. Programınız, Yeni Yıl Günü'nün, girilen yıl ile aynı haftanın günü düşeceği bir sonraki yılı vermelidir.

Test Durumları:

Aşağıda örnek giriş ve çıkışlar verilmiştir.

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

% 20 Bonus: Yeni Yıl Gününün haftanın gününü verin

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

% 30 Bonus: ÇıktıAdvance Happy New Year, <year>

2010 => Advance Happy New Year, 2016

% 50 Bonus: İkisini birden bonusla yapın

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

STDIN'den girdi okuyan veya komut satırı argümanlarını kabul eden veya argüman alan bir işlevi yazın.

Not: Lütfen mümkünse kodunuzu test etmek için bir bağlantı ekleyin.

Liderler Sıralaması:


6
Her buluşma zorluğunun artık yıl hesaplamasını bir alt problem olarak yapmayı gerektirdiğini hissediyorum ve bayatlanıyor.
xnor

İlgili: bu soru .
Addison Crump,

@xnor Durum bu olmasaydı, sadece +7 olurdu. Yani "çok geniş"
Outgolfer Erik

@EriktheGolfer Hayır. Bu yorumu yazdığımda cevabım kabul edildi.
Dennis,

Yanıtlar:


1

Jöle, 9 bayt

%4*3%7+5+

Bu, tamsayı bir komut satırı argümanını girdi olarak alan tek değerli bir zincir. (x+5+(x%4)**3%7)Algoritmamı kullanıyor .

Burada dene . Her ne kadar Jelly'nin şu anki sürümü olsa da , bu meydan okumada da çalışan bu versiyonda çalışır . (Teşekkürler @Dennis!)


Bu harika! Mücadeleden önce, Jelly yorumlayıcısının bu revizyonuyla çalıştığını onaylayabilirim .
Dennis

31

Mathematica, 45 37 27 24 bayt

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

@ MartinBüttner (10 bayt) ve @ChipHurst (3 bayt) sayesinde iyileştirmeler yapıldı.


7
Vay vay. Kimse bu modeli farketmiş gibi görünmüyor, ancak sonuçta ortaya çıkıyor.
Lynn

4
İşte biraz daha kısa bir sürüm:#+5[6,6,11][[#~Mod~4]]&
Chip Hurst

@ChipHurst 5[6, 6, 11][[0]]:) ile çok zekice
martin

18

CJam, 21 12 11 bayt

{_9587Cb=+}

@martin çok basit bir yöntem buldu!

Burada dene .

EDIT: Teşekkürler Dennis!


1
@Mauris Bir açıklama ekleyebilir misiniz?
Vasu Adari

@ Vasu: Bu kod, 5 6 6 11diğer cevaplarda kullanılan aynı hileyi uygulayan isimsiz bir fonksiyondur , ancak liste "temel 12'deki 9587 rakamları" olarak kodlanmıştır .
Lynn,

Anladım, teşekkürler. Bir açıklama eklemeni istedim, böylece cevabını kontrol eden insanlar dilinin nasıl çalıştığını anlayabilirler.
Vasu Adari

10

gs2, 12 bayt

V@¶4☻s%☺♀i50

CJam cevabımın çevirisi. Her zamanki gibi CP437'de kodlanmıştır. Çevrimiçi deneyin !


Bağlantı 2spooky4me üreten koda gider ve yukarıdaki kodu kesip yapıştırırsam yanlış yıla giriyorum : imgur.com/VAkXT0k ("yanlış yıla" göre, amaçlanan yıla göre bir yıl önce geliyorum)
question_asker

Bir bayt unutmuşum. Şimdi dene.
Lynn,

Ben de bağlantıyı düzenledim.
Lynn,

Güzel, şimdi çalışıyor
question_asker

8

JavaScript (ES6), 50 49 20 bayt (bonus yok)

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

@Martin tarafından algoritma daha küçük olduğunu kanıtladı, ben de onunla gittim.

Ben matematiksel bir yaklaşım seçtim çünkü JavaScript çok ayrıntılı. Kod, bonusları yalnızca daha uzun hale getirecek kadar kısa.

İşte önceki cevabım (49 bayt) ve orjinal cevabım (50 bayt):

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

Yılı alarak ve "yılın başlangıç ​​gününü" temsil etmek için bir sayı (0-6) hesaplayarak çalışırlar. Bu zorluğun tarih aralığı basit artık yıl kurallarını izleyen yıllar arasında olduğundan (2000'de atlama yapılmaz) hesaplanması oldukça kolaydır. O zaman, aynı değerle başlayan yılları bulmak için ileriye dönük bir mesele. Özyineleme, bunu yapmanın en özlü yolu olduğunu kanıtladı.


7

Pyth, 14 12 11 bayt

+QC@"♣♠♠♂"Q

Dize içindeki dört bayt olmalıdır 05 06 06 0B.

EDIT: Teşekkürler, FryAmTheEggman!

EDIT: Teşekkürler Dennis!


6

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

açıklama

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

Ölçek


6

Z80 makine kodu, 12 bayt

Bir Z80 prosedürü depolanması gereken 0000hgirdi ile adlandırılan, HLve diğer tüm kayıtlar temizlemek:

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

İlk üç talimat "NOP" dır, ancak daha sonra kodda veri olarak dizine eklenir. Döndükten sonra, çıkış içeride HL.


Evet, yazıya ekledim.
Lynn

Sırasıyla 7 ve 12 ilavelere ihtiyaç duyan 2097 ve 2098 yılları için doğru görünmüyor.
Toby Speight

1
OP, giriş yılının 1970-2090 aralığında garanti edildiğini söyledi.
Lynn

6
Cevapladıktan sonra değiştirilen soruları gerçekten sevmiyorum!
Toby Speight

2
Girişin içinde olduğunu DEve dolayısıyla kullanabileceğinizi belirtmenize izin veriliyor LD A, 3; AND E; LD L, A; LD L, (HL);mu?
Neil,

5

Python 3, 140 100 102 84,5 154 * 0,5 = 77 bayt

Muhtemelen Sakamoto'nun algoritmasıyla daha iyi bir çözüm yazabilirim, ama bu şimdilik

Haklıydım. İşte Sakamoto'nun algoritmasını kullanan bir uygulama.

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])

Açıklama:

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

Soruyu güncelledim. Yüzyıl yıllarını kontrol etmenize gerek yok.
Vasu Adari

1
Peki ya w="SMTWTFSuouehranneduit"sonra baskı w[d(i)::7]?
Lynn

4

Cidden, 35 17 bayt

[5,6,6,11] Hüner günü kurtarır.

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

Çevrimiçi deneyin

Açıklama:

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

Eski versiyon:

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

Çevrimiçi deneyin

Açıklama:

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

Sakamoto'nun algoritması:

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

4

C, 31 bayt

Girdi aralığını 1970-2090 ile sınırlayan soruya yapılan düzenlemenin ardından, bu oldukça önemsiz hale geldi:

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

Artık olmayan yüzyıllar olmadan, aynı günün ilk tekrarı için basit bir 5,6,6,11 aralık dizisi vardır.

Orijinal soruna tam çözüm (2090 ile sınırlı değil), 90 bayt:

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

Test programı:

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

Test sürüşü:

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

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)

Kullanım %Atam gün adı yerine `% 'si a yönelik, istenilen duruma bağlıdır.

R, 120 * 0.7 = 84 bayt

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 bayt

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

Yukarıdaki tüm cevaplar @plannapus cevabına dayanan türev çalışmalardır. ;Ayırıcıyı kullanarak sourcedosyaya ihtiyaç duymamak veya komut satırında komut dosyası olarak çalıştırmaktan kaçının .


1
+1 Tamamen unuttum weekdays, güzel.
plannapus

@plannapus Teşekkürler :) (Yeni satırları saydım, aslında dosya sistemine sordum, çünkü pencerelerin altında 2 byte var ama sonunda bir POSIX dosyasının sahip olması gereken yeni bir hattım yok, bu yüzden böyle tutmak doğru olur. Aslında)
Tensibai

3

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

Örnekler:

> 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 bayt (bonus olmadan)

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

Yeni çizgilerle girintili:

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

Test durumları:

> 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

Bu çirkin bir hatta ;
gelme

ilkini kaldırarak y=scan;ve x=y<-scan()+1bence kullanarak 1 karakter
kazanabilirsiniz

ve as.POSIXlt(paste(y,1),,"%Y %j")$wdayfonksiyon gövdesini kullanarak yedi tane daha tasarruf edebilirsin
Tensibai

@Tensibai, tek bir satıra koymaz ve doğrudan konsola yapıştırmazsanız scan, ikinci satırda girdi olarak okunur. x=y<-scan()+12014 ile stdin olarak size x = 2015 vermek ve y 2015 = edecektir (atama olduğunu yani y <- scan()+1) ve yapmak çalışırsanız x=1+y<-scan()o (size bir hata verecektir Error in 1 + y <- scan() : target of assignment expands to non-language objecto atamak çalışıyor çünkü) scan()için 1+y.
plannapus

@Tensibai Son tavsiyenize gelince, sonuçları ...$wdayhafta içi sayıdır: ama burada hafta içi ismine ihtiyacım var ki yazdırabiliyorumAdvance Happy New Year, 2012 (Sun)
plannapus

3

VBA, 130 * 0.50 = 65 Bayt

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, haftanın günlerini bulmayı çok kolaylaştırıyor.


3

PHP, 120 139 bayt -% 50 = 60 bayt

İşlevsel bir yaklaşım:

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

Komut satırından bir girdi alır, örneğin:

$ php ahny.php 2001

OOP yöntemi her zaman olduğu gibi daha uzun gözüküyor (143 bayt):

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

Düzenlemeler

  • 18 bayt kaydedildi . PHP değiştiricisini kullanarak bir yıl eklemek yerine, +1yearşimdi verilen yılı artırıyorum.
  • Bir değişkende saklayarak 1 bayt kaydedildi-1-1 .

3

C, puan 53 52 (104 bayt)

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

Toby Speight'tan ödünç alınan fikir ; hafta içi bonus ekranını ekledi.

Karakter kodlarını daha rahat bir aralığa kaydırarak dizgiyi kısaltın. Kısa hafta içi hesaplama kodunun x*5/4%7çalışması için doğru kaydırma miktarını (örneğin 43) seçmek zorunda kaldı .


Karakter kodunuz sizin ASCII uyumlu kodlamalarla sınırlandırıyor mu?
Toby Speight

Evet. Kodlar 31'den büyük olmalıdır, bu nedenle kodlara eklenecek en az sayı 27 olacaktır, bu da dizgiyi verir " !!&".
Aralık'ta

2

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

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

Standart tarih fonksiyonlarını kullanır.


2

Pyth, 23 bayt

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

Herhangi bir bonus için uygun değil.

Burada dene .

Saf python cevabına benzer.

                        - 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 bayt

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.

Ungolfed:

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

Çevrimiçi deneyin!

Birlikte kısaltmak söylüyordum için @Kenney sayesinde new Longve printf! : D


long y=new Long(a[0])6 (12) bayt printfkaydeder ve kullanarak başka bir 3 (6) kaydeder.
Kenney,

2

GNU coreutils, 52 51 49 bayt

(98 baytlık program -% 50 bonus)

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

Girdi, komut satırı argümanından, çıktı ise stdout'a verilir.

açıklama

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

Test sürüşü:

Tüm yerel ayarlar Cveya olabilir 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)

Sınırlama: bu yalnızca 2147485519 yılına kadar çalışır (soru şu anda daha düşük bir limite izin verecek şekilde değiştirilmiş olsa da).


2

MATL , 28 bayt

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

Örnek

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

Kod açıklandı

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 bayt

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

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

kullanımı:

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 bayt

U+"♣♠♠♂"cU%4

Pyth cevabında olduğu gibi, dizedeki dört bayt olmalıdır 05 06 06 0B. Çevrimiçi deneyin!

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
Ödülün bu Noel hediyesi için teşekkürler! Ama biri bana nasıl kazandığımı söyleyebilir mi?
ETHProductions

Tarihe baktım. Görünüşe göre OP bir cevap almaya çalıştı, ancak ödülü vermeyi unuttu, bu yüzden Topluluk itibarının yarısını bu cevaba vermeyi seçti (bence seçimini en son yükseltmelere dayandırıyor).

2

Jöle , 14 bayt

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

Çevrimiçi deneyin!

Bugüne kadar, Jelly dizi dizini oluşturmadı, bu yüzden yukarıdakileri yapmak zorunda kalacak. En son işlemden bu yana, dizi çözümü şu çözümü vererek ( 10 bayt ) uygulandı .

ị6,6,11,5+

Çevrimiçi deneyin!


1
Bence Jelly 10 ~ 16 sabit için 7 karakter saklayabilir.
lirtosiast


1

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

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 bayt

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

JS'yi ilk kez kullanıyorum. Bunu bir Python betiği kullanarak buldum ve optimal olduğuna inanıyorum. Çalışır çünkü 0**30 mod 7 1**3ve 2**3her ikisi de 1 ve 3**36'dır.


1
Is not Üs Operatör** bir ES7 özelliği? Yoksa Babel'i mi kullanıyorsun ?
insertusernamehere

@insertusernamehere Sabit.
lirtosiast

1

Python, 23 bayt

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

JavaScript cevabımın bir portu.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.