59 lines
1.3 KiB
Bash
Executable file
59 lines
1.3 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
#set -x
|
|
# flips file clockwise
|
|
vert(){
|
|
linelen=$(wc -L <$1)
|
|
local i
|
|
for i in $(seq 1 $linelen); do
|
|
echo $(cut -b $i $1 | tr -d '\n')
|
|
done > $1.vert
|
|
sed -i '/^ *$/d' $1.vert
|
|
}
|
|
# "tilts" files
|
|
diag(){
|
|
linecount=$(wc -l <$1)
|
|
while read; do
|
|
local i
|
|
(( i++ ))
|
|
case $2 in
|
|
right)
|
|
for j in $(seq 1 $(bc<<<"$linecount-$i")); do
|
|
echo -n ' '
|
|
done
|
|
;;
|
|
left)
|
|
for j in $(seq 1 $i); do
|
|
echo -n ' '
|
|
done
|
|
;;
|
|
esac
|
|
echo "$REPLY"
|
|
done < <(cat "$1") >> $1.diag.$2
|
|
sed -i '/^ *$/d' $1.diag.$2
|
|
}
|
|
# tilt/turn the file, searching back and forth
|
|
search(){
|
|
# this is somewhat confusing
|
|
# turn 90 degrees
|
|
vert $1
|
|
# "tilt" counter-clockwise 45
|
|
diag $1 left
|
|
vert $1.diag.left
|
|
# "tilt" clockwise 45
|
|
diag $1 right
|
|
vert $1.diag.right
|
|
# we count seperately so searchs can overlap
|
|
grep -c "XMAS" $1 # right
|
|
grep -c "SAMX" $1 # left
|
|
grep -c "XMAS" $1.vert # up
|
|
grep -c "SAMX" $1.vert # down
|
|
grep -c "XMAS" $1.diag.right.vert # up right
|
|
grep -c "SAMX" $1.diag.right.vert # down left
|
|
grep -c "XMAS" $1.diag.left.vert # up left
|
|
grep -c "SAMX" $1.diag.left.vert # down right
|
|
# clean up temp files
|
|
rm $1.vert*
|
|
rm $1.diag*
|
|
}
|
|
|
|
search input.example | tr '\n' '+' | sed 's/+$/\n/' | bc
|