diff --git a/.gitignore b/.gitignore index 333dc00..98b40c2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ Jonas Daniel +README.md.temp diff --git a/6/README.md b/6/README.md new file mode 100644 index 0000000..028730f --- /dev/null +++ b/6/README.md @@ -0,0 +1,10 @@ +# [Day 6](https://adventofcode.com/2022/day/6) +:gift::gift::gift::gift::gift::gift: + +Today's language: **HTML** *(javascript)* + +### [Click here to see the website in try it out for yourself](https://quintern.xyz/advent22/day6.html) + +```shell +firefox day6.html +``` diff --git a/6/broken-device.txt b/6/broken-device.txt new file mode 100644 index 0000000..dc46669 --- /dev/null +++ b/6/broken-device.txt @@ -0,0 +1 @@ +lrgrvgvttzmtmtgglmgmccpclppvdvtvvllvggvrggbwwlzlmzzbppnvpnvppcjjzhjhthnhjnhhhndhnnnsbnnhzzvhhplplzlrzzgpzpwzpwwsvsjvjfvvphpspwswrswscwscwsscffspsbbjjcjwjrwwtgwwgswswwzbzddqnnpqnpnqppwzwszsnsjjpddhvvcbbhhpzzlpzlzppfpvvmcmvvflfttrltrlldlglbgblltqtffrtrwrzwwzmzwmwwlzzhttwzzwnnmrrcdrdjrjqjvqvvjzzgccrllhmhzzfnfwwtzwzwpwhhdjhhmzzbbvggzdzccbzbbpcpqccjbcbppsttdjdnjnppjjnmmszmzgzddtctvctcvttgtbbzqqggnmmdllvdvmvzzhfffzvfvtfvtvwwcnwnvwwbccggjcjqcqcbcrrppdqppdzpzqppttjhjdjqjppzgzjjpllwrrbttrvvzzbhzzqppndppwqppnrpnnttfwttsrrgprggmtmhmzhzczwzmwzwrwqwrrrdqrrvssnlngnppfqqgbgjjcttbgtbtmtctmcmcmgmsgsffhghqhbbvtbbtltmltlnlpnngcnggbngbnnzgzccgcpgcpcjppnnzjzdjdggzjzljjhnncgcjcscfctcvttvqtqmqjjsqjqpqfqhqmmlvvmppfrfjjngnnfllrlhhppcjcbjcctgcgtcgcvgvffqfcfpcpdpffrbrvbvnnphpqpfqqtnttmtgtlgtgzttnvvpwvwvcwcfwcwmccwlclqlflpflplwpllndlltlqtlqqmqnqmnqnvqvrrtddqndnrdnnpzprrqnnggvqvhvpvptvvvzwzrwwscsqqmcmttbgtgpptzptzzvszvzdvvtsscbbrpptssltssztszttlvlqljlgljlhhwvhwvvqhvqhqrhqqcnqccnbcbppbffzqfqsfspsqsjjrhjjchcmhmnhmmzjmjmfjmmsbsvvgcggtdgghchrrpnnrttnthtdtmmhmdmppmgpgllrwlrwlwvvlmlglppzttsvsbsnbncnjnffddzcddbzzbzgbghhhtltwtggljjggsdswwpmmfhfsfvfrrgmrgrfggvzzbnbttwqqdcdppqcqpcpqpjqpjpbbgjbgjjfwfwpfpgpzgzmzgzdzzpwzwqqjqfqllgrgjjfvvqnvncntngnhgnhgnnzvvbsbmbqmqwmqwwhbwhhsccvhcclncnqccnvnzvvdgvgnvnttmbbhccwgwttlwtwqttqcqmcqcdcmmjpmmjsjhhprrnnqddjwdjjvvhvgvssthhnfhnnntfthhtggthhbrbrjbbjfbjjrgrsrjrqqqfwflfclflnnnnvggfqgqzzbbvttfcfvcvsswvssnzndndvnvqqznnrjnnsmmptmppncpchcctwtbbgbqqjqtqsqfsfvfvnvmvzzpgzppdzdvdqdjdnjnttvvjbbzrzqrqwrqrbqrqsqpspjssnqnpqqnjndjjzmmvbbrqrccrffhwhggbttpnpphwhhmrrndrnddzqzzfbfwbwnwtwjjwjmjsjcjgcjjfcftcffvpvwwbffgzgnnlfffnddtdbdlbbcjbjmmfpfzfbbwbdwwfmfpmmfjfffvzvdvvhrvrcvcscjjpfjjnfnzzrtrpphtppzrppwhhphthltlllttghgwwvlwlflhldlzzmbzzjppnwppvlplqqbtbwwccswccqzzjhjbbhbnhnshnsslmmlqqjfjrjjmvvhpjqhzqffhsdsbwpjvgpvmbfqltrmpnwfcptpfmtjcpbzfldbhcmzchshrlbjgggrfjcqhzqqvbzsczmbgqmzqmltlrtlbnsfvmlhbbcqbbltjpdrpznrglshvgdnqwlhthghvtbffddcjwgdzfswzbppjtdhstcqqmvzmjrvfjbhmrznwqczdjjclnhbmtdvvzwttwnrlfqwpglpcppdwdcvfqpqfnmbvzvmqlmnlgnrsqdjvtsftgnlrtzsrcqhltmhzhpmzqqfqrjwhqfnqdtnshwgfhcpjrlplnqczdlntnhsczrgfhflsfbmftsbptflqbpwblrfnfzvqtpblftmscpzgdhhsbdbjhqclnptwtmhbbfglmvwnbqgvqhmmswwjpfwqjbvznmcpdzcvbzjmfqnwstvvtdnlvnpznnblfqzjjrjgnsbtmmbjzsvmgwddtnzcvhvtdrmjgtcrjzznrssscrzcfbfpgpnpppsqcqpccnbdjnwrbvhrcwgqncjrzbdhzqpfhqbnvbfrzmlfbfvtpggrtdswnvlsvpjsmfchhpbbszbnqqfrmhpqzdjhmhmnnmplbtrpgphvvqdfbcfnrfrbfbtshlmlfltjnbmggqntvhdnlvtcvlhmlrlfzfrqmlwqzrdghvdvtsqvmpdjrjclmlmgjqwzzldnzvfmwmrrnfghsvpcwjdtlnrhpjczwpgfbhpnmcbpthsndfflbjhnlwdbbmlttfqcmswvppslptgzbvfgppvpnhjccrpgrpwtngmmccjghhcwddmnglschnpjwqtrtsvggnpzvsqshfvcnhptphtlmqmpznfzwvbnhwpsfwvpflsdjcjgfzjprbbfzgdbmrjgwrgfdphghrhnpvfncrdzcwtthmqtdwlhjsdthqpzhbjpgggndtrmwvcsqhzrzwbhtqsqthvqncprvnpsrlpvlvcjrcflhbdhrfthlfnqbzbmvlvhmbjnbbjhpjwlfflfhpfwcwnnsljthvzwprqjmgpldlzjnjtjfjrgnrpzpvzfcsrprbjhwnmccwhppjrlnndjdjzqwpcwnvqwgmnwbrjqqvbplvsncnmdfrbhrrhghfllhrghzmlnltgdsqlgbvnlchgcbqlpqptdwmsjpqrprlhqmstzjfnzgbgvlfshwpcrgzcqmmfwvhwlsdvplmdgrtfrjwpfvhnjqdbwsfcqhchstlzfpdljgvcqsfcnqccnpmvsqbmwjtzwhpglhbjwzmvgqwjhvwfhnlbtsgljzmlldcpjwdcfppmnmphdmhpmdqwwtjtrdhlrjlvzgpbcgvwcmtclgpqwhtpbdtdbdscfzbrzmgjlbppcnvphphfnvzdzzlvfsvsgbgqcnlqwmtcrpwzcvnmnvtmcdsstvqpqzdpvtdsbvtwhdvgzqmzvwlspgbwmlnsrqdqnjwrllncflqsrzdqtjqvpnpjlqfwqtlqfqwlltszcwtpmjtldjgvmvptpmzqhwmlvjgnntpvcslmhlhdbjtjjnvsbnzwtdclwbzrvlqzjljtbdjvwgbwcltvnbhfvtgqrbmzbbfvldhmdvfvtlqglnblfmmpjqmzlnfjltsqdrgmlhbhngrrmhnjndggsdcfmtssmmtmzvhzrmwjsqjcvbsgqgtvdmvqlvlrvglrtlshfdmfrmljjggwjbcsztsjmjftcbbjwrmgqvssrvtgzcgthtlgsjspfmdgwptjdrbswqlpfsbtjlnhllmjpbfhgpfcprpdnqqvqdmcbqhbcqtstvnjdzwzwvhhwmcvcfbdwczpwpdhvnstjnbblbprzsccmwrzgfhmrpvzfztvsrtncdhzhptpfqtnqwvqtwdpvcqztgjgrcbdnvqftphtfbtqdhrffdrdmwsbpvhshzvjbvsrljnzddmmfgcnfdssvzdbsfwmfjsdnslbrqsqfwfqbqszjwvgcjbhrfjcnlfhzvhcbbbpmhhvjdtgrqlcchqtvnhlrgtssllvgcdjrlzlzfbrrrvwvvcgfjdlpscsqljmmwmvwnvrgdmgcbvmwmgprbfrbgptlfjbhrmczwrzwbdhdvtgvldnzfgcngdfhbgqsfzlrbwbvdflrrsrcwthjzvgmdtndgtsjtswfbdqvcjtsdvrvqpmmdlghsdbzplgpfnstplpjdvttgzmnhssftqcqjvdvvdrmltbrpsjvqwbljrqrtqldzbwzznsdstvmdzbrvvtgrrphmbrzwnjbmqvfhljcdlbzqtcbjsfqdqcr diff --git a/6/day6.css b/6/day6.css new file mode 100644 index 0000000..10f1858 --- /dev/null +++ b/6/day6.css @@ -0,0 +1,122 @@ +body { + text-align: center; + margin: 0; + padding: 0; + color: #ffffff; + font-family: sans-serif; +} + +h1, h3, p, pre { + margin: 0; + padding: 0; +} + +a { + color: #009900; +} +.footer { + position: absolute; + bottom: 0; + width: 100%; +} + +body { + background: linear-gradient(to bottom, #880000, #aa0000); +} + +pre { + background-color: #990000; + color: #009900; + font-family: monospace; + padding: 1em; + white-space: pre-wrap; +} + +h1, h3 { + color: #ffffff; +} + +.clickable { + background-color: #009900; + border: none; + color: #ffffff; + padding: 0.5em 1em; + margin: 0.5em; + cursor: pointer; +} + +.snow { + position: fixed; + width: 100%; + height: 100%; + pointer-events: none; + z-index: 100; +} + +.snow__flake { + position: absolute; + top: -50px; + left: -50px; + right: -50px; + bottom: -50px; + width: 10px; + height: 10px; + background: #fff; + border-radius: 50%; + animation: snowAnimation 3s linear infinite; +} + +.snow__flake:nth-child(0) { + animation-delay: 0s; +} + +.snow__flake:nth-child(1) { + animation-delay: 0.2s; +} + +.snow__flake:nth-child(2) { + animation-delay: 0.4s; +} + +.snow__flake:nth-child(3) { + animation-delay: 0.6s; +} + +.snow__flake:nth-child(4) { + animation-delay: 0.8s; +} + +.snow__flake:nth-child(5) { + animation-delay: 1s; +} + +.snow__flake:nth-child(6) { + animation-delay: 1.2s; +} + +.snow__flake:nth-child(7) { + animation-delay: 1.4s; +} + +.snow__flake:nth-child(8) { + animation-delay: 1.6s; +} + +.snow__flake:nth-child(9) { + animation-delay: 1.8s; +} + +.snow__flake:nth-child(10) { + animation-delay: 2s; +} + +@keyframes snowAnimation { + 0% { + transform: translateY(0) rotate(0deg); + opacity: 1; + } + 100% { + transform: translateY(1000px) rotate(360deg); + opacity: 0; + } +} diff --git a/6/day6.html b/6/day6.html new file mode 100644 index 0000000..3f433ef --- /dev/null +++ b/6/day6.html @@ -0,0 +1,59 @@ + + + + + + + + + + + +

ElvCom SC-22 Stream Analyzer

+

This tool will help you find packets and messages in streams from your ElvCom SC-22.

+ +
+    MMMMMMMMMMMMMNKXWMMMMMMMMMMMMMMMMMMMMMMM
+    MMMMMMMMMMMMNx:lKMMMMMMMMMMMMMMMMMMMMMMM
+    MMMMMMMMMMMMNd;:0MMMMMMMMMMMMMMMMMMMMMMM
+    MMMMMMMMMMMMXd,;OMMMMMMMMMMMMMMMMMMMMMMM
+    MMMMMMMMMMMMXo,;kMMMMMMMMMMMMMMMMMMMMMMM
+    MMMMMMMMMMMMXo,,xWMMMMMMMMMMMMMMMMMMMMMM
+    MMMMMMMMMMMMKl;,lkkkOOOO0XWMMMMMMMMMMMMM
+    MMMMMMMMMMMMOc;lO00000Okl:xNMMMMMMMMMMMM
+    MMMMMMMMMMMWk;;xKkxxxxxOx,cKMMMMMMMMMMMM
+    MMMMMMMMMMMWx;,dkccccc:oo,:0MMMMMMMMMMMM
+    MMMMMMMMMMMWk;'lkxddddddc'cKMMMMMMMMMMMM
+    MMMMMMMMMMMMO:';dxxxkxxd;.lXMMMMMMMMMMMM
+    MMMMMMMMMMMMO;..';,,,;;'..lXMMMMMMMMMMMM
+    MMMMMMMMMMMMk,............cKMMMMMMMMMMMM
+    MMMMMMMMMMMWk,............cKMMMMMMMMMMMM
+    MMMMMMMMMMMWx,......  ....:KMMMMMMMMMMMM
+    MMMMMMMMMMMM0:...........'dWMMMMMMMMMMMM
+    MMMMMMMMMMMMNd,..........:0MMMMMMMMMMMMM
+    MMMMMMMMMMMMMN0dooooooodkKWMMMMMMMMMMMMM
+    MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
+  
+
+
penis
+
+
+
+
+
+
+
+
+
+
+
+

Select Stream-File:

+ +
+

Output:

+

Load a file and press the button to find the packet and

+ + + + + diff --git a/6/day6.js b/6/day6.js new file mode 100644 index 0000000..c14c29f --- /dev/null +++ b/6/day6.js @@ -0,0 +1,60 @@ +let output = document.getElementById("output"); +let input; +let fileContent; + +function readFile(input) { + let file = input.files[0]; + console.log("Reading file", file) + let fileReader = new FileReader(); + fileReader.readAsText(file); + fileReader.onload = function() { + fileContent = fileReader.result; + }; + fileReader.onerror = function() { + alert(fileReader.error); + }; +} + +let start = document.getElementById("start"); +start.addEventListener("mouseover", () => { + start.innerHTML = "JUST DO IT" +}); +start.addEventListener("mouseout", () => { + start.innerHTML = "Read File" +}); +start.addEventListener("click", () => { + findPosition(fileContent) +}); + + +function findPosition(line) { + let i = 4; + let packetStart = line.substring(0, 4); // should always contain 4 chars + let messageStart = line.substring(0, 14); // should always contain 14 chars + let packetStartI = 0; + while (i < line.length) { + console.log(i, "Char", line[i], "chars:", packetStart); + // if packetStart not found, look for packet start + if (packetStartI == 0) { + if (/(.).*\1/.test(packetStart)) { // if unique + packetStart = packetStart.substring(1, 4) + line[i]; + } + else { + packetStartI = i; + messageStart = line.substring(i, i + 14); + } + } + else { // search for message start + if (/(.).*\1/.test(messageStart)) { // if unique + messageStart = messageStart.substring(1, 14) + line[i]; + } + else { + output.innerHTML = "Found the first packet start marker at position " + packetStartI + ", the marker is " + packetStart + "
" + + "Found the first message start marker at position " + i + ", the marker is " + messageStart + "\n"; + return; + } + } + i++; + } + +}