@@ -34,7 +34,7 @@ fn main() {
3434 ) ) ;
3535
3636 // 130 DIM A(20)
37- let mut a = Vec :: with_capacity ( 20 ) ;
37+ let mut a = vec ! [ 0 ; 20 ] ;
3838
3939 // 140 REM *** N=NUMBER OF NUMBERS
4040 // 150 N=9
@@ -45,55 +45,57 @@ fn main() {
4545 let opt = input ( "DO YOU WANT THE RULES (YES OR NO)? " ) ;
4646
4747
48- if opt == "YES" {
48+ if opt == "YES" || opt == "Y" {
4949 // 190 GOSUB 710
5050 sub1 ( n) ;
5151 }
5252 // 180 IF A$="NO" THEN 210
5353 ' c : loop {
5454 // 200 REM *** MAKE A RANDOM LIST A(1) TO A(N)
5555 // 210 A(1)=INT((N-1)*RND(1)+2)
56- a[ 1 -1 ] = ( ( n-1 ) as f32 * rand:: rng ( ) . random_range ( 0.0 ..=1.0 ) + 2.0 ) as i32 ;
57-
56+ // element 0
57+ a[ 0 ] = ( ( n-1 ) as f32 * rand:: rng ( ) . random_range ( 0.0 ..=1.0 ) + 2.0 ) as i32 ;
58+
5859 // 220 FOR K=2 TO N
59- ' a : for k in 2 ..=n {
60- // 230 A(K)=INT(N*RND(1)+1)
61- a[ k-1 ] = ( n as f32 * rand:: rng ( ) . random_range ( 0.0 ..=1.0 ) + 1.0 ) as i32 ;
62- // 240 FOR J=1 TO K-1
63- for j in 1 ..k {
64- if a[ k-1 ] == a[ j-1 ] {
60+ for k in 2 ..=n {
61+ ' a : loop {
62+ // element k
63+ // 230 A(K)=INT(N*RND(1)+1)
64+ a[ k-1 ] = ( n as f32 * rand:: rng ( ) . random_range ( 0.0 ..=1.0 ) + 1.0 ) as i32 ;
65+
66+ // element 0 to k-1
67+ // 240 FOR J=1 TO K-1
68+ for j in 1 ..k {
6569 // 250 IF A(K)=A(J) THEN 230
66- continue ' a;
70+ if a[ k-1 ] == a[ j-1 ] {
71+ continue ' a;
72+ }
73+ // 260 NEXT J:
6774 }
68- // 260 NEXT J:
75+ break ;
6976 }
7077 //NEXT K
71- }
78+ }
79+
7280 // 280 REM *** PRINT ORIGINAL LIST AND START GAME
7381 // 290 PRINT: PRINT "HERE WE GO ... THE LIST IS:"
74- print ! ( "\n HERE WE GO ... THE LIST IS: " ) ;
75-
82+ print ! ( "\n HERE WE GO ... THE LIST IS:\n " ) ;
83+
7684 // 310 T=0
7785 let mut t = 0 ;
7886
87+ // 320 GOSUB 610
88+ sub2 ( & a, n) ;
89+
7990 ' b : loop {
8091 // 330 PRINT "HOW MANY SHALL I REVERSE";
8192 // 340 INPUT R
8293 let r = input ( "HOW MANY SHALL I REVERSE: " ) . parse :: < usize > ( ) . unwrap ( ) ;
8394
8495 // 350 IF R=0 THEN 520
8596 if r == 0 {
86- // 520 PRINT
87- // 530 PRINT "TRY AGAIN (YES OR NO)";
88- // 540 INPUT A$
89- let opt = input ( "\n TRY AGAIN (YES OR NO): " ) ;
90- // 550 IF A$="YES" THEN 210
91- if opt == "YES" {
92- continue ' c;
93- }
94- // 560 PRINT: PRINT "O.K. HOPE YOU HAD FUN!!":GOTO 999
95- print ! ( "\n O.K. HOPE YOU HAD FUN!!" ) ;
96- break ' c;
97+ if replay ( ) { continue ' c; }
98+ else { break ' c; }
9799 }
98100 // 360 IF R<=N THEN 390
99101 if r <= n {
@@ -127,12 +129,13 @@ fn main() {
127129 // 510 PRINT "YOU WON IT IN";T;"MOVES!!!":PRINT
128130 print ! ( "{}{}{}" , "YOU WON IT IN " , t, " MOVES!!!\n \n " ) ;
129131
132+ if replay ( ) { continue ' c; }
133+ else { break ' c; }
134+ }
135+ else {
136+ // 370 PRINT "OOPS! TOO MANY! I CAN REVERSE AT MOST";N:GOTO 330
137+ print ! ( "OOPS! TOO MANY! I CAN REVERSE AT MOST {n}" ) ;
130138 }
131- // 370 PRINT "OOPS! TOO MANY! I CAN REVERSE AT MOST";N:GOTO 330
132- print ! ( "OOPS! TOO MANY! I CAN REVERSE AT MOST {n}" ) ;
133-
134- // 320 GOSUB 610
135- sub2 ( & a, n) ;
136139 }
137140 }
138141 // 999 END
@@ -143,7 +146,7 @@ fn sub2(a: &Vec<i32>, n: usize) {
143146 // 610 PRINT:FOR K=1 TO N:PRINT A(K);:NEXT K
144147 // 650 PRINT:PRINT:RETURN
145148 for k in 1 ..=n {
146- print ! ( "{}" , a[ k-1 ] ) ;
149+ print ! ( "{} " , a[ k-1 ] ) ;
147150 }
148151 print ! ( "\n \n " ) ;
149152}
@@ -187,4 +190,20 @@ fn sub1(n: usize) {
187190 "IF YOU WANT TO QUIT, REVERSE 0 (ZERO).\n " ,
188191 "\n " ,
189192 )
193+ }
194+
195+ fn replay ( ) -> bool {
196+ // 520 PRINT
197+ // 530 PRINT "TRY AGAIN (YES OR NO)";
198+ // 540 INPUT A$
199+ let r = input ( "\n TRY AGAIN (YES OR NO): " ) ;
200+ // 550 IF A$="YES" THEN 210
201+ if r == "YES" || r == "Y" {
202+ return true ;
203+ }
204+ else {
205+ // 560 PRINT: PRINT "O.K. HOPE YOU HAD FUN!!":GOTO 999
206+ println ! ( "\n O.K. HOPE YOU HAD FUN!!" ) ;
207+ return false ;
208+ }
190209}
0 commit comments