Python :: Aufgabe #362

2 Lösungen Lösungen öffentlich

Ziffern Tag und Monat im Jahr

Anfänger - Python von eisheiliger - 07.07.2021 um 20:14 Uhr
Ermittle für die Jahre 2001 bis 2022 jedes Datum, in dem die Ziffern der Felder Tag und Monat mit dem Feld Jahr übereinstimmen.
Die Lösung für das Jahr 2001 lautet:

02.01. -> 2001
20.01. -> 2001
01.02. -> 2001
10.02. -> 2001
02.10. -> 2001
20.10. -> 2001

Lösungen:

vote_ok
von kaschperl (390 Punkte) - 31.07.2021 um 10:20 Uhr
Quellcode ausblenden Python-Code
from datetime import date, timedelta

def jahr_monat_entspricht_jahr(startjahr, endjahr):

    TRENNZEICHEN = ""
    TestJahre = list(range(startjahr, endjahr + 1))

    for TestJahr in TestJahre:

        LaufDatum = date(TestJahr, 1, 1)
        EndDatum = date(TestJahr, 12, 31)

        SortJahr = list(str(TestJahr))
        SortJahr.sort()
        SortJahrStr = TRENNZEICHEN.join(SortJahr)

        print('Lösungen für das Jahr ' + str(TestJahr) + ':')

        while LaufDatum <= EndDatum:

            SortVergleichsDatum = list(str(LaufDatum.strftime("%d%m")))
            SortVergleichsDatum.sort()
            SortVergleichsdatumStr = TRENNZEICHEN.join(SortVergleichsDatum)

            if SortJahrStr == SortVergleichsdatumStr:
                print(LaufDatum.strftime("%d.%m") + " -> " + str(TestJahr))

            LaufDatum = LaufDatum + timedelta(days=1)


jahr_monat_entspricht_jahr(2001, 2022)
1 Kommentar
vote_ok
von Klaus (1950 Punkte) - 10.08.2021 um 16:50 Uhr
Quellcode ausblenden Python-Code
DATA_MONTH = {1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12:31}


def check_date_with_year(check_range):
    year_min, year_max = check_range
    for year in range(year_min, year_max + 1):
        for month in DATA_MONTH.keys():
            for day in range(1, DATA_MONTH[month] + 1):
                
                if day < 10:
                    day_str = '0' + str(day)
                else:
                    day_str = str(day)

                if month < 10:
                    month_str = '0' + str(month)
                else:
                    month_str = str(month)

                if convert_to_dict(str(year)) == convert_to_dict(day_str + month_str):
                    print(f'{day_str}.{month_str} -> {year}')


def convert_to_dict(value):
    return_dict = {}
    for character in str(value):
        if character in return_dict.keys():
            return_dict[character] += 1
        else:
            return_dict[character] = 1
    return return_dict


check_date_with_year((2001, 2022))