Advent of Code 2022

Es gibt 85 Antworten in diesem Thema. Der letzte Beitrag () ist von Elanda.

    Advent of Code 2022

    Meine Damen, Herren und nicht-Binären Freunde,
    der Dezember steht vor der Tür.

    Jeder kennt die Tradition: Tag für Tag erwachen und sich ein Stück Schokolädchen gönnen, bis schlussendlich ein rot bekleidet, bärtiger Mann, sich unerlaubten Zutritt durch den Kaminsinms verschafft um ein paar Päckchen abzuladen. (Ich habe vor, dieses Jahr, ein paar Wildkameras zu verstecken um ihn in flagranti zu erwischen, ich halte euch auf dem Laufenden)
    Wie dem auch sei, Entwickler-Schokolade sieht anders aus, wir lieben syntaktischen Zucker. Eigens aus diesem Grund gibt es seit 2015 den "Advent of Code".

    Kennste nich'?
    Auch egal, es handelt sich um eine "Challenge", die jedes Jahr von einem Entwickler perfide ausgetüftelt wird, um uns mit herausfordenden und spaßigen Aufgabenstellungen am Leben zu halten.
    Jeden Tag wird eine neue Aufgabe aufgedeckt und unsere Aufgabe ist es diese zu lösen.
    Man kann seine Lösung dann aufgeben wenn man möchte, muss man aber nicht.

    Und da kommt meine Idee ins Spiel.
    Für die, die Bock darauf haben, hatte ich die Idee, auf dem inoffiziellen VB-Paradise Discord einen Kanal erstellen zu lassen (danke @EaranMaleasi für die Unterstützung), in dem wir uns austauschen, gegenseitig helfen und uns unsere Lösungen zeigen können oder was sonst noch alles.

    Es geht auch nicht darum, wirklich jeden Tag mitzumachen, theoretisch könnt ihr auch nur einmal, zweimal oder auch jeden Tag mitmachen, das liegt in eurem Ermessen. (Ich werde warscheinlich auch nicht jeden Tag mitmachen)
    Es geht hier nur um eine Abwechslung, Spaß und das Menschen auch mal zusammenarbeiten können.
    Und wenn auch jeder am Ende des Tages seine Lösung teilt (kein Zwang an dieser Stelle), können andere villeicht auch was daraus lernen oder zumindest darüber diskutieren.
    Die Sprache ist natürlich vollkommen egal, was euch am besten gefällt.

    Nun gut, das war es dann mal von mir.
    Hier könnt ihr mehr über AoC lernen:
    adventofcode.com/

    Und hier kommt ihr auf den Discord, wo dann bald der neue Channel erstellt wird:
    discord.gg/nzmhDgVKMm

    Ich hoffe auf ein lustiges Abenteuer :D
    Elanda

    Ps:
    Ihr könnt Lösungen und Frage ect. ruhig auch hier in diesem Thread dann hochstellen wenn ihr wollt, dann kann die jeder sehen. (Besonders für die, die kein Discord haben/nicht haben wollen)
    Tschüssi

    Update:
    Tag 1 - Elfen und ihre Kalorien: adventofcode.com/2022/day/1
    Tag 2 - Schere, Stein, paar Bier: adventofcode.com/2022/day/2
    Tag 3 - Backpack ordnen: adventofcode.com/2022/day/3
    Tag 4 - Frühjarsputz: adventofcode.com/2022/day/4
    Tag 5 - 64 davon bitte: adventofcode.com/2022/day/5
    Tag 6 - Ihr Paket ist da: adventofcode.com/2022/day/6
    Tag 7 - Wie bitte?: adventofcode.com/2022/day/7
    Tag 8 - Happy Tree Friends: adventofcode.com/2022/day/8
    ----------------------------------------------------------------------------------------------------------------------

    Hier könnte meine Signatur stehen, aber die ist mir abfußen gekommen.

    ----------------------------------------------------------------------------------------------------------------------

    Dieser Beitrag wurde bereits 17 mal editiert, zuletzt von „Elanda“ ()

    Tag 01 C# Code (NET 6 - Console App ) (nehme gerne Verbesserungen an):
    Spoiler anzeigen

    Lösungscode #1
    Spoiler anzeigen

    C#-Quellcode

    1. List<int> elvesCalories = new List<int>();
    2. string[] lines = File.ReadAllLines("input.txt")
    3. int calories = 0;
    4. foreach (string line in lines)
    5. {
    6. if (String.IsNullOrEmpty(line))
    7. {
    8. elvesCalories.Add(calories);
    9. calories = 0;
    10. } else
    11. {
    12. int actualCalories = Int32.Parse(line);
    13. calories += actualCalories;
    14. }
    15. }
    16. Console.WriteLine($"Top Elve: {elvesCalories.Max()}");
    17. Console.WriteLine($"Top Three Evles total: {elvesCalories.OrderByDescending(x => x).Take(3).Sum().ToString()}");
    18. Console.Read();




    Lösungscode #2 noch etwas verkürzt:
    Spoiler anzeigen

    C#-Quellcode

    1. string[] lines = File.ReadAllLines("input.txt");
    2. int[] elvesCalories = new int[lines.Select(x => x == "").Count() + 10];
    3. int elveId = 0;
    4. foreach (string line in lines)
    5. {
    6. if (String.IsNullOrEmpty(line)) elveId++;
    7. elvesCalories[elveId] += (String.IsNullOrEmpty(line)) ? 0 : Int32.Parse(line);
    8. }
    9. Console.WriteLine($"Top Elve: {elvesCalories.Max()}");
    10. Console.WriteLine($"Top Three Evles total: {elvesCalories.OrderByDescending(x => x).Take(3).Sum().ToString()}");
    11. Console.Read();

    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „xChRoNiKx“ ()

    Ich hab das mit ein wenig mehr Aufwand gemacht. PS: Die erste Zeile vom Input muss dafür natürlich leer sein.
    Spoiler anzeigen

    C#-Quellcode

    1. public class Elf
    2. {
    3. public List<Item> Items = new List<Item>();
    4. }
    5. public class Item
    6. {
    7. public int Calories;
    8. public Item(int calories) { Calories = calories; }
    9. }
    10. internal class Program
    11. {
    12. static void Main(string[] args)
    13. {
    14. string[] lines = System.IO.File.ReadAllLines("input.txt");
    15. List<Elf> elfs = new List<Elf>();
    16. foreach (string line in lines)
    17. {
    18. if (string.IsNullOrEmpty(line))
    19. {
    20. Elf elf = new Elf();
    21. elfs.Add(elf);
    22. }
    23. else
    24. {
    25. elfs[elfs.Count - 1].Items.Add(new Item(int.Parse(line)));
    26. }
    27. }
    28. int calsTop1 = elfs.OrderByDescending(i => i.Items.Sum(ii => ii.Calories)).First().Items.Sum(ii => ii.Calories);
    29. Console.WriteLine(calsTop1);
    30. int calsTop3 = elfs.OrderByDescending(i => i.Items.Sum(ii => ii.Calories)).Take(3).Sum(ii => ii.Items.Sum(iii => iii.Calories));
    31. Console.WriteLine(calsTop3);
    32. Console.Read();
    33. }
    34. }

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „BitBrösel“ ()

    Uuuund nochmal C#. ^^

    Spoiler anzeigen

    C#-Quellcode

    1. var inputs = new Dictionary<string, string>()
    2. {
    3. ["Example"] = "1000\r\n2000\r\n3000\r\n\r\n4000\r\n\r\n5000\r\n6000\r\n\r\n7000\r\n8000\r\n9000\r\n\r\n10000",
    4. ["Input"] = "15931\r\n8782\r\n16940\r\n14614\r\n\r\n4829\r\n12415\r\n13259\r\n11441\r\n8199\r\n\r\n2540\r\n" /* ... */
    5. };
    6. var results =
    7. from input in inputs
    8. let sections = input.Value
    9. .Replace("\r", "")
    10. .Split("\n\n", StringSplitOptions.RemoveEmptyEntries)
    11. let caloriesPerElf =
    12. from section in sections
    13. let calorieStrs = section.Split('\n', StringSplitOptions.RemoveEmptyEntries)
    14. let calories = calorieStrs.Select(int.Parse)
    15. select calories.Sum()
    16. let highest = caloriesPerElf.Max()
    17. let threeHighest = caloriesPerElf.OrderByDescending(x => x).Take(3).Sum()
    18. select new
    19. {
    20. Input = input.Key,
    21. Highest = highest,
    22. ThreeHighest = threeHighest
    23. };
    24. foreach (var result in results)
    25. {
    26. Console.WriteLine(result);
    27. }
    Tag 1 AoC 2022 - C++ (Auch hier auf GitHub)
    Spoiler anzeigen

    C-Quellcode

    1. #include <array>
    2. #include <iostream>
    3. #include <random>
    4. #include <regex>
    5. #include <vector>
    6. //**********************************************************************************************************************
    7. // region Namespace
    8. //======================================================================================================================
    9. namespace
    10. {
    11. //==================================================================================================================
    12. using namespace std::string_view_literals;
    13. //==================================================================================================================
    14. /** The name and number of elves, frantically searching for our beloved calories. */
    15. constexpr std::array elves {
    16. "Boogy"sv,
    17. "Grumpy"sv,
    18. "Stoopi-d"sv,
    19. "Big-G-Elfman"sv,
    20. "Yourmama-Stevenson"sv
    21. };
    22. /** Some welcoming phrases of Santa. */
    23. constexpr std::array introductionPhrases {
    24. "Welcome {} my friend, what have you gotten for us today?"sv,
    25. "What about you {}? What is it that's supposed to cease our hunger?"sv,
    26. "Can you please show us what you got for us {}?"sv,
    27. "Oh... oh it's you {}, ok... well weird, but anyway, what have you gotten for us?"sv,
    28. "Ah THERE they are, my beloved elf {}, please open your hands and show us everything that you have found!"sv,
    29. "Sup {}, what u got?"sv,
    30. "I don't want to be tsundere or so Mr. {}, but give me all you got or 360 no-scope - it's on you."sv,
    31. "So... you arrived at last my beloved underling {}, present to our eyes the secrets your hands might hide."sv
    32. };
    33. //==================================================================================================================
    34. [[nodiscard]]
    35. std::string getMessage(size_t phraseId, std::size_t elfId)
    36. {
    37. const std::regex pattern(R"(\{\})");
    38. std::string output (introductionPhrases[phraseId]);
    39. std::smatch match;
    40. while (std::regex_search(output, match, pattern))
    41. {
    42. output = match.prefix().str() + std::string(elves[elfId]) + match.suffix().str();
    43. }
    44. return output;
    45. }
    46. [[nodiscard]]
    47. std::vector<int> createIndices()
    48. {
    49. std::vector<int> result;
    50. std::generate_n(std::back_inserter(result), introductionPhrases.size(),
    51. [counter = 0]() mutable
    52. {
    53. return counter++;
    54. });
    55. std::random_device rd;
    56. std::mt19937 g(rd());
    57. std::shuffle(result.begin(), result.end(), g);
    58. result.resize(elves.size());
    59. return result;
    60. }
    61. }
    62. //======================================================================================================================
    63. // endregion Namespace
    64. //**********************************************************************************************************************
    65. // region main
    66. //======================================================================================================================
    67. int main(int argc, char **argv)
    68. {
    69. using ElfInventory = std::vector<int>;
    70. struct ElfScore // NOLINT
    71. {
    72. std::size_t index;
    73. int calories { -1 };
    74. };
    75. std::cout << "Ho ho ho, happy early christmas my dear underlings, namely, elves.\n"
    76. "Unfortunately, before we can engage in distributing kids toys, we need to fill up our stamina with "
    77. "plenty of calories.\n"
    78. "For this very reason, I'd like you to help me pick up anything that could aid us in our quest,\n"
    79. "I am going to dispatch 5 of you of which all of you will return with as many supplies as you can "
    80. "find.\n"
    81. "So go now, venture away and bring me the finest crops and fruits that you may get.\n"
    82. "-- 23 days later --\n"
    83. "Ho ho ho, there you are my dear underlings, please report what goods you have found.\n"
    84. "What are these goods - supposed to fill our bellies such that the next day will be\n"
    85. "another journey on our sanitary facilities.\n\n";
    86. const std::vector<int> indices = ::createIndices();
    87. ElfScore highscore;
    88. for (auto it = ::elves.begin(); it != elves.end(); ++it)
    89. {
    90. const std::size_t index = std::distance(elves.begin(), it);
    91. const std::string phrase = ::getMessage(indices[index], index);
    92. std::cout << phrase << '\n'
    93. << "(Enter calorie numbers line by line, you can have as many as you want. "
    94. "Or leave empty to jump to the next elf.)\n" << std::flush;
    95. int calorie_count = 0;
    96. while (true)
    97. {
    98. std::string input;
    99. (void) std::getline(std::cin, input, '\n');
    100. if (input.empty())
    101. {
    102. break;
    103. }
    104. try
    105. {
    106. const int input_calories = std::stoi(input);
    107. if ((static_cast<std::size_t>(calorie_count) + input_calories) > std::numeric_limits<int>::max())
    108. {
    109. std::cout << "Uiuiui, that is bit too much calories, let's ignore this item - go on!\n" << std::flush;
    110. continue;
    111. }
    112. calorie_count += input_calories;
    113. }
    114. catch (const std::exception &ex)
    115. {
    116. std::cout << "Not a valid calorie or too high, try again:\n" << std::flush;
    117. continue;
    118. }
    119. }
    120. if (calorie_count > highscore.calories)
    121. {
    122. highscore = { index, calorie_count };
    123. }
    124. }
    125. std::cout << "\n\n"
    126. "Wohoo ho ho, that is quite the food everyone.\n"
    127. "Especially you " << ::elves[highscore.index] << ", you have done well with your "
    128. << highscore.calories << " calories.\n\n"
    129. "AND NOW LET'S BEGIN HO HO HO HO MERRY CHRISTMAS EVERYONE!\n";
    130. return 0;
    131. }
    132. //======================================================================================================================
    133. // endregion main
    134. //**********************************************************************************************************************

    ----------------------------------------------------------------------------------------------------------------------

    Hier könnte meine Signatur stehen, aber die ist mir abfußen gekommen.

    ----------------------------------------------------------------------------------------------------------------------
    @BitBrösel Ach das hab ich total vergessen, stimmt, danke für's Erinnern! (und jetzt grab ich mich ein 8| )

    Edit: Jetzt sehe ich erst das man da vorgegebenen Input bekommt, ist ja auch logisch oh man.
    ----------------------------------------------------------------------------------------------------------------------

    Hier könnte meine Signatur stehen, aber die ist mir abfußen gekommen.

    ----------------------------------------------------------------------------------------------------------------------
    Ich mach auch mal mit :D

    Spoiler anzeigen

    C#-Quellcode

    1. ​[b][/b]using FileStream fs = File.OpenRead("input.txt");
    2. using StreamReader sr = new StreamReader(fs);
    3. int[] caloriesTopThree = new int[3];
    4. int caloriesCurrentElf = 0;
    5. bool hasEmptySlots = true;
    6. while (!sr.EndOfStream)
    7. {
    8. string? line = sr.ReadLine();
    9. if (string.IsNullOrWhiteSpace(line))
    10. {
    11. if (hasEmptySlots)
    12. {
    13. for (int i = 0; i < 3; ++i)
    14. {
    15. if (caloriesTopThree[i] == 0)
    16. {
    17. caloriesTopThree[i] = caloriesCurrentElf;
    18. hasEmptySlots = i < 2;
    19. break;
    20. }
    21. }
    22. }
    23. else
    24. {
    25. int minIdx = Array.IndexOf(caloriesTopThree, caloriesTopThree.Min());
    26. if (caloriesCurrentElf > caloriesTopThree[minIdx])
    27. {
    28. caloriesTopThree[minIdx] = caloriesCurrentElf;
    29. }
    30. }
    31. caloriesCurrentElf = 0;
    32. continue;
    33. }
    34. caloriesCurrentElf += int.Parse(line);
    35. }
    36. Console.WriteLine(caloriesTopThree.Max());
    37. Console.WriteLine(caloriesTopThree.Sum());
    38. sr.Close();
    39. fs.Close();[b][/b]
    @Elanda Ich hatte mich schon gewundert, weil nur 5 Namen für die Elfen im Code waren, das deckt sich dann natürlich mit dem dortigen Beispiel. Aber ganz nett gemacht, nachdem ich denn mal herausfand das ich einen neueren ISO Standard einstellen muss für std::string_view_literals konnte ich das auch probieren. Da kann ich auf jeden Fall was von lernen.
    Ja ich hatte mich natürlich noch nicht angemeldet, also sah ich auch den Input nicht.
    Wer geht denn davon aus das man sich zuerst einloggen muss. (warscheinlich alle außer ich natürlich)
    ----------------------------------------------------------------------------------------------------------------------

    Hier könnte meine Signatur stehen, aber die ist mir abfußen gekommen.

    ----------------------------------------------------------------------------------------------------------------------
    Hallo Leute Congratulation

    Ich habe mich noch nicht eingeloggt, und werde es wahrscheinlich auch nicht machen, aber als ich den Text durchgelesen habe, habe ich mich wirklich gerfagt, woher kommt die Frage nach den Top 3. Die habe ich nicht gefunden.

    Aber nun weiss ich das diese Frage erst gestellt wird, wenn man die erste Frage gelöst hat.

    Advent of Code 2022 gefällt mir, und ich finde ihr habt einen guten Start hingelegt.

    Werde es auf jedefall weiter verfolgen.

    Freundliche Grüsse

    exc-jdbi
    Ich mach da jetzt das erste mal mit, AOC gefällt mir auch, war schon am grübeln, wie das mit der Highscore-Tabelle funktioniert. Dachte erst man muss Code uploaden, der dann in einer VM irgendwie getestet wird. War dann auch überrascht vom ellenlangen Input und musste den Code anpassen. Aber die Idee die Codes hier zu teilen, ist das beste an der Sache, vom Code von Elanda konnte ich schon mal was lernen. Morgen mach ich das auch in C++.
    Habs jetzt noch mal neu gemacht, nach dieser Pein X/
    Spoiler anzeigen

    C-Quellcode

    1. #include <fstream>
    2. #include <iostream>
    3. #include <queue>
    4. #include <string>
    5. //**********************************************************************************************************************
    6. // region main
    7. //======================================================================================================================
    8. int main()
    9. {
    10. //==================================================================================================================
    11. struct ElfScore
    12. {
    13. //==============================================================================================================
    14. int score;
    15. int number;
    16. //==============================================================================================================
    17. ElfScore(int parScore, int parNumber)
    18. : score(parScore),
    19. number(parNumber)
    20. {}
    21. };
    22. //==================================================================================================================
    23. std::ifstream file(INPUT_FILE); // File url defined in CMake script
    24. if (!file.is_open())
    25. {
    26. std::cout << "Couldn't open input";
    27. return 1;
    28. }
    29. static constexpr auto comparator = [](auto &&left, auto &&right) { return (left.score < right.score); };
    30. std::priority_queue<ElfScore, std::vector<ElfScore>, decltype(comparator)> p_queue(comparator);
    31. std::string line;
    32. int score = 0;
    33. for (int i = 1; std::getline(file, line);)
    34. {
    35. if (!line.empty())
    36. {
    37. score += std::stoi(line);
    38. }
    39. else if (score > 0)
    40. {
    41. p_queue.emplace(std::exchange(score, 0), i++);
    42. }
    43. }
    44. const ElfScore top1 = p_queue.top();
    45. std::cout << "Elf numero " << top1.number << " is the big boss with " << top1.score << " calories!\n";
    46. p_queue.pop();
    47. const ElfScore top2 = p_queue.top();
    48. p_queue.pop();
    49. const ElfScore top3 = p_queue.top();
    50. std::cout << "Top three elves carry in sum: " << (top1.score + top2.score + top3.score);
    51. return 0;
    52. }
    53. //======================================================================================================================
    54. // endregion main
    55. //**********************************************************************************************************************

    ----------------------------------------------------------------------------------------------------------------------

    Hier könnte meine Signatur stehen, aber die ist mir abfußen gekommen.

    ----------------------------------------------------------------------------------------------------------------------
    Ich hab nochmal etwas angepasst und einen weiteren Code mit noch weniger Zeilen im Spoiler gepackt in meinem Post oben.
    Eventuell sieht ja noch jemand Potenzial zum weiter kürzer ohne das die Lesbarkeit ganz flöten geht :D
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Das hat mich zur Lösung beider Puzzles gebracht:
    Spoiler anzeigen

    C#-Quellcode

    1. public static class ElvesCalculator
    2. {
    3. public static List<Elf> Elves { get; set; } = new List<Elf>();
    4. public static Elf MostCalories { get; private set; }
    5. public static int Top3Calories { get; private set; }
    6. public static void ReadListAndCalculate()
    7. {
    8. using StreamReader streamReader = new StreamReader("C:\\Users\\user\\Desktop\\aocInput.txt");
    9. Elf current = new Elf();
    10. Elves.Add(current);
    11. do
    12. {
    13. string line = streamReader.ReadLine();
    14. if (int.TryParse(line, out int caloriesPack))
    15. current.AddPAckage(caloriesPack);
    16. else
    17. {
    18. current = new Elf();
    19. Elves.Add(current);
    20. }
    21. } while (!streamReader.EndOfStream);
    22. MostCalories = Elves.MaxBy(x => x.TotalCalories);
    23. List<Elf> temp = Elves.OrderByDescending(x => x.TotalCalories).ToList();
    24. Top3Calories = temp[0].TotalCalories + temp[1].TotalCalories + temp[2].TotalCalories;
    25. }
    26. }
    27. public class Elf
    28. {
    29. public List<int> CaloriesPackages { get; set; } = new List<int>();
    30. public int TotalCalories { get; private set; }
    31. public void AddPAckage(int packacke)
    32. {
    33. TotalCalories += packacke;
    34. CaloriesPackages.Add(packacke);
    35. }
    36. }


    Und wird dann so aufgerufen:

    C#-Quellcode

    1. ElvesCalculator.ReadListAndCalculate();
    2. Console.WriteLine("Solution Day_1_P1:" + ElvesCalculator.MostCalories.TotalCalories);
    3. Console.WriteLine("Solution Day_1_P2:" + ElvesCalculator.Top3Calories);
    4. Console.ReadKey();

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „EaranMaleasi“ ()

    xChRoNiKx schrieb:

    Eventuell sieht ja noch jemand Potenzial zum weiter kürzer ohne das die Lesbarkeit ganz flöten geht

    Spoiler anzeigen

    C#-Quellcode

    1. int[] elvesCalories = new int[lines.Select(x => x == "").Count() + 10];

    zumindest das + 10 ist überflüssig. Das ToString in der 2. Ausgabe kann auch weg, anstatt Int32.Parse, int.parse. Noch kürzer seh ich nichts mehr. Aber das ist jetzt eine Krasse Art um ein paar Chars zu sparen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „BitBrösel“ ()

    Hier zum ersten April die Lösung in Whitespace.

    Quellcode



    :D

    Verdammter Glühwein, macht es etwas schwer die Leerzeichen abzuzählen, daher habe ich dann alles komprimiert.
    Jetzt sollte es besser laufen beim JIT (Just im Tiefenrausch) und Bytekrokant-Code, wie bei Python, aber besser.
    Zumindest hab ich jetzt beim Sehen ein RAID-1-Augen-Verbund. Linkes Auge XOR Rechtes Auge = Proofe of Done, I think

    Euch allen alles Gute zum Jahreswechsel und mögen die Bytes mit euch sein. Euer Joshi aus Tüdülü und HaHa :)

    P.S.: Es waren vorher wirklich 42 Zeilen Code, echt jetzt...
    Mit AoC hab ich mich letztes Jahr in Swift eingearbeitet. Dieses Jahr lieber wieder in C# :D
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mrMo“ ()

    Whitespace ist auch immer so ein richtiger Brainfuck irgendwie... hehe *schmunzel*
    Krass gut, hätte ich mich niemals im Leben getraut, da hätte auch Glühwein nicht viel gehilft. (Obwohl...)

    Die Jahres-Glückwunsche auch zurück! (Hoffentlich bringt das, so früh schon, kein Unglück :pray_emote:)
    ----------------------------------------------------------------------------------------------------------------------

    Hier könnte meine Signatur stehen, aber die ist mir abfußen gekommen.

    ----------------------------------------------------------------------------------------------------------------------