Qual è lo zodiaco attuale?


15

Mostra le emoji dello zodiaco orientale di un determinato tempo, in base al paese.

Lo zodiaco orientale è uno schema di classificazione che assegna un animale e i suoi attributi di fama a ogni anno in un ciclo ripetuto di 12 anni. È anche assegnato alle ore.

Regole:

  1. Il paese deve essere indicato come codice ISO 3166-1 alpha-3. L'elenco è qui.

  2. Il formato di ingresso deve essere in questo modo: <ISO code> HH:MM. L'input deve essere una singola stringa. Qualsiasi input che non si adatta a questo formato rientra nella situazione non importa .

  3. Se il tempo indicato si trova al limite del grafico indicato di seguito, è possibile generare uno zodiaco.

  4. Poiché si tratta di un codice golf, vince il codice più breve in byte.

Gli zodiaci:

Gli zodiaci senza paese specificato sono valori predefiniti.

  • Il primo zodiaco (23:00 - 01:00):

    • Ratto 🐀 (U + 1F400)
    • Mouse 🐁 (U + 1F401) in Persia (IRN)
  • Il secondo zodiaco (01:00 - 03:00):

    • Bue 🐂 (U + 1F402)
    • Bufalo d'acqua 🐃 (U + 1F403) in Vietnam (VNM)
    • Mucca 🐄 (U + 1F404) in Persia
  • Il terzo zodiaco (03:00 - 05:00):

    • Tiger 🐅 (U + 1F405)
    • Leopardo 🐆 (U + 1F406) in Persia
  • Il quarto zodiaco (05:00 - 07:00):

    • Coniglio 🐇 (U + 1F407)
    • Gatto 🐈 (U + 1F408) in Vietnam
  • Il quinto zodiaco (07:00 - 09:00):

    • Drago 🐉 (U + 1F409)
    • Crocodile 🐊 (U + 1F40A) / Whale 🐋 (U + 1F40B) in Persia (puoi produrre anche tu)
    • Lumaca 🐌 (U + 1F40C) in Kazakistan (KAZ)
  • Il sesto zodiaco (09:00 - 11:00):

    • Snake 🐍 (U + 1F40D)
  • Il settimo zodiaco (11:00 - 13:00):

    • Cavallo 🐎 (U + 1F40E)
  • L'ottavo zodiaco (13:00 - 15:00):

    • Ram 🐏 (U + 1F40F)
    • Capra 🐐 (U + 1F410) in Vietnam
    • Pecora 🐑 (U + 1F411) in Persia
  • Il nono zodiaco (15:00 - 17:00):

    • Scimmia 🐒 (U + 1F412)
  • Il decimo zodiaco (17:00 - 19:00):

    • Gallo 🐓 (U + 1F413)
    • Pollo 🐔 (U + 1F414) in Persia
  • L'undicesimo zodiaco (19:00 - 21:00):

    • Cane 🐕 (U + 1F415)
  • Il dodicesimo zodiaco (21:00 - 23:00):

    • Maiale 🐖 (U + 1F416)
    • Cinghiale 🐗 (U + 1F417) in Giappone (JPN)
    • Elefante 🐘 (U + 1F418) in Thailandia (THA)

I punti di codice provengono da qui.

Esempio:

Dato il seguente input:

KOR 19:42

L'output deve essere:

🐕

Interessante: li conoscevo ogni 12 anni. Non ho mai sentito parlare del ciclo di 24 ore. Tuttavia, la sfida è chiaramente definita così com'è. "Correggerlo" a 12 anni può creare confusione.
Level River St

Che succede con la Persia che ha così tante versioni diverse? Qualche motivo specifico?
caird coinheringaahing

@cairdcoinheringaahing Non sono un iraniano, quindi non lo so.
Dannyu NDos,

1
@cairdcoinheringaahing un vecchio poeta persiano e scrittore di dizionari chiamato "Abou Nasr Farahi" o in persiano "ابونصر_فراهی" ha una breve poesia in uno dei suoi libri, che nomina quegli animali in quell'ordine e quindi sono gli animali usati in Iran per ognuno di quei 12 anni. Non è stato un poeta molto famoso, quindi non si possono trovare molte risorse inglesi su di lui, ma ho controllato il testo del suo libro in persiano e il poeta era lì.
Night2

Risposte:



11

JavaScript (ES6),  168 165 160 157  155 byte

Salvato 4 byte grazie a @Neil

Restituisce il coccodrillo per il 5 ° zodiaco in 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])

Provalo online!

Come?

Kh

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

XKBK

BK=2K+XK

128000+BK+cKcK è l'offset del paese.

Questo è riassunto nella seguente tabella:

   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

Commentate

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

1
String.fromCodePoint(128e3+~~salva 4 byte.
Neil,

@ Grazie Grazie! :)
Arnauld,

5

PHP , 185 caratteri, 263 byte

Grazie a Dannyu NDos per la correzione di 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]

Provalo online!

Solo una semplice mappatura di array, ci dovrebbero essere modi migliori per giocare a golf. La parte oraria del tempo di input viene convertita in un numero pari (0-22) e quindi viene divisa per 2 per ottenere l'indice di array da 0 a 11 nella mappatura. I periodi di tempo con casi speciali sono un sotto-array con indice 0 mappato al segno predefinito e 1-5 mappato al segno speciale per IRN, VNM, KAZ, JPN e THA nello stesso ordine.


4

Carbone , 73 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. explantion:

℅⁺×¹²⁸φ

0x1F400= 128.000 ( φè predefinito a 1.000). Questo viene aggiunto alla somma del resto dell'espressione e convertito in un carattere per la stampa implicita.

⊕﹪÷⊕I…粦²¦¹²

L'ora viene estratta e convertita in un indice zodiacale.

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

La stringa compressa IRN VNMIRN IRN VNM IRNIRNKAZ VNMIRN IRN JPNTHAviene suddivisa in spazi e troncata alla lunghezza fornita da quell'indice.

ΣE⮌...

L'array viene quindi invertito, mappato e sommato.

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

Per il primo elemento, la stringa viene suddivisa in gruppi di tre caratteri e viene preso l'indice del paese, altrimenti viene conteggiato il numero di paesi. Per il primo elemento, l'indice deve essere convertito da 0-indicizzazione a 1-indicizzazione mentre per gli altri elementi il ​​risultato deve essere incrementato per il paese predefinito, quindi questo viene fatto al di fuori del ternario.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.