đŸ•Żïž Advent of Code 2019 đŸ•Żïž

PermalÀnk
Datavetare ★
●

Rust - dag 4

Rust-traggladet gÄr lite lÀttare för varje dag, men om man kör AoC för att lÀra sig ett sprÄk kan det nog vara bÀttre att inte göra det i december. KÀnner en viss frustration över att saker har en idé om hur de ska lösas snubblar pÄ att man inte kan sprÄket. Tror den aspekten kanske bli mindre om man sitter i lugn och ro vid senare tillfÀlle.

Men nog om det, sagt att jag ska köra Rust sÄ fÄr hÄlla mig till det

use super::Solution; use std::ops::RangeInclusive; const PIN_DIGITS: usize = 6; type Pin = u32; // State required for solve day 4 pub struct State { candidate_pins: RangeInclusive<Pin>, } fn fill_digits(digits: &mut [u8; PIN_DIGITS], pin: &Pin, depth: usize) -> Pin { if depth < digits.len() { let d = fill_digits(digits, pin, depth + 1); digits[depth] = (d % 10) as u8; d / 10 } else { *pin } } // Transforms 123456 into [1, 2, 3, 4, 5, 6] fn to_digits(pin: &Pin) -> [u8; PIN_DIGITS] { let mut digits = [0; PIN_DIGITS]; fill_digits(&mut digits, pin, 0); digits } fn has_pair(pin: &Pin) -> bool { to_digits(pin) .iter() .fold((false, 10), |acc, &digit| (acc.0 || acc.1 == digit, digit)) .0 } fn not_descending(pin: &Pin) -> bool { to_digits(pin) .iter() .fold((true, 0), |acc, &digit| (acc.0 && acc.1 <= digit, digit)) .0 } fn has_strict_pair(pin: &Pin) -> bool { to_digits(pin) .iter() .fold(&mut [0; 10], |cnt, &digit| { cnt[digit as usize] = cnt[digit as usize] + 1; cnt }) .iter() .any(|&count| count == 2) } impl Solution for State { fn part1(&self) -> String { self.candidate_pins .clone() .filter(not_descending) .filter(has_pair) .count() .to_string() } fn part2(&self) -> String { self.candidate_pins .clone() .filter(not_descending) .filter(has_strict_pair) .count() .to_string() } } pub fn solution(lines: Vec<&str>) -> Box<dyn Solution> { let mut it = lines[0].split("-").map(|s| s.parse::<Pin>().unwrap()); Box::new(State { candidate_pins: it.next().unwrap()..=it.next().unwrap(), }) }

Dold text

Tid att köra hela programmet (bÄda lösningarna)
18 ms pÄ 9900K
23 ms pÄ 3900X

kjonsson@ryzen:~/advent-of-code-2019$ ./target/release/aoc2019 4 src/day4/input.txt
đŸ•Żïž Part 1: 2050
đŸ•Żïž Part 2: 1390
⌚ Took : 23 ms
---
kjonsson@coffee-lake:~/advent-of-code-2019$ ./target/release/aoc2019 4 src/day4/input.txt
đŸ•Żïž Part 1: 2050
đŸ•Żïž Part 2: 1390
⌚ Took : 18 ms

BÄda kör Linux och parsning av input Àr inte medrÀknad, men det tar bara ~1-2ms
Visa signatur

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

PermalÀnk
Datavetare ★
●

C - dag 4

Kunde inte lĂ„ta bli att testa vad man fĂ„r för hastighet i C, framförallt hur det stĂ„r sig mot Rust. Är absolut inte Ă€pplen mot Ă€pplen dĂ„ man typiskt aktivt undviker allt som har med dynamisk minne i C!

#include <stdbool.h> #include <stdint.h> #include <stdio.h> #define BEGIN 128392 #define END 643281 #define PIN_DIGITS 6 typedef struct { uint8_t d[PIN_DIGITS]; } pin_t; void inc(pin_t *pin) { size_t idx = PIN_DIGITS - 1; while (++pin->d[idx] == 10) pin->d[idx--] = 0; } bool not_descending(const pin_t *pin) { for (size_t idx = 1; idx < PIN_DIGITS; idx++) if (pin->d[idx - 1] > pin->d[idx]) return false; return true; } bool has_pair(const pin_t *pin) { for (size_t idx = 1; idx < PIN_DIGITS; idx++) if (pin->d[idx - 1] == pin->d[idx]) return true; return false; } bool has_strict_pair(const pin_t *pin) { uint8_t cnts[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; for (size_t idx = 0; idx < PIN_DIGITS; idx++) cnts[pin->d[idx]]++; for (size_t idx = 0; idx < 10; idx++) if (cnts[idx] == 2) return true; return false; } uint32_t pin_init(pin_t *pin, uint32_t val, uint32_t depth) { if (depth < PIN_DIGITS) { uint32_t d = pin_init(pin, val, depth + 1); pin->d[depth] = d % 10; return d / 10; } return val; } unsigned solve_with_rule(bool (*rule)(const pin_t *)) { unsigned cnt = 0; size_t range = END - BEGIN; pin_t pin; pin_init(&pin, BEGIN, 0); do { if (not_descending(&pin) && rule(&pin)) cnt++; inc(&pin); } while (range-- > 0); return cnt; } int main() { printf("Part 1: %u\n", solve_with_rule(has_pair)); printf("Part 2: %u\n", solve_with_rule(has_strict_pair)); }

Orkar inte skriva nÄgon parsning eller infrastruktur like den jag har i Rust dÀr tanken Àr ett program som kan lösa alla problem i slutÀndan, detta blir nog första och enda C lösningen för min del

HÀr tog det 6 ms att lösa bÄda problemen pÄ i9-9900K (rent tekniskt Àr det en Xeon E-2288G, men det Àr i prakten en i9-9900K med ECC stöd)

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
●

Dag: 4
SprÄk: Python
Lösning: Del 1

rangen = [] antal = 781585-265275 def createList(): startsiffra = 265275 for number in range(antal): rangen.append(startsiffra) startsiffra = startsiffra+1 def funktion6digits(): cnt = 0 for numbers in range(antal): if rangen[numbers] > 100000: #Behovs ej hundra = rangen[numbers]/10 first = hundra/10000 second = hundra/1000%10 third = hundra/100%10 fourth = hundra/10%10 fifth = hundra%10 last = rangen[numbers]%10 if first == second and first <= second and second <= third and third <= fourth and fourth <= fifth and fifth <= last and last > 0: cnt = cnt + 1 elif second == third and first <= second and second <= third and third <= fourth and fourth <= fifth and fifth <= last and last > 0: cnt = cnt + 1 elif third == fourth and first <= second and second <= third and third <= fourth and fourth <= fifth and fifth <= last and last > 0: cnt = cnt + 1 elif fourth == fifth and first <= second and second <= third and third <= fourth and fourth <= fifth and fifth <= last and last > 0: cnt = cnt + 1 elif fifth == last and first <= second and second <= third and third <= fourth and fourth <= fifth and fifth <= last and last > 0: cnt = cnt + 1 print cnt createList() funktion6digits()

Dold text
PermalÀnk
Medlem
●

Dag: 4
SprÄk: Python/regex
Lösning: Del 1 & 2

import re with open('input04.txt') as file: bounds = list(map(int, file.read().split('-'))) count = 0 for i in range(bounds[0], bounds[1]): if all(re.search(regex, str(i)) for regex in [r'^\d{6}$', r'(\d)\1+', r'^0*1*2*3*4*5*6*7*8*9*$']): count += 1 print(count)

Del 1

import re with open('input04.txt') as file: bounds = list(map(int, file.read().split('-'))) count = 0 for i in range(bounds[0], bounds[1]): if all(re.search(regex, str(i)) for regex in [r'^\d{6}$', r'^(\d)*(?!\1)(\d)\2{1}(?!\2)', r'^0*1*2*3*4*5*6*7*8*9*$']): count += 1 print(count)

Del 2
Dold text

Kul att leka lite med regex, men speciellt snabbt blir det inte.

PermalÀnk
Medlem ★
●

Dag: 4
SprÄk: Python
Lösning:
Del 1

def create_candidate_list(candidate): lst = list(candidate) return lst def check_no_zeroes(candidate): if "0" in candidate: return False else: return True def check_double(candidate): pos = 5 while pos != 0: if int(candidate[pos]) == int(candidate[pos - 1]): return True pos -= 1 return False def check_not_decreasing(candidate): pos = 0 while pos != 5: if not int(candidate[pos]) <= int(candidate[pos + 1]): return False pos += 1 return True def main(): start = 124075 stop = 580769 passwords = [] #since starting point doesn't meet requirements we run range from start->stop for candidate in range(start,stop): test_string = str(candidate) test_list = create_candidate_list(test_string) if check_double(test_list) == True and check_not_decreasing(test_list) == True and check_no_zeroes(test_list) == True: print(candidate) passwords.append(candidate) print(len(passwords)) if __name__ == "__main__": main()

Inspirerad av @Yoshman gjorde jag denna pÄ lunchen. De första funktionerna Àr meningslösa men jag Àr nybörjare sÄ blir mycket fluff nÀr jag skriver

Del 2

def create_candidate_list(candidate): lst = list(candidate) return lst def check_no_zeroes(candidate): if "0" in candidate: return False else: return True def check_alone_double(candidate): pos = 1 persona_non_grata = [] while pos != 6: if pos == 5: if int(candidate[pos]) == int(candidate[pos - 1]): if candidate[pos] not in persona_non_grata: return True else: if int(candidate[pos]) == int(candidate[pos - 1]) and int(candidate[pos]) != int(candidate[pos + 1]): if candidate[pos] not in persona_non_grata: return True elif int(candidate[pos]) == int(candidate[pos - 1]) and int(candidate[pos]) == int(candidate[pos + 1]): persona_non_grata.append(candidate[pos]) pos += 1 return False def check_not_decreasing(candidate): pos = 0 while pos != 5: if not int(candidate[pos]) <= int(candidate[pos + 1]): return False pos += 1 return True def main(): start = 124075 stop = 580769 passwords = [] #since starting point doesn't meet requirements we run range from start->stop for candidate in range(start,stop): test_string = str(candidate) test_list = create_candidate_list(test_string) if check_alone_double(test_list) == True and check_not_decreasing(test_list) == True and check_no_zeroes(test_list) == True: passwords.append(candidate) print(len(passwords)) main()

Denna tog mig mycket lÀngre att lösa och check_alone_double() genomgick mÄÄÄÄnga iterationer innan den till slut landade i vad den Àr nu. Hade en fix-ide om att anvÀnda while men Ängrade mig flera gÄnger pÄ vÀgen

def if_check_alone_double(candidate): if candidate[0] == candidate[1] and candidate[0] != candidate[2]: return True elif candidate[1] == candidate[2] and candidate[1] != candidate[3] and candidate[1] != candidate[0]: return True elif candidate[2] == candidate[3] and candidate[2] != candidate[4] and candidate[2] != candidate[1]: return True elif candidate[3] == candidate[4] and candidate[3] != candidate[5] and candidate[3] != candidate[2]: return True elif candidate[4] == candidate[5] and candidate[4] != candidate[3]: return True else: return False

HÀr Àr vad jag skrev ihop för att testa while-loopen mot för att hitta alla fel, skulle tro att det hÀr Àr en mer lÀsbar och bÀttre lösning...
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
●

Det flyter pÄ, det flyter pÄ.

Dag: 4
SprÄk: Haskell

module Day4 (part1, part2) where part1 :: Int part1 = nValids (\s -> increasing s && any ((>= 2) . length) (chunks s)) part2 :: Int part2 = nValids (\s -> increasing s && any ((== 2) . length) (chunks s)) increasing :: String -> Bool increasing s = all (uncurry (<=)) (zip s (tail s)) chunks :: String -> [String] chunks s = snd (foldl f (head s, [[head s]]) (tail s)) where f (c0, ks) c1 = if c1 == c0 then (c0, (c0 : head ks) : tail ks) else (c1, [c1] : ks) nValids :: (String -> Bool) -> Int nValids pred = length (filter (pred . show) (uncurry enumFromTo input)) input :: (Int, Int) input = (178416, 676461)

Dold text
Visa signatur

Arbets- / Spelstation: Arch Linux - Ryzen 5 3600 - RX 7900 XT - 32G DDR4
Server: Arch Linux - Core i5-10400F - 16G DDR4

PermalÀnk
Medlem ★
●
Skrivet av Yoshman:

Kunde inte lĂ„ta bli att testa vad man fĂ„r för hastighet i C, framförallt hur det stĂ„r sig mot Rust. Är absolut inte Ă€pplen mot Ă€pplen dĂ„ man typiskt aktivt undviker allt som har med dynamisk minne i C!

#include <stdbool.h> #include <stdint.h> #include <stdio.h> #define BEGIN 128392 #define END 643281 #define PIN_DIGITS 6 typedef struct { uint8_t d[PIN_DIGITS]; } pin_t; void inc(pin_t *pin) { size_t idx = PIN_DIGITS - 1; while (++pin->d[idx] == 10) pin->d[idx--] = 0; } bool not_descending(const pin_t *pin) { for (size_t idx = 1; idx < PIN_DIGITS; idx++) if (pin->d[idx - 1] > pin->d[idx]) return false; return true; } bool has_pair(const pin_t *pin) { for (size_t idx = 1; idx < PIN_DIGITS; idx++) if (pin->d[idx - 1] == pin->d[idx]) return true; return false; } bool has_strict_pair(const pin_t *pin) { uint8_t cnts[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; for (size_t idx = 0; idx < PIN_DIGITS; idx++) cnts[pin->d[idx]]++; for (size_t idx = 0; idx < 10; idx++) if (cnts[idx] == 2) return true; return false; } uint32_t pin_init(pin_t *pin, uint32_t val, uint32_t depth) { if (depth < PIN_DIGITS) { uint32_t d = pin_init(pin, val, depth + 1); pin->d[depth] = d % 10; return d / 10; } return val; } unsigned solve_with_rule(bool (*rule)(const pin_t *)) { unsigned cnt = 0; size_t range = END - BEGIN; pin_t pin; pin_init(&pin, BEGIN, 0); do { if (not_descending(&pin) && rule(&pin)) cnt++; inc(&pin); } while (range-- > 0); return cnt; } int main() { printf("Part 1: %u\n", solve_with_rule(has_pair)); printf("Part 2: %u\n", solve_with_rule(has_strict_pair)); }

Orkar inte skriva nÄgon parsning eller infrastruktur like den jag har i Rust dÀr tanken Àr ett program som kan lösa alla problem i slutÀndan, detta blir nog första och enda C lösningen för min del

HÀr tog det 6 ms att lösa bÄda problemen pÄ i9-9900K (rent tekniskt Àr det en Xeon E-2288G, men det Àr i prakten en i9-9900K med ECC stöd)

Skrivet av BAseN:

Dag: 4
SprÄk: Python/regex
Lösning: Del 1 & 2

import re with open('input04.txt') as file: bounds = list(map(int, file.read().split('-'))) count = 0 for i in range(bounds[0], bounds[1]): if all(re.search(regex, str(i)) for regex in [r'^\d{6}$', r'(\d)\1+', r'^0*1*2*3*4*5*6*7*8*9*$']): count += 1 print(count)

Del 1

import re with open('input04.txt') as file: bounds = list(map(int, file.read().split('-'))) count = 0 for i in range(bounds[0], bounds[1]): if all(re.search(regex, str(i)) for regex in [r'^\d{6}$', r'^(\d)*(?!\1)(\d)\2{1}(?!\2)', r'^0*1*2*3*4*5*6*7*8*9*$']): count += 1 print(count)

Del 2
Dold text

Kul att leka lite med regex, men speciellt snabbt blir det inte.

Hur fÄr ni de snygga fÀrgerna i koden? Min ser helt livlös ut i jÀmförelse.

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
●

@Daz:

Jag kör Pygments i terminalen.

Kör med följande flaggor:

pygmentize -O style=pastie -f bb din.fil

vilket skapar BB-kod du kan klistra in nÀr du skriver inlÀgget.

Outputen ser ut typ:

[color=#008800][b]with[/b][/color] [color=#003388]open[/color]([color=#dd2200]'input01.txt'[/color]) [color=#008800][b]as[/b][/color] file:
[color=#003388]print[/color]([color=#003388]sum[/color]([[color=#003388]int[/color](i)//[color=#0000DD][b]3[/b][/color] - [color=#0000DD][b]2[/b][/color] [color=#008800][b]for[/b][/color] i [color=#008800]in[/color] file]))

vilket ger:

with open('input01.txt') as file: print(sum([int(i)//3 - 2 for i in file]))

Kod frÄn Dag 1
PermalÀnk
Medlem ★
●
Skrivet av BAseN:

@Daz:

Jag kör Pygments i terminalen.

Kör med följande flaggor:

pygmentize -O style=pastie -f bb din.fil

vilket skapar BB-kod du kan klistra in nÀr du skriver inlÀgget.

Outputen ser ut typ:

[color=#008800][b]with[/b][/color] [color=#003388]open[/color]([color=#dd2200]'input01.txt'[/color]) [color=#008800][b]as[/b][/color] file:
[color=#003388]print[/color]([color=#003388]sum[/color]([[color=#003388]int[/color](i)//[color=#0000DD][b]3[/b][/color] - [color=#0000DD][b]2[/b][/color] [color=#008800][b]for[/b][/color] i [color=#008800]in[/color] file]))

vilket ger:

with open('input01.txt') as file: print(sum([int(i)//3 - 2 for i in file]))

Kod frÄn Dag 1

Nice! Drog ner den nu och uppdaterade min del 1 lösning för dagen. Förhoppningsvis kommer mina framtida lösningar nu alla vara vackert fÀrglagda

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 ★
●

SprÄk: C

Dag 1
Del 1

#include <stdio.h> #include <math.h> int main(int argc, char** argv) { FILE *fptr = NULL; fptr = fopen("data.txt", "r"); double num = 0.0; double sum = 0.0; int i; for (i = 0; i<100; ++i) { fscanf(fptr,"%lf", &num); sum += floor(num/3.0)-2.0; } fclose(fptr); }

Dold text

Del 2

#include <stdio.h> #include <math.h> double recursive_descent(double n, double sum) { if (n <= 5) { return sum; } else { return recursive_descent(floor(n/3.0)-2.0, sum += floor(n/3.0)-2.0); } } int main(int argc, char** argv) { FILE *fptr = NULL; fptr = fopen("data.txt", "r"); double num = 0.0; double sum = 0.0; int i; for (i = 0; i<100; ++i) { fscanf(fptr,"%lf", &num); sum += recursive_descent(num, 0.0); } fclose(fptr); }

Dold text
PermalÀnk
Medlem
●

Dag: 5
SprÄk: Scala (dotty)

ÅteranvĂ€nde inte dag 2 utan skrev en ny java-aktig lösning. Hoppar över att försöka skriva intcode utmaningarna i APL.

@main def day05: Unit = val input = Using.resource(Source.fromFile(filePath.toFile))(_.mkString.split(",")).flatMap(_.toIntOption) def execute(memory: Array[Int], input: Int): Unit = def loop(ip: Int): Unit = val instr = memory(ip) def param(n: Int): Int = (instr / Math.pow(10, (n + 1).toDouble).toInt) % 10 match case 0 => memory(memory(ip + n)) case 1 => memory(ip + n) case mode => throw new Exception(s"invalid address mode: $mode instruction: $instr") def write(n: Int)(value: Int): Unit = memory(memory(ip + n)) = value instr % 100 match case 1 => write(3)(param(1) + param(2)); loop(ip + 4) case 2 => write(3)(param(1) * param(2)); loop(ip + 4) case 3 => write(1)(input); loop(ip + 2) case 4 => println(s"out: ${memory(memory(ip + 1))}"); loop(ip + 2) case 5 => if (param(1) != 0) loop(param(2)) else loop(ip + 3) case 6 => if (param(1) == 0) loop(param(2)) else loop(ip + 3) case 7 => write(3)(if (param(1) < param(2)) 1 else 0); loop(ip + 4) case 8 => write(3)(if (param(1) == param(2)) 1 else 0); loop(ip + 4) case 99 => () case _ => throw new Exception(s"invalid instruction: $instr}") end loop loop(0) end execute execute(input.clone(), 1) execute(input.clone(), 5)

Dold text
PermalÀnk
Medlem ★
●

Jag kÀnner mig av nÄgon onödig anledning rÀtt stressad över att jag slÀpar efter (vilket Àr fullt rimligt med tanke pÄ att jag inte kan nÄgonting i princip).

Blir vÀldigt irriterad nÀr jag har logiken i huvudet men inte har en aning om hur jag kan fÄ ner det i kod. Skriver pseudo-kod för varje steg i och försöker googla mig fram till nÄgon slags lösning, vilket oftast gÄr Ät helvete

Hur brukar ni med lite erfarenhet attackera varje uppgift?

Visa signatur

Grubblare

PermalÀnk
Medlem
●
Skrivet av drwlz:

Jag kÀnner mig av nÄgon onödig anledning rÀtt stressad över att jag slÀpar efter (vilket Àr fullt rimligt med tanke pÄ att jag inte kan nÄgonting i princip).

Blir vÀldigt irriterad nÀr jag har logiken i huvudet men inte har en aning om hur jag kan fÄ ner det i kod. Skriver pseudo-kod för varje steg i och försöker googla mig fram till nÄgon slags lösning, vilket oftast gÄr Ät helvete

Hur brukar ni med lite erfarenhet attackera varje uppgift?

Jag som Àr nybörjare, försöker dela upp uppgiften i enklare nivÄer. T.ex. kan det vara bra att försöka koda det givna exemplet i uppgiften, eller som igÄr dÀr jag började med att testa alla kombinationer av ett tvÄsiffrigt lösenord istÀllet för att gÄ direkt pÄ ett sexsiffrigt.

PermalÀnk
Medlem ★
●

Dag 5
SprÄk C#
Lösning 1&2
Kommentar , damn vad jag tabbade mig mycket och fÄr skÀmmas för slutresultatet, hade tyckt det var logiskt om skrivadressen ocksÄ kunde vara adress till adress eller bara adress.

private void button5_Click(object sender, EventArgs e) { int[] values = GetSafeIntArray(this.txtInput.Text); int posCount = values.Length; int currentPosition = 0; bool noExit= true; bool endedCorrectly = false; string lastOutPut = String.Empty; while (currentPosition<posCount && noExit) { string posCode = values[currentPosition].ToString("D5"); int opCode = ToSafeInt(posCode.Substring(3, 2)); int[] parameterMode = getParameterModes(posCode.Substring(0, 3)); int p1; int p2; int p3; switch (opCode) { case 1: p3= values[currentPosition + 3]; if (parameterMode[0]==0) { p1 = values[values[currentPosition + 1]]; } else { p1 = values[currentPosition + 1]; } if (parameterMode[1] == 0) { p2 = values[values[currentPosition + 2]]; } else { p2 = values[currentPosition + 2]; } values[p3] = p1 + p2; currentPosition = currentPosition + 4; break; case 2: p3 = values[currentPosition + 3]; if (parameterMode[0] == 0) { p1 = values[values[currentPosition + 1]]; } else { p1 = values[currentPosition + 1]; } if (parameterMode[1] == 0) { p2 = values[values[currentPosition + 2]]; } else { p2 = values[currentPosition + 2]; } values[p3] = p1 * p2; currentPosition = currentPosition + 4; break; case 3: p1 = values[currentPosition + 1]; int input = 1; if (InputBox("UserId", "Input value=", ref input) == DialogResult.OK) { if (parameterMode[0]==0) { values[p1] = input; } else { throw new Exception("Can't save input in immidiate mode!"); } } currentPosition = currentPosition + 2; break; case 4: int output; if (parameterMode[0]==0) { output= values[values[currentPosition + 1]]; } else { output = values[currentPosition + 1]; } lastOutPut = output.ToString(); currentPosition = currentPosition + 2; break; case 5: if (parameterMode[0]==0) { p1 = values[values[currentPosition + 1]]; } else { p1 = values[currentPosition + 1]; } if (parameterMode[1] == 0) { p2 = values[values[currentPosition + 2]]; } else { p2 = values[currentPosition + 2]; } if (p1!=0) { currentPosition = p2; } else { currentPosition = currentPosition + 3; } break; case 6: if (parameterMode[0] == 0) { p1 = values[values[currentPosition + 1]]; } else { p1 = values[currentPosition + 1]; } if (parameterMode[1] == 0) { p2 = values[values[currentPosition + 2]]; } else { p2 = values[currentPosition + 2]; } if (p1 == 0) { currentPosition = p2; } else { currentPosition = currentPosition + 3; } break; case 7: if (parameterMode[0] == 0) { p1 = values[values[currentPosition + 1]]; } else { p1 = values[currentPosition + 1]; } if (parameterMode[1] == 0) { p2 = values[values[currentPosition + 2]]; } else { p2 = values[currentPosition + 2]; } p3 = values[currentPosition + 3]; int toStore=0; if (p1<p2) { toStore = 1; } values[p3] = toStore; currentPosition = currentPosition + 4; break; case 8: if (parameterMode[0] == 0) { p1 = values[values[currentPosition + 1]]; } else { p1 = values[currentPosition + 1]; } if (parameterMode[1] == 0) { p2 = values[values[currentPosition + 2]]; } else { p2 = values[currentPosition + 2]; } p3 = values[currentPosition + 3]; int toStorex = 0; if (p1 == p2) { toStorex = 1; } values[p3] = toStorex; currentPosition = currentPosition + 4; break; case 99: endedCorrectly = true; noExit = false; break; default: throw new Exception("Invalid OpCode"); } } if (endedCorrectly) { this.txtAnswer.Text = lastOutPut; } } public static int[] getParameterModes (string modes) { int[] pModes = new int[modes.Length]; for (int i = 0; i < modes.Length; i++) { pModes[modes.Length- i-1] = ToSafeInt(modes.Substring(i, 1)); } return pModes; }

Dold text
PermalÀnk
●

Kul med en leaderboard för Sweclockers! Det har jag msisat tidigare Är. Jag skriver i Python 3 och försöker vara sÄ snabb som möjligt alla dagar. Men ibland mÄste man ju göra avkall pÄ det.

PermalÀnk
●

@BAseN: Jag drog ner pygmentize och anvÀnder samma flaggor som du, men koden tappar all indentering. NÄgot du kÀnner igen?

PermalÀnk
Medlem ★
●

Tja missat dessa i alla Är ska bli roligt att hoppa pÄ om man har tid över

Dag: 1
SprÄk: C# (Skrivet i linqpad sÄ skippar includes)
Lösning: Part 1

System.IO.File.ReadAllLines(@d:\input.txt).Sum(m=> int.Parse(m)/3-2)

Dold text

Part 2: Inte lika elegant men aja fÄr förfinna senare

void Main() { System.IO.File.ReadAllLines(@d:\input.txt).Sum(m=> CalculateFuelCost(int.Parse(m))).Dump("Old Sum"); } private static int CalculateMassCost (int mass) => Math.Max(0, mass / 3 - 2); private static int CalculateFuelCost(int fuel) { int fuelRequirement = 0; int totalFuel = fuel; while (totalFuel > 0) { totalFuel = CalculateMassCost(totalFuel); fuelRequirement+=totalFuel; } return fuelRequirement; }

Dold text
Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.

PermalÀnk
HjĂ€lpsam ★
●

Fattar inte.
Vad handlar detta om.
Var finns uppgifterna som skall lösas?

Visa signatur

AMD Ryzen 7 1700 | Saphire RX 5700 Pulse XT (Silent Mode) | 64 GB Kingston ECC | https://valid.x86.fr/z2ljhr | Stockkylaren | Bitfenix Whisper M 750W.
AMD Ryzen 9 5900X | AMD RX 5700 | 64 GB Micron ECC | https://valid.x86.fr/5krwxf
HTPC | https://valid.x86.fr/uuzli0 |

PermalÀnk
●
PermalÀnk
Medlem ★
●

Det hÀr har jag missat! LÄter onekligen som en rolig utmaning.

Kommer köra Powershell sÄ lÄngt det gÄr dÄ det Àr mest det jag har pillat lite med pÄ jobbet och kÀnner att jag behöver komma in i mer (igen). Har tidigare mest gjort lite smÄ script för att automatisera administrationen av en del virtuella maskiner vi har pÄ jobbet. Största projektet Àr ett script som konfigurerar upp industridatorerna som vi anvÀnder i vÄra projektleveranser.

Inte jobbat med "riktig" programmering utan bara styrsystemsprogrammering vilket inte Àr riktigt samma sak. Körde endel PHP/SQL i mina yngre dagar men det var lÀnge sen sÄ Àr inte mer Àn en hobbykodare. VÀldigt intressant att se andras lösningar gjorda i Powershell i alla fall, dÄ inser man hur mycket man har att lÀra.

Han med Dag 1 & 2 igÄr kvÀll. Ska försöka jobba ifatt sÄ gott det gÄr nu.

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
HjĂ€lpsam ★
●
Visa signatur

AMD Ryzen 7 1700 | Saphire RX 5700 Pulse XT (Silent Mode) | 64 GB Kingston ECC | https://valid.x86.fr/z2ljhr | Stockkylaren | Bitfenix Whisper M 750W.
AMD Ryzen 9 5900X | AMD RX 5700 | 64 GB Micron ECC | https://valid.x86.fr/5krwxf
HTPC | https://valid.x86.fr/uuzli0 |

PermalÀnk
Medlem ★
●

@wurpan:

Jag Àr mer imponerad av er som sitter med matlab och powershell och löser uppgifterna Àn en sjÀlv som kör python!

Riktigt kul att se sÄ stor variation.

PermalÀnk
Medlem
●

Vore ju bra om TS kunde ge lite kontext genom att lÀnka till dÀr uppgifterna finns.

PermalÀnk
Medlem
●
Skrivet av toobypls:

Vore ju bra om TS kunde ge lite kontext genom att lÀnka till dÀr uppgifterna finns.

Första resultatet om du söker pÄ trÄdtiteln. https://adventofcode.com

Visa signatur

Arbets- / Spelstation: Arch Linux - Ryzen 5 3600 - RX 7900 XT - 32G DDR4
Server: Arch Linux - Core i5-10400F - 16G DDR4

PermalÀnk
Medlem ★
●
Skrivet av toobypls:

Vore ju bra om TS kunde ge lite kontext genom att lÀnka till dÀr uppgifterna finns.

Det Àr ju test nr. 1.
Dvs lyckas man inte hitta dem sÄ Àr det inte vÀrt att slösa med tid pÄ resten
(För alla som idag sett alternativa julkalendern. Bli inte krÀnkt nu!)

PermalÀnk
Medlem ★
●

Skulle kunna vara kul, men kÀnner jag mig sjÀlv sÄ kommer jag inte orka, men kanske kanske. Högst sannolikt C# i sÄ fall.

Visa signatur

5950X, 3090

PermalÀnk
Medlem ★
●

Jag har hitills gjort alla, kör i matlab

Visa signatur

Corsair Obsidian 250D | i5 7600K | Gigabyte Z270N WiFi | Samsung 960 EVO 250GB | Fractal Design Integra M 650W | Corsair Hydro H90 |Kingston 8GB 2133M DDR4 CL14 | Asus GeForce GTX 970 4GB STRIX DC2 OC MAX |

PermalÀnk
Medlem ★
●
Skrivet av skyw00lker:

@wurpan:
Jag Àr mer imponerad av er som sitter med matlab och powershell och löser uppgifterna Àn en sjÀlv som kör python!

Riktigt kul att se sÄ stor variation.

SÄ kan man ocksÄ se det ja
FÄr se hur lÀnge jag hÄller ut. Just nu kÀnns det i alla fall som att det Àr enklare att göra i powershell Àn att sÀtta sig in i ett nytt sprÄk. Men det kan mycket vÀl förÀndras. Har varit sugen pÄ att komma igÄng med python sedan tidigare och det hÀr skulle ju vara ett ypperligt tillfÀlle om inte annat.

Titeln pÄ Adam Savages book kÀnns rÀtt passande i sammanhanget: "Every tool's a hammer"

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
●
Skrivet av Bryal:

Första resultatet om du söker pÄ trÄdtiteln. https://adventofcode.com

Skrivet av Cerb:

Det Àr ju test nr. 1.
Dvs lyckas man inte hitta dem sÄ Àr det inte vÀrt att slösa med tid pÄ resten
(För alla som idag sett alternativa julkalendern. Bli inte krÀnkt nu!)

Jo, tack jag Àr kapabel till att söka. Hade redan hittat sidan nÀr jag skrev inlÀgget.

Tycker det borde framgÄ vad trÄden faktiskt handlar om utan att man ska behöva leta upp det sjÀlv. Hade sjÀlv ingen aning om vad Advent of code ens var nÀr jag lÀste trÄden först. Bara det Àr uppenbart för er betyder inte att alla kÀnner till konceptet sedan innan.

PermalÀnk
●

Jag har Àn sÄ lÀnge bara gjort de första 2, valde att försöka göra allt i C++ för det Àr sprÄket jag Àr mest van med