⚠ Dieses Repository ist ab 2020 zu Codeberg umgezogen und wird hier auf GitHub nicht mehr gepflegt! ⚠
⚠ This repository has been moved to Codeberg in 2020 and the version here on GitHub is no longer maintained! ⚠
👇 Nach dem ersten Abschnitt geht’s komplett auf Deutsch weiter! 👇
This repository contains my solutions to some Advent of Code puzzles until 2019. (In 2020, I’ve moved to Codeberg.) I’m using Advent of Code to learn new programming languages or to improve my proficiency in those I already know.
Also, each year in December, when the puzzles come out, I’m doing live video streams while solving them. That way, people can look over my shoulder, ask questions or suggest other ways to build the solution.
While the code I’m writing uses English names and comments, the streams are in German, my mother tongue. This allows me to think and speak more fluently, but more importantly it provides a way for German speakers who are not very good at English to follow along. In other words, I’m trying to lower the entry barrier for people who struggle with English.
Therefore, the documentation and announcements in this repository that deal with the streams is in German as well. Feel free to browse the code though! 😉
You can contact me on Mastodon (@scy@scy.name), Twitter (@scy), Matrix (@scy:scy.name) or visit the #livestream:scy.name Matrix channel.
Dieses Git-Repository enthält meine Lösungen zu einigen Aufgaben („Puzzles“) aus dem Advent of Code, einem jährlich stattfindenden „Programmier-Adventskalender“. Jeden Tag im Dezember erscheinen zwei neue Aufgaben (die zweite baut auf der ersten auf), die man in einer beliebigen Programmiersprache lösen kann. Das nehme ich gern zum Anlass, um eine neue Sprache zu lernen oder meine Kenntnisse in anderen zu vertiefen.
Im Dezember, wenn neue Puzzles rauskommen, mache ich üblicherweise Live-Videostreams, während ich sie löse. Auf die Art können mir Leute über die Schulter schauen, Fragen stellen oder alternative Lösungswege vorschlagen.
Im Code benutze ich englische Namen für Variablen, Funktionen etc., aber die Streams sind auf Deutsch, meiner Muttersprache. Dadurch kann ich flüssiger denken und reden, aber zusätzlich (noch viel wichtiger) gibt es Leuten, die nicht so gut Englisch sprechen, die Möglichkeit, mit dabei zu sein. Ich versuche also den Einstieg für Menschen zu vereinfachen, die mit Englisch Probleme haben.
Aus diesem Grund sind in diesem Repository die Dokumentation und Ankündigungen, die sich mit den Streams befassen, auf Deutsch.
Es ist Dezember; der Advent of Code fängt wieder an!
Dieses Jahr lege ich einen größeren Fokus auf offene, dezentrale und unabhängige Technologien und Plattformen. Daher ist dieses Repository zu Codeberg umgezogen, einem gemeinnützigen Verein zur Förderung des Open-Source-Gedankens. Alle weiteren Infos, Links und Lösungen findet ihr also dort. Dieses Repository hier bei GitHub wird nicht weiter gepflegt.
2019 habe ich mich in komplett unbekanntes Gebiet begeben und die Aufgaben in Rust programmiert. Ich war totaler Newbie und hatte bis November noch keine Zeile Code darin geschrieben. Es gab Vorab-Streams, in denen ich Rust aufgesetzt habe und Rust by Example ein Stück weit durchgearbeitet:
- Mi 2019-11-20: Bauen am Streaming-Setup
- Do 2019-11-21: „Rust by Example“ Teil 1: Installation, Hello World, Stringformatierung
- Fr 2019-11-22: „Rust by Example“ Teil 2: Primitive, Tupel, Arrays, Slices, Enums
- Di 2019-11-26: pythoneer’s Rust-Tutorial: Ownership, Borrows, Move und Lifetimes
Leider fluktuierte der Zeitaufwand massiv. Während 2018 alles in zwei Stunden lösbar war, sind 2019 Streams mit vier Stunden oder mehr keine Seltenheit gewesen. Den Zeitaufwand konnte ich irgendwann nicht mehr stemmen, weshalb ich die Streams nach Tag 14 abgebrochen habe. Sorry dafür!
Wenn ihr die 2019er Streams von vorn bis hinten durchschauen wollt, gibt es hier die Playlist: Advent of Code 2019
- So 2019-12-01: Tag 1 (Raumschiff-Treibstoff)
- Mo 2019-12-02: Tag 2 (erstes Intcode-Programm: Addition/Multiplikation)
- Di 2019-12-03: Tag 3 (Schnittpunkte zwischen zwei Drähten)
- Mi 2019-12-04: Tag 4 („Passwörter“ aus Ziffern mit Gültigkeitsregeln)
- Do 2019-12-05: Tag 5 (Intcode-Erweiterungen: Parameter-Modus „Immediate“, Jump, Compare)
- Fr 2019-12-06: Tag 6 (Graphtraversierung bzw. „Orbitaltransfers“)
- Sa 2019-12-07: Tag 7 (Verkettung von Intcode-Maschinen, Warten auf Input)
- So 2019-12-08: Tag 8 (Passwort-Bild aus teils transparenten Layern)
- Mo 2019-12-09: Tag 9 (Relative Adressierung und mehrere Outputs im Intcode)
- Di 2019-12-10: Tag 10 (Asteroiden: Sichtbarkeit und Abschuss im Uhrzeigersinn)
- Mi 2019-12-11: Tag 11 (Kennzeichen auf die Raumschiffhülle malen lassen)
- Do 2019-12-12: Tag 12 (Umlaufbahnen der Jupitermonde)
- Fr 2019-12-13: Tag 13 (Breakout-Klon in Intcode)
- Sa 2019-12-14: Tag 14 (Produktion von Treibstoff aus Erz über verschiedene chemische Reaktionen)
2018 lag mein Fokus auf modernem JavaScript, sprich ≥ ES6. Dafür habe ich mich mit dem hervorragenden JavaScript.info eingearbeitet und dort auch immer wieder nachgeschlagen.
Leider ist am 13.12. (wann auch sonst) meine Platte abgeraucht und ich habe die Streams nicht fortgesetzt.
Die Streams der ersten zwölf Tage findet ihr in dieser YouTube-Playlist: Advent of Code 2018, den Code natürlich hier im Repo im Ordner 2018.
Ich versuche seit ca. zwei Jahren, so wenig mit Amazon (denen ja Twitch gehört) zu tun zu haben wie möglich. Die Arbeitsbedingungen dort sind ausbeuterisch, deren CEO Jeff Bezos hordet sein Geld lieber, anstatt damit Gutes zu tun und generell sind sie mir einfach unsympathisch. Google ist jetzt aus antikapitalistischer Sicht nur marginal besser, aber freie oder dezentrale Streamingplattformen gibt’s eben noch nicht so wirklich. PeerTube ist kurz davor und hat Livestreaming wohl (Stand 2020-12-01) schon umgesetzt, aber es gibt noch kein neues Release.
Erstens heißt du im YouTube-Chat so wie dein „Kanal“, was üblicherweise deinem Google-Namen und damit oft deinem Passnamen entspricht. Sich einen Nickname auszusuchen, ist nicht so einfach, außer du benennst deinen „Kanal“ um. Und wenn du dich mit deinem Nickname identifizierst, fühlt sich der Passname einfach blöd an. Abgesehen davon fällt’s mir schwer, dich zuzuordnen, wenn ich dich nur unter deinem Nick kenne.
Zweitens möchte ich aber auch eine Community abseits von den paar Stunden Stream hochziehen, z.B. für andere Livestreams oder gemeinsame Projekte, von daher macht’s eben einfach Sinn, nen Dienst zu benutzen, der auch abseits der Streams genutzt werden kann.