Écrivez une fonction ou un programme qui prend des entrées de chaînes, entièrement épeautre, les noms de mois Anglais en cas de titre: January
, February
, March
, etc. (null / CR / LF fin OK, délimité par un caractère non-alpha si vous le souhaitez) et soit
compare deux entrées, renvoyant une valeur Truthy si la deuxième entrée est supérieure (dans l'ordre du mois) à la première. Des valeurs égales donnent une valeur Falsey
ou en trie une séquence arbitraire (liste, chaîne délimitée, etc.) dans un ordre chronologique
(Le nœud du défi est de définir une méthode / expression qui donne le bon tri lexicographique. Certaines langues peuvent avoir une réponse plus courte avec l'une ou l'autre)
Vous ne pouvez pas utiliser de méthodes d'analyse temporelle interne (par exemple strptime
) pour traduire le nom du mois en un nombre ou un mappage prédéfini des noms de mois. Utilisez les propriétés des chaînes elles-mêmes, une table de recherche parcimonieuse que vous définissez ou quelque chose d'intelligent.
Exemple
Exemples de fonctionnement, bien que le premier soit interdit par les règles ...
import datetime
def is_later_month(a, b):
'''
Example of prohibited code because it relies on language
features about how to parse month names
'''
return datetime.strptime(a, '%B') < datetime.strptime(b, '%B')
Les versions ci-dessous sont correctes, car nous codons ces informations
months = {
'January': 1, 'February': 2, 'March': 3,
'April': 4, 'May': 5, 'June': 6,
'July': 7, 'August': 8, 'September': 9,
'October': 10, 'November': 11, 'December': 12,
}
def is_later_month(a, b):
"""
Returns True/False when comparing two months.
"""
return months[a] < months[b]
Ou vous pouvez faire une fonction de tri
months = {'as above...'}
def sort_months(l):
"""
Sorts list and returns it. Different input and output than the above,
but equally valid. Sorting versus comparing might be shorter in your
favorite language.
"""
return sorted(l, key=lambda x: months[x])
Exemples de tests
assert is_later_month('January', 'February')
assert is_later_month('January', 'December')
assert is_later_month('November', 'December')
assert not is_later_month('July', 'July')
assert not is_later_month('October', 'September')
months
qui était une liste de tous les noms de mois, je voudrais interdire months[x] < months[y]
comme réponse. La liste des noms de mois a des caractéristiques plus particulières (longueur variable, similitude) qui rendent le défi plus facile / plus difficile sur les chaînes générées de manière aléatoire.