Який зараз зодіак?


15

Відобразити емоджи східного зодіаку даного часу відповідно до даної країни.

Східний зодіак - це класифікаційна схема, яка призначає тварину та її відомі ознаки щороку у повторюваному 12-річному циклі. Також призначається на години.

Правила:

  1. Країна має бути вказана як ISO 3166-1 альфа-3 код. Список є тут.

  2. Формат вхідного сигналу повинен бути таким: <ISO code> HH:MM. Вхід повинен бути одним рядком. Будь-який вхід, який не відповідає цьому формату, потрапляє ситуацію, що не хвилює .

  3. Якщо даний час лежить в межі наведеної нижче діаграми, ви можете вивести будь-який зодіак.

  4. Оскільки це кодовий гольф, виграє найкоротший код у байтах.

Зодіаки:

Зодіаки без вказаної країни є типовими.

  • Перший зодіак (23:00 - 01:00):

    • Щур 🐀 (U + 1F400)
    • Миша 🐁 (U + 1F401) у Персії (IRN)
  • Другий зодіак (01:00 - 03:00):

    • Ox 🐂 (U + 1F402)
    • Водний буйвол 🐃 (U + 1F403) у В'єтнамі (VNM)
    • Корова 🐄 (U + 1F404) у Персії
  • Третій зодіак (03:00 - 05:00):

    • Тигр 🐅 (U + 1F405)
    • Леопард 🐆 (U + 1F406) в Персії
  • Четвертий зодіак (05:00 - 07:00):

    • Кролик 🐇 (U + 1F407)
    • Кіт 🐈 (U + 1F408) у В'єтнамі
  • П’ятий зодіак (07:00 - 09:00):

    • Дракон 🐉 (U + 1F409)
    • Крокодил 🐊 (U + 1F40A) / кит 🐋 (U + 1F40B) в Персії (ви можете вивести будь-який)
    • Равлик 🐌 (U + 1F40C) в Казахстані (KAZ)
  • Шостий зодіак (09:00 - 11:00):

    • Змія 🐍 (U + 1F40D)
  • Сьомий зодіак (11:00 - 13:00):

    • Кінь 🐎 (U + 1F40E)
  • Восьмий зодіак (13:00 - 15:00):

    • Рам 🐏 (U + 1F40F)
    • Коза 🐐 (U + 1F410) у В'єтнамі
    • Вівця 🐑 (U + 1F411) в Персії
  • Дев'ятий зодіак (15:00 - 17:00):

    • Мавпа 🐒 (U + 1F412)
  • Десятий зодіак (17:00 - 19:00):

    • Півень 🐓 (U + 1F413)
    • Курка 🐔 (U + 1F414) в Персії
  • Одинадцятий зодіак (19:00 - 21:00):

    • Собака 🐕 (U + 1F415)
  • Дванадцятий зодіак (21:00 - 23:00):

    • Свиня 🐖 (U + 1F416)
    • Кабан 🐗 (U + 1F417) в Японії (JPN)
    • Слон 🐘 (U + 1F418) в Таїланді (THA)

Кодові точки звідси.

Приклад:

З огляду на наступний вхід:

KOR 19:42

Вихід повинен бути:

🐕

Цікаво - я знав цих циклічних кожні 12 років. Я ніколи не чув про 24-годинний цикл. Проте виклик чітко визначений як є. "Виправлення" його до 12 років може призвести до плутанини.
Рівень річки Св.

Що з Персією, яка має стільки різних версій? Якісь конкретні причини?
caird coinheringaahing

@cairdcoinheringaahing Я не іранець, тому не знаю.
Dannyu NDos

1
@cairdcoinheringaahing старий перський поет і письменник-словник під назвою "Abou Nasr Farahi" або по-персидськи "ابونصر_فراهی" має в одній із своїх книг короткий вірш, який називає в цьому порядку тих тварин, і таким чином вони є тваринами, якими користуються в Ірані для кожні 12 років. Він не був дуже відомим поетом, тому про нього можна знайти не так багато англійських ресурсів, але я перевірив текст його книги перською, і поет був там.
Ніч2

Відповіді:



11

JavaScript (ES6),  168 165 160 157  155 байт

Збережено 4 байти завдяки @Neil

Повертає крокодила для 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])

Спробуйте в Інтернеті!

Як?

кгод

к=((год+1)мод24)/2

хкбк

бк=2к+хк

128000+бк+cкcк

Це узагальнено у наступній таблиці:

   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 байти.
Ніл

@Neil Дякую! :)
Arnauld

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 ( φзаздалегідь визначено до 1000). Це додається до суми решти виразу і перетворюється в символ для неявного друку.

⊕﹪÷⊕I…粦²¦¹²

Година витягується і перетворюється на індекс зодіаку.

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

Стислий рядок IRN VNMIRN IRN VNM IRNIRNKAZ VNMIRN IRN JPNTHAрозділений на пробіли і усічений до довжини, заданої цим індексом.

ΣE⮌...

Потім масив реверсується, відображається на карті та підсумовується.

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

Для першого елемента рядок розбивається на групи з трьох символів і береться індекс країни, інакше кількість країн підраховується. Для першого елемента індекс необхідно перетворити з 0-індексування на 1-індексацію, тоді як для інших елементів результат потрібно наростити для країни за замовчуванням, тому це робиться за межами потрійного.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.