Xác định mùa


11

Giới thiệu:

Bắc bán cầu (ví dụ Châu Âu, Bắc Mỹ, v.v.), các mùa được chia như thế này:
- Mùa xuân: Tháng 3, Tháng 4, Tháng 5
- Mùa hè: Tháng 6, Tháng 7, Tháng 8
- Mùa thu: Tháng 9, Tháng 10, Tháng 11
- Mùa đông: Tháng 12 , Tháng một tháng hai

Trong Nam bán cầu tuy nhiên (ví dụ: Úc, Nam Mỹ, vv), các mùa được chia như thế này:
- Mùa Xuân: Tháng Chín, tháng Mười, tháng mười một
- Summer: Tháng Mười Hai, tháng Giêng, tháng hai
- Thu: Tháng Ba, tháng Tư, tháng Năm
- Mùa đông: Tháng Sáu tháng bảy Tháng Tám

Sự khác biệt này là do vị trí của mặt trời liên quan đến đường xích đạo, nơi bán cầu bắc và nam có mùa trái ngược nhau.

Đầu vào:

Trong thử thách này, chúng tôi sẽ thực hiện hai đầu vào:

  • Một cho tháng ( 1 <= m <= 12hoặc 0 <= m <= 11) (ví dụ và trường hợp thử nghiệm đều là 1 chỉ mục).
  • Và một cho năm 'nhóm vị trí' ở vĩ độ Trái đất ( -2 <= p <= 2), nơi -2là Nam Cực, -1là bán cầu nam không bao gồm Nam Cực, 0là vùng nhiệt đới gần xích đạo, 1là bán cầu bắc không bao gồm Bắc Cực, và 2là Bắc Cực.
    Mặc dù Bắc Cực, Nam Cực và Vùng nhiệt đới tất nhiên vẫn có mùa, nhưng vì thách thức này, chúng ta sẽ nói Bắc Cực và Nam Cực ở trạng thái không đổi, và Vùng Winternhiệt đới luôn ở trạng thái không đổi Summer.

Đây là một đại diện trực quan của năm nhóm này, nơi -2là Vòng Nam Cực; -1giữa chí tuyến của Ma Kết và vòng Nam Cực; 0giữa chí tuyến của Ma Kết và chí hướng của ung thư; 1giữa Vòng Bắc Cực và Vùng ung thư; và -2Vòng Bắc Cực.

nhập mô tả hình ảnh ở đâynhập mô tả hình ảnh ở đây Nguồn: COSMOS - Bách khoa toàn thư SAO

Đầu ra:

Một trong những Spring, Summer, Autumn, hay Winter, làm theo các quy tắc:

  • Là đầu vào vị trí 2hoặc -2(Bắc Cực hoặc Nam Cực), luôn luôn đầu ra Winter.
  • Là đầu vào vị trí 0(Nhiệt đới), luôn luôn đầu ra Summer.
  • Là đầu vào vị trí 1(bán cầu bắc), đầu ra một trong bốn mùa dựa trên đầu vào tháng: Spring( m = [3,5]); Summer( m = [6,8]); Autumn( m = [9,11]); Winter( m = 12 or m = [1,2]).
  • Là đầu vào vị trí -1(nam bán cầu), đầu ra một trong bốn mùa dựa trên đầu vào tháng: Spring( m = [9,11]); Summer( m = 12 or m = [1,2]); Autumn( m = [3,5]); Winter( m = [6,8]).

Quy tắc thử thách:

  • Đầu ra bất kỳ bốn giá trị riêng biệt của sự lựa chọn của bạn cho thấy Spring, Summer, Autumn, hoặc Winter(xin vui lòng ghi rõ những gì bạn đã sử dụng trong câu trả lời của bạn).
    -15 bytes tiền thưởng nếu bạn đầu ra Spring, Summer, Autumn, hoặc Winterdưới dạng văn bản (case-insensitive, vì vậy có thể hoàn toàn chữ thường hoặc chữ hoa hoàn toàn là tốt, thay vì tiêu đề hợp cụ thể được sử dụng).
  • Đầu vào tháng có thể ở bất kỳ định dạng hợp lý. Có thể là số nguyên 0 được lập chỉ mục hoặc 1 chỉ mục, Đối tượng ngày, Chuỗi tháng, v.v.
  • Đầu vào vị trí sẽ luôn là một trong những năm đầu vào tốt -2, -1, 0, 1, 2.

Quy tắc chung:

  • Đây là , vì vậy câu trả lời ngắn nhất bằng byte thắng.
    Đừng để ngôn ngữ mã-golf ngăn cản bạn đăng câu trả lời với các ngôn ngữ không mã hóa. Cố gắng đưa ra một câu trả lời càng ngắn càng tốt cho ngôn ngữ lập trình 'bất kỳ'.
  • Các quy tắc chuẩn áp dụng cho câu trả lời của bạn, vì vậy bạn được phép sử dụng STDIN / STDOUT, các hàm / phương thức với các tham số thích hợp và kiểu trả về, các chương trình đầy đủ. Cuộc gọi của bạn.
  • Lỗ hổng mặc định bị cấm.
  • Nếu có thể, vui lòng thêm một liên kết với một bài kiểm tra cho mã của bạn.
  • Ngoài ra, xin vui lòng thêm một lời giải thích nếu cần thiết.

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

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

Tại sao chúng ta không thể sử dụng bốn giá trị riêng biệt cho các mùa?
Erik the Outgolfer

Tôi đã đọc quy tắc đó, đó là lý do tại sao tôi hỏi. Ngoài ra, tại sao bạn sợ "phép tính số nguyên"?
Erik the Outgolfer

Tôi không thấy bất cứ điều gì xấu khi chỉ nhìn thấy các tính toán, dù sao chúng cũng sẽ được sử dụng để lập chỉ mục. Đó là thử thách của bạn, nhưng tôi muốn nói rằng đây là một sự phức tạp không cần thiết. EDIT: về sao chép, tốt, điều đó không thực sự có thể tránh được.
Erik the Outgolfer

2
Tôi không nghĩ rằng bất kỳ phần thưởng nào là cần thiết, chương trình vẫn hoạt động nếu nó không chuyển đổi đầu ra thành các chuỗi đó.
Erik the Outgolfer

1
Tôi nghĩ rằng tiền thưởng byte để bù kích thước byte của văn bản là hoàn toàn tốt. Đây không phải là một trong những "Điểm X thưởng nếu bạn cũng thực hiện nhiệm vụ khác này". Thách thức tập trung vào các mùa, vì vậy thật có ý nghĩa khi khuyến khích thực sự in các mùa.
Nathan Merrill

Câu trả lời:



6

Python 2 , 29 byte

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

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

Một cổng theo cách tiếp cận Ruby của GB , hóa ra ngắn hơn một vài byte so với của tôi:

32 byte

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

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

Một hàm ẩn danh trả về các mùa là các số từ 0 đến 3, trong đó chúng đại diện cho Mùa hè, Mùa thu, Mùa đông và Mùa xuân theo thứ tự đó.

Đối với việc in tên mùa thực tế:

63 - 15 = 48 byte

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

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

Có chuỗi kết hợp nếu bất cứ ai muốn nó.


3

C (gcc) , 78 75 (-15 phần thưởng) = 60 byte

Sử dụng 1 tháng dựa trên.

Chỉnh sửa: Sắp xếp lại toán tử toán học và giảm.

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

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


1
Bạn có thể lưu hai byte bằng (++a+m/3)%4++a+m/3&3. Ngoài ra, a*achính xác là kỳ lạ khi nào a, vì vậy kiểm tra a&1sẽ tốt, không?
Lynn

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.