現在の干支は何ですか?


15

指定された国に従って、指定された時間の東部干支の絵文字を表示します。

東の黄道帯は、動物とその評判の高い属性を、12年周期で繰り返される各年に割り当てる分類体系です。また、時間に割り当てられます。

ルール:

  1. 国はISO 3166-1 alpha-3コードで指定する必要があります。一覧はこちらです。

  2. 入力形式は次のようにする必要があります<ISO code> HH:MM。入力は単一の文字列でなければなりません。この形式に適合しない入力は、ドントケアの状況に該当します

  3. 与えられた時間が以下のチャートの境界内にある場合、どちらの黄道帯も出力できます。

  4. これはコードゴルフであるため、バイト単位の最短コードが優先されます。

黄道帯:

国が指定されていない黄道帯がデフォルトです。

  • 最初の干支(23:00 – 01:00):

    • ラット🐀(U + 1F400)
    • ペルシャ(IRN)のマウス🐁(U + 1F401)
  • 2番目の干支(01:00 – 03:00):

    • 牛🐂(U + 1F402)
    • ベトナムの水牛🐃(U + 1F403)(VNM)
    • ペルシャの牛🐄(U + 1F404)
  • 3番目の干支(03:00 – 05:00):

    • タイガー🐅(U + 1F405)
    • ペルシャのヒョウ🐆(U + 1F406)
  • 4番目の干支(05:00 – 07:00):

    • ウサギ🐇(U + 1F407)
    • ベトナムの猫🐈(U + 1F408)
  • 5番目の干支(07:00 – 09:00):

    • ドラゴン🐉(U + 1F409)
    • ペルシャのクロコダイル🐊(U + 1F40A)/クジラ🐋(U + 1F40B)(どちらかを出力できます)
    • カザフスタン(KAZ)のカタツムリ🐌(U + 1F40C)
  • 6番目の干支(09:00 – 11:00):

    • ヘビ🐍(U + 1F40D)
  • 7番目の干支(11:00 – 13:00):

    • ウマ🐎(U + 1F40E)
  • 8番目の干支(13:00 – 15:00):

    • ラム🐏(U + 1F40F)
    • ベトナムのヤギ🐐(U + 1F410)
    • 羊🐑(U + 1F411)ペルシャ
  • 9番目の干支(15:00 – 17:00):

    • モンキー🐒(U + 1F412)
  • 10番目の黄道帯(17:00 – 19:00):

    • oster U(U + 1F413)
    • ペルシャのチキン🐔(U + 1F414)
  • 11番目の黄道帯(19:00 – 21:00):

    • 犬🐕(U + 1F415)
  • 十二星座(21:00 – 23:00):

    • 豚🐖(U + 1F416)
    • 日本(JPN)のイノシ​​シ🐗(U + 1F417)
    • タイの象🐘(U + 1F418)(THA)

コードポイントはここからです。

例:

次の入力が与えられた場合:

KOR 19:42

出力は次のとおりでなければなりません。

🐕

興味深い-私はこれらが12年ごとに循環することを知っていました。24時間サイクルのことは聞いたことがありません。それでも、課題は明確に明記されています。12年に「修正」すると、混乱が生じる可能性があります。
レベルリバーセント

ペルシャが非常に多くの異なるバージョンを持っているのはどうですか?具体的な理由はありますか?
コイナーリンガーアーイング

@cairdcoinheringaahing私はイラン人ではないので、わかりません。
ダニーユーNDos

1
@cairdcoinheringaahingは、ペルシャ語で「アボウナスルファラヒ」またはペルシャ語「ابونصر_فراهی」と呼ばれる古いペルシャの詩人および辞書作家で、彼の本の1つに短い詩があります。それらの12年ごと。彼はあまり有名な詩人ではないので、彼に関する英語の資料はあまりありませんが、私はペルシャ語で彼の本のテキストをチェックし、詩人はそこにいました。

回答:



11

JavaScriptの(ES6)、 168の165 160 157  155バイト

@Neilのおかげで4バイト節約

ペルシャの5 番目の黄道帯のワニを返します。

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

オンラインでお試しください!

どうやって?

kh

k=h+1モッド24/2

バツkbk

bk=2k+バツk

128000+bk+ckck

これを次の表にまとめます。

   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

コメント済み

( [ 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+~~4バイト節約します。
ニール

@ニールありがとう!:)
アーナルド

5

PHP、185文字、263バイト

バグ修正をしてくれたDannyu NDosに感謝します。

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]

オンラインでお試しください!

単純な配列マッピングだけで、これをゴルフするより良い方法があるはずです。入力時間の時間部分は偶数(0〜22)に変換され、2で割られてマッピングで配列インデックス0〜11を取得します。特別なケースのある期間は、インデックス0がデフォルトの記号にマッピングされ、1〜5がIRN、VNM、KAZ、JPN、THAの特別な記号に同じ順序でマッピングされたサブ配列です。


4

、73バイト

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

オンラインでお試しください!リンクは、コードの詳細バージョンです。外植:

℅⁺×¹²⁸φ

0x1F400= 128,000(φ1,000に事前定義されています)。これは、式の残りの合計に追加され、暗黙的な印刷用の文字に変換されます。

⊕﹪÷⊕I…粦²¦¹²

時間は抽出され、ゾディアックインデックスに変換されます。

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

圧縮された文字列IRN VNMIRN IRN VNM IRNIRNKAZ VNMIRN IRN JPNTHAはスペースで分割され、そのインデックスで指定された長さに切り捨てられます。

ΣE⮌...

次に、配列を反転し、マッピングし、合計します。

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

最初の要素では、文字列は3文字のグループに分割され、国のインデックスが取得されます。それ以外の場合は、国の数がカウントされます。最初の要素では、インデックスを0インデックスから1インデックスに変換する必要がありますが、他の要素ではデフォルトの国の結果をインクリメントする必要があるため、これは3進法の外部で行われます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.