Apa zodiak saat ini?

15

Tampilkan emoji zodiak timur pada waktu tertentu, sesuai dengan negara yang diberikan.

Zodiak timur adalah skema klasifikasi yang menetapkan hewan dan atribut-atributnya yang terkenal setiap tahun dalam siklus 12 tahun yang berulang. Itu juga ditugaskan untuk jam.

Aturan:

  1. Negara harus diberikan kode ISO 3166-1 alpha-3. Daftarnya ada di sini.

  2. Format input harus seperti ini: <ISO code> HH:MM. Input harus berupa string tunggal. Masukan apa pun yang tidak cocok dengan format ini masuk dalam situasi tidak peduli .

  3. Jika waktu yang diberikan terletak pada batas grafik yang diberikan di bawah ini, Anda dapat menampilkan zodiak.

  4. Karena ini adalah kode golf, kode terpendek dalam byte akan menang.

Zodiak:

Zodiak tanpa negara yang ditentukan adalah default.

  • Zodiak pertama (23:00 - 01:00):

    • Tikus 🐀 (U + 1F400)
    • Mouse 🐁 (U + 1F401) di Persia (IRN)
  • Zodiak kedua (01:00 - 03:00):

    • Sapi 🐂 (U + 1F402)
    • Kerbau Air 🐃 (U + 1F403) di Vietnam (VNM)
    • Sapi 🐄 (U + 1F404) di Persia
  • Zodiak ketiga (03:00 - 05:00):

    • Tiger 🐅 (U + 1F405)
    • Leopard 🐆 (U + 1F406) di Persia
  • Zodiak keempat (05:00 - 07:00):

    • Kelinci 🐇 (U + 1F407)
    • Cat 🐈 (U + 1F408) di Vietnam
  • Zodiak kelima (07:00 - 09:00):

    • Naga 🐉 (U + 1F409)
    • Buaya 🐊 (U + 1F40A) / Paus 🐋 (U + 1F40B) di Persia (Anda dapat menampilkan salah satu dari keduanya)
    • Siput 🐌 (U + 1F40C) di Kazakhstan (KAZ)
  • Zodiak keenam (09:00 - 11:00):

    • Ular 🐍 (U + 1F40D)
  • Zodiak ketujuh (11:00 - 13:00):

    • Kuda 🐎 (U + 1F40E)
  • Zodiak kedelapan (13:00 - 15:00):

    • Ram 🐏 (U + 1F40F)
    • Kambing 🐐 (U + 1F410) di Vietnam
    • Domba 🐑 (U + 1F411) di Persia
  • Zodiak kesembilan (15:00 - 17:00):

    • Monyet 🐒 (U + 1F412)
  • Zodiak kesepuluh (17:00 - 19:00):

    • Ayam jantan 🐓 (U + 1F413)
    • Ayam 🐔 (U + 1F414) di Persia
  • Zodiak kesebelas (19:00 - 21:00):

    • Anjing 🐕 (U + 1F415)
  • Zodiak kedua belas (21: 00-23: 00):

    • Babi 🐖 (U + 1F416)
    • Babi 🐗 (U + 1F417) di Jepang (JPN)
    • Gajah 🐘 (U + 1F418) di Thailand (THA)

Poin kode berasal dari sini.

Contoh:

Diberikan input berikut:

KOR 19:42

Outputnya harus:

🐕
Dannyu NDos
sumber
Menarik - Saya tahu ini bersepeda setiap 12 tahun. Saya tidak pernah mendengar tentang siklus 24 jam. Namun, tantangannya jelas ditentukan seperti apa adanya. "Mengoreksi" sampai 12 tahun dapat menyebabkan kebingungan.
Level River St
Ada apa dengan Persia yang memiliki banyak versi berbeda? Adakah alasan khusus?
caird coinheringaahing
@cairdcoinheringaahing Saya bukan orang Iran, jadi saya tidak tahu.
Dannyu NDos
1
@cairdcoinheringaahing seorang penyair dan penulis kamus Persia tua bernama "Abou Nasr Farahi" atau dalam bahasa Persia "ابونصر_فراهی" memiliki puisi pendek di salah satu bukunya, yang menamai hewan-hewan itu dalam urutan di dalamnya dan dengan demikian mereka adalah hewan yang digunakan di Iran untuk setiap 12 tahun itu. Dia bukan penyair yang sangat terkenal, jadi tidak banyak sumber bahasa Inggris yang dapat ditemukan tentang dia, tetapi saya memeriksa teks bukunya dalam bahasa Persia dan penyair itu ada di sana.
Night2
Terkait .
agtoever

Jawaban:

8

05AB1E , 66 64 63 byte

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

Cobalah online!

Grimmy
sumber
11

JavaScript (ES6),  168 165 160 157  155 byte

Disimpan 4 byte berkat @Neil

Mengembalikan buaya untuk zodiak ke- 5 di Persia.

([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])

Cobalah online!

Bagaimana?

kh

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

xkbk

bk=2k+xk

128000+bk+ckck

Ini dirangkum dalam tabel berikut:

   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

Berkomentar

( [ 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
sumber
1
String.fromCodePoint(128e3+~~menghemat 4 byte.
Neil
@Neil Terima kasih! :)
Arnauld
5

PHP , 185 karakter, 263 byte

Terima kasih kepada Dannyu NDos untuk perbaikan bug.

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]

Cobalah online!

Hanya pemetaan susunan sederhana, harus ada cara yang lebih baik untuk bermain golf ini. Jam bagian dari waktu input dikonversi ke angka genap (0-22) dan kemudian dibagi dengan 2 untuk mendapatkan indeks array 0 hingga 11 dalam pemetaan. Periode waktu dengan case khusus adalah sub-array dengan indeks 0 dipetakan ke tanda default dan 1-5 dipetakan ke tanda khusus untuk IRN, VNM, KAZ, JPN dan THA dalam urutan yang sama.

Night2
sumber
4

Arang , 73 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

℅⁺×¹²⁸φ

0x1F400= 128.000 ( φsudah ditentukan untuk 1.000). Ini ditambahkan ke jumlah sisa ekspresi dan dikonversi ke karakter untuk cetakan implisit.

⊕﹪÷⊕I…粦²¦¹²

Jam diekstraksi dan dikonversi menjadi indeks zodiak.

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

String yang dikompresi IRN VNMIRN IRN VNM IRNIRNKAZ VNMIRN IRN JPNTHAdipisah pada spasi dan dipotong sesuai dengan panjang yang diberikan oleh indeks itu.

ΣE⮌...

Array kemudian dibalik, dipetakan, dan dijumlahkan.

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

Untuk elemen pertama, string dipecah menjadi grup-grup yang terdiri dari tiga karakter dan indeks negara diambil, jika tidak, jumlah negara akan dihitung. Untuk elemen pertama, indeks perlu dikonversi dari pengindeksan 0 ke pengindeksan 1 sedangkan untuk elemen lain hasilnya perlu ditambahkan untuk negara default, jadi ini dilakukan di luar terner.

Neil
sumber
3

Python 3 , 168 byte

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)

Cobalah online!

Matthew Jensen
sumber
2
147 byte jika Anda tidak keberatan beralih ke Python 3.8.
Arnauld