Quel est le zodiaque actuel?

15

Affichez les emoji du zodiaque oriental d'un temps donné, selon le pays donné.

Le zodiaque oriental est un schéma de classification qui attribue un animal et ses attributs réputés à chaque année dans un cycle répétitif de 12 ans. Il est également affecté aux heures.

Règles:

  1. Le pays doit être indiqué en tant que code ISO 3166-1 alpha-3. La liste est ici.

  2. Le format d'entrée doit être comme ceci: <ISO code> HH:MM. L'entrée doit être une seule chaîne. Toute entrée qui ne correspond pas à ce format tombe ne se soucient pas la situation.

  3. Si le temps donné se situe dans les limites du tableau ci-dessous, vous pouvez sortir l'un ou l'autre zodiaque.

  4. Comme il s'agit d'un code golf, le code le plus court en octets l'emporte.

Les zodiaques:

Les zodiaques sans pays spécifié sont des valeurs par défaut.

  • Le premier zodiaque (23h00 - 01h00):

    • Rat 🐀 (U + 1F400)
    • Souris 🐁 (U + 1F401) en Perse (IRN)
  • Le deuxième zodiaque (01h00 - 03h00):

    • Ox 🐂 (U + 1F402)
    • Buffle d'eau 🐃 (U + 1F403) au Vietnam (VNM)
    • Vache 🐄 (U + 1F404) en Perse
  • Le troisième zodiaque (03h00 - 05h00):

    • Tigre 🐅 (U + 1F405)
    • Léopard 🐆 (U + 1F406) en Perse
  • Le quatrième zodiaque (05h00 - 07h00):

    • Lapin 🐇 (U + 1F407)
    • Cat 🐈 (U + 1F408) au Vietnam
  • Le cinquième zodiaque (07h00 - 09h00):

    • Dragon 🐉 (U + 1F409)
    • Crocodile 🐊 (U + 1F40A) / Whale 🐋 (U + 1F40B) en Perse (vous pouvez sortir soit)
    • Escargot 🐌 (U + 1F40C) au Kazakhstan (KAZ)
  • Le sixième zodiaque (09h00 - 11h00):

    • Serpent 🐍 (U + 1F40D)
  • Le septième zodiaque (11h00 - 13h00):

    • Cheval 🐎 (U + 1F40E)
  • Le huitième zodiaque (13h00 - 15h00):

    • Bélier 🐏 (U + 1F40F)
    • Chèvre 🐐 (U + 1F410) au Vietnam
    • Mouton 🐑 (U + 1F411) en Perse
  • Le neuvième zodiaque (15h00 - 17h00):

    • Singe 🐒 (U + 1F412)
  • Le dixième zodiaque (17h00 - 19h00):

    • Coq 🐓 (U + 1F413)
    • Poulet 🐔 (U + 1F414) en Perse
  • Le onzième zodiaque (19h00 - 21h00):

    • Chien 🐕 (U + 1F415)
  • Le douzième zodiaque (21h00 - 23h00):

    • Cochon 🐖 (U + 1F416)
    • Sanglier 🐗 (U + 1F417) au Japon (JPN)
    • Éléphant 🐘 (U + 1F418) en Thaïlande (THA)

Les points de code sont d' ici.

Exemple:

Étant donné l'entrée suivante:

KOR 19:42

La sortie doit être:

🐕
Dannyu NDos
la source
Intéressant - je savais que cela faisait du vélo tous les 12 ans. Je n'ai jamais entendu parler du cycle de 24 heures. Pourtant, le défi est clairement spécifié en l'état. Le «corriger» à 12 ans peut prêter à confusion.
Level River St
Que se passe-t-il avec la Perse ayant tant de versions différentes? Des raisons spécifiques?
caird coinheringaahing
@cairdcoinheringaahing Je ne suis pas iranien, donc je ne sais pas.
Dannyu NDos
1
@cairdcoinheringaahing un vieil écrivain et poète persan appelé "Abou Nasr Farahi" ou en persan "ابونصر_فراهی" a un court poème dans l'un de ses livres, qui nomme ces animaux dans cet ordre et donc ce sont les animaux utilisés en Iran pour chacune de ces 12 années. Il n'a pas été un poète très célèbre, donc peu de ressources en anglais peuvent être trouvées sur lui, mais j'ai vérifié le texte de son livre en persan et le poète était là.
Night2
Connexes .
agtoever

Réponses:

8

05AB1E , 66 64 63 octets

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

Essayez-le en ligne!

Grimmy
la source
11

JavaScript (ES6),  168 165 160 157 157  155 octets

4 octets enregistrés grâce à @Neil

Renvoie le crocodile du 5 e zodiaque en Perse.

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

Essayez-le en ligne!

Comment?

kh

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

Xkbk

bk=2k+Xk

128000+bk+ckck est le décalage du pays.

Ceci est résumé dans le tableau suivant:

   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

Commenté

( [ 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
la source
1
String.fromCodePoint(128e3+~~enregistre 4 octets.
Neil
@Neil Merci! :)
Arnauld
5

PHP , 185 caractères, 263 octets

Merci à Dannyu NDos pour la correction d'un 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]

Essayez-le en ligne!

Juste une simple cartographie de tableau, il devrait y avoir de meilleures façons de jouer au golf. La partie horaire du temps d'entrée est convertie en un nombre pair (0-22), puis elle est divisée par 2 pour obtenir l'index de tableau 0 à 11 dans le mappage. Les périodes avec des cas spéciaux sont un sous-tableau avec l'index 0 mappé au signe par défaut et 1-5 mappé au signe spécial pour IRN, VNM, KAZ, JPN et THA dans le même ordre.

Nuit2
la source
4

Fusain , 73 octets

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

Essayez-le en ligne! Le lien est vers la version détaillée du code. Explantion:

℅⁺×¹²⁸φ

0x1F400= 128 000 ( φest prédéfini à 1 000). Ceci est ajouté à la somme du reste de l'expression et converti en un caractère pour une impression implicite.

⊕﹪÷⊕I…粦²¦¹²

L'heure est extraite et convertie en index du zodiaque.

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

La chaîne compressée IRN VNMIRN IRN VNM IRNIRNKAZ VNMIRN IRN JPNTHAest divisée en espaces et tronquée à la longueur donnée par cet index.

ΣE⮌...

Le tableau est ensuite inversé, mappé et sommé.

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

Pour le premier élément, la chaîne est divisée en groupes de trois caractères et l'index de pays est pris, sinon le nombre de pays est compté. Pour le premier élément, l'index doit être converti de l'indexation 0 à l'indexation 1 tandis que pour les autres éléments, le résultat doit être incrémenté pour le pays par défaut, donc cela se fait en dehors du ternaire.

Neil
la source
3

Python 3 , 168 octets

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)

Essayez-le en ligne!

Matthew Jensen
la source
2
147 octets si cela ne vous dérange pas de passer à Python 3.8.
Arnauld