เมื่อวันขอบคุณพระเจ้า


38

พื้นหลัง

วันหยุดบางวันมีวันที่ที่แน่นอนและง่ายต่อการจดจำเช่น 31 ต.ค. 25 ธ.ค. เป็นต้น แต่บางวันต้องการแก้ไขปัญหา พวกเขาถูกระบุว่าเป็น "วันจันทร์แรกในเดือนกันยายน" หรือ "วันพฤหัสบดีที่สี่ในเดือนพฤศจิกายน" ฉันควรจะรู้ได้อย่างไรว่าเมื่อไหร่?

ทั้งหมดที่ฉันรู้ก็คือวันขอบคุณพระเจ้ากำลังใกล้เข้ามาอย่างรวดเร็วดังนั้นฉันจึงต้องการโปรแกรมที่จะช่วยฉันค้นหาว่ามันเป็นอย่างไร บางคนถึงกับบอกว่าเป็นวันพรุ่งนี้ดังนั้นโปรแกรมของคุณต้องสั้นที่สุดเท่าที่จะเป็นไปได้เพื่อให้แน่ใจว่าฉันสามารถพิมพ์ใหม่ได้ทันเวลา

ความท้าทาย

สร้างโปรแกรมหรือฟังก์ชั่นที่ให้ปีถึงหลักสี่หลัก (เช่น 2015 หรือ 1984) เอาท์พุทหรือส่งคืนวันที่วันขอบคุณพระเจ้าของสหรัฐอเมริกาในปีนั้น ขอบคุณพระเจ้าที่ถูกกำหนดให้เป็นวันพฤหัสบดีที่สี่ของเดือนพฤศจิกายนตามหน้าวิกิพีเดีย (เคล็ดลับ: หน้านั้นยังมีข้อมูลที่น่าสนใจเกี่ยวกับรูปแบบวันที่)

อินพุต : ตัวเลขทศนิยมที่มีตัวเลขสูงสุดสี่หลักที่แสดงถึงปีใน Common Era (CE) ตัวอย่าง: 987, 1984, 2101

เอาท์พุท : วันที่รวมถึงเดือนและวันที่วันขอบคุณพระเจ้าตกหรือจะตกถ้ามันมีอยู่ในปีนั้น นี่อาจเป็นรูปแบบที่สมเหตุสมผล ใช้วิจารณญาณที่ดีที่สุดของคุณ ใช้ปฏิทิน Gregorian ในทุกกรณีแม้ว่าจะไม่ได้ใช้งานในเวลานั้น

(หมายเหตุ: ตรวจสอบให้แน่ใจว่าจัดการกับการก้าวกระโดดอย่างถูกต้อง!)

กรณีทดสอบ อินพุต 1:

2015

เอาท์พุท 1:

Nov 26

อินพุต 2:

1917

เอาท์พุท 2:

Nov 22

เกณฑ์การให้คะแนน

ส่งจะได้รับคะแนนในไบต์ ฉันแนะนำเว็บไซต์นี้เพื่อติดตามจำนวนไบต์ของคุณแม้ว่าคุณสามารถใช้ตัวนับใด ๆ ที่คุณต้องการ

โบนัส

-25%จากคะแนนของคุณหากคุณจัดการกับวันที่ BCE เป็นตัวเลขติดลบ (เช่น -480 จะเป็นปีของการต่อสู้ของ Thermopylae)

อินพุตกรณีทดสอบเชิงลบ:

-480

ผลลัพธ์ที่สอดคล้องกัน:

Nov 25

นี่คือดังนั้นคะแนนต่ำสุดชนะ!

แก้ไข: ฉันกำลังทำเครื่องหมายการส่ง TI-BASIC ของ Thomas Kwa ว่ายอมรับ อย่าปล่อยให้เรื่องนี้ทำให้คุณท้อใจในการส่งผลงานใหม่!

ลีดเดอร์

นี่คือตัวอย่างข้อมูลเพื่อสร้างทั้งกระดานผู้นำปกติและภาพรวมของผู้ชนะตามภาษา

เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:

# Language Name, N bytes

ที่Nมีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในพาดหัวโดยการตีพวกเขาผ่าน ตัวอย่างเช่น

# Ruby, <s>104</s> <s>101</s> 96 bytes

หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของไฟล์สองไฟล์หรือคุณต้องการแสดงรายการบทลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นตัวเลขสุดท้ายในส่วนหัว:

# Perl, 43 + 2 (-p flag) = 45 bytes

นอกจากนี้คุณยังสามารถตั้งชื่อภาษาให้เป็นลิงค์ซึ่งจะปรากฏในตัวอย่างกระดานแต้มนำ:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


25
สำหรับทุกคนที่สงสัยว่าวันขอบคุณพระเจ้าจะมาถึงในปีนี้: วันขอบคุณพระเจ้าจะเป็นวันพรุ่งนี้
TheNumberOne

6
แต่ฉันมีวันขอบคุณพระเจ้าในวันที่ 10 ตุลาคม ฉันขอโทษที่บอกว่าคำถามของคุณสาย
JimmyJazzx

5
@Downgoat ใช้ตัวนับใด ๆ ที่คุณต้องการ นั่นเป็นเพียงหนึ่งที่ฉันใช้เป็นการส่วนตัวและจะแนะนำ
bkul

22
"วันหยุดบางคนได้รับการแก้ไขที่ง่ายต่อการจำวันเช่น 31 ต.ค. 25 ธันวาคม" ตัวอย่างเหล่านี้จะง่ายต่อการจำเพราะพวกเขากำลังจริงๆในวันเดียวกัน: ฐานแปด 31 == ทศนิยม 25. ;-)
เอเดรียแมคคาร์

7
สำหรับคำตอบที่ให้โบนัสควรจะมีปี 0 ระหว่าง -1 ถึง 1 หรือไม่?
feersum

คำตอบ:


40

TI-BASIC, 15 ไบต์ * 0.75 = 11.25

ทดสอบกับเครื่องคิดเลข TI-84 + ของฉัน

1129-dayOfWk(Ans+ᴇ4,9,1

วันขอบคุณพระเจ้าคือวันที่ 29 พฤศจิกายนลบวันในสัปดาห์ของวันที่ 1 กันยายนโดยที่ 1 คือวันอาทิตย์และ 7 คือวันเสาร์ MMDDเอาท์พุทในรูปแบบนี้

กรณีทดสอบ: 2015-> 1126, 1917-> 1122, -480-> 1125ได้รับการยืนยันแล้ว TI-BASIC ดูเหมือนว่าจะใช้ปฏิทิน Gregorian สำหรับทุกวัน

TI-BASIC ไม่สนับสนุนปีเชิงลบ แต่สิ่งนี้จะได้รับโบนัสเพราะเราเพิ่ม 10,000 ให้กับอินพุท เนื่องจากปฏิทินคริสต์ศักราชมีระยะเวลา 400 ปีจึงไม่เปลี่ยนวันของสัปดาห์


5
อึศักดิ์สิทธิ์ xD ฉันไม่เคยคิดเลยว่าสิ่งนี้จะได้ผลเช่นนี้ +1
Addison Crump

ความคิดที่ดีในการเพิ่ม 10,000 ดี
ตลอดไป

ฉันนับ 23 ตัวอักษร สิ่งนี้จะเป็น 15 ไบต์ได้อย่างไร
Stephan Schinkel

1
@StephanSchinkel TI-BASIC ใช้โทเค็นที่เก็บไว้ในหน่วยความจำเครื่องคิดเลขฉันเชื่อว่าตัวละครทั้งหมดที่นี่คือ 1 ไบต์ยกเว้นโทเค็นdayofWK(และAnsที่ 2 และ 1 ไบต์แต่ละตัว
FryAmTheEggman

คุณทดสอบกับเครื่องคิดเลขหรือไม่? ว้าว.

23

PHP, 65 48 42 41 36 (+2 สำหรับ-F) = 38 ไบต์

<?date(Md,strtotime("4thuXI$argn"));

รับอินพุตเป็นอาร์กิวเมนต์บรรทัดคำสั่งแรก ทำงานด้วยคำเตือนซึ่งเป็นที่ยอมรับโดยกฎของเรา พิมพ์NovDDที่DDเป็นวันขอบคุณพระเจ้า

ไม่มีลิงก์ออนไลน์เพราะ ideone ไม่รองรับ args ของบรรทัดคำสั่งและฉันไม่ทราบว่าล่ามออนไลน์ทำเช่นไร

ขอบคุณ Alexander O'Mara ที่สอนเคล็ดลับใหม่ให้ฉันและลดราคาอย่างมีนัยสำคัญ


2
มันสนุกกว่า Mathematica
lirtosiast

2
@Tryth "4thuXI"แม้สั้น: "4thuXI2015"คุณยังสามารถวางช่องว่างระหว่างปี
Alexander O'Mara

1
การใช้ตัวเลือกบรรทัดคำสั่ง-Fอาจทำให้อินพุตสั้นลง"4thuXI$argn"ได้
โม่

3
เดี๋ยวก่อนมันใช้งานได้จริงเหรอ? นั่นคือ ... นั่นเป็นเพียง ... ฉันไม่ได้ ...
ETHproductions

1
การทำงานสำหรับฉัน ในขณะที่ฉันอยู่ที่มันMdไม่จำเป็นต้องมีคำพูดกับE_NOTICEปิดการใช้งาน
โม่

18

Mathematica, 59 38 ไบต์

DayRange[{#,11},{#,12},Thursday][[4]]&

+1 Clever นอกจากนี้ยังWolframAlpha["Thanksgiving " <> #] &มีวันที่ที่ป้อนเป็นสตริง
DavidC

WolframAlpha ส่งคืนวันขอบคุณพระเจ้าในสหรัฐอเมริกาจากปี 1863 (เมื่อลินคอล์นประกาศให้เป็นวันสุดท้ายของเดือนพฤศจิกายน) สหรัฐฯได้เฝ้าสังเกตวันขอบคุณพระเจ้าตั้งแต่ปี 1789
DavidC

@DavidCarraher อย่างไรก็ตาม OP ระบุว่าโปรแกรมจะต้องทำงานอย่างน้อย 0 - 9999 CE
LegionMammal978

17

JavaScript (ES6), 42 40 31 ไบต์ - 25% = 23.25

a=>28.11-new Date(a,8).getDay()

ตั้งแต่วันที่ "อาจจะอยู่ในรูปแบบที่เหมาะสมใด ๆ" DD.MMนี้ฟังก์ชั่นการใช้งาน ฉันเขียนคำตอบ TeaScriptด้วยเทคนิคที่แตกต่างกัน แต่สูตรนี้สั้นกว่านี้

คำอธิบาย

เนื่องจากเดือนมีค่าเป็นศูนย์ให้new Date(a,10)ส่งคืนDateวัตถุที่แสดงถึงวันที่ 1 พฤศจิกายนของปีที่ระบุ

เนื่องจากgetDay()ส่งคืนตัวเลขที่แสดงถึงวันในสัปดาห์จากที่0..6เราต้องการทำแผนที่

Su Mo Tu We Th Fr Sa 
0  1  2  3  4  5  6  
to to to to to to to
4  3  2  1  0  6  5  

จากนั้นเพิ่ม 22. ปรากฎว่า(11 - new Date(a,10).getDay()) % 7ทำเคล็ดลับ ตามที่@Thomas Kwaชี้ให้เห็นว่านี่เป็นเช่นเดียวกับ28-new Date(a,8).getDay()ที่ 28 ลบด้วยวันในสัปดาห์ที่ 1 กันยายน


วิธีแก้ปัญหาที่ดีฉันชอบระยะเวลาสั้น ๆ และยังเข้าใจได้ง่ายกว่ารายการส่วนใหญ่
Marko Grešak

16

Japt , 43 37 36 35 29 ไบต์ - 25% = 21.75

Japtเป็นรุ่นสั้นJa vaScri พอยต์

`{28.11-?w D?e(U,8).getDay()}

ฮ่าฮ่าฮ่าฉันพบจริงๆเคล็ดลับ cheaty : ล่ามจะไม่สนใจวงเล็บใด ๆ ภายในสตริง (ใช้เพื่อแทรกรหัส) ในขณะที่คลายพวกมันดังนั้นเราสามารถบีบอัดซอร์สโค้ดทั้งหมดเพื่อบันทึก byte>: D

ทั้งสอง?ควรเป็น Unicode unprintables U + 0098 และ U + 0085 ตามลำดับ ลองออนไลน์!

หลังจากคลายการบีบอัดรหัสจะประเมินสิ่งนี้:

"{28.11-new Date(U,8).getDay()}"

ซึ่งประเมินว่า:

""+(28.11-new Date(U,8).getDay())+""

ซึ่งให้ผลผลิตที่เหมาะสม

ใช้intrepidcoder เทคนิคของ , dd.mmการแสดงผลในรูปแบบ รองรับปีที่ติดลบอย่างถูกต้อง ยินดีต้อนรับข้อเสนอแนะ!

แก้ไข:ตั้งแต่วันที่ 2 ธันวาคมคุณสามารถใช้รหัส11-byte นี้ (ให้คะแนน8.25 คะแนน ):

28.11-ÐU8 e

(ฉันหวังว่าฉันจะใช้งานได้เร็วกว่านี้!)


ทำได้ดีมาก
bkul

นี่ยาวกว่า JavaScript วานิลลา โทมัสความีสูตรที่สั้นกว่ามาก
intrepidcoder

@intrepidcoder ขอบคุณแก้ไขแล้ว
ETHproductions

12

Vitsy , 44 ไบต์

ฉันคำนวณด้วยคณิตศาสตร์บริสุทธิ์ !

แข็งแรงเล่นกอล์ฟ:

Ve2 * V2-V41m + Vaa * Dv1m-Vv4 * 1m + 7M-Baa * / + N
/ D1M-

Ungolfed (ย้ายการเรียกเมธอดไปที่บรรทัดแรกเพื่อให้สามารถอ่านได้):

Ve2 * V2-V4 / D1M- + Vaa * Dv / D1M - Vv4 * / D1M- + 7M-Baa * / + N

V บันทึกอินพุตเป็นตัวแปรสุดท้าย
 e2 * กด 28 ลงในสแต็ก
    V ดันอินพุตไปยังสแต็ก
     2- ลบสอง
       V4 / D1M- รับพื้น (อินพุต / 4)
              + เพิ่มลงในยอดรวม
               Vaa * Dv / D1M- รับพื้น (อินพุต / 100) และบันทึก 100 เป็นอุณหภูมิ
                                    ตัวแปรในกระบวนการ
                          - ลบออกจากผลรวม
                           Vv4 * / D1M- รับพื้น (อินพุต / 400)
                                    + เพิ่มลงในยอดรวม
                                     7M โมดูโล่โดยเจ็ด
                                       - ลบผลลัพธ์จาก 28
                                        baa * / + เพิ่ม. 11
                                              เอาท์พุทเป็นจำนวน

อาจมีขั้นตอนวิธีการที่ดีกว่าสำหรับนี้ (และนี่คือแนวโน้มที่แข็งแรงเล่นกอล์ฟอย่างน่าสยดสยอง) แต่สำหรับผู้ที่สงสัยว่าอัลกอริทึมของฉันมาจากที่นี่

ลองออนไลน์!

ฉันจะได้รับคะแนนโบนัสสำหรับการคำนวณและมี 42 ไบต์หรือไม่ ความฝันเจ๊ง

ขอบคุณ @ Hosch250 ที่ชี้ให้เห็นว่าฉันทำผิดไป : D คงที่


2
ไม่ แต่คุณได้รับ +1 จากฉัน;)
Conor O'Brien

มันบอกว่าวันขอบคุณพระเจ้าในปี 2559 คือ 28 พฤศจิกายนจริง ๆ แล้ว 24 พฤศจิกายน
Hosch250

@ Hosch250 คุณถูกต้อง - แก้ไขแล้ว
Addison Crump

10

Python, 38 * 0.75 = 28.5 ไบต์

lambda x:28.11-(x-2+x/4-x/100+x/400)%7

สิ่งนี้ใช้ได้กับปีที่เป็นค่าลบในลักษณะที่ระบุในคำถามแม้ว่าจะพบว่าไม่มีปี 0 ในปฏิทินเกรกอเรียนดังนั้นพฤติกรรมนี้จึงเป็นที่น่าสงสัยเล็กน้อย


1
f=คุณสามารถวาง
feersum

1
มันทำงานอย่างไรสำหรับวันที่ลบ โมดูโลใน Python ใช้กับเชิงลบได้หรือไม่? : O
Addison Crump

ควรสั้นลงเพื่อใช้สตริงตัวแทน"Nov "+`...`
xnor

@VoteToClose Python modulo ให้คำตอบด้วยเครื่องหมายเดียวกับอาร์กิวเมนต์ที่สอง ดังนั้น-40%7==2แต่-40%-7==-5
quintopia

@quintopia เดี๋ยวก่อนเดี๋ยวก่อนฉันเป็นคนงี่เง่า ถูก นั่นทำให้รู้สึก
Addison Crump

10

JavaScript (ES6), 43.5

จำนวนไบต์ที่แท้จริงคือ 58 โบนัส -25% จะใช้ => 58 * 0.75 = 43.5

s=>new Date(s,10,(a=new Date(s,10).getDay())<5?26-a:a+21)

ค่อนข้างตรงไปตรงมาและไร้สาระอย่างที่ควรเป็นโดยไม่มีวิธีแก้ไขหรือการคำนวณใด ๆ ที่ยุ่งยาก

De-golf (ES5) + การสาธิต:

function t(s) {
    a = new Date(s, 10).getDay();
    alert(new Date(s,10,a<=4?26-a:a+21))
}

t(prompt())

โปรดทราบว่าการเข้าสู่ปีที่ 0-100 จะสร้างปี 1900-2,000 ปี แม้ว่าดูเหมือนว่า 0-100 ปีที่ผ่านมาจะเป็นวันเดียวกับที่ 1900-2000 ตัดสินจากคำตอบอื่น ๆ


การแทนที่a+18ด้วย22เนื่องจากถูกเรียกใน "else" เท่านั้นและ "else" จะเกิดขึ้นเฉพาะในกรณีที่ a ไม่มากกว่าหรือน้อยกว่า 4 นั่นคือ 4


แทนที่a<4?26-a:a>4?a+21:22ด้วยa<=4?26-a:a+21


2
ให้อภัยฉันหากฉันผิด แต่ไม่a<4?x:a>4?y:a+18เทียบเท่ากับa<4?x:a>4?y:22?
ETHproductions

BTW มันบอกฉันปีที่ไม่ถูกต้องสำหรับการป้อนข้อมูลใด ๆ จาก 0 ถึง 99 ไม่แน่ใจว่าเรื่องนี้แม้ว่า
ETHproductions

@Eth LOL แน่นอนว่าคุณพูดถูกไม่คิดว่าจะเสมอ 4 + 18: D
nicael

@ อี hm, 0 ถึง 99 เป็นสิ่งที่ผิดแน่นอนให้ฉันลองแก้ไข
nicael

@Eth ดูเหมือนว่า 0-100 จะให้วันเดียวกับที่ 1900-2000 ตัดสินจากคำตอบอื่น ๆ
nicael

8

TeaScript, 35 33 24 ไบต์ - 25% = 18

28.11-new D(x,8).getDay¡

นี่เป็นวิธีการเดียวกับคำตอบ JavaScript ของฉันซึ่งใช้สูตรอันชาญฉลาดของ Thomas Kwa

รุ่นอื่นที่มีคำอธิบาย

r(22,28)F(#/h/t(new D(x,10,l)))+'-11'

r(22,28)    // Range from 22 to 28
        F(    // filter, keeps elements for which the function returns true. 
          #    // Expands to function(l,i,a,b)
           /h/    // RegExp literal, Thursday is the only day with an 'h'.
              t(    // test, true if date string contains an 'h'.
                new D(x,10,l) // Create date object
                             ))+'-11' // Append '-11' for the month.

มันเป็น 35 ตัวอักษร แต่ 36 ไบต์เนื่องจาก¡ :)
nicael

@nicael ไม่ได้อยู่ในเว็บไซต์นี้ไม่ใช่;)
ETHproductions

หืมมมรับ 36 mothereff.in/...
nicael

@Downgoat มักจะใช้รูปแบบนี้ซึ่งตัวอักษรทั้งหมดที่มีค่าสูงสุด U + 00FF คือ 1 ไบต์
ETHproductions

5

Jython, 141 155 ไบต์

ใช้คลาส Java Calendar และ Scanner พร้อมกับไวยากรณ์ Python

import java.util.Scanner as s;import java.util.Calendar as c
d=c.getInstance();k=s(System.in);d.set(c.YEAR,k.nextInt());d.set(c.DAY_OF_WEEK,c.THURSDAY)

แก้ไข:ปัญหาไวยากรณ์เล็กน้อย, เพิ่ม 14 ไบต์

ดูเวอร์ชั่นBrainfuckของฉันด้วย


5

Python, 83 81 78 ไบต์

from datetime import*
lambda a:'Nov '+`((10-datetime(a,11,1).weekday())%7)+22`
  • -2 ไบต์:เพิ่มชื่อที่จะนำเข้า (ขอบคุณ @ ΚριτικσιΛίθος)
  • -1 ไบต์:เปลี่ยนเป็น * import ** (ขอบคุณ @FryAmTheEggman)
  • -2 ไบต์:เปลี่ยนเป็น repr เพื่อแปลงวัน (ขอบคุณ @willem)

1
เพียงข้อเสนอแนะเพื่อลดจำนวนไบต์: ใช้import datetime as dแล้วคุณสามารถใช้dสำหรับทุกครั้งที่คุณใช้datetimeในโปรแกรมของคุณ
Kritixi Lithos

2
คุณสามารถลองแพนด้าได้ import pandas;print'Nov '+`((10-pandas.datetime(input(),11,1).weekday())%7)+22`
วิลเล็ม

@ ΚριτικσιΛίθος แต่จากนั้น datetime.datetime จะเป็น d.datetime เท่านั้นใช่ไหม
TanMath

2
from datetime import*สั้นลงอีกเล็กน้อยเพราะคุณไม่ต้องการd.อะไรอีกแล้ว
FryAmTheEggman

5

Excel, 367 154 53 - 25% = 39.75 ไบต์

ถือว่าปีนั้นจัดขึ้นในเซลล์ A1 ในรูปแบบวันที่ ส่งคืนตัวเลขจำนวนเต็มของวันในเดือนพฤศจิกายนซึ่งจัดขึ้นในวันขอบคุณพระเจ้า

นี่เป็นเพียงปีอธิกสุรทินปกติเท่านั้น มันไม่ได้คำนึงถึงความจริงที่ว่าปีที่ผ่านมา 2100, 2200, 2300 ไม่ได้กระโดดปี

สิ่งนี้ได้รับการออกแบบมาเพื่อทำงานในปี 1621 เป็นต้นไป - เช่นตั้งแต่วันขอบคุณพระเจ้าเริ่มจัดขึ้น (แม้ว่ามันจะทำงานได้อย่างแน่นอนจนถึง 0 AD)

=IF(MOD(YEAR(A1),4)=0,IF(WEEKDAY(305+DATEVALUE(("01/01/"&TEXT(A1,"yyyy"))))<6,1127-WEEKDAY(305+DATEVALUE(("01/01/"&TEXT(A1,"yyyy")))),1134-WEEKDAY(305+DATEVALUE(("01/01/"&TEXT(A1,"yyyy"))))),IF(WEEKDAY(304+DATEVALUE(("01/01/"&TEXT(A1,"yyyy"))))<6,1127-WEEKDAY(304+DATEVALUE(("01/01/"&TEXT(A1,"yyyy")))),1134-WEEKDAY(304+DATEVALUE(("01/01/"&TEXT(A1,"yyyy"))))))

พริตตี้ที่พิมพ์:

=IF(MOD(YEAR(A1),4)=0,
    IF(WEEKDAY(305+DATEVALUE(("01/01/"&TEXT(A1,"yyyy"))))<6,
       1127-WEEKDAY(305+DATEVALUE(("01/01/"&TEXT(A1,"yyyy")))),
       1134-WEEKDAY(305+DATEVALUE(("01/01/"&TEXT(A1,"yyyy"))))),
    IF(WEEKDAY(304+DATEVALUE(("01/01/"&TEXT(A1,"yyyy"))))<6,
       1127-WEEKDAY(304+DATEVALUE(("01/01/"&TEXT(A1,"yyyy")))),
       1134-WEEKDAY(304+DATEVALUE(("01/01/"&TEXT(A1,"yyyy"))))))

Gah! แทนที่จะคำนวณจากวันที่ 1 มกราคมจากนั้นทำการคำนวณแบบก้าวกระโดดมากมายเพื่อจัดการกับวันที่ 29 กุมภาพันธ์ฉันควรจะทำการคำนวณในวันที่ 1 พฤศจิกายนนั้นตอนนี้จัดการได้อย่างถูกต้องกับปี 2100, 2200 และ 2300 แต่ทำให้การใช้งานขึ้นอยู่กับรูปแบบวันที่เริ่มต้นการติดตั้ง Excel ของคุณ รุ่นนี้ถูกออกแบบมาสำหรับ dd / mm / yyyy:

 =IF(WEEKDAY(DATEVALUE(("01/11/"&TEXT(C1,"yyyy"))))<6,  
     1127-WEEKDAY(DATEVALUE(("01/11/"&TEXT(C1,"yyyy")))),
     1134-WEEKDAY(DATEVALUE(("01/11/"&TEXT(C1,"yyyy")))))

และตอนนี้ฉันได้ทำ pfaffing เพื่อรับการคำนวณ terse ใน Smalltalk แล้วนำกลับไปที่ผลลัพธ์ Excel ใน:

=DATE(A1,11,MOD(12-WEEKDAY(DATE(9600+A1,11,1)),7)+22)

(ด้วยปียังคงอยู่ใน A1 แต่เป็นจำนวนเต็ม) สิ่งนี้ใช้ได้แม้กระทั่งปี 2100, 2200 และ 2300 สำหรับทุกวันที่ตั้งแต่ 7700BC / E เป็นต้นไปโดยใช้เคล็ดลับการทำซ้ำวันที่ของ Thomas Kwa


1
เมื่อฉันลองสิ่งนี้พร้อมกับวันที่ก่อนปี 1900 มันจะไม่ทำงานในสำเนา excel ของฉัน
Angelo Fuchs

รุ่นยาวไม่ทำงานเช่นกัน
Angelo Fuchs

สำหรับวันที่เก่าให้ใช้สมุดงานวันที่ก่อนปี 1900 ของผู้ใช้ Excel < exceluser.com/downloads/examples/post_900_123/index.html >
Euan M

คำถามเกี่ยวกับการทำงานร่วมกันฉันไม่คิดว่าคุณได้รับอนุญาตให้ส่งออกเฉพาะวันที่ในเดือนพฤศจิกายน คุณต้องการ "พ.ย. " หรือ "11" ในบางรูปแบบ
lirtosiast

@Thomas Kwa อินพุตวันที่เป็นปีในรูปแบบวันที่ จากนั้นการคำนวณจะทำงานในวันของสัปดาห์ที่ 1 พฤศจิกายนตรงกับจากนั้นคำนวณวันที่ที่สี่ของวันพฤหัสบดีในเดือนพฤศจิกายน
Euan M

4

PowerShell, 67 64 84 72 58 45 ไบต์

param($a)'Nov';28-(date "00$a/9/1").DayOfWeek

เราใช้จำนวนเต็มเข้าของเรา$aและออกทันทีNovและขึ้นบรรทัดใหม่ จากนั้นเราก็นำ$aและเติมด้วยศูนย์และวันที่ 1 กันยายน00$a/9/1ก่อนสร้างใหม่dateและพิจารณาDayOfWeekว่ามันคืออะไร หากวันที่ 1 กันยายนเป็นวันอาทิตย์ ( .DayOfWeekเท่ากับ0) วันขอบคุณพระเจ้าจะอยู่ในวันที่ 28 หากวันที่ 1 กันยายนเป็นวันจันทร์ ( .DayOfWeekเท่ากับ1) วันขอบคุณพระเจ้าจะอยู่ในวันที่ 27 และอื่น ๆ ดังนั้นเราจึงลบวันนั้นของสัปดาห์จาก28เพื่อส่งคำตอบของเรา

การเตรียมด้วยบัญชีเลขศูนย์คู่สำหรับปีเดียวและสองหลักโดยไม่รบกวนการแยกวิเคราะห์สำหรับสามหรือสี่หลักปี ไม่ทำงานสำหรับตัวเลขที่ติดลบเป็น .NET ไม่สนับสนุนน้อยกว่าปีที่ผ่านมาdatetime0

ขอบคุณTessellatingHecklerและToby Speightสำหรับความช่วยเหลือในเรื่องนี้


"{0:D3}/Nov/$_" -f $aสั้นกว่า"$($a.ToString("000"))/Nov/$_"และให้ผลลัพธ์เหมือนกันและฉันคิดว่าคุณสามารถใช้11แทนNov
n0rd

@ n0rd Ah ยอดเยี่ยม! ใช่ - Novเป็นสิ่งที่ถูกทิ้งไว้ตั้งแต่ตอนที่ฉันพยายามทำให้มันจดจำปีสองหลักได้อย่างถูกต้องดังนั้นฉันจะแลกมันด้วย ขอบคุณ!
AdmBorkBork

@TessellatingHeckler วิธีนี้ใช้งานได้ แต่คุณต้องเตรียมเลขศูนย์สองตัวเพื่อทำบัญชีเป็นเวลาหนึ่งปีคุณจะต้องย้อนกลับไปใน 20XX ที่ฉันพบเจอ ขอบคุณสำหรับความช่วยเหลือ - ฉันอัพเดตคำตอบแล้ว
AdmBorkBork

1
@TessellatingHeckler ในระบบของฉันอย่างน้อยปีป้อนหลักเดียวเป็นผลในการdate "11/1/$a" Thursday, November 1, 2007 12:00:00 AMนี่เป็นเพราะเราไม่ได้แก้ไขคุณสมบัติCalendar.TwoDigitYearMaxดังนั้นเมื่อมีการแยกวิเคราะห์เราจะติดอยู่กับการซ้อนทับสองครั้งเพื่อให้ได้ผลลัพธ์
AdmBorkBork

ถูกต้อง ช่องว่างภายในคู่เป็น
TessellatingHeckler

3

Golfscript, 25 * 0.75 = 18.75 ไบต์

~.4/.25/.4/2---+7%28\--11

สิ่งนี้ใช้สูตรของ Sakamoto สำหรับวันในสัปดาห์ dd-mmเนื่องจากมีคนทำเช่นนี้ออกเป็นในรูปแบบของ การส่งก่อนหน้าของฉันสามารถพบได้ที่ด้านล่าง:

~.4/.25/.4/2---+7%"Nov "28@-

3

TSQL, 478 296 ไบต์

เพียงเพื่อ funsies โดยปกติแล้วคุณจะมีตารางส่วนข้อมูลวันที่เพื่อทำให้สิ่งนี้เป็นเรื่องง่ายselect * from dimDate where [Year] = @Year and [Holiday] = 'Thanksgiving'แต่ในกรณีที่ไม่มี ...

create function a(@y varchar(4))returns date as begin declare @d date,@i int=0 set @d=convert(date,@y+'-11-01')declare @t table(d date,c int identity)while @i<28 begin if datepart(weekday,@d)=5 insert @t(d) select @d select @d=dateadd(d,1,@d),@i+=1 end select @d=d from @t where c=4 return @d end

Ungolfed:

if exists(select * from sys.objects where name='a' and [type]='FN') drop function a
go

create function a(@y varchar(4))returns date
-- select dbo.a('2015')
as
begin
    declare @d date,@i int=0;

    set @d=convert(date,@y+'-11-01'); -- cannot golf out dashes for dates <year 1000

    declare @t table(d date,c int identity)

    while @i<28 
    begin -- populate "November" array
        if datepart(weekday,@d)=5 insert @t(d) select @d -- assumes @@datefirst = 7
        select @d=dateadd(d,1,@d),@i+=1
    end;

    select @d=d from @t where c=4 

    return @d

end

นี่เป็นวิธีที่สั้นที่สุดจริง ๆ หรือ
lirtosiast

ฉันคิดว่าฉันอาจไม่คุ้นเคยกับกฎของ code golf แต่คำตอบจะสร้างออบเจ็กต์ DB ที่รับอินพุตและส่งคืนเอาต์พุตเพื่อให้ตรงกับ OP มีการย่อบางอย่างที่อาจเกิดขึ้นได้หากอินพุตสามารถรับเข้าในโค้ดอินไลน์ แต่นี่เป็นความคิดของฉันสำหรับประเภทวัตถุของฟังก์ชัน ฉันแน่ใจว่ามันจะสามารถตีกอล์ฟต่อไปได้ทั้งสองกรณี @ThomasKwa คุณมีข้อเสนอแนะหรือไม่?
Peter Vandivier

ดูเหมือนว่าสำหรับฉันคุณสามารถใช้สูตรคณิตศาสตร์บริสุทธิ์ที่คำตอบนี้กล่าวถึงและไม่สนใจกับวัตถุสิ่งของวันที่ทั้งหมด
lirtosiast

ไม่ใช่วิธีการแก้ปัญหาคณิตศาสตร์ล้วนๆ แต่การอ่านคำตอบนั้นทำให้ฉันมีไอเดียในการตีกอล์ฟ 200 ตัวอักษร ขอบคุณ !!
Peter Vandivier

(ฉันหมายถึง(28 - ( x - 2 + floor(x / 4) - floor(x / 100) + floor(x / 400) ) % 7) ใช่การอ่านคำตอบอื่น ๆ มีแนวโน้มที่จะช่วยได้มาก
lirtosiast

3

Pyth, 30 28 * 75% = 21 ไบต์

ฉันมั่นใจ 100% ว่านี่จะสั้นลง แต่เดี๋ยวก่อนมันเป็นโปรแกรม Pyth แรกของฉัน! \ O /

-28.11%+-+-Q2/Q4/Q100/Q400 7

ชุดทดสอบ

แสดงวันที่ในdd.mmรูปแบบ

กรุณาแนะนำวิธีการตีกอล์ฟนี้ถ้าคุณทำได้! ฉันต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ Pyth


2

Excel, 64 48

ปีใน A1

= วันที่ (A1,11 เลือก (วันธรรมดา (วันที่ (A1,11,1)), 26,25,24,23,22,28,27))

=DATE(A1,11,MOD(12-WEEKDAY(DATE(A1,11,1)),7)+22)

เนื่องจาก Excel มีการแปลเป็นภาษาท้องถิ่นและฉันต้องการทดสอบสิ่งนี้ โปรดอธิบายสิ่งที่ฟังก์ชั่นทำดังนั้นฉันสามารถเลือกหนึ่งที่เหมาะสมในภาษาของฉัน
Angelo Fuchs

1
นอกจากนี้ยังใช้ไม่ได้กับวันที่ก่อนปี 1900 (อย่างน้อยในสำเนา Excel ของฉัน)
Angelo Fuchs

นอกจากนี้คุณบันทึก13ไบต์TEXTจาก=TEXT(DATE(A1,11,MOD(12-WEEKDAY(DATE(A1,11,1)),7)+22),"d mmm")- เอาท์พุทเป็นจำนวนเต็มโดยไม่ต้องจัดรูปแบบ
user3819867

@ user3819867 นั่นคือวิธีที่ excel จัดเก็บวันที่ การจัดรูปแบบถูกปล่อยไว้กับผู้ใช้
SeanC

@AngeloFuchs, DATE ส่งคืนค่าวันที่โดยใช้ปี, เดือน, วันเป็นพารามิเตอร์ MOD ส่งคืนส่วนที่เหลือของการหาร (โมดูลัส) WEEKDAY ส่งคืนวันในสัปดาห์ของวันที่ (1 = วันอาทิตย์, 2 = วันจันทร์, ฯลฯ )
SeanC

2

Befunge, 41 ไบต์

47*&:::4"d"*/\"d"/-\4/++5+7%-" voN",,,,.@

ทำงานกับล่ามนี้

คำอธิบาย: ปีที่พบบ่อยคือ365 = 1 mod 7วันดังนั้นในปีบวกทุก 4 วันปีลบทุก ๆ 100 TH ( dใน ASCII) ปีบวกทุก 400 THปีบัญชีสำหรับวันก้าวกระโดดใด ๆ (รวมทั้งปีปัจจุบัน) ผลจาก:::4"d"*/\"d"/-\4/++นั้นจะสามารถคิดเป็น 5 มีนาคมปีบริบูรณ์ในวันแรกหลังจากเดือนกุมภาพันธ์ถึงตกอยู่ในวันเดียวกันเป็นวันแรกของปีในปีที่พบบ่อย หลังจากนั้นเราปรับเทียบกับรูปแบบที่มี5+7%-การลบจำนวนวันของสัปดาห์จาก 28 TH (คน47*ที่เก็บไว้ก่อนหน้านี้) ของเดือนพฤศจิกายน จากนั้นพิมพ์

การแก้ไขเวอร์ชันสำหรับ BC ปีปัจจุบันนานกว่าโบนัสที่กำหนดไว้ที่ 59 -25% = 44.25 ไบต์:

47*&v
!`0:<+*"(F"_v#
" voN",,,,.@>:::4"d"*/\"d"/-\4/++5+7%-


2

ทับทิม, 60 58 57 * 0.75 = 42.75 ไบต์

->y{puts"Nov #{[5,4,3,2,1,7,6][Time.new(y,11).wday]+21}"}

58 ไบต์

->y{puts "Nov #{[5,4,3,2,1,7,6][Time.new(y,11).wday]+21}"}

60 ไบต์

->y{puts "Nov #{[5,4,3,2,1,7,6][Time.new(y,11,1).wday]+21}"}

Ungolfed:

-> y {
  puts "Nov #{[5,4,3,2,1,7,6][Time.new(y,11).wday]+21}"
}

การใช้งาน:

->y{puts"Nov #{[5,4,3,2,1,7,6][Time.new(y,11).wday]+21}"}

=> Nov 26

0

VBA, 124 ไบต์ * 75% = 93 ไบต์

Function e(y)
For i = 1 To 7
x = DateSerial(y, 11, 21) + i
If Weekday(x) = 5 Then e = Format(x, "mmm dd")
Next
End Function

ฉันไม่แน่ใจว่ามีการนับช่องว่างหรือไม่ช่องว่างนั้นมีอยู่ระหว่าง 102 ถึง 124 ให้แก้ไขได้
หากจำนวนเต็มเป็นผลลัพธ์ที่ถูกต้องฉันยินดีที่จะลบFormatส่วนนี้ออก


ช่องว่างนับ; หากไม่จำเป็นต้องใช้โปรแกรมคุณสามารถลบออกได้
lirtosiast

0

PHP 5.3+, 59 ไบต์

ใช้ฟังก์ชัน PHP builtin strtotimeในการแยกวิเคราะห์วันที่

<?=gmdate('M d',strtotime("Next Thursday $_GET[Y]-11-19"));

สิ่งนี้คาดว่าค่าจะถูกส่งผ่านพารามิเตอร์ GET Y หรือมากกว่าphp-cli Y=<year>มากกว่า

พยายามค้นหาวันพฤหัสบดีถัดไปหลังจากวันที่ 19 พฤศจิกายน
จนถึงตอนนี้ด้วยการทดสอบที่ฉันทำมันใช้งานได้ดี

โปรดทราบว่าปี 2 หลักอาจตีความแตกต่างกัน

ฉันใช้gmdateเพื่อหลีกเลี่ยงปัญหาเขตเวลา แต่ใช้งานได้ดีพอ ๆ กันdate(อย่างน้อยก็ที่ ๆ ฉันอยู่)


1
คำตอบไม่ได้เป็นสถานที่ที่เหมาะสมเพื่อหารือเกี่ยวกับความถูกต้องของวิธีการป้อนข้อมูล ฉันได้สร้างตัวเลือกนี้ในการเริ่มต้นของ I / O เมตาโพสต์ (เพื่อให้ชุมชนสามารถลงคะแนนในนั้น) และย้ายการสนทนาของคุณในการแชท (CC @Mego)
Dennis

0

T-SQL 215 ไบต์ 248 * 0.75 = 186 ไบต์

create function t(@y int)returns table return select x=convert(char(6),x,107)from(select x=cast(dateadd(dd,d,dateadd(yy,@y-2015+7600,'20151101'))as date)from(select d=21+n from(values(0),(1),(2),(3),(4),(5),(6))b(n))c)t where datepart(weekday,x)=5

Ungolfed

set nocount on;
if object_id('dbo.t') is not null drop function dbo.t
go

create function t(@y int)returns table return
    select x=convert(char(6),x,107)
    from (
        select
        x=cast(dateadd(dd,d,dateadd(yy,@y-2015+7600,'20151101'))as date)
        from (
            select d=21+n 
            from (values (0),(1),(2),(3),(4),(5),(6))b(n)
        )c
    )t
    where datepart(weekday,x)=5
go

ซึ่งนั่งร้านทดสอบนี้

select 
  [ 2015 = Nov. 26]=(select x from dbo.t( 2015))
 ,[ 1917 = Nov. 22]=(select x from dbo.t( 1917))
 ,[ 1752 = Nov. 23]=(select x from dbo.t( 1752))
 ,[ 1582 = Nov. 25]=(select x from dbo.t( 1582))
 ,[ 1400 = Nov. 27]=(select x from dbo.t( 1400))
 ,[ -480 = Nov. 25]=(select x from dbo.t( -480))
 ,[-5480 = Nov. 28]=(select x from dbo.t(-5480))
;
go

ให้ผลผลิตตามที่ต้องการ

2015 = Nov. 26  1917 = Nov. 22  1752 = Nov. 23  1582 = Nov. 25  1400 = Nov. 27  -480 = Nov. 25 -5480 = Nov. 28
--------------- --------------- --------------- --------------- --------------- --------------- ---------------
Nov 26          Nov 22          Nov 23          Nov 25          Nov 27          Nov 25          Nov 28

0

Pike , 87 91 107 77 76 ไบต์ - 25% = 57

string t(int y){return"Nov "+((11-Calendar.Day(y,11,1)->week_day())%7+22);}

ปล่อยให้เก่ามาเปรียบเทียบเพราะฉันคิดว่ามันฉลาดกว่าในแง่ของการใช้ประโยชน์จากโมดูลปฏิทิน แต่ข้างบนนั้นสั้นกว่า

string t(int y){object n=Calendar.Month(y,11);return"Nov "+(n->weeks()->day(4)&n->days())[3]->month_day();}

ดูเหมือนว่าจะไม่ป้อนข้อมูล
Peter Taylor

ใช่ฉันสับสนโดยวิธีแก้ปัญหาบางอย่างมีคำนิยามฟังก์ชั่นและบางคนก็ใช้ตัวแปรที่ไม่ได้กำหนดไว้ที่ใดก็ได้ดังนั้นฉันไม่แน่ใจว่าสิ่งที่ฉันควรจะใช้สำหรับ bytecount
eMBee

ฉันคิดว่าคำตอบที่คุณเห็นว่าใช้ " ตัวแปรที่ไม่ได้กำหนดไว้ที่ใด " จริง ๆ แล้วใช้ไวยากรณ์การประกาศฟังก์ชันสั้นมาก มีหนึ่งหรือสองคำตอบที่ใช้ esolangs ซึ่งมีการดูแลเป็นพิเศษสำหรับ stdin และชอบเขียนโปรแกรมเต็มรูปแบบ ฉันไม่รู้จัก Pike แต่ถ้าคุณสามารถลบช่องว่างและย่อชื่อฟังก์ชันเพื่อรับได้string t(int y){object n=Calendar.Month(y,11);return"Nov "+(n->weeks()->day(4)&n->days())[3]->month_day();}ฉันจะนับเป็น 107 ไบต์
Peter Taylor

ฉันคิดว่าฉันเคยเห็นบางอย่างที่ไม่ได้ประกาศฟังก์ชั่น แต่ดูเหมือนว่าพวกเขาจะได้รับการแก้ไขเพียงตัวอย่างเล็ก ๆ ไม่เหมาะ ถ้าถูกต้องฉันสามารถโกนอีก 17 ไบต์ของอันนี้ ...
eMBee

เวอร์ชัน Smalltalk ถูกเขียนเป็นโปรแกรมโดยเฉพาะนิพจน์เวิร์กสเปซ เราได้รับแจ้งว่าเราได้รับการป้อนข้อมูลมากกว่าการชักชวนการป้อนข้อมูล
Euan M

0

Smalltalk - Squeak and Pharo , 69 57 54 49 35 34 33 32 32 - 25% = 24 ไบต์

"พ.ย. nn": 69B 49B (-25% = 36.75B)
11nn (anInt): 57 54 32B (-25% = 24B)

"Year supplied as an integer value, y  
 Result provided as an integer value, 11nn
 Methods Date>>y:m:d: and >>w created as duplicates 
 of year:month:day and weekdayIndex"
(12-(Date y:y m:11d:1)w)\\7+1122

รุ่นก่อนหน้า

เอาท์พุท 11nn

"Year supplied as an integer value, y  
 Result provided as an integer value, 11nn"
(12-(Date year:y month:11 day:1) weekdayIndex)\\7+1122

"Year supplied as an integer value, y  
 Result provided as an integer value, d, prefixed by 11"
d:=(12-(Date year:y month:11 day:1) weekdayIndex)\\7+1122

เอาต์พุตพฤศจิกายน nn

"Year supplied as an integer value, y  Result provided as a string, 'Nov nn'"
'Nov ', (12-(Date year:y month:11 day:1) weekdayIndex\\7+22) asString

เอาต์พุต nn

"Year supplied as an integer value, y  Result provided as an integer value, d"
d:=(12-(Date year:y month:11 day:1) weekdayIndex)\\7+22

nb นี้มีให้เป็นโปรแกรม - โดยเฉพาะการแสดงออกพื้นที่ทำงาน - มากกว่าเป็นวิธีการ

มันถือว่าการป้อนข้อมูลที่ได้รับ (ตามถ้อยคำ "ให้ปีขึ้นไปสี่หลัก"
รวมถึงการประกาศและการให้ของการป้อนข้อมูลจะเพิ่มอีก 11 ตัวอักษร:

|y|y:=2015.(12-(Date y:y m:11 d:1)w)\\7+1122

ขอบคุณ eMBee ที่แสดงวิธีการลบอักขระอีกหนึ่งตัว - ช่องว่างทันทีก่อนหน้า 'w'

ที่จริงแล้วนั่นเป็นแรงบันดาลใจให้ฉันลองลบช่องว่างออกก่อน 'd:': อัน
|y|y:=2015.(12-(Date y:y m:11d:1)w)\\7+1122
ไหนใช้ได้!


ตามการชี้แจงของ OPรุ่นหมายเลขวันไม่ถูกต้อง
Mego

ฉันเห็นด้วย - แต่เนื่องจากมีรุ่นไม่กี่วันเท่านั้นในรายการฉันวางไว้ที่นั่นเพื่อเปรียบเทียบแอปเปิ้ลกับแอปเปิ้ล
Euan M

0

coreutils ของ GNU ขนาด 35 ไบต์

seq -f$1-11-2%g 2 8|date -f-|grep h

เพียงค้นหาสัปดาห์ 22-28 พฤศจิกายนสำหรับวันพฤหัสบดี เรียกใช้ในตำแหน่งที่ตั้ง C หรือ POSIX เนื่องจากฉันขึ้นอยู่กับวันพฤหัสบดีว่าเป็นตัวย่อของวันเดียวที่มี 'h'


นี่คือคำตอบที่ฉลาดกว่าแม้ว่าจะยาวกว่า:

echo Nov $((28-`date -d$1-5-5 +%w`))

เราดึงข้อมูลจำนวนวันในสัปดาห์ในสัปดาห์ที่กำหนดโดยพลการระหว่างเดือนมีนาคมถึงเดือนกันยายน (ดังนั้นวันและเดือนเป็นตัวเลขหนึ่งหลักและเราไม่ได้รับผลกระทบจากวันกระโดดที่เป็นไปได้) เราเลือกวันเพื่อให้เป็นวันอาทิตย์ ( %w==0) เมื่อวันขอบคุณพระเจ้าคือวันที่ 28 จากนั้นเราสามารถลบค่าดังกล่าวจาก 28 เพื่อให้ได้วันพฤหัสบดีที่เหมาะสม


2
วิธีนี้ใช้งานได้ยกเว้น Sean Connery จะทำงาน
bkul

0

TSQL, 53 52 ไบต์

DECLARE @ CHAR(4)=2000

PRINT DATEADD(d,59,DATEDIFF(d,1,DATEADD(m,9,@))/7*7)

ซอ

คำนวณวันจันทร์ก่อนหรือวันที่ 2 กันยายนและเพิ่ม 59 วัน

(ดีกว่าการคำนวณวันจันทร์ก่อนหรือวันที่ 4 ตุลาคมและเพิ่ม 31 วันเพราะตุลาคมเป็นเดือนที่ 10 ทำให้ประหยัด 1 ไบต์)


-1

Perl, 92 ไบต์

use Time::Local;(localtime(timelocal 0,0,0,$_,10,$ARGV[0]))[6]==4?print "Nov $_":0for 22..28

แก้ไข: แก้ไขรูปแบบผลลัพธ์ข้อผิดพลาดคงที่เช่นผลปี 2555 ใช้รูปแบบ "สำหรับ" ที่สั้น ขอบคุณ msh210


use Time::Local;(localtime(timelocal 0,0,0,$_,10,$ARGV[0]))[6]==4?print:0for 22..29นี่คือสั้นและจะเป็นสิ่งเดียวกัน: แต่สคริปต์ทั้งคู่ประสบข้อบกพร่องเดียวกัน: (1) พวกเขาไม่พิมพ์การแสดงเดือนตามที่ต้องการ (2) มีเอาต์พุตผิดสำหรับเช่นปี 2012
msh210
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.