🌟 Advent of Code (AoC) 2020 🌟

PermalÀnk
Datavetare ★
●

Dag: 3
SprÄk: Swift
Lösning: GitHub

Nu tror jag konfigurationen för hjÀlpbiblioteket Àr uppsatt pÄ "rÀtt sÀtt", d.v.s. det gÄr att git-clone repo för lösningarna och bara kör "swift run" för den dag man till testa. Swift verkar i praktiken förutsÀtta att man anvÀnder git.

Hur gör ni andra med tester? BÄde förra Äret med Rust och nu med Swift passar jag pÄ att lÀra mig de inbyggda funktionerna för unit-tester genom att skriva sÄdana med exemplen man fÄr i texten "swift test" kör testet (input.txt Àr min input och test.txt Àr det man fÄr som exempel).

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

PermalÀnk
Medlem ★
●
Skrivet av Yoshman:

Hur gör ni andra med tester? BÄde förra Äret med Rust och nu med Swift passar jag pÄ att lÀra mig de inbyggda funktionerna för unit-tester genom att skriva sÄdana med exemplen man fÄr i texten "swift test" kör testet (input.txt Àr min input och test.txt Àr det man fÄr som exempel).

Jag har tvÄ templates (en för lösningen och en för att testa). Hittills har jag provat att koda ihop min lösning; fungerar den skriver jag inget test, men fÄr jag fel sÄ kopierar jag in exemplet frÄn sidan och kodar vidare tills testen gÄr igenom.

Edit.
Exempel frÄn idag.

Visa signatur

:(){ :|:& };:

đŸŠđŸ»â€â™‚ïž   đŸšŽđŸ»â€â™‚ïž   đŸƒđŸ»â€â™‚ïž   ☕

PermalÀnk
Medlem ★
●

Dag: 3
SprÄk: JavaScript

Brist pÄ tid, sÄ fortsÀtter med JavaScript. AnvÀnder inte alla nya fancy saker (alltsÄ saker som tillkommit de senaste 15 Ären...), sÄ blir vÀl i princip C i JS... Men i gengÀld förhoppningsvis relativt lÀsbart. Och sÀga vad man vill om JS, men det Àr vÀldigt enkelt att jobba i.

Testar genom att skapa en testInput.txt med exemplet man fÄr frÄn sidan. TyvÀrr blir det formaterat lite annorlunda Àn input.txt nÀr man kopierar och klistrar in (olika antal tecken för radbryt), sÄ mapWidth i övningen nedan krÀver lite modifiering. (Och ja, det gÄr sÄ klart att fixa, men...)

(function () { fetchInput(); async function fetchInput() { var response = await fetch('input.txt'); var text = await response.text(); calculatePartOne(text); calculatePartTwo(text); } function calculatePartOne(text) { var res = calculateSlope(text, 3, 1); console.log("res: " + res); } function calculatePartTwo(text) { var res = calculateSlope(text, 1, 1) * calculateSlope(text, 3, 1) * calculateSlope(text, 5, 1) * calculateSlope(text, 7, 1) * calculateSlope(text, 1, 2); console.log("res: " + res); } function calculateSlope(text, right, down) { var lines = text.split('\n'); var nrOfTrees = 0; var mapWidth = lines[0].length; var actualRight = right / down; for (var i = 0; i < lines.length; i++) { if (lines[i].length > 0) { if (lines[i][(i * actualRight) % mapWidth] == "#") { nrOfTrees++; } } } return nrOfTrees; } } )();

Dold text
PermalÀnk
Medlem ★
●

Awk kÀmpar pÄ in i dag 3

part1$ <in awk '{ split($0, s, ""); print s[(NR - 1) * 3 % length(s) + 1] }' | sed '/\./d' | wc -l part2$ <in awk 'function f(x, y) { split($0, s, ""); print x":"y FS s[((NR - 1) / y) * x % length(s) + 1] } { f(1, 1); f(3, 1); f(5, 1); f(7, 1) } !((NR - 1) % 2) { f(1, 2) }' | awk '$2 == "#" { a[$1]++ } END { r = 1; for (n in a) { r *= a[n] } print r }'

Dold text
Visa signatur

"Some poor, phoneless fool is probably sitting next to a waterfall somewhere, totally unaware of how angry and scared he's supposed to be." - Duncan Trussell

PermalÀnk
Medlem
●
Skrivet av Yoshman:

Dag: 3
SprÄk: Swift
Lösning: GitHub

Nu tror jag konfigurationen för hjÀlpbiblioteket Àr uppsatt pÄ "rÀtt sÀtt", d.v.s. det gÄr att git-clone repo för lösningarna och bara kör "swift run" för den dag man till testa. Swift verkar i praktiken förutsÀtta att man anvÀnder git.

Hur gör ni andra med tester? BÄde förra Äret med Rust och nu med Swift passar jag pÄ att lÀra mig de inbyggda funktionerna för unit-tester genom att skriva sÄdana med exemplen man fÄr i texten "swift test" kör testet (input.txt Àr min input och test.txt Àr det man fÄr som exempel).

Skriver först enhetstest för indatan i exemplet. Börjar arbeta pÄ min lösning. NÀr testet fungerar kör jag min main som lÀser in input-filen. Om det ser okey ut, submittar jag svaret.

PermalÀnk
Medlem ★
●

Dag: 3
SprÄk: c#

EDIT; StÀdade upp koden en hel del.

static async Task Main(string[] args) { var lines = await File.ReadAllLinesAsync("input.txt"); var t = new int[5]; for (int i = 1; i < lines.Length; i++) { var l = lines[i]; var n = l.Length; if (l[i % n] == '#') { t[0]++; } if (l[(i * 3) % n] == '#') { t[1]++; } if (l[(i * 5) % n] == '#') { t[2]++; } if (l[(i * 7) % n] == '#') { t[3]++; } if (i % 2 == 0) { if (l[(i / 2) % n] == '#') { t[4]++; } } } Console.WriteLine(t[1]); Console.WriteLine(t.Aggregate(1L, (a, b) => a * b)); }

Dold text
PermalÀnk
Medlem ★
●
Skrivet av Flexbert:

Fel indata pÄ sista..

Nvm, jag har nog inte heller sovit.

Nej skamvrÄn för mig, trots att @Yoshman varnade för lÄnga heltal och jag envisas med hÄrd typning sÄ anvÀnda jag int...

PermalÀnk
Medlem
●

NÄgon annan hÀr som tar tillfÀllet i akt att lÀra sig lite Haskell?

Det blir ofta ganska eleganta lösningar, men sÀllan helt lÀttlÀst tycker jag

HÀr Àr ett litet axplock av lösningar jag blivit nöjd med hitintills:

Dag 1:

LĂ€ser helt enkelt in talen i en lista "nums" och skriver ut produkten av paret som summerar till 2020 genom

print $ head [x*y | x <- nums, y <- nums, x+y==2020]

MÄste anvÀnda "head" eftersom man ju hittar tvÄ par, y+x och x+y

Motsvarande för task 2 blir

print $ head [x*y*z | x <- nums, y <- nums, z <- nums, x+y+z==2020]

Dold text

Dag 3, task 1:

LÀser in alla rader förutom den första (dÀr vi ÀndÄ startar i det övre vÀnstra hörnet) i listan "rows". Kan sedan hitta alla "squares", antingen "#" eller ".", genom

squares = zipWith (\s i -> s !! (i `mod` rowLength)) rows [3,6..]
where rowLength = length $ head rows

[3,6..] Àr alltsÄ en oÀndlig datastruktur [3,6,9,12,15..], vilka Àr indexen för vederbörande "square" pÄ varje rad (med modulo radlÀngden).

För att skriva ut antalet trÀd kan man filtrera ut '#' enligt

print $ length [x | x <- squares, x == '#']

Dold text
PermalÀnk
Medlem
●

Riktigt kul grej, precis börjar studera till systemutvecklare sÄ helt ny adventskalenderunderhÄllning för min del

Inte lika snygg som mÄnga andras hÀr, men Àr nöjd med koden

Dag 3

class Program { static List<string> lines = File.ReadAllLines("input.csv").ToList(); static char[,] input = new char[lines.Count, lines[0].Length]; static void Main(string[] args) { for (int i = 0; i < lines.Count; i++) { string temp = lines[i]; for (int j = 0; j < lines[0].Length; j++) input[i, j] = temp[j]; } double result = TreesMan(1, 3); double result2= result * TreesMan(1, 1) * TreesMan(1, 5) * TreesMan(1, 7) * TreesMan(2, 1); Console.WriteLine($"Del 1: {result}\nDel 2: {result2}"); Console.ReadLine(); } static public double TreesMan(int row, int column) { int rowCheck = 0; int colCheck = 0; double count = 0; for (int j = 0; j < input.GetLength(0); j++) { rowCheck += row; colCheck += + column; if (rowCheck >= input.GetLength(0)) break; if (colCheck >= input.GetLength(1)) colCheck += - input.GetLength(1); if (input[rowCheck, colCheck] == '#') count++; } return count; } }

Dold text
PermalÀnk
Medlem ★
●

Hade gÀrna varit med men har för mycket jobb, 12h framför datorn fÄr rÀcka.

PermalÀnk
Medlem ★
●
Skrivet av Baxtex:

Hade gÀrna varit med men har för mycket jobb, 12h datorn fÄr rÀcka.

Men, tvÄ och en halv minut om dagen har du vÀl till övers?

Visa signatur

:(){ :|:& };:

đŸŠđŸ»â€â™‚ïž   đŸšŽđŸ»â€â™‚ïž   đŸƒđŸ»â€â™‚ïž   ☕

PermalÀnk
Medlem ★
●
Skrivet av GLaDER:

Men, tvÄ och en halv minut om dagen har du vÀl till övers?

https://i.imgur.com/5FksA4Y.png

Hehe, ja om man ÀndÄ vore sÄ klipsk.

Personligen brukar jag köra pÄ nÄgot sprÄk jag aldrig anvÀnt, blir nog Rust denna gÄng. Men sparar det till julledigheten.

PermalÀnk
●
Skrivet av Ingetledigtnamn:

Dag 3 gick nÀstan att klara med en Python one-liner. Jag fick köra filinlÀsningen separat, men sedan gick det att ta i ett uttryck. Men nu mÄste jag erkÀnna att det börjar bli write-only-kod. 2:1-steget gjorde att jag fick trixa lite men enumerate och skalfaktorer.

[spoiler]

from numpy import prod slope = ["".join([line.strip()]*75) for line in open("input")] print([prod([sum([slope[y][x * xs] == '#' for x,y in enumerate(range(0, len(slope), ys))]) for ys, xl in enumerate(l) for xs in xl]) for l in [[[], [3]], [[], [1,3,5,7], [1]]]])

Haha körde ocksÄ oneline idag, men var nog sista dagen med oneliner, börjar bli drygt hitta felen

from functools import reduce a = reduce((lambda x, y: x * y),[sum([1 if pos_y%step_y==0 and line[(step_x*int(pos_y/(step_y)))%len(line.rstrip())] == "#" else 0 for pos_y,line in enumerate([line.rstrip() for line in open("input.txt")])]) for step_x,step_y in [(1, 1), (3, 1), (5, 1), (7, 1), (1, 2)]])

Dold text
PermalÀnk
Hedersmedlem ★
●

Dag: 3
SprÄk: Powershell
Lösning: GitHub

Det hÀr var ju inte det minsta invecklat alls. KÀnner mig rÀtt nöjd med hur jag anvÀnde argument-splatting för Part 2, annars sÄ var det ett vÀldigt rakt upp och ner problem att bara lösa.

En sak som störde mig lite Àr att det inte verkar gÄr att göra mer Àn en sak Ät gÄngen i en for-loop i PowerShell? T.ex. i C kan man göra detta:

for (row = 0, col = 0; row < rowCount; row += rowSlope, col += colSlope) { /* ... */ }

Genom att anvÀnda ,-operatorn kan man göra fler Àn en grej i initierings- och itereringsstegen.

Hittar inget motsvarande sÀtt att inkrementera tvÄ variabler i en for-loop. SÄ jag skrev om det som en while-loop istÀllet i Powershell (vilket egentligen blev rÀtt snyggt) men jag undrar om det finns nÄgot sÀtt att göra motsvarande i PS.

Edit: Man kan tydligen göra detta med subexpression-operatorn $()! KÀlla

PermalÀnk
Hedersmedlem ★
●
Skrivet av hultron:

Dag: 3
SprÄk: c#

EDIT; StÀdade upp koden en hel del.

static async Task Main(string[] args) { var lines = await File.ReadAllLinesAsync("input.txt"); var t = new int[5]; for (int i = 1; i < lines.Length; i++) { var l = lines[i]; var n = l.Length; if (l[i % n] == '#') { t[0]++; } if (l[(i * 3) % n] == '#') { t[1]++; } if (l[(i * 5) % n] == '#') { t[2]++; } if (l[(i * 7) % n] == '#') { t[3]++; } if (i % 2 == 0) { if (l[(i / 2) % n] == '#') { t[4]++; } } } Console.WriteLine(t[1]); Console.WriteLine(t.Aggregate(1L, (a, b) => a * b)); }

Dold text

Borde inte den dĂ€r skippa första raden? (Rad 0?) Hur funkar ens den koden? Är det 1-indexerat pĂ„ nĂ„got vĂ€nster?

Annars, intressant lösning eftersom loopen Àr skriven pÄ ett sÄnt sÀtt att du bara behöver iterera över indatat en gÄng. Fast det fimpar du ju tyvÀrr genom att lÀsa in hela filen pÄ en gÄng lÀngst upp i koden. Du skulle kunna iterera rad för rad istÀllet och spara RAM pÄ det.

PermalÀnk
Medlem ★
●
Skrivet av pv2b:

Borde inte den dĂ€r skippa första raden? (Rad 0?) Hur funkar ens den koden? Är det 1-indexerat pĂ„ nĂ„got vĂ€nster?

Annars, intressant lösning eftersom loopen Àr skriven pÄ ett sÄnt sÀtt att du bara behöver iterera över indatat en gÄng. Fast det fimpar du ju tyvÀrr genom att lÀsa in hela filen pÄ en gÄng lÀngst upp i koden. Du skulle kunna iterera rad för rad istÀllet och spara RAM pÄ det.

Uppgiften kollar inga trÀd pÄ första raden, inte mitt pÄhitt...

Bra poÀng med att inte lÀsa in hela filen i ram, det ska jag sÄklart göra :), brydde mig inte allt för mycket om prestandan.

Update; Tar ungefÀr dubbelt sÄ lÄng (0.5ms istÀllet för 0.25ms) tid nÀr jag streamar rad för rad, men visst, minnessnÄlt

PermalÀnk
Medlem ★
●

Dag: 3
SprÄk: Powershell
Lösning:

$geo = Get-Content "input.txt"; $width = $geo[0].ToCharArray().Count; $height = $geo.Count; # Day 3-1 $ystep = 1; $xstep = 3; $trees = 0; $ypos = 0; $xpos = 0; while ($ypos -lt $height) { $lineArray = $geo[$ypos]; if ($lineArray[$xpos] -eq "#") { $trees++; } $ypos += $ystep; $xpos += $xstep; if ($xpos -ge $width) { $xpos -= $width; } } Write-Host "Day3-1: $trees trees"; # Day 3-2 $ysteps = @(1,1,1,1,2); $xsteps = @(1,3,5,7,1); $trees = ,0 * $ysteps.Count; for ($i = 0; $i -lt $ysteps.Count; $i++) { $ypos = 0; $xpos = 0; while ($ypos -lt $height) { $lineArray = $geo[$ypos].ToCharArray() if ($lineArray[$xpos] -eq "#") { $trees[$i]++; } $ypos += $ysteps[$i]; $xpos += $xsteps[$i]; if ($xpos -ge $width) { $xpos -= $width; } } } $trees | % {$ans = 1} {$ans *= $_} Write-Host "Day3-2: $ans";

Dold text
Visa signatur

StationÀra | Define 7 Compact | RM750x White | X570S AERO G | Ryzen 5 5600x | NH-D15 Chromax | Flare X 4x8GB 3200MHz | RTX 4070 Super | MP600 1TB | 980 1TB | A2000 1TB | 970 EVO 500GB | 850 EVO 500GB |
Acer X34A + 2x Dell U2719D | Wave 1 | Arctis Nova Pro Wireless |
Laptop | Macbook Air M1 2020 | 16GB | 256GB |
3dkatten.se

PermalÀnk
Medlem ★
●

Detta har jag glömt bort. Ska se hur lÄngt jag orkar försöka. Ser att jag i alla fall kommer palla dag 1.

Visa signatur

www.fckdrm.com - DRM Ă„r 2024? Ha pyttsan.

PermalÀnk
Medlem ★
●
Skrivet av Poss3:

Riktigt kul grej, precis börjar studera till systemutvecklare sÄ helt ny adventskalenderunderhÄllning för min del

Inte lika snygg som mÄnga andras hÀr, men Àr nöjd med koden

Dag 3

class Program { static List<string> lines = File.ReadAllLines("input.csv").ToList(); static char[,] input = new char[lines.Count, lines[0].Length]; static void Main(string[] args) { for (int i = 0; i < lines.Count; i++) { string temp = lines[i]; for (int j = 0; j < lines[0].Length; j++) input[i, j] = temp[j]; } double result = TreesMan(1, 3); double result2= result * TreesMan(1, 1) * TreesMan(1, 5) * TreesMan(1, 7) * TreesMan(2, 1); Console.WriteLine($"Del 1: {result}\nDel 2: {result2}"); Console.ReadLine(); } static public double TreesMan(int row, int column) { int rowCheck = 0; int colCheck = 0; double count = 0; for (int j = 0; j < input.GetLength(0); j++) { rowCheck += row; colCheck += + column; if (rowCheck >= input.GetLength(0)) break; if (colCheck >= input.GetLength(1)) colCheck += - input.GetLength(1); if (input[rowCheck, colCheck] == '#') count++; } return count; } }

Dold text

TACK!

Jag slog mig blodig mot hur i helskotta jag skulle fÄ till en gridmap över alla vÀrden som jag kunde anropa pÄ ett bra sÀtt och sprang djupt ner i ett hÄl av att försöka fÄ en List<char[]> (vilket inte ens verkar finnas?) följt av typ en string[] som bestod av char[] men du petade mig i rÀtt riktning.

Hade inte en aning om char[,] men lÀr aldrig glömma den nu! LÀrde mig Àven skillnaden pÄ List.Count och List.Lenght.

Hade nÀra nog exakt samma logik som dig för sjÀlva hittandet av alla trÀd men min input var bara blaj.

FortsÀtta gÀrna posta dina lösningar sÄ vi mindre begÄvade kan ta del av dom

Med det sagt postar jag inte min lösning eftersom det enda som skiljer Àr variabelnamnen i logiken, sÄ likt var det

Visa signatur

PrimÀr: R9 3900X | ASUS X570-F Gaming | NH-D15 | 64GB@3200MHz | RTX 3080 10GB | Seasonic 850W | Fractal Define R6 |
Gamla bettan: i5 750@3.8GHz | 8GB | HD5770 | Corsair VS 550W | FD R2 |

PermalÀnk
Medlem
●

Dag 3 i Rust.

pub fn run<R>(input: R) where R: std::io::BufRead, { let map: Vec<String> = input.lines().filter_map(|l| l.ok()).collect(); // let input = vec![(3, 1)]; let input = vec![(1, 1), (3, 1), (5, 1), (7, 1), (1, 2)]; let result = input .iter() .map(|&i| count_trees(&map, i)) .fold(1usize, |acc, x| acc * x); println!("Svar: {}", result); } fn count_trees(map: &[String], (right_step, down_step): (usize, usize)) -> usize { let mut pos = 0; let mut trees = 0; for m in map.iter().step_by(down_step) { trees += (m.chars().nth(pos) == Some('#')) as usize; pos = next_pos(m, pos, right_step); } trees } fn next_pos(line: &str, number: usize, steps: usize) -> usize { (number + steps) % line.len() }

Dold text
Visa signatur

AMD Ryzen 3700X, Gigabyte Elite X570, 32GB Ballistix Sport, NH-D15S, SAPPHIRE NITRO+ RX 7900 XTX, Corsair AX760, LG OLED C2 42"

PermalÀnk
Datavetare ★
●

Dag: 3
SprÄk: Clojure

(def input (clojure.string/split-lines (slurp "input.txt"))) (defn count-trees [m right down] (def width (count (nth m 0))) (:trees (reduce (fn [acc row] (def valid? (= 0 (mod (:y acc) down))) {:x (if valid? (mod (+ (:x acc) right) width) (:x acc)) :y (inc (:y acc)) :trees (+ (:trees acc) (if (and valid? (= \# (nth row (:x acc)))) 1 0))}) {:x 0 :y 0 :trees 0} m))) (println "Part 1 :" (count-trees input 3 1)) (println "Part 2 :" (reduce * 1 (map (fn [slope] (count-trees input (nth slope 0) (nth slope 1))) [[1 1] [3 1] [5 1] [7 1] [1 2]])))

Dold text

Pillade med Clojure en del för ett par Är sedan. I teorin Àr det vÀldigt vettigt för multicore-programmering, i praktiken Àr prestanda inte Clojures bÀsta gren... SÄ har inte blivit nÄgot och man mÄste hÄlla igÄng ett sprÄk, vissa saker fanns kvar i bakhuvudet men de flesta detaljerna Àr borta.

Blir bara Swift hĂ€danefter detta Ă„r. Är svĂ„rt att hitta tiden dock

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

PermalÀnk
●

Dag: 3
SprÄk: Nim
Lösning: Github

Mitt första Är jag gör AoC sÄ fÄr se hur lÄngt man kan ta sig innan det blir för svÄrt. Kör med ett programmeringssprÄk som heter Nim som jag tycker Àr trevligt att hÄlla pÄ med.

PermalÀnk
Medlem ★
●

Kul trÄd! Provade pÄ första uppgiften i Kotlin. TvÄ olika algoritmer nÀr jag hade valt den andra som alla andra.

Dag: 1
SprÄk: Kotlin
Lösning: GitHub

Löste Àven första delen av dag 2 hÀr, orkade inte med andra delen nu.

Visa signatur

| Mobo: Gigabyte X570 GAMING X | CPU: AMD Ryzen 9 3900X + Dark Rock 4 | RAM: 32GB @ 3000MHz | GPU: Gigabyte RTX 3080 OC | PSU: Seasonic GX 850W | Chassi: NZXT S340 Elite Matte Black | M.2: Samsung 970 Evo 500GB & 1000GB | HDD: 4TB | Monitors: Acer Predator X34 GS & Acer XB270HU |

PermalÀnk
●

UpptÀckte idag. Har stött pÄ den nÄgot Är tidigare med aldrig testat. Day 1 och Day 2 gjorda i C++. Hyfsat roligt Àn sÄlÀnge, gissar att detta blir rÀtt knepigt rÀtt snabbt dock.

PermalÀnk
Medlem ★
●

Dagens var ÀndÄ lite klurigare Àn de tidigare. Mest i mÀngd kod dÄ, det mesta var ju bara massa if-satser.

PermalÀnk
Medlem
●
Skrivet av sassa46:

Dagens var ÀndÄ lite klurigare Àn de tidigare. Mest i mÀngd kod dÄ, det mesta var ju bara massa if-satser.

Yup, avvaktar nog med att dela min lösning. Den Àr helt olÀslig.

PermalÀnk
Medlem
●
Skrivet av Daz:

TACK!

Jag slog mig blodig mot hur i helskotta jag skulle fÄ till en gridmap över alla vÀrden som jag kunde anropa pÄ ett bra sÀtt och sprang djupt ner i ett hÄl av att försöka fÄ en List<char[]> (vilket inte ens verkar finnas?) följt av typ en string[] som bestod av char[] men du petade mig i rÀtt riktning.

Hade inte en aning om char[,] men lÀr aldrig glömma den nu! LÀrde mig Àven skillnaden pÄ List.Count och List.Lenght.

Hade nÀra nog exakt samma logik som dig för sjÀlva hittandet av alla trÀd men min input var bara blaj.

FortsÀtta gÀrna posta dina lösningar sÄ vi mindre begÄvade kan ta del av dom

Med det sagt postar jag inte min lösning eftersom det enda som skiljer Àr variabelnamnen i logiken, sÄ likt var det

Ja 2D arrayer Àr fina grejer det, kul att min kod var till hjÀlp för dig
Lyckas jag med dagens pussel sÄ postar jag

PermalÀnk
Medlem ★
●
Skrivet av GLaDER:

Dag: 3
SprÄk: Go
Lösning: GitHub

Glöm inte att kika in pÄ vÄr leaderboard: 115994-59705230

Vilken skitmorgon. Jag löste problemet "i huvut" direkt.

  1. LÀs in som en [][]string för att kunna iterera smidigt (tog 4 minuter att skriva)

  2. Loopa nedÄt och Ät höger, anvÀnd mod för att "gÄ över till nÀsta grid"

  3. Gör lösningen flexibel, för Part 2 kommer sÀkert handla om att variera input size eller fÀrdvÀg

SÄ satt jag dÀr, med rad 35 i koden ovan...

r = (r + right) % len(grid[0]) # index out of bounds r = (r + right) % len(grid[0])-1 # fel svar r = (r + right) % len(grid[0]-1) # fel svar r = (r + right) % len(grid[0]-2) # fel svar

Nu började jag bli irriterad och la sÀkert 30 minuter pÄ att skriva testkoden och kod för att printa progress. Jag förstod verkligen inte varför det inte fungerade. Tillslut tröttnade jag och skrev om raden.

r = (r + right) % len(grid[0]) # RÄTT -- men jag skrev ju det frĂ„n början!?

Jag mÄste ha gjort fel med down-biten i mitt absolut första försök, och missat att det var dÀr index-felet var. Vansinnigt irriterande...........

Aja, Part 2 var ju enkel iaf....

Dold text

Dag: 4
SprÄk: Go
Lösning: GitHub

Glöm inte att kika in pÄ vÄr leaderboard: 115994-59705230

"NICE!", tÀnkte jag, "hÀr kan jag ju prova hur struct fungerar i Go!"

type Passport struct { byr int iyr int ... }

Men sen fattade jag inte alls hur jag skulle anvÀnda den Till exempel fungerade inte:

p := Passport{} p.key = value

DÀr key och value var variabler som jag parsade ut. Fick nÄgot felmeddelande om att p inte hade nÄgon metod key, vilket jag antar Àr att vÀnta sig; men ÀndÄ.

Jag tror det tog 45 minuter innan jag övergav min struct-idé och gjorde en enkel map istÀllet (lÀnk). Det tog ocksÄ pinsamt lÄng tid innan jag fattade att jag kunde splitta input pÄ "\n\n", och inte behövde göra en loop som appendade till en lista och bytte index vid blankrad.

Till syvende och sist Àr jag ganska nöjd med min lösning. Det finns saker att slipa pÄ, och lösningen Àr inte sÀrskilt Go:ig, men den fungerar

Dold text
Visa signatur

:(){ :|:& };:

đŸŠđŸ»â€â™‚ïž   đŸšŽđŸ»â€â™‚ïž   đŸƒđŸ»â€â™‚ïž   ☕

PermalÀnk
Medlem
●
Skrivet av adrimur:

NÄgon annan hÀr som tar tillfÀllet i akt att lÀra sig lite Haskell?

Dag 1:

LĂ€ser helt enkelt in talen i en lista "nums" och skriver ut produkten av paret som summerar till 2020 genom

print $ head [x*y | x <- nums, y <- nums, x+y==2020]

MÄste anvÀnda "head" eftersom man ju hittar tvÄ par, y+x och x+y

Motsvarande för task 2 blir

print $ head [x*y*z | x <- nums, y <- nums, z <- nums, x+y+z==2020]

Dold text

Snyggt! Jag kör Scala. Haskell ligger pÄ min todo lista, men det Àr en diger lista. Kanske bara tillfÀllet i akt att lÀra mig Cats, ett categori-teori baserat library för ren funktionell programmering. Ganska Hanskell-inspirarerat misstÀnker jag.
https://typelevel.org/cats/

Min dag 1 task 2 blev likartad, typ

(for {
x <- nums
y <- nums
z <- nums
if (x+y+z == 2020)
} yield (Bigint(x) * BigInt(y) * BigInt(z))).head

Dold text

Dag 4 blev visst regex repetitionsdagen.

PermalÀnk
Medlem ★
●

Dag 4, Python
Nu blev det ingen one-liner, men hyfsat kompakt

import re ds = [{}] for line in [line.strip() for line in open("input")]: if not line: ds.append({}) for k,v in [item.split(':') for item in line.split()]: ds[-1][k] = v n = {'byr' : lambda v : 1920 <= int(v) and int(v) <= 2002, 'iyr' : lambda v : 2010 <= int(v) and int(v) <= 2020, 'eyr' : lambda v : 2020 <= int(v) and int(v) <= 2030, 'hgt' : lambda v : ((v[-2:] == 'in' and 59 <= int(v[:-2]) and int(v[:-2]) <= 76) or (v[-2:] == 'cm' and 150 <= int(v[:-2]) and int(v[:-2]) <= 193)), 'hcl' : lambda v : re.match('#[0-9a-fA-F]{6}',v), 'ecl' : lambda v : v in ['amb', 'blu', 'brn', 'gry', 'grn', 'hzl', 'oth'], 'pid' : lambda v : re.match('^\d{9}$', v)} print([sum([all([k in d for k n]) and all([n[k](d[k]) for k in n]) if v else True for d in ds]) for v in [False, True]])

Dold text