Napisz funkcję lub program, który trwa wejściowych ciągów, w pełni orkisz, nazw angielskich miesiąc w przypadku tytułowej: January
, February
, March
, itd. (Null / CR / LF zakończone OK, ograniczony z jakimś charakterze non-alfa, jeśli tak zdecydujesz) i albo
porównuje dwa dane wejściowe, zwracając wartość Prawdy, jeśli drugie dane wejściowe są większe (w kolejności miesiąca) niż pierwsze. Równe wartości dają wartość Falsey
lub sortuje dowolną ich sekwencję (listę, łańcuch rozdzielany itp.) w kolejności chronologicznej
(Istota wyzwania polega na zdefiniowaniu metody / wyrażenia, które daje prawidłowy sort leksykograficzny. Niektóre języki mogą mieć krótszą odpowiedź na jedno lub drugie)
Nie można używać żadnych wewnętrznych metod analizy czasu (np. strptime
), Aby tłumaczyć nazwę miesiąca na liczbę lub wstępnie mapowane nazwy miesięcy. Używaj właściwości samych ciągów, zdefiniowanej przez ciebie oszczędnej tabeli przeglądowej lub czegoś sprytnego.
Przykład
Przykłady działania, choć pierwszy jest zabroniony przez reguły ...
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')
Poniższe wersje są jednak OK, ponieważ kodujemy te informacje
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]
Lub możesz wykonać funkcję sortowania
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])
Przykładowe testy
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
listę, która była listą wszystkich nazw miesięcy, chciałbym zabronić months[x] < months[y]
jako odpowiedzi. Lista nazw miesięcy ma kilka bardziej specyficznych cech (różna długość, wspólność), które sprawiają, że wyzwanie jest łatwiejsze / trudniejsze niż losowo generowane ciągi znaków.