Dans un effort pour uniformiser les règles du jeu entre les langues avec des bibliothèques de dates intégrées et celles sans, travaillons avec un calendrier fictif. Les Royaumes oubliés sont un ( paramètre de campagne le? ) Pour Dungeons & Dragons. Bien sûr, chacun a son propre calendrier.
Le calendrier de Harptos
Idéalement, une année dans les Royaumes oubliés compte également 365 jours. De plus, le calendrier comporte également 12 mois. Cependant, c'est là que cela devient intéressant. Chaque mois dure exactement 30 jours. Les 5 jours restants sont des jours fériés qui se situent entre les mois. Voici les mois et jours fériés dans l'ordre (avec jours fériés en retrait):
1 Deepwinter
Midwinter
2 The Claw of Winter
3 The Claw of the Sunsets
4 The Claw of the Storms
Greengrass
5 The Melting
6 The Time of Flowers
7 Summertide
Midsummer
[Shieldmeet]
8 Highsun
9 The Fading
Highharvestide
10 Leaffall
11 The Rotting
The Feast of the Moon
12 The Drawing Down
Notez que j'ai inséré un sixième jour férié entre parenthèses. C'est le jour bissextile qui ne se produit que tous les quatre ans (oui, c'est ça - il n'y a pas de manigances supplémentaires avec les siècles).
Note complémentaire sur les noms de mois: chaque mois a un nom formel et un nom commun. Ce qui précède sont les noms communs. Je les ai choisis car je pense qu'ils permettent une compression plus intéressante.
Il existe plusieurs numérotations des années, mais la plus répandue est Dalereckoning , raccourcie en DR . (De plus, chaque année a un ou plusieurs noms , mais nous n'allons pas nous en préoccuper.)
Les composants d'une date doivent être séparés par une virgule et un espace. Dans l'ensemble, une date valide pourrait ressembler à:
4, The Melting, 1491 DR
ou
Shieldmeet, 1464 DR
Notez qu'il n'y a pas de numéro de jour pour les vacances. (Je suppose4th of The Melting
serait plus agréable pour les jours des mois, mais je ne veux pas y faire glisser de nombres ordinaux.)
Note de bas de page: J'ai trouvé cela lorsque xnor s'est plaint que chaque défi de date nécessite le calcul de l'année bissextile. J'ai échoué à l'éliminer complètement, mais au moins ce n'est qu'un seul module dans ce calendrier.
Le défi
Étant donné une date valide du calendrier de Harptos, ainsi qu'un entier D
, affichez la date D
jours plus tard. Notez que cela D
peut être négatif, auquel cas vous devez renvoyer la dateD
jours plus tôt.
Vous pouvez écrire un programme ou une fonction, en prenant une entrée via STDIN (ou l'alternative la plus proche), un argument de ligne de commande ou un argument de fonction et en sortant le résultat via STDOUT (ou l'alternative la plus proche), la valeur de retour de la fonction ou le paramètre de la fonction (out).
Vous pouvez supposer que l'année est positive et inférieure à 2000.
Les règles de code-golf standard s'appliquent.
Cas de test
La première douzaine de cas de test devrait tester tous les cas marginaux entourant les vacances et les années bissextiles. La prochaine série consiste à tester que les plages s'étalent sur plusieurs années de travail et que tous les mois et jours fériés ont été mis en œuvre. La seconde moitié est toujours les mêmes cas de test mais avec des décalages négatifs.
"30, Summertide, 1491 DR" 1 => "Midsummer, 1491 DR"
"30, Summertide, 1491 DR" 2 => "1, Highsun, 1491 DR"
"Midsummer, 1491 DR" 1 => "1, Highsun, 1491 DR"
"30, Summertide, 1492 DR" 1 => "Midsummer, 1492 DR"
"30, Summertide, 1492 DR" 2 => "Shieldmeet, 1492 DR"
"30, Summertide, 1492 DR" 3 => "1, Highsun, 1492 DR"
"Midsummer, 1492 DR" 1 => "Shieldmeet, 1492 DR"
"Midsummer, 1492 DR" 2 => "1, Highsun, 1492 DR"
"Shieldmeet, 1492 DR" 1 => "1, Highsun, 1492 DR"
"1, Highsun, 1490 DR" 365 => "1, Highsun, 1491 DR"
"1, Highsun, 1491 DR" 365 => "Shieldmeet, 1492 DR"
"Shieldmeet, 1492 DR" 365 => "Midsummer, 1493 DR"
"Midsummer, 1493 DR" 365 => "Midsummer, 1494 DR"
"Shieldmeet, 1500 DR" 365 => "Midsummer, 1501 DR"
"14, Deepwinter, 654 DR" 5069 => "The Feast of the Moon, 667 DR"
"Midwinter, 17 DR" 7897 => "15, The Fading, 38 DR"
"3, The Claw of Winter, 1000 DR" 813 => "25, The Claw of the Storms, 1002 DR"
"Greengrass, 5 DR" 26246 => "9, The Claw of the Sunsets, 77 DR"
"30, The Melting, 321 DR" 394 => "29, The Time of Flowers, 322 DR"
"17, The Time of Flowers, 867 DR" 13579 => "20, Highsun, 904 DR"
"Highharvestide, 1814 DR" 456 => "30, The Drawing Down, 1815 DR"
"23, The Rotting, 1814 DR" 3616 => "16, Leaffall, 1824 DR"
"1, Deepwinter, 1 DR" 730499 => "30, The Drawing Down, 2000 DR"
"Midsummer, 1491 DR" -1 => "30, Summertide, 1491 DR"
"1, Highsun, 1491 DR" -2 => "30, Summertide, 1491 DR"
"1, Highsun, 1491 DR" -1 => "Midsummer, 1491 DR"
"Midsummer, 1492 DR" -1 => "30, Summertide, 1492 DR"
"Shieldmeet, 1492 DR" -2 => "30, Summertide, 1492 DR"
"1, Highsun, 1492 DR" -3 => "30, Summertide, 1492 DR"
"Shieldmeet, 1492 DR" -1 => "Midsummer, 1492 DR"
"1, Highsun, 1492 DR" -2 => "Midsummer, 1492 DR"
"1, Highsun, 1492 DR" -1 => "Shieldmeet, 1492 DR"
"1, Highsun, 1491 DR" -365 => "1, Highsun, 1490 DR"
"Shieldmeet, 1492 DR" -365 => "1, Highsun, 1491 DR"
"Midsummer, 1493 DR" -365 => "Shieldmeet, 1492 DR"
"Midsummer, 1494 DR" -365 => "Midsummer, 1493 DR"
"Midsummer, 1501 DR" -365 => "Shieldmeet, 1500 DR"
"The Feast of the Moon, 667 DR" -5069 => "14, Deepwinter, 654 DR"
"15, The Fading, 38 DR" -7897 => "Midwinter, 17 DR"
"25, The Claw of the Storms, 1002 DR" -813 => "3, The Claw of Winter, 1000 DR"
"9, The Claw of the Sunsets, 77 DR" -26246 => "Greengrass, 5 DR"
"29, The Time of Flowers, 322 DR" -394 => "30, The Melting, 321 DR"
"20, Highsun, 904 DR" -13579 => "17, The Time of Flowers, 867 DR"
"30, The Drawing Down, 1815 DR" -456 => "Highharvestide, 1814 DR"
"16, Leaffall, 1824 DR" -3616 => "23, The Rotting, 1814 DR"
"30, The Drawing Down, 2000 DR" -730499 => "1, Deepwinter, 1 DR"
la source
Réponses:
Rubis,
543523521498511509 octetsPour encourager plus de réponses à cette question, je vais publier une version Ruby de ma réponse Python, car je pensais que ce serait plus court. Cette réponse est plus courte mais pas beaucoup. Pouvez- vous faire mieux?
Edit: Merci à Martin Büttner et sa suggestion ici .
Edit: J'ai joué au golf la liste «nombre de jours dans un mois» considérablement.
Edit: Alors que le golf vers le bas comment je me suis occupé
d[10]=r%4<1?1:0
àd[10]=0**(r%4)
un octet, je remarqué que j'avais introduit un bug pendant le golf vers le basd
, le nombre de la liste des jours, de sorte que Boucliers avait 30 jours par accident. Et donc, le nombre d'octets est revenu. Je vais également modifier la réponse Python pour corriger ce bogue là-bas.Edit: j'ai oublié que les fonctions n'ont pas besoin d'être nommées dans cette question.
Non golfé:
la source
Python 3,
712652636567563552550548529540 octetsEnfin, j'ai trouvé le temps d'écrire une réponse à cette excellente question. Ce n'est pas encore très golfé (la liste des mois
et lalistedes nombres de jours sontparticulièrement flagrantes dans ce cas, et le fait que la gestion des négatifs) mais au moins c'est une réponse.D
nécessite une boucle while séparéeEdit: Correction d'un bug
Non golfé:
la source