diff options
Diffstat (limited to '')
| -rwxr-xr-x | practice | 116 |
1 files changed, 78 insertions, 38 deletions
| @@ -2,21 +2,25 @@ | |||
| 2 | 2 | ||
| 3 | # Script based on nissy (see https://nissy.tronto.net) to practice FMC | 3 | # Script based on nissy (see https://nissy.tronto.net) to practice FMC |
| 4 | 4 | ||
| 5 | # Usage: practice [eo|htr|slice] | 5 | # Usage: practice [eo|dr|htr|slice] |
| 6 | |||
| 7 | nissy="nissy" | ||
| 8 | prompt="Press enter for a new scramble, Ctr+C (or Ctrl+Z) to quit:" | ||
| 6 | 9 | ||
| 7 | usage() { | 10 | usage() { |
| 8 | echo "Usage: practice [eo|htr|slice]" | 11 | echo "Usage: practice [eo|dr|htr|slice]" |
| 12 | exit 1 | ||
| 9 | } | 13 | } |
| 10 | 14 | ||
| 11 | eo() { | 15 | practice_eo() { |
| 12 | nextscr="$(nissy scramble)" | 16 | nextscr="$(${nissy} scramble)" |
| 13 | while true; do | 17 | while true; do |
| 14 | scr="$nextscr" | 18 | scr="$nextscr" |
| 15 | nextscr="$(nissy scramble)" | 19 | echo "Scramble: $scr" |
| 16 | echo "$scr" | 20 | nextscr="$(${nissy} scramble)" |
| 17 | eofb="$(nissy solve -N -M 4 eofb -p "$scr")" | 21 | eofb="$(${nissy} solve -N -M 4 eofb -p "$scr")" |
| 18 | eorl="$(nissy solve -N -M 4 eorl -p "$scr")" | 22 | eorl="$(${nissy} solve -N -M 4 eorl -p "$scr")" |
| 19 | eoud="$(nissy solve -N -M 4 eoud -p "$scr")" | 23 | eoud="$(${nissy} solve -N -M 4 eoud -p "$scr")" |
| 20 | nfbn="$(echo "$eofb" | grep -v '^$' | grep -Fv '(' | wc -l)" | 24 | nfbn="$(echo "$eofb" | grep -v '^$' | grep -Fv '(' | wc -l)" |
| 21 | nrln="$(echo "$eorl" | grep -v '^$' | grep -Fv '(' | wc -l)" | 25 | nrln="$(echo "$eorl" | grep -v '^$' | grep -Fv '(' | wc -l)" |
| 22 | nudn="$(echo "$eoud" | grep -v '^$' | grep -Fv '(' | wc -l)" | 26 | nudn="$(echo "$eoud" | grep -v '^$' | grep -Fv '(' | wc -l)" |
| @@ -39,51 +43,87 @@ eo() { | |||
| 39 | echo "$eorl" | 43 | echo "$eorl" |
| 40 | echo "---" | 44 | echo "---" |
| 41 | echo "$eoud" | 45 | echo "$eoud" |
| 46 | printf '\n%s' "$prompt" | ||
| 42 | read -r x | 47 | read -r x |
| 43 | done | 48 | done |
| 44 | } | 49 | } |
| 45 | 50 | ||
| 46 | htr() { | 51 | dr_scramble() { |
| 47 | nextscr="$(nissy scramble dr)" | 52 | d="9" |
| 53 | min="4" | ||
| 54 | max="7" | ||
| 55 | while true; do | ||
| 56 | eo="$(tr -cd 'UDRL' < /dev/random | fold -w "$d" | head -n 1)" | ||
| 57 | sol="$(${nissy} solve -p drud-eofb "$eo")" | ||
| 58 | len="$(echo "$sol" | wc -w)" | ||
| 59 | if [ "$len" -ge "$min" ] && [ "$len" -le "$max" ]; then | ||
| 60 | break | ||
| 61 | fi | ||
| 62 | done | ||
| 63 | ${nissy} solve drud -p -m $((d + 1)) "$eo" | ||
| 64 | } | ||
| 65 | |||
| 66 | practice_dr() { | ||
| 67 | nextscr="$(dr_scramble)" | ||
| 48 | while true; do | 68 | while true; do |
| 49 | scr="$nextscr" | 69 | scr="$nextscr" |
| 50 | nextscr="$(nissy scramble dr)" | 70 | echo "Scramble: $scr" |
| 51 | echo "$scr" | 71 | nextscr="$(dr_scramble)" |
| 72 | soleo="$(${nissy} solve -o -p drud-eofb "$scr")" | ||
| 73 | neo="$(echo "$soleo" | grep -v '^$' | wc -l)" | ||
| 74 | leo="$(echo "$soleo" | head -n 1 | wc -w)" | ||
| 75 | solht="$(${nissy} solve -o -p drud "$scr")" | ||
| 76 | nht="$(echo "$soleo" | grep -v '^$' | wc -l)" | ||
| 77 | lht="$(echo "$soleo" | head -n 1 | wc -w)" | ||
| 52 | read -r x | 78 | read -r x |
| 53 | nissy solve -o htr "$scr" | 79 | echo "$leo moves ($neo solutions)" |
| 80 | if [ "$nht" != "$neo" ] || [ "$lht" != "$leo" ]; then | ||
| 81 | echo "Breaking EO: $lht moves ($nht solutions)" | ||
| 82 | fi | ||
| 83 | read -r x | ||
| 84 | echo "$soleo" | ||
| 85 | if [ "$nht" != "$neo" ] || [ "$lht" != "$leo" ]; then | ||
| 86 | echo "$solht" | ||
| 87 | fi | ||
| 88 | printf '\n%s' "$prompt" | ||
| 54 | read -r x | 89 | read -r x |
| 55 | done | 90 | done |
| 56 | } | 91 | } |
| 57 | 92 | ||
| 58 | slice() { | 93 | practice_htr() { |
| 59 | nextscr="$(nissy scramble htr)" | 94 | nextscr="$(${nissy} scramble dr)" |
| 60 | while true; do | 95 | while true; do |
| 61 | scr="$nextscr" | 96 | scr="$nextscr" |
| 62 | nextscr="$(nissy scramble htr)" | 97 | echo "Scramble: $scr" |
| 63 | echo "$scr" | 98 | nextscr="$(${nissy} scramble dr)" |
| 99 | sol="$(${nissy} solve -o -p htr "$scr")" | ||
| 100 | nsol="$(echo "$sol" | grep -v '^$' | wc -l)" | ||
| 101 | len="$(echo "$sol" | head -n 1 | wc -w)" | ||
| 102 | read -r x | ||
| 103 | echo "$len moves ($nsol solutions)" | ||
| 64 | read -r x | 104 | read -r x |
| 65 | nissy solve -o drudslice "$scr" | 105 | echo "$sol" |
| 106 | printf '\n%s' "$prompt" | ||
| 66 | read -r x | 107 | read -r x |
| 67 | done | 108 | done |
| 68 | } | 109 | } |
| 69 | 110 | ||
| 70 | if [ -z "$1" ]; then | 111 | practice_slice() { |
| 71 | usage | 112 | nextscr="$(${nissy} scramble htr)" |
| 72 | exit 1 | 113 | while true; do |
| 73 | fi | 114 | scr="$nextscr" |
| 115 | echo "Scramble: $scr" | ||
| 116 | nextscr="$(${nissy} scramble htr)" | ||
| 117 | sol="$(${nissy} solve -o -p drudslice "$scr")" | ||
| 118 | nsol="$(echo "$sol" | grep -v '^$' | wc -l)" | ||
| 119 | len="$(echo "$sol" | head -n 1 | wc -w)" | ||
| 120 | read -r x | ||
| 121 | echo "$len moves ($nsol solutions)" | ||
| 122 | read -r x | ||
| 123 | echo "$sol" | ||
| 124 | printf '\n%s' "$prompt" | ||
| 125 | read -r x | ||
| 126 | done | ||
| 127 | } | ||
| 74 | 128 | ||
| 75 | case "$1" in | 129 | "practice_$1" || usage |
| 76 | eo) | ||
| 77 | eo | ||
| 78 | ;; | ||
| 79 | htr) | ||
| 80 | htr | ||
| 81 | ;; | ||
| 82 | slice) | ||
| 83 | slice | ||
| 84 | ;; | ||
| 85 | *) | ||
| 86 | usage | ||
| 87 | exit 1 | ||
| 88 | ;; | ||
| 89 | esac | ||
