#!/usr/bin/env -S guile -s !# ;; Copyright (C) 2022 ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . (use-modules (srfi srfi-1) (ice-9 match) (advent-of-code)) (define (all-different? list) (match list (() '()) ((_) #t) ((head . tail) (if (member head tail) #f (all-different? tail))))) (define (solution input marker-length) (let loop ((position 0)) (let ((marker (take (drop input position) marker-length))) (if (all-different? marker) (+ position marker-length) (loop (+ position 1)))))) (should-equal (all-different? '(a b c d)) #t) (should-equal (all-different? '(a a b c)) #f) (should-equal 7 (solution (string->list "mjqjpqmgbljsphdztnvjfqwrcgsmlb") 4)) (should-equal 5 (solution (string->list "bvwbjplbgvbhsrlpgdmjqwftvncz") 4)) (should-equal 6 (solution (string->list "nppdvjthqldpwncqszvftbrmjlhg") 4)) (should-equal 10 (solution (string->list "nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg") 4)) (should-equal 11 (solution (string->list "zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw") 4)) (should-equal 1794 (solution (string->list (read-file "input.txt")) 4))