blob: 4e1126c4f455291e463ba7266ed0878b299a7a8c (
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
#!/bin/sh
# Script based on nissy (see https://nissy.tronto.net) to practice FMC
# Usage: practice [eo|dr|htr|slice]
nissy="nissy"
prompt="Press enter for a new scramble, Ctr+C (or Ctrl+Z) to quit:"
usage() {
echo "Usage: practice [eo|dr|htr|slice]"
exit 1
}
practice_eo() {
nextscr="$(${nissy} scramble)"
while true; do
scr="$nextscr"
echo "Scramble: $scr"
nextscr="$(${nissy} scramble)"
eofb="$(${nissy} solve -N -M 4 eofb -p "$scr")"
eorl="$(${nissy} solve -N -M 4 eorl -p "$scr")"
eoud="$(${nissy} solve -N -M 4 eoud -p "$scr")"
nfbn="$(echo "$eofb" | grep -v '^$' | grep -Fv '(' | wc -l)"
nrln="$(echo "$eorl" | grep -v '^$' | grep -Fv '(' | wc -l)"
nudn="$(echo "$eoud" | grep -v '^$' | grep -Fv '(' | wc -l)"
nfbi="$(echo "$eofb" | grep '^(' | wc -l)"
nrli="$(echo "$eorl" | grep '^(' | wc -l)"
nudi="$(echo "$eoud" | grep '^(' | wc -l)"
nfbniss="$(echo "$eofb" | grep -v '^(' | grep '(' | wc -l)"
nrlniss="$(echo "$eorl" | grep -v '^(' | grep '(' | wc -l)"
nudniss="$(echo "$eoud" | grep -v '^(' | grep '(' | wc -l)"
nfb="$((nfbn + nfbi + nfbniss))"
nrl="$((nrln + nrli + nrlniss))"
nud="$((nudn + nudi + nudniss))"
read -r x
echo "FB: $nfb ($nfbn normal, $nfbi inverse, $nfbniss niss)"
echo "RL: $nrl ($nrln normal, $nrli inverse, $nrlniss niss)"
echo "UD: $nud ($nudn normal, $nudi inverse, $nudniss niss)"
read -r x
echo "$eofb"
echo "---"
echo "$eorl"
echo "---"
echo "$eoud"
printf '\n%s' "$prompt"
read -r x
done
}
dr_scramble() {
d="9"
min="4"
max="7"
while true; do
eo="$(tr -cd 'UDRL' < /dev/random | fold -w "$d" | head -n 1)"
sol="$(${nissy} solve -p drud-eofb "$eo")"
len="$(echo "$sol" | wc -w)"
if [ "$len" -ge "$min" ] && [ "$len" -le "$max" ]; then
break
fi
done
${nissy} solve drud -p -m $((d + 1)) "$eo"
}
practice_dr() {
nextscr="$(dr_scramble)"
while true; do
scr="$nextscr"
echo "Scramble: $scr"
nextscr="$(dr_scramble)"
soleo="$(${nissy} solve -o -p drud-eofb "$scr")"
neo="$(echo "$soleo" | grep -v '^$' | wc -l)"
leo="$(echo "$soleo" | head -n 1 | wc -w)"
solht="$(${nissy} solve -o -p drud "$scr")"
nht="$(echo "$soleo" | grep -v '^$' | wc -l)"
lht="$(echo "$soleo" | head -n 1 | wc -w)"
read -r x
echo "$leo moves ($neo solutions)"
if [ "$nht" != "$neo" ] || [ "$lht" != "$leo" ]; then
echo "Breaking EO: $lht moves ($nht solutions)"
fi
read -r x
echo "$soleo"
if [ "$nht" != "$neo" ] || [ "$lht" != "$leo" ]; then
echo "$solht"
fi
printf '\n%s' "$prompt"
read -r x
done
}
practice_htr() {
nextscr="$(${nissy} scramble dr)"
while true; do
scr="$nextscr"
echo "Scramble: $scr"
nextscr="$(${nissy} scramble dr)"
sol="$(${nissy} solve -o -p htr "$scr")"
nsol="$(echo "$sol" | grep -v '^$' | wc -l)"
len="$(echo "$sol" | head -n 1 | wc -w)"
read -r x
echo "$len moves ($nsol solutions)"
read -r x
echo "$sol"
printf '\n%s' "$prompt"
read -r x
done
}
practice_slice() {
nextscr="$(${nissy} scramble htr)"
while true; do
scr="$nextscr"
echo "Scramble: $scr"
nextscr="$(${nissy} scramble htr)"
sol="$(${nissy} solve -o -p drudslice "$scr")"
nsol="$(echo "$sol" | grep -v '^$' | wc -l)"
len="$(echo "$sol" | head -n 1 | wc -w)"
read -r x
echo "$len moves ($nsol solutions)"
read -r x
echo "$sol"
printf '\n%s' "$prompt"
read -r x
done
}
"practice_$1" || usage
|