Sezonu Belirle


11

Giriş:

In kuzey yarımkürede (yani Avrupa, Kuzey Amerika, vb), mevsimler böyle ayrılır:
- Bahar: Mart, Nisan, Mayıs
- Yaz: Haziran, Temmuz, Ağustos
- Sonbahar: Eylül, Ekim, Kasım
- Kış: Aralık , Ocak Şubat

In güney yarımkürede ancak (yani Avustralya, Güney Amerika, vb), mevsimler böyle ayrılır:
- Bahar: Eylül, Ekim, Kasım
- Yaz: Aralık, Ocak, Şubat
- Sonbahar: Mart, Nisan, Mayıs
- Kış: Haziran Temmuz Ağustos

Bu fark, güneşin kuzey ve güney yarımkürelerin zıt mevsimlere sahip olduğu ekvator ile ilgili konumundan kaynaklanmaktadır.

Giriş:

Bu meydan okumada, iki girdi alacağız:

  • Bir ay ( 1 <= m <= 12veya 0 <= m <= 11) için (örnekler ve test senaryolarının tümü 1 endekslidir).
  • Ve Earth (enlemler arasında beş 'konum-gruplar' için bir -2 <= p <= 2), -2Antarktika olduğunu -1Antarktika hariç güney yarımküre vardır 0Tropik ekvator yakınında vardır 1Arktik hariç kuzey yarımküre olduğunu ve 2bir Kuzey Kutbu.
    Arktik, Antarktika ve Tropiklerin elbette mevsimleri olmasına rağmen, bu zorluk uğruna Arktik ve Antarktik'in sabit bir durumda olduğunu Winterve Tropiklerin sabit bir durumda olduğunu söyleyeceğiz Summer.

Burada -2Antarktika Çemberi olan bu beş grubun görsel bir temsili ; -1Oğlak Dönencesi ile Antarktik Çember arasında; 0Oğlak Dönencesi ile Yengeç Dönencesi arasında; 1Kuzey Kutup Dairesi ile Yengeç Dönencesi arasında; ve -2Kuzey Kutup Dairesi.

resim açıklamasını buraya girinresim açıklamasını buraya girin Kaynak: COSMOS - SAO Astronomi Ansiklopedisi

Çıktı:

Biri Spring, Summer, Autumn, veya Winter, bu kuralların aşağıdadır:

  • Konum girişi 2veya -2(Arktik veya Antarktika), her zaman çıktıdır Winter.
  • Konum girişi 0(Tropics), her zaman çıkış Summer.
  • Konum girişi 1(kuzey yarımküre), ay girişine göre dört mevsimden biri çıktı: Spring( m = [3,5]); Summer( m = [6,8]); Autumn( m = [9,11]); Winter( m = 12 or m = [1,2]).
  • Konum girişi -1(güney yarımküre), ay girişine göre dört mevsimden biri çıktı: Spring( m = [9,11]); Summer( m = 12 or m = [1,2]); Autumn( m = [3,5]); Winter( m = [6,8]).

Zorluk kuralları:

  • Çıktı belirten Seçtiğiniz herhangi bir dört ayrı değer Spring, Summer, Autumn, veya Winter(eğer cevap kullanılan kadarıyla belirtiniz).
    -15 ikramiye bayt çıkış eğer Spring, Summer, Autumn, veya Wintermetin (harf duyarsız, böylece tamamen küçük harf ya da tamamen büyük harf de olabilir yerine kullanılan başlık davanın,).
  • Ay girişi herhangi bir makul formatta olabilir. 0 dizinli veya 1 dizinli tam sayı, Tarih nesnesi, Ay Dizesi vb. Olabilir.
  • Pozisyon girişi her zaman bu mümkün beş girdilerin biri olacak -2, -1, 0, 1, 2.

Genel kurallar:

  • Bu , bayt en kısa cevap kazanır.
    Kod golf dillerinin, kod yazmayan dillerle yanıt göndermenizi engellemesine izin vermeyin. 'Herhangi bir' programlama dili için mümkün olduğunca kısa bir cevap bulmaya çalışın.
  • Cevabınız için standart kurallar geçerlidir , bu nedenle STDIN / STDOUT, fonksiyonlar / yöntem uygun parametreler ve dönüş tipi, tam programlar ile kullanılabilir. Çağrınız.
  • Varsayılan Loopholes yasaktır.
  • Mümkünse, lütfen kodunuz için test içeren bir bağlantı ekleyin.
  • Ayrıca, gerekirse bir açıklama ekleyin.

Test senaryoları:

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

Neden mevsimler için dört ayrı değer kullanamıyoruz?
Outgolfer Erik

Bu kuralı okudum, bu yüzden sordum. Ayrıca, neden "sihirli tamsayı hesaplamaları" ndan korkuyorsunuz?
Outgolfer Erik

Sadece hesaplamaları görmekle ilgili kötü bir şey görmüyorum, büyük olasılıkla zaten endeksleme için kullanılacaklar. Bu senin meydan okuma, ama bunun gereksiz bir komplikasyon olduğunu söyleyebilirim. EDIT: kopyalama hakkında, aslında, bu gerçekten önlenemez.
Outgolfer Erik

2
Herhangi bir ikramiye gerekli olduğunu sanmıyorum, eğer sadece bu dizeleri çıktı dönüştürmezse program hala çalışır.
Outgolfer Erik

1
Metnin bayt boyutunu dengelemek için bayt bonuslarının tamamen iyi olduğunu düşünüyorum. Bu, diğer görevi de yaparsanız, Bonus X puanlarından biri değildir. Zorluk mevsimlere odaklanmıştır, bu nedenle mevsimleri basmak için teşvik etmek mantıklıdır.
Nathan Merrill

Yanıtlar:



6

Python 2 , 29 bayt

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

Çevrimiçi deneyin!

GB'nin Ruby yaklaşımının bir limanı , bu benimkinden birkaç bayt daha kısa çıktı:

32 bayt

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

Çevrimiçi deneyin!

Mevsimleri 0-3 arasında döndüren anonim bir işlevdir ve burada Yaz, Sonbahar, Kış ve İlkbaharı sırayla temsil ederler.

Gerçek sezon adlarını yazdırmaya gelince:

63-15 = 48 bayt

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

Çevrimiçi deneyin!

Herkes isterse birleşik dize var.


3

C (gcc) , 78 75 (-15 bonus) = 60 bayt

1 tabanlı aylar kullanma.

Düzenleme: Yeniden düzenlenmiş matematiksel işleçler ve azaltılmış.

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

Çevrimiçi deneyin!


1
(++a+m/3)%4→ ile iki bayt kaydedebilirsiniz ++a+m/3&3. Ayrıca, a*atam olarak ne zaman garip a, yani kontrol iyi a&1olmalı, değil mi?
Lynn

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.