'
Programmeringsjulekalendere 2017
Ho-ho!
I år som i fjor, så har vi flere julekalendere og programmeringsnøtter å kose oss med i adventstida. Advent of Code: Sitat:
Knowit Julekalender Sitat:
I denne tråden kan dere både dele deres egne løsninger, og spørre om hint dersom du står fast selv. Enten du vil skryte av en rask kjøretid, eller mangler den siste lille biten for å få løsningen din i mål -- dette er din tråd! OBSOBSOBSOBSOBS Kjøreregler:
Håper å få se mange fiffige løsninger i et variert utvalg av programmeringsspråk! :D PS: Si gjerne i fra i denne tråden dersom du vet om flere programmeringsjulekalendere av dette slaget! :) |
React-julekalender laget av en kollega: https://react.christmas/
|
Her er mine løsninger på AdventOfCode luke 1 i JS:
SPOILER ALERT! Vis spoiler Kode:
function part1(data) { |
AdventOfCode dag 1 i javascript.
SPOILER ALERT! Vis spoiler Innså etter å ha laget to algoritmer at de var såpass like at det var like greit å slå dem sammen siden det uansett bare var å steppe igjennom en streng med et forhåndsdefinert offset. Også litt gøy at jeg tror dette er første gang noen sinne at jeg har sett behov for å definere og inkrementere flere variabler i for-løkken. Alt i alt en relativt enkel men artig oppgave. Kode:
function day1(str, offset, multiplier) { |
Gøy å se løsninger! Her er min i Python for AoC luke 1:
SPOILER ALERT! Vis spoiler Jeg la også merke til at jeg fikk veldig lik kode, og slo dem sammen for å slippe å skrive samme kode flere ganger. Looper bare gjennom alle sifrene (bortsett fra siste siffer) og sjekker om a) sifferet er likt neste neste siffer, og b) om sifferet er lik sifferet som har L/2 høyere indeks, der L er lengden av hele driten. Hvis de er like så øker jeg de respektive sum-variablene. Til slutt en spesialsjekk for å sjekke om første og siste tall er likt. Slik ble det: Kode:
with open('input.txt') as f: |
[Python]AoC luke 2:
SPOILER ALERT! Vis spoiler Kode:
with open('2_input.txt') as f: |
Sitat:
|
Sitat:
Må vel teste all kombinasjoner i listen,så da kan itertools combinations brukes. [Python]Aoc luke 2: SPOILER ALERT! Vis spoiler Kode:
from itertools import combinations |
Akkurat ja. Veldig bra.
Tror ikke jeg skal poste min løsning i dag nei. :D |
Rakk ikke nerde meg i går, men ingenting er bedre for å komme seg til hektene etter gårsdagens julebord enn å børste støv av Haskell:
AoC 1 SPOILER ALERT! Vis spoiler Kode:
import Data.Char AoC 2 SPOILER ALERT! Vis spoiler Kode:
main = do |
Løsningene mine for de to første dagene i AoC. Knowit blir for omfattende til at jeg gidder.
Språket er C# og LINQ er min drug of choice. Jeg har ikke et problem, jeg lover. Dag 1: https://gist.github.com/robhol/f02d6...3caade1d6e5cc8 Dag 2: https://gist.github.com/robhol/57db5...7ebf9ed3f15235 |
Advent of Code dag 3 kan løses uten kode, om man gjenkjenner det matematiske bak oppgaven.
SPOILER ALERT! Vis spoiler Del 1 er Ulam's Spiral. Kan lett observere at diagonalene ned mot høyre er kvadrater av oddetall. Da er det bare å ekstrapolere denne diagonalen nedover til man er i nærheten av tallet sitt, og så telle fram eller tilbake til det. Del 2 er OEIS A141481 og alle løsningene er her: http://oeis.org/A141481/b141481.txt Min løsning med kode for del 1 er som følger: https://pastebin.com/Ftda46VD |
[Python]AoC luke 4:
SPOILER ALERT! Vis spoiler Kode:
# Part 1 Kode:
# Part 2 |
[Python3]AoC luke 4:
SPOILER ALERT! Vis spoiler Kode:
passphrases = [p.rstrip() for p in open("4.txt").readlines()] I del 2 så gjør jeg det samme, men sorterer hvert ord først. To ord er anagrammer (eller like) om de er like etter sortering. Dette kravet er derfor sterkere enn det i del 1, og jeg trenger derfor ikke å sjekke at de oppfyller del 1 også. |
nok en [Py3]AoC luke 4:
SPOILER ALERT! Vis spoiler Kode:
# første del Stort sett det samme som Dyret, men færre linjer, og mindre leselig :freak: |
AoC 4. desember i Haskell (kun del 2)
SPOILER ALERT! Vis spoiler Brukte som de før meg også set. Men kortslutter med en gang jeg finner en duplikat i stedet for å telle om de er like lange. Kode:
import Data.Bool |
Min løsning for AoC4 i JS:
SPOILER ALERT! Vis spoiler Siden oppgavene er relativt like slang jeg på argument 2 for å sjekke på en strengere måte. Kode:
function is_valid(input, sorted) { |
Advent of code luke 5 i Haskell
SPOILER ALERT! Vis spoiler Ikke noe fancy, ser ut som den kanskje misser tail call optimization, men orker ikke finne ut nå Kode:
import Data.Sequence |
AoC-rollup fra forrige gang:
Dag 3: https://gist.github.com/robhol/328c4...284bc2662ac950 Dag 4: https://gist.github.com/robhol/d57bc...be50487559d473 Dag 5: https://gist.github.com/robhol/e1604...eb03ce6b7038d9 Dag 6: https://gist.github.com/robhol/18207...35f59adb23b773 (Ikke den mest elegante løsningen...) Har også løsning på 7, men ikke lyst til å poste den samme dag. ;) |
AoC Dag 6 i Python:
SPOILER ALERT! Vis spoiler Litt quick'n'dirty-løsning for del 2. Kunne sikker integrert de bedre. I del 1 utfører jeg bare algoritmen de spesifiserer, og lagrer hver tilstand i en dict. Med en gang jeg ser at dicten har en tidligere tilstand så avbryter jeg. I del 2 så gjør jeg akkurat det samme, men nullstiller dicten når jeg ser første sykel. Setter samtidig et flagg som gjør at neste gang sykelen startes, så avbrytes loopen. Kode:
memos = {} |
AoC dag 10 i Golang: (dette er kun part2, men det er små endringer fra part1)
SPOILER ALERT! Vis spoiler Kode:
package main |
Dagens Knowit-oppgave (Luke 18, islandsk-kryptering) forklarte ikke dette med "5 bits" så nøye, så her er et hint:
SPOILER ALERT! Vis spoiler Det er 32 bokstaver i alpfabetet som er oppgitt. Den første er 0b0, den andre er 0b1, den siste er 0b11111, and so on. |
Alle tidspunkt er GMT +2. Klokken er nå 15:21. |