View difference between Paste ID: MimrKH0i and QNMaPyR0
SHOW: | | - or go back to the newest paste.
1
#!/usr/bin/tclsh
2
namespace path {::tcl::mathop ::tcl::mathfunc}
3
4
proc lsum L {expr [join $L +]+0}
5
proc random range {expr int(rand()*$range)}
6
7
proc genAnsList {n_max lPair lAns} {
8
 upvar $lPair lPair1
9
 upvar $lAns lAns1
10
 set lPair {{0 0}}
11
 set lPair1 {{0 0}}
12
13
 for {set i 1} {[<= $i $n_max]} {incr i} {
14
  set q [/ [+ [sqrt 5] 1 ] 2]
15
  set a [int [* $q $i]]
16
  set b [+ $a $i]
17
  lappend lPair1 "$a $b"
18
  lappend lPair "$a $b"
19
  lappend lPair "$b $a"
20
 }
21
22
 set lPairSorted [lsort -integer -index 0 $lPair]
23
 for {set i 0} {[<= $i $n_max]} {incr i} {
24
  lappend lAns1 [lindex [lindex $lPairSorted $i] 1]
25
 }
26
}
27
28
proc turn {st lAns lPair} {
29
 set st_cur_sum [lsum $st]
30-
 if {[== 0 st_cur_sum]} {return {you win}}
30+
 if {[== 0 $st_cur_sum]} {return {you win}}
31
32
 set a [lindex $st 0]
33
 set b [lindex $st 1]
34
 set c [abs [- $a $b]]
35
36
 set a1 [min $a [lindex $lAns $b]]
37
 set b1 [min $b [lindex $lAns $a]]
38
 set cPair1 [lindex $lPair $c]
39
40
 set a2 [random $a]
41
 set b2 [random $b]
42
 set c2 [random [+ 1 [min $a $b]]]
43
 set cPair2 [list [- $a $c2] [- $b $c2]]
44
45
 set st_next1 [list "$a $b1" [+ $a $b1]]
46
 set st_next2 [list "$a1 $b" [+ $a1 $b]]
47
 set st_next3 [list "$cPair1" [lsum $cPair1]]
48
 set lst_next [list $st_next1 $st_next2 $st_next3]
49
 set st_next [lindex [lsort -integer -index 1 $lst_next] 0]
50
 set st_next_sum [lindex $st_next 1]
51
52
 if {[== 0 $st_next_sum]} {return {i won}}
53
54
 if {[> $st_cur_sum  $st_next_sum]} {
55
   return [lindex $st_next 0]
56
 } else {
57
  switch [random 3] {
58
   0 {return "$a $b2"}
59
   1 {return "$a2 $b"}
60
   2 {return "$cPair2"}
61
  }
62
 }
63
}
64
65
puts {Enter heap sizes:}
66
if {[< 0 [gets stdin state]]} {
67
 set n_max [lindex [lsort -integer $state] end]
68
 genAnsList $n_max lPair lAns
69
 set state [turn $state $lAns $lPair]
70
 puts $state
71
72
 while {[< 0 [gets stdin state]]} {
73
  set state [turn $state $lAns $lPair]
74
  puts $state
75
 }
76
}