Was ist der aktuelle Tierkreis?

15

Zeigen Sie das Emoji des östlichen Tierkreises einer bestimmten Zeit an, je nach Land.

Der östliche Tierkreis ist ein Klassifizierungsschema, das jedem Jahr in einem sich wiederholenden 12-Jahres-Zyklus ein Tier und seine angeblichen Attribute zuordnet. Es ist auch Stunden zugeordnet.

Regeln:

  1. Das Land muss als ISO 3166-1 Alpha-3-Code angegeben werden. Die Liste ist hier.

  2. Das Eingabeformat muss so aussehen: <ISO code> HH:MM. Die Eingabe muss eine einzelne Zeichenfolge sein. Jede Eingabe, die nicht in dieses Format passt, ist egal .

  3. Wenn die angegebene Zeit in der Grenze der unten angegebenen Tabelle liegt, können Sie einen der beiden Tierkreise ausgeben.

  4. Da dies ein Codegolf ist, gewinnt der kürzeste Code in Bytes.

Die Tierkreise:

Die Zodiacs ohne angegebenes Land sind Standard.

  • Der erste Tierkreis (23:00 - 01:00):

    • Ratte 🐀 (U + 1F400)
    • Maus 🐁 (U + 1F401) in Persien (IRN)
  • Der zweite Tierkreis (01:00 - 03:00):

    • Ochse 🐂 (U + 1F402)
    • Wasserbüffel 🐃 (U + 1F403) in Vietnam (VNM)
    • Kuh 🐄 (U + 1F404) in Persien
  • Der dritte Tierkreis (03:00 - 05:00):

    • Tiger 🐅 (U + 1F405)
    • Leopard 🐆 (U + 1F406) in Persien
  • Der vierte Tierkreis (05:00 - 07:00):

    • Kaninchen 🐇 (U + 1F407)
    • Katze 🐈 (U + 1F408) in Vietnam
  • Der fünfte Tierkreis (07:00 - 09:00):

    • Drache 🐉 (U + 1F409)
    • Krokodil (U + 1F40A) / Wal (U + 1F40B) in Persien (Sie können entweder ausgeben)
    • Schnecke 🐌 (U + 1F40C) in Kasachstan (KAZ)
  • Der sechste Tierkreis (09:00 - 11:00):

    • Schlange 🐍 (U + 1F40D)
  • Der siebte Tierkreis (11:00 - 13:00):

    • Pferd 🐎 (U + 1F40E)
  • Der achte Tierkreis (13:00 - 15:00):

    • Ram 🐏 (U + 1F40F)
    • Ziege 🐐 (U + 1F410) in Vietnam
    • Schaf 🐑 (U + 1F411) in Persien
  • Der neunte Tierkreis (15:00 - 17:00):

    • Affe 🐒 (U + 1F412)
  • Der zehnte Tierkreis (17:00 - 19:00):

    • Hahn 🐓 (U + 1F413)
    • Huhn 🐔 (U + 1F414) in Persien
  • Der elfte Tierkreis (19:00 - 21:00):

    • Hund 🐕 (U + 1F415)
  • Der zwölfte Tierkreis (21:00 - 23:00):

    • Schwein 🐖 (U + 1F416)
    • Wildschwein 🐗 (U + 1F417) in Japan (JPN)
    • Elefant 🐘 (U + 1F418) in Thailand (THA)

Die Codepunkte sind von hier.

Beispiel:

Bei folgender Eingabe:

KOR 19:42

Die Ausgabe muss sein:

🐕
Dannyu NDos
quelle
Interessant - ich wusste, dass diese alle 12 Jahre gefahren werden. Ich habe noch nie von dem 24-Stunden-Zyklus gehört. Trotzdem ist die Herausforderung in der jetzigen Form klar spezifiziert. Eine "Korrektur" auf 12 Jahre kann zu Verwirrung führen.
Level River St
Was ist los mit Persien mit so vielen verschiedenen Versionen? Irgendwelche spezifischen Gründe?
Caird Coinheringaahing
@cairdcoinheringaahing Ich bin kein Iraner, also weiß ich es nicht.
Dannyu NDos
1
@cairdcoinheringaahing ein alter persischer Dichter und Wörterbuchautor namens "Abou Nasr Farahi" oder in persischer Sprache "ابونصر_فراهی" hat ein kurzes Gedicht in einem seiner Bücher, in dem diese Tiere in dieser Reihenfolge aufgeführt sind und daher die Tiere, für die sie im Iran verwendet werden jedes dieser 12 Jahre. Er war kein sehr berühmter Dichter, so dass nicht viele englische Quellen über ihn gefunden werden können, aber ich habe den Text seines Buches auf Persisch überprüft und der Dichter war da.
Night2
Verwandte .
Am

Antworten:

11

JavaScript (ES6),  168 165 160 157  155 Byte

4 Bytes dank @Neil gespeichert

Gibt das Krokodil für die 5 - ten Sternzeichen in Persien.

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

Probieren Sie es online!

Wie?

kh

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

xkbk

bk=2k+xk

Der letzte Codepunkt ist , wobei der Länderversatz ist.128000+bk+ckck

Dies ist in der folgenden Tabelle zusammengefasst:

   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

Kommentiert

( [ 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
quelle
1
String.fromCodePoint(128e3+~~Spart 4 Bytes.
Neil
@ Neil Danke! :)
Arnauld
5

PHP , 185 Zeichen, 263 Bytes

Vielen Dank an Dannyu NDos für die Fehlerbehebung.

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]

Probieren Sie es online!

Nur ein einfaches Array-Mapping, es sollte bessere Möglichkeiten geben, dies zu tun. Der Stundenanteil der Eingabezeit wird in eine gerade Zahl (0-22) umgewandelt und dann durch 2 geteilt, um den Array-Index 0 bis 11 im Mapping zu erhalten. Zeiträume mit Sonderfällen sind ein Unterfeld mit Index 0, das dem Standardzeichen und 1-5 dem Sonderzeichen für IRN, VNM, KAZ, JPN und THA in derselben Reihenfolge zugeordnet ist.

Night2
quelle
4

Kohle , 73 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erklärung:

℅⁺×¹²⁸φ

0x1F400= 128.000 ( φist auf 1.000 vordefiniert). Dies wird zur Summe des restlichen Ausdrucks addiert und in ein Zeichen für implizites Drucken konvertiert.

⊕﹪÷⊕I…粦²¦¹²

Die Stunde wird extrahiert und in einen Tierkreisindex umgewandelt.

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

Die komprimierte Zeichenfolge IRN VNMIRN IRN VNM IRNIRNKAZ VNMIRN IRN JPNTHAwird in Leerzeichen aufgeteilt und auf die durch diesen Index angegebene Länge gekürzt.

ΣE⮌...

Das Array wird dann umgekehrt, überlagert und summiert.

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

Für das erste Element wird die Zeichenfolge in Dreiergruppen aufgeteilt und der Länderindex verwendet, andernfalls wird die Anzahl der Länder gezählt. Für das erste Element muss der Index von 0-Indexierung in 1-Indexierung konvertiert werden, während für die anderen Elemente das Ergebnis für das Standardland inkrementiert werden muss, sodass dies außerhalb des Ternärs erfolgt.

Neil
quelle
3

Python 3 , 168 Bytes

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)

Probieren Sie es online!

Matthew Jensen
quelle
2
147 Bytes, wenn Sie nichts dagegen haben, zu Python 3.8 zu wechseln.
Arnauld