C# :: Aufgabe #355

3 Lösungen Lösungen öffentlich

Liste aller zukünftigen Palindromtage in diesem Jahrtausend

Anfänger - C# von hollst - 12.02.2021 um 18:29 Uhr
Ein Datum (z. B. 12. Februar 2021) nennt man Palindromdatum, wenn es als Zahl geschrieben ein Palindrom ist (12022021, vorwärts gelesen identisch mit rückwärts gelesen).

Man schreibe ein Programm, das alle zukünftige Palindromtage bis zum 31. Dezember 2999 ausgibt.

Viel Spaß

Lösungen:

vote_ok
von JKooP (11680 Punkte) - 14.02.2021 um 17:42 Uhr
NET 5.x; C# 9.x; VS-2019
Top-Level-Anweisung
Quellcode ausblenden C#-Code
using System;
using System.Linq;

DateTime start = new(2021, 2, 12); // C# 9.x
DateTime end = new(2999, 12, 31);

while (start <= end)
{
    var s = start.ToShortDateString().Replace(".", "");
    if (s == string.Join("", s.Reverse()))
        Console.WriteLine(start.ToShortDateString());
    start = start.AddDays(1);
}
vote_ok
von Frank (410 Punkte) - 22.02.2021 um 17:07 Uhr
Quellcode ausblenden C#-Code
using System;

namespace DatumPalindrome
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime startDate = DateTime.Now;
            DateTime endDate = new DateTime(2999, 12, 31);
            DateTime iterationDay = startDate;
            int counter = 0;
            while(iterationDay < endDate)
            {
                char[] date = iterationDay.ToString("yyyyMMdd").ToCharArray();
                if (date[0] == date[7] && date[1] == date[6] && date[2] == date[5] && date[3] == date[4])
                {
                    Console.WriteLine(iterationDay.ToString("yyyy/MM/dd"));
                    counter++;
                }
                iterationDay = iterationDay.AddDays(1);
            }
            Console.WriteLine($"Anzahl: {counter}");
        }
    }
}
vote_ok
von hollst (13340 Punkte) - 22.02.2021 um 17:57 Uhr
Quellcode ausblenden C#-Code
using static System.Console; //VS 2019 .Net 5.0.2

System.Text.StringBuilder sb = new System.Text.StringBuilder();

int[] tage_im_monat = new int[] { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 30 };
int start = 000, end = 10000;

static string sx(string s, int x) => s.Length == x ? s : sx("0" + s, x);

int count = 0;
for (var i = start; i < end; i++)
    for (var j = 0; j < tage_im_monat.Length; j++)    {
        string sm = sx((j + 1).ToString(), 2);
        for (var k = 0; k < tage_im_monat[j]; k++)    {
            string st = sx((k + 1).ToString(), 2);
            string temp = st + sm + sx(i.ToString(), 4);
            bool bo_palindrom = true;
            for (var l = 0; l < 4; l++)
                if (temp[l] != temp[temp.Length - 1 - l])
                    bo_palindrom = false;
            if (bo_palindrom)
            {
                WriteLine($"{++count,3}: {temp}    {int.Parse(temp.Substring(4)),4}");               
                sb.Append($"{temp}, ");
            }
        }        
    }
//System.IO.File.WriteAllText("erg_palindrom.txt", sb.ToString());
ReadKey();