Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Hochzeitsdaten (Schleifen)

Abgesehen von langen Wochenenden gibt es noch andere besondere Tage, an denen gerne geheiratet wird. Ein Grund hierfür ist, dass man sich diese Tage meist besser einprägen kann und so den Hochzeitstag nicht so einfach vergisst. Aber auch der Glaube, dass bestimmte Daten besondere Glücksbringer sind, ist häufig ein Argument. Diese besonderen Daten (Datum) sollen für den Zeitraum 01.01.2001 bis 31.12.2022 ermittelt werden. So sollen sich die Ziffern für Tag und Monat auch im Jahr widerspiegeln.

Beispiele:

02.01. -> 2001

02.10. -> 2001

20.02. -> 2020

0 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

5 Lösung(en)

// NET 6.0 | C# 10.x | VS 2022

for (int y = 2001; y < 2023; y++) {
    var c = y.ToString().OrderBy(x => x);
    var s = new DateTime(y, 1, 1);
    while (s < new DateTime(y, 12, 31)) {
        if (c.SequenceEqual(s.ToShortDateString().Replace(".", "")[..4].OrderBy(x => x)))
            Console.WriteLine(s.ToShortDateString());
        s = s.AddDays(1);
    }
}
                

Lösung von: Jens Kelm (@JKooP)

function permute(arr) {
  var length = arr.length,
      result = [arr.slice()],
      c = new Array(length).fill(0),
      i = 1, k, p;
  while (i < length) {
    if (c[i] < i) {
      k = i % 2 && c[i];
      p = arr[i];
      arr[i] = arr[k];
      arr[k] = p;
      ++c[i];
      i = 1;
      result.push(arr.slice());
    } else {
      c[i] = 0;
      ++i;
    }
  }
  return result;
}

function isPlausibleDate(y, m, d) {
  let p = new Date(y, m, d);
  if (
    p.getFullYear() == y &&
    p.getMonth() == m &&
    p.getDate() == d
  ) return true;
  return false;
}

function getWeddingDates(year) {
  let dates = permute(year.toString().split('')),
      out = [];
  for (let x = 0; x < dates.length; x++) dates[x] = dates[x].join('');
  dates = new Set(dates);
  dates.forEach(function(value) {
    let m = value.substr(0,2),
        d = value.substr(2);
    if (isPlausibleDate(year, m, d)) out.push(new Date(year, m, d));
  });
  return out;
}

// main
let result = [];
for (let i = 2001; i <= 2013; i++) result.push(getWeddingDates(i));
console.log(result);

                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

' VBA-Funktion

Function GetArrayFromString(ByVal s As String)
    Dim arr()
    Dim i As Integer
    
    For i = 1 To Len(s)
        ReDim Preserve arr(i - 1)
        arr(i - 1) = Mid(s, i, 1)
    Next
    
    GetArrayFromString = arr
    
End Function

Function GetSortedArray(arr As Variant)
    Dim i As Long, k As Long
    Dim tmp As Variant
    
    For i = LBound(arr) To UBound(arr) - 1
        For k = i + 1 To UBound(arr)
            If UCase(arr(i)) > UCase(arr(k)) Then
                tmp = arr(k)
                arr(k) = arr(i)
                arr(i) = tmp
            End If
        Next k
    Next i
    
    GetSortedArray = arr
    
End Function

Function GetArrayComparision(left As Variant, right As Variant)
    Dim cmp As Boolean
    Dim i As Integer
    
    cmp = True
    If UBound(left) <> UBound(right) Then
        cmp = False
        Exit Function
    End If
    
    For i = LBound(left) To UBound(left)
        If left(i) <> right(i) Then
            cmp = False
            Exit For
        End If
    Next
    
    GetArrayComparision = cmp
    
End Function

Function GetWeddingDates(yr_begin As Integer, yr_end As Integer)
    Dim arr, srt, rpl_arr, rpl_srt, res()
    Dim dat As Date
    Dim rpl As String
    Dim yr As Integer, k As Integer
    k = -1
    
    For yr = yr_begin To yr_end
        arr = GetArrayFromString(CStr(yr))
        srt = GetSortedArray(arr)
        dat = CDate("1.1." & yr)
        
        Do While dat < CDate("31.12." & yr)
            rpl = left(Replace(dat, ".", ""), 4)
            rpl_arr = GetArrayFromString(rpl)
            rpl_srt = GetSortedArray(rpl_arr)
            If GetArrayComparision(srt, rpl_srt) Then
                k = k + 1
                ReDim Preserve res(k)
                res(k) = dat
            End If
            dat = dat + 1
        Loop
        
    Next
    
    GetWeddingDates = res
    
End Function

Sub Main()
    wd = GetWeddingDates(2001, 2022)
    For i = LBound(wd) To UBound(wd)
        Debug.Print wd(i)
    Next
End Sub
                

Lösung von: Jens Kelm (@JKooP)

// C++ 17
#include <iostream>
#include <vector>
#include <boost/date_time/gregorian/gregorian.hpp>
using namespace boost::gregorian;

struct yearspan { int begin; int end; };

std::vector<date> get_wedding_dates(yearspan span) {
    std::vector<date>dates{};
    days add_one{ 1 };

    const auto get_leading_zero{ [](auto i) { std::stringstream ss; ss << 0 << i;
    return ss.str().substr(ss.str().length() - 2); } };

    for (int yr{ span.begin }; yr <= span.end; ++yr) {
        auto yr_str{ std::to_string(yr) };
        std::sort(yr_str.begin(), yr_str.end());
        const auto yr_type{ static_cast<date::year_type>(yr) };
        date yr_begin { yr_type, 1, 1 };
        const date yr_end{ yr_type, 12, 31 };

        while (yr_begin < yr_end) {
            const auto day_str{ get_leading_zero(yr_begin.day()) };
            const auto mon_str{ get_leading_zero(yr_begin.month().as_number()) };
            std::stringstream ss;
            ss << day_str << mon_str;
            auto rev_str{ ss.str() };
            std::sort(rev_str.begin(), rev_str.end());
            if (rev_str == yr_str)
                dates.push_back(yr_begin);
            yr_begin += add_one;
        }
    }
    return dates;
}

int main() {
    const auto p{ get_wedding_dates({ 2001, 2022 }) };
    date_facet* f(new date_facet("%d.%m.%Y"));
    std::cout.imbue(std::locale(std::cout.getloc(), f));
    for (const auto& i : p)
        std::cout << i << "\n";
}
                

Lösung von: Jens Kelm (@JKooP)

// C++ 20 | VS-2022

#include <iostream>
#include <chrono>
#include <vector>
#include <algorithm>
#include <format>

using namespace std::chrono;
using namespace std::string_literals;
using ymd = year_month_day;

struct span {
    int begin, end;
};

constexpr auto get_wedding_dates(const span& span_) {
    std::vector<ymd>dates;

    constexpr auto get_leading_zero{ [](const auto& i) {
        const auto z{ "0"s + std::to_string(i) };
        return z.substr(z.length() - 2); } };

    for (auto yr{ span_.begin }; yr <= span_.end; ++yr) {
        auto yr_str{ std::to_string(yr) };
        std::sort(yr_str.begin(), yr_str.end());
        ymd yr_begin{ year{yr} / January / day{1} };
        const ymd yr_end{ year{yr} / December / day{31} };

        while (yr_begin <= yr_end) {
            const auto day_str{ get_leading_zero(unsigned(yr_begin.day())) };
            const auto mon_str{ get_leading_zero(unsigned(yr_begin.month())) };
            std::string day_mon_str{ day_str + mon_str };
            std::sort(day_mon_str.begin(), day_mon_str.end());
            if (day_mon_str == yr_str) 
                dates.push_back(yr_begin);
            yr_begin = sys_days{ yr_begin } + days{ 1 };
        } 
    }
    return dates;
}

std::ostream& operator<<(std::ostream& os_, const ymd& ymd_) {
    os_ << std::format("{}.{:02}.{}\n", ymd_.day(), unsigned(ymd_.month()), ymd_.year());
    return os_;
}

int main() {
    const auto wd{ get_wedding_dates({ 2001, 2020 }) };
    for (const auto& d : wd)
        std::cout << d;
}
                

Lösung von: Jens Kelm (@JKooP)

Verifikation/Checksumme:

102 Möglichkeiten

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit:
Schwierigkeit: Mittel
Webcode: 06s4-5wnh
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen