Jaki jest obecny zodiak?

15

Wyświetl emoji wschodniego zodiaku w danym czasie, w zależności od kraju.

Wschodni zodiak to schemat klasyfikacji, który przypisuje zwierzę i jego rzekome atrybuty do każdego roku w powtarzającym się cyklu 12-letnim. Jest również przypisany do godzin.

Zasady:

  1. Kraj należy podać jako kod ISO 3166-1 alfa-3. Lista jest tutaj.

  2. Format wejściowy musi być tak: <ISO code> HH:MM. Dane wejściowe muszą być pojedynczym ciągiem. Każde wejście, które nie pasuje do tego formatu, nie ma znaczenia .

  3. Jeśli podany czas leży w granicach podanej poniżej tabeli, możesz wygenerować dowolny zodiak.

  4. Ponieważ jest to golfowy kod, wygrywa najkrótszy kod w bajtach.

Zodiaki:

Zodiaki bez określonego kraju są domyślne.

  • Pierwszy zodiak (23:00 - 01:00):

    • Szczur 🐀 (U + 1F400)
    • Mysz 🐁 (U + 1F401) w Persji (IRN)
  • Drugi zodiak (01:00 - 03:00):

    • Ox 🐂 (U + 1F402)
    • Bawół wodny 🐃 (U + 1F403) w Wietnamie (VNM)
    • Krowa 🐄 (U + 1F404) w Persji
  • Trzeci zodiak (03:00 - 05:00):

    • Tygrys 🐅 (U + 1F405)
    • Lampart 🐆 (U + 1F406) w Persji
  • Czwarty zodiak (05:00 - 07:00):

    • Królik 🐇 (U + 1F407)
    • Cat 🐈 (U + 1F408) w Wietnamie
  • Piąty zodiak (07:00 - 09:00):

    • Dragon 🐉 (U + 1F409)
    • Krokodyl 🐊 (U + 1F40A) / Wieloryb 🐋 (U + 1F40B) w Persji (możesz wyprowadzać oba)
    • Ślimak 🐌 (U + 1F40C) w Kazachstanie (KAZ)
  • Szósty zodiak (09:00 - 11:00):

    • Snake 🐍 (U + 1F40D)
  • Siódmy zodiak (11:00 - 13:00):

    • Koń 🐎 (U + 1F40E)
  • Ósmy zodiak (13:00 - 15:00):

    • Ram 🐏 (U + 1F40F)
    • Koza 🐐 (U + 1F410) w Wietnamie
    • Owca 🐑 (U + 1F411) w Persji
  • Dziewiąty zodiak (15:00 - 17:00):

    • Monkey 🐒 (U + 1F412)
  • Dziesiąty zodiak (17:00 - 19:00):

    • Kogut 🐓 (U + 1F413)
    • Kurczak 🐔 (U + 1F414) w Persji
  • Jedenasty zodiak (19:00 - 21:00):

    • Pies 🐕 (U + 1F415)
  • Dwunasty zodiak (21:00 - 23:00):

    • Świnia 🐖 (U + 1F416)
    • Dzik 🐗 (U + 1F417) w Japonii (JPN)
    • Elephant 🐘 (U + 1F418) w Tajlandii (THA)

Punkty kodowe są stąd.

Przykład:

Biorąc pod uwagę następujące dane wejściowe:

KOR 19:42

Dane wyjściowe muszą być:

🐕
Dannyu NDos
źródło
Ciekawe - wiedziałem, że jeżdżą na rowerze co 12 lat. Nigdy nie słyszałem o 24-godzinnym cyklu. Mimo to wyzwanie jest jasno określone w obecnej formie. „Poprawienie” go do 12 lat może prowadzić do zamieszania.
Level River St
O co chodzi z tym, że Persja ma tak wiele różnych wersji? Jakieś konkretne powody?
caird coinheringaahing
@cairdcoinheringaahing Nie jestem Irańczykiem, więc nie wiem.
Dannyu NDos
1
@cairdcoinheringaahing stary perski poeta i pisarz słownikowy o imieniu „Abou Nasr Farahi” lub po persku „ابونصر_فراهی” ma krótki wiersz w jednej ze swoich książek, w którym wymienia zwierzęta w tej kolejności, a zatem są to zwierzęta używane w Iranie co 12 lat. Nie był bardzo znanym poetą, więc nie ma o nim wielu angielskich zasobów, ale sprawdziłem tekst jego książki w języku perskim i tam był.
Noc 2
Związane .
przed

Odpowiedzi:

8

05AB1E , 66 64 63 bajtów

þт÷;ò12%ЕkÄ$ó·;@è₂Èαвλã…7q¼#∍o•5в6ä.•xиʒaàÒ¾Äλ•u3ôIákèsèžy₄*Oç

Wypróbuj online!

Ponury
źródło
11

JavaScript (ES6),  168 165 160 157  155 bajtów

Zaoszczędź 4 bajty dzięki @Neil

Zwraca krokodyla na 5 th zodiaku w Persji.

([a,b,c,,d,e])=>String.fromCodePoint(127998-~'00111321211'[k=-~(d+e)%24>>1]+k*2-~(1e12+{IRN:121010020100,VNM:1010001e4,KAZ:3e7,JPN:1,THA:2}[a+b+c]+a)[k+1])

Wypróbuj online!

W jaki sposób?

kh

k=((h+1)mod24)/2)

xkbk

bk=2)k+xk

128000+bk+dokdok

Podsumowano to w poniższej tabeli:

   k =  |   0 |   1 |   2 |   3 |   4 |   5 |   6 |   7 |   8 |   9 |  10 |  11
--------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----
  b(k)  |  +0 |  +2 |  +5 |  +7 |  +9 | +13 | +14 | +15 | +18 | +19 | +21 | +22
  = 2k  |   0 |   2 |   4 |   6 |   8 |  10 |  12 |  14 |  16 |  18 |  20 |  22
  +x(k) |   0 |   0 |   1 |   1 |   1 |   3 |   2 |   1 |   2 |   1 |   1 |   0
--------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----
   IRN  |  +1 |  +2 |  +1 |     |  +1 |     |     |  +2 |     |  +1 |     |
   VNM  |     |  +1 |     |  +1 |     |     |     |  +1 |     |     |     |
   KAZ  |     |     |     |     |  +3 |     |     |     |     |     |     |
   JPN  |     |     |     |     |     |     |     |     |     |     |     |  +1
   THA  |     |     |     |     |     |     |     |     |     |     |     |  +2

Skomentował

( [ a, b, c,               // a,b,c = country code
    ,                      // the space is ignored
    d, e ] ) =>            // d,e = hour (minutes are ignored)
  String.fromCodePoint(    // return the character whose code point is:
    127998                 //   127998
    -~'00111321211'[       //   + 1 + x(k)
      k = -~(d + e)        //   where k is defined as:
          % 24 >> 1        //     floor(((hour + 1) mod 24) / 2)
    ] +                    //
    k * 2                  //   + 2k
    -~(                    //   + 1 + the country offset
      1e12 +               //     each pattern being encoded as 10**12
      {                    //     + a specific value, leading to:
        IRN: 121010020100, //       IRN -> 1121010020100
        VNM: 1010001e4,    //       VNM -> 1010100010000
        KAZ: 3e7,          //       KAZ -> 1000030000000
        JPN: 1,            //       JPN -> 1000000000001
        THA: 2             //       THA -> 1000000000002
      }[a + b + c]         //     according to the country code
      + a                  //     coerced to a string
    )[k + 1]               //   extract the correct offset for this zodiac
  )                        //   (gives something NaN-ish for the other countries)
Arnauld
źródło
1
String.fromCodePoint(128e3+~~oszczędza 4 bajty.
Neil,
@Neil Thanks! :)
Arnauld,
5

PHP , 185 znaków, 263 bajty

Dzięki Dannyu NDos za naprawę błędów.

fn($i)=>strlen($b=[[🐀,🐁],[🐂,🐄,🐃],[🐅,🐆],[🐇,🐇,🐈],[🐉,🐊,🐉,🐌],🐍,🐎,[🐏,🐑,🐐],🐒,[🐓,🐔],🐕,[🐖,4=>🐗,5=>🐘]][(($t=$i[4].$i[5])%2?$t+1:$t)%24/2])?$b:$b[strpos(____IRN_VNM_KAZ_JPN_THA,substr($i,0,3))/4]

Wypróbuj online!

Po prostu proste mapowanie tablicy, powinny istnieć lepsze sposoby na grę w golfa. Część godzinowa czasu wejściowego jest konwertowana na liczbę parzystą (0–22), a następnie jest dzielona przez 2, aby uzyskać indeks tablicy 0 do 11 w odwzorowaniu. Przedziały czasowe ze specjalnymi przypadkami są pod-tablicą z indeksem 0 zamapowanym na znak domyślny i 1-5 zamapowanym na znak specjalny dla IRN, VNM, KAZ, JPN i THA w tej samej kolejności.

Noc 2
źródło
4

Węgiel drzewny , 73 bajty

℅⁺×¹²⁸φΣE⮌…⪪”&↖∨∧h↘X⁷↘H⪫³Jºρ⁷s,⟲⌈3A‖Cc>χ§₂25:×” ⊕﹪÷⊕I…粦²¦¹²⊕⎇κ÷Lι³⌕⪪ι³θ

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

℅⁺×¹²⁸φ

0x1F400= 128 000 ( φjest wstępnie zdefiniowany na 1000). Jest to dodawane do sumy reszty wyrażenia i konwertowane na znak do niejawnego wydruku.

⊕﹪÷⊕I…粦²¦¹²

Godzinę wyodrębnia się i przelicza na wskaźnik zodiaku.

…⪪”&↖∨∧h↘X⁷↘H⪫³Jºρ⁷s,⟲⌈3A‖Cc>χ§₂25:×” ...

Skompresowany ciąg IRN VNMIRN IRN VNM IRNIRNKAZ VNMIRN IRN JPNTHAjest dzielony na spacje i obcinany do długości określonej przez ten indeks.

ΣE⮌...

Tablica jest następnie odwracana, mapowana i sumowana.

⊕⎇κ÷Lι³⌕⪪ι³θ

W przypadku pierwszego elementu ciąg jest dzielony na grupy po trzy znaki i pobierany jest indeks kraju, w przeciwnym razie liczona jest liczba krajów. W przypadku pierwszego elementu indeks musi zostać przekonwertowany z indeksowania 0 na indeksowanie 1, natomiast w przypadku pozostałych elementów wynik należy zwiększyć dla kraju domyślnego, więc odbywa się to poza trójskładnikiem.

Neil
źródło
3

Python 3 , 168 bajtów

lambda s,a='BA EDC GF HIH KJMJ N O RQP S UT V WWWXYW'.split():chr(ord(a[(int(s[4:6])+1)//2][min('IRNVNMKAZJPNTHA'.find(s[:3])//3,len(a[(int(s[4:6])+1)//2])-1)])+127935)

Wypróbuj online!

Matthew Jensen
źródło
2
147 bajtów, jeśli nie masz nic przeciwko przejściu na Python 3.8.
Arnauld