¿Cuál es el zodiaco actual?


15

Muestra los emoji del zodiaco oriental de un tiempo determinado, según el país.

El zodiaco oriental es un esquema de clasificación que asigna a un animal y sus atributos reputados a cada año en un ciclo repetitivo de 12 años. También se asigna a horas.

Reglas:

  1. El país debe darse como código ISO 3166-1 alpha-3. La lista está aquí.

  2. El formato de entrada debe ser la siguiente: <ISO code> HH:MM. La entrada debe ser una sola cadena. Cualquier entrada que no se ajuste a este formato cae en una situación de no importa .

  3. Si el tiempo dado se encuentra en el límite del gráfico que figura a continuación, puede generar cualquiera de los dos zodiacos.

  4. Como se trata de un código de golf, gana el código más corto en bytes.

Los zodiacos:

Los zodiacos sin país especificado son predeterminados.

  • El primer zodiaco (23:00 - 01:00):

    • Rata 🐀 (U + 1F400)
    • Ratón 🐁 (U + 1F401) en Persia (IRN)
  • El segundo zodiaco (01:00 - 03:00):

    • Buey 🐂 (U + 1F402)
    • Búfalo de agua 🐃 (U + 1F403) en Vietnam (VNM)
    • Vaca 🐄 (U + 1F404) en Persia
  • El tercer zodiaco (03:00 - 05:00):

    • Tigre 🐅 (U + 1F405)
    • Leopard 🐆 (U + 1F406) en Persia
  • El cuarto zodiaco (05:00 - 07:00):

    • Conejo 🐇 (U + 1F407)
    • Cat 🐈 (U + 1F408) en Vietnam
  • El quinto zodiaco (07:00 - 09:00):

    • Dragón 🐉 (U + 1F409)
    • Cocodrilo 🐊 (U + 1F40A) / Ballena 🐋 (U + 1F40B) en Persia (puede emitir cualquiera)
    • Caracol 🐌 (U + 1F40C) en Kazajstán (KAZ)
  • El sexto zodiaco (09:00 - 11:00):

    • Serpiente 🐍 (U + 1F40D)
  • El séptimo zodiaco (11:00 - 13:00):

    • Caballo 🐎 (U + 1F40E)
  • El octavo zodiaco (13:00 - 15:00):

    • Ram 🐏 (U + 1F40F)
    • Cabra 🐐 (U + 1F410) en Vietnam
    • Ovejas 🐑 (U + 1F411) en Persia
  • El noveno zodiaco (15:00 - 17:00):

    • Mono 🐒 (U + 1F412)
  • El décimo zodiaco (17:00 - 19:00):

    • Gallo 🐓 (U + 1F413)
    • Pollo 🐔 (U + 1F414) en Persia
  • El undécimo zodiaco (19:00 - 21:00):

    • Perro 🐕 (U + 1F415)
  • El duodécimo zodiaco (21:00 - 23:00):

    • Cerdo 🐖 (U + 1F416)
    • Jabalí 🐗 (U + 1F417) en Japón (JPN)
    • Elefante 🐘 (U + 1F418) en Tailandia (THA)

Los puntos de código son de aquí.

Ejemplo:

Dada la siguiente entrada:

KOR 19:42

La salida debe ser:

🐕

Interesante. Sabía que estas circulaban cada 12 años. Nunca escuché del ciclo de 24 horas. Aún así, el desafío está claramente especificado tal como está. "Corregirlo" a 12 años puede generar confusión.
Level River St el

¿Qué pasa con Persia con tantas versiones diferentes? ¿Alguna razón específica?
caird coinheringaahing

@cairdcoinheringaahing No soy iraní, así que no lo sé.
Dannyu NDos

1
@cairdcoinheringaahing, un viejo poeta persa y escritor de diccionarios llamado "Abou Nasr Farahi" o en persa "ابونصر_فراهی" tiene un poema corto en uno de sus libros, que nombra a esos animales en ese orden y, por lo tanto, son los animales utilizados en Irán para cada uno de esos 12 años. No ha sido un poeta muy famoso, por lo que no se pueden encontrar muchos recursos en inglés sobre él, pero revisé el texto de su libro en persa y el poeta estaba allí.
Noche2

Respuestas:



11

JavaScript (ES6),  168 165 160 157  155 bytes

Guardado 4 bytes gracias a @Neil

Devuelve el cocodrilo para el 5 º zodiaco en 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])

Pruébalo en línea!

¿Cómo?

kh

k=((h+1)modificación24)/ /2

Xksik

sik=2k+Xk

128000+sik+CkCk

Esto se resume en la siguiente tabla:

   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

Comentado

( [ 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+~~ahorra 4 bytes.
Neil

@Neil ¡Gracias! :)
Arnauld

5

PHP , 185 caracteres, 263 bytes

Gracias a Dannyu NDos por la corrección de errores.

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]

Pruébalo en línea!

Solo un mapeo de matriz simple, debería haber mejores formas de jugar golf. La parte de la hora del tiempo de entrada se convierte en un número par (0-22) y luego se divide por 2 para obtener un índice de matriz de 0 a 11 en la asignación. Los períodos de tiempo con casos especiales son un subconjunto con el índice 0 asignado al signo predeterminado y 1-5 asignado al signo especial para IRN, VNM, KAZ, JPN y THA en el mismo orden.


4

Carbón , 73 bytes

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

Pruébalo en línea! El enlace es a la versión detallada del código. Explantación

℅⁺×¹²⁸φ

0x1F400= 128,000 ( φestá predefinido a 1,000). Esto se agrega a la suma del resto de la expresión y se convierte en un carácter para impresión implícita.

⊕﹪÷⊕I…粦²¦¹²

La hora se extrae y se convierte en un índice del zodiaco.

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

La cadena comprimida IRN VNMIRN IRN VNM IRNIRNKAZ VNMIRN IRN JPNTHAse divide en espacios y se trunca a la longitud dada por ese índice.

ΣE⮌...

La matriz se invierte, se asigna y se suma.

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

Para el primer elemento, la cadena se divide en grupos de tres caracteres y se toma el índice de país; de lo contrario, se cuenta el número de países. Para el primer elemento, el índice debe convertirse de indexación 0 a indexación 1, mientras que para los otros elementos el resultado debe incrementarse para el país predeterminado, por lo que esto se hace fuera del ternario.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.