aboutsummaryrefslogtreecommitdiff
path: root/data/extract.sh
blob: b5864297ede4d7105844e0690241cead29250121 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/bin/bash

db_file=games_anon.db

query() {
		echo "SELECT $1 FROM games WHERE (size == $2) \
and (result != '1-0') and (result != '0-1') and (result != '0-0')\
and (result != '1/2-1/2');"
}

extract() {
		for size in 5 6; do
				sqlite3 "$db_file" "$(query $1 $size)" > "playtak-$size"
		done
}

# Correct move notation, assuming only valid stuff
fix_move() {
		args=($1)
		if [ "${args[0]}" = "M" ]; then
				result=""
				# Annoying to compute direction
				base_col=${args[1]:0:1}
				base_row=${args[1]:1:1}
				step_col=${args[2]:0:1}
				step_row=${args[2]:1:1}
				if [[ "$base_col" < "$step_col" ]]; then
						result=">"
				elif [[ "$base_col" > "$step_col" ]]; then
						result="<"
				elif [[ "$base_row" > "$step_row" ]]; then
						result="-"
				elif [[ "$base_row" < "$step_row" ]]; then
						result="+"
				fi
				total=0
				steps=${#args[@]}
				for (( i = 3 ; i < steps ; i++ )); do
						total=$(( total + ${args[i]} ))
						result="$result${args[i]}"
				done
				echo "$total${args[1],}$result"
		else
				echo "$1"
		fi;
}

# Use GNU sed to fix placement notation
fix_place="\
s/P \(..\) C,/C\L\1,/g;\
s/P \(..\) W,/S\L\1,/g;\
s/P \(..\),/\L\1,/g"

# Thiss is way too slow
extract_ptn() {
		extract "notation, result"

		size="$1"
		dir="ptn-$size"
		if [ ! -d "$dir" ]; then
				mkdir "$dir";
		fi;

		# Separate each line into a file
		count=0
		while read game; do
				file="$dir/$count.ptn"
				echo "$game" | tr ',' '\n' | sed "$fix_place" > "$file"
				# Prepare to reformat log as PTN
				ply=1
				prepend=""
				new_contents=""
				while read line; do
						# PTN calls for numbers before every new turn in the game
						if [ $(( $ply % 2 )) -eq 1 ]; then
								prepend="$(( $ply / 2 + 1 )). "
								if [ $ply -gt 1 ]; then
										prepend="\n$prepend"
								fi
						else
								prepend=" "
						fi
						# We have to fix the move notation
						line=$(fix_move "$line")
						new_contents="$new_contents$prepend$line"
						ply=$(( $ply + 1 ))
				done < "$file"
				echo -e "$new_contents" | tr '|' '\n' > "$file"
				count=$(( $count + 1 ))
		done < "playtak-$size"
}

if [ ! -f "$db_file" ]; then
		wget "https://www.playtak.com/games_anon.db"
fi

extract notation,result