no this isn't about alexandria ocasio-cortez
at main 2.8 kB view raw
1#!/bin/bash 2 3set -e 4 5# Determine current day based on EST timezone (puzzles unlock at midnight EST) 6EST_DAY=$(TZ="America/New_York" date +%-d) 7EST_MONTH=$(TZ="America/New_York" date +%-m) 8 9if [ "$EST_MONTH" -ne 12 ]; then 10 echo "Error: Advent of Code runs in December" 11 exit 1 12fi 13 14if [ "$EST_DAY" -gt 12 ]; then 15 echo "Error: This event only has 12 days (current EST day: $EST_DAY)" 16 exit 1 17fi 18 19DAY=$EST_DAY 20 21declare -a WORDS=("" "one" "two" "three" "four" "five" "six" "seven" "eight" "nine" "ten" 22 "eleven" "twelve") 23 24DAY_WORD=${WORDS[$DAY]} 25 26SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 27CMD_DIR="$SCRIPT_DIR/cmd/$DAY_WORD" 28 29# Capitalize first letter for struct name 30DAY_WORD_CAP="$(echo "${DAY_WORD:0:1}" | tr '[:lower:]' '[:upper:]')${DAY_WORD:1}" 31 32# Open browser to puzzle page 33URL="https://adventofcode.com/2025/day/$DAY" 34if command -v xdg-open &> /dev/null; then 35 xdg-open "$URL" 36elif command -v open &> /dev/null; then 37 open "$URL" 38elif command -v start &> /dev/null; then 39 start "$URL" 40else 41 echo "Could not detect browser opener. Please visit: $URL" 42fi 43 44# Create directory and main.go 45if [ -d "$CMD_DIR" ]; then 46 echo "Directory $CMD_DIR already exists" 47else 48 mkdir -p "$CMD_DIR" 49 cat > "$CMD_DIR/main.go" << EOF 50package main 51 52import ( 53 "strings" 54 55 "tangled.org/evan.jarrett.net/aoc2025/internal/puzzle" 56) 57 58type Day${DAY_WORD_CAP} struct { 59 // parsed input fields 60} 61 62func (d *Day${DAY_WORD_CAP}) ParseInput(input string) error { 63 for line := range strings.SplitSeq(strings.TrimSpace(input), "\n") { 64 line = strings.TrimSpace(line) 65 if line == "" { 66 continue 67 } 68 // TODO: parse line 69 } 70 return nil 71} 72 73func (d *Day${DAY_WORD_CAP}) Part1() (int, error) { 74 // TODO: solve part 1 75 return 0, nil 76} 77 78func (d *Day${DAY_WORD_CAP}) Part2() (int, error) { 79 // TODO: solve part 2 80 return 0, nil 81} 82 83func main() { 84 puzzle.Run($DAY, &Day${DAY_WORD_CAP}{}) 85} 86EOF 87 cat > "$CMD_DIR/main_test.go" << EOF 88package main 89 90import ( 91 "testing" 92) 93 94const testInput = \`\` 95 96func TestPart1(t *testing.T) { 97 d := &Day${DAY_WORD_CAP}{} 98 if err := d.ParseInput(testInput); err != nil { 99 t.Fatalf("ParseInput failed: %v", err) 100 } 101 102 got, err := d.Part1() 103 if err != nil { 104 t.Fatalf("Part1 failed: %v", err) 105 } 106 107 want := 0 // TODO: set expected value 108 if got != want { 109 t.Errorf("Part1() = %d, want %d", got, want) 110 } 111} 112 113func TestPart2(t *testing.T) { 114 d := &Day${DAY_WORD_CAP}{} 115 if err := d.ParseInput(testInput); err != nil { 116 t.Fatalf("ParseInput failed: %v", err) 117 } 118 119 got, err := d.Part2() 120 if err != nil { 121 t.Fatalf("Part2 failed: %v", err) 122 } 123 124 want := 0 // TODO: set expected value 125 if got != want { 126 t.Errorf("Part2() = %d, want %d", got, want) 127 } 128} 129EOF 130 echo "Created $CMD_DIR/main.go" 131 echo "Created $CMD_DIR/main_test.go" 132fi