กำหนดฤดูกาล


11

บทนำ:

ในซีกโลกเหนือ (เช่นยุโรปอเมริกาเหนือ ฯลฯ ) ฤดูกาลจะถูกแบ่งออกดังนี้:
- ฤดูใบไม้ผลิ:มีนาคม, เมษายน, พฤษภาคม
- ฤดูร้อน:มิถุนายน, กรกฎาคม, สิงหาคม
- ฤดูใบไม้ร่วง:กันยายน, ตุลาคม, พฤศจิกายน
- ฤดูหนาว:ธันวาคม , มกราคมกุมภาพันธ์

ในซีกโลกใต้อย่างไรก็ตาม (เช่นออสเตรเลียอเมริกาใต้ ฯลฯ ) ฤดูกาลจะถูกแบ่งออกดังนี้:
- ฤดูใบไม้ผลิ:กันยายน, ตุลาคม, พฤศจิกายน
- ฤดูร้อน:ธันวาคม, มกราคม, กุมภาพันธ์
- ฤดูใบไม้ร่วง:มีนาคม, เมษายน, พฤษภาคม
- ฤดูหนาว:มิถุนายนกรกฎาคมสิงหาคม

ความแตกต่างนี้เกิดจากตำแหน่งของดวงอาทิตย์เกี่ยวกับเส้นศูนย์สูตรซึ่งซีกโลกเหนือและซีกโลกใต้มีฤดูกาลที่ตรงกันข้าม

การป้อนข้อมูล:

ในการท้าทายนี้เราจะรับอินพุตสองตัว:

  • หนึ่งรายการสำหรับเดือน ( 1 <= m <= 12หรือ0 <= m <= 11) (ตัวอย่างและกรณีทดสอบทั้งหมดได้รับการจัดทำดัชนี 1 รายการ)
  • และหนึ่งในห้า 'ตำแหน่งกลุ่ม' ที่ละติจูดของโลก ( -2 <= p <= 2) ซึ่ง-2แอนตาร์กติก-1เป็นซีกโลกใต้ยกเว้นแอนตาร์กติก0คือเขตร้อนที่อยู่ใกล้เส้นศูนย์สูตร1คือซีกโลกเหนือยกเว้นอาร์กติกและ2เป็น อาร์กติก
    แม้ว่าอาร์กติกขั้วโลกใต้และเขตร้อนของหลักสูตรยังคงมีฤดูกาลเพื่อประโยชน์ของความท้าทายนี้เราจะพูดอาร์กติกและแอนตาร์กติกอยู่ในสภาพคงที่ของและเขตร้อนอยู่ในสภาพคงที่ของWinterSummer

นี่คือภาพที่แสดงให้เห็นถึงห้ากลุ่มนี้ซึ่ง-2อยู่ที่วงกลมแอนตาร์กติก -1ระหว่าง Tropic of Capricorn และ Antarctic Circle 0ระหว่าง Tropic of Capricorn และ Tropic of Cancer; 1ระหว่าง Arctic Circle กับ Tropic of Cancer; และ-2อาร์กติกเซอร์เคิล

ป้อนคำอธิบายรูปภาพที่นี่ป้อนคำอธิบายรูปภาพที่นี่ แหล่งที่มา: COSMOS สารานุกรมดาราศาสตร์

เอาท์พุท:

หนึ่งSpring, Summer, AutumnหรือWinterตามกฎเหล่านี้:

  • คือตำแหน่งอินพุต2หรือ-2(Arctic หรือ Antarctic) เอาต์พุตWinterทุกครั้ง
  • คือตำแหน่งอินพุต0(Tropics) เอาต์พุตSummerทุกครั้ง
  • คือตำแหน่งอินพุต1(ซีกโลกเหนือ) เอาท์พุทหนึ่งในสี่ของฤดูกาลตามอินพุตเดือน: Spring( m = [3,5]); Summer( m = [6,8]); Autumn( m = [9,11]); Winter( m = 12 or m = [1,2])
  • คือตำแหน่งอินพุต-1(ซีกโลกใต้) ส่งออกหนึ่งในสี่ของฤดูกาลตามเดือนที่ป้อน: Spring( m = [9,11]); Summer( m = 12 or m = [1,2]); Autumn( m = [3,5]); Winter( m = [6,8])

กฏท้าทาย:

  • ผลใด ๆ สี่ค่าที่แตกต่างของทางเลือกของคุณแสดงให้เห็นSpring, Summer, AutumnหรือWinter(โปรดรัฐสิ่งที่คุณเคยใช้ในคำตอบของคุณ)
    -15 ไบต์โบนัสถ้าคุณเอาท์พุทSpring, Summer, AutumnหรือWinterเป็นข้อความ (กรณีตายเพื่อให้สามารถอย่างเต็มที่ตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่อย่างเต็มที่เช่นกันแทนการที่ใช้ชื่อกรณี)
  • ข้อมูลเดือนสามารถอยู่ในรูปแบบที่เหมาะสม สามารถเป็นจำนวนเต็ม 0 ดัชนีหรือ 1 ดัชนีวันที่วัตถุเดือนสตริง ฯลฯ
  • การป้อนข้อมูลตำแหน่งที่จะเป็นหนึ่งในจำนวนนี้เป็นไปได้ห้าปัจจัยการผลิต-2, -1, 0, ,12

กฎทั่วไป:

  • นี่คือดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ
    อย่าปล่อยให้ภาษารหัสกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ได้เข้ารหัส พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ '
  • กฎมาตรฐานจะใช้สำหรับคำตอบของคุณดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชัน / เมธอดพร้อมพารามิเตอร์ที่เหมาะสมและชนิดผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
  • ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
  • หากเป็นไปได้โปรดเพิ่มลิงค์พร้อมทดสอบรหัสของคุณ
  • นอกจากนี้โปรดเพิ่มคำอธิบายหากจำเป็น

กรณีทดสอบ:

Position    1-indexed Month    Output

-2          8  (August)        Winter
-2          12 (December)      Winter
-1          3  (March)         Autumn
-1          5  (May)           Autumn
-1          8  (August)        Winter
-1          12 (December)      Summer
0           1  (January)       Summer
0           7  (July)          Summer
1           1  (January)       Winter
1           4  (April)         Spring
1           7  (July)          Summer
1           12 (December)      Winter
2           2  (February)      Winter
2           9  (September)     Winter

ทำไมเราไม่สามารถใช้ค่าที่แตกต่างกันสี่ค่าสำหรับฤดูกาล
Erik the Outgolfer

ฉันได้อ่านกฎนั้นนั่นคือเหตุผลที่ฉันถาม นอกจากนี้ทำไมคุณถึงกลัว "การคำนวณด้วยจำนวนเต็มเวทมนต์"?
Erik the Outgolfer

ฉันไม่เห็นอะไรเลวร้ายเมื่อเห็นการคำนวณเพียงอย่างเดียวพวกเขาจะใช้ทำดัชนีมากที่สุด มันเป็นความท้าทายของคุณ แต่ฉันจะบอกว่านี่เป็นภาวะแทรกซ้อนที่ไม่จำเป็น แก้ไข: เกี่ยวกับการคัดลอกก็ไม่สามารถหลีกเลี่ยงได้จริงๆ
Erik the Outgolfer

2
ฉันไม่คิดว่าโบนัสใด ๆ เป็นสิ่งจำเป็นโปรแกรมยังคงใช้งานได้หากไม่แปลงผลลัพธ์เป็นสตริงเหล่านั้น
Erik the Outgolfer

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

คำตอบ:



6

Python 2 , 29 ไบต์

lambda p,m:[0,m+6,6,m][p]/3%4

ลองออนไลน์!

พอร์ตของวิธี Ruby ของ GBซึ่งกลายเป็นบิตสั้นกว่าของฉัน:

32 ไบต์

lambda p,m:(p%2*(p+m/3+5)or p)%4

ลองออนไลน์!

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

สำหรับการพิมพ์ชื่อซีซันที่เกิดขึ้นจริง:

63 - 15 = 48 ไบต์

lambda p,m:"SAWSuuipmtnrmutiemenrnrg"[(p%2*(p+m/3+5)or p)%4::4]

ลองออนไลน์!

มีสตริงรวมกันถ้าใครต้องการมัน


3

C (gcc) , 78 75 (-15 โบนัส) = 60 ไบต์

ใช้เวลา 1 เดือน

แก้ไข:จัดเรียงตัวดำเนินการทางคณิตศาสตร์ใหม่และลดลง

f(m,a){puts("Summer\0Autumn\0Winter\0Spring"+7*(a*a&1?(++a+m/3)%4:2*!!a));}

ลองออนไลน์!


1
คุณสามารถบันทึกไบต์ที่สองกับ→(++a+m/3)%4 ++a+m/3&3นอกจากนี้ยังa*aแปลกอย่างแม่นยำเมื่อaเป็นดังนั้นการตรวจสอบa&1ควรจะดีไม่?
ลินน์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.