Skip to content

Commit 7e35a79

Browse files
committed
reverse game initial rust implementation
1 parent dce839e commit 7e35a79

File tree

1 file changed

+51
-32
lines changed

1 file changed

+51
-32
lines changed

73_Reverse/rust/src/main.rs

Lines changed: 51 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -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!("\nHERE WE GO ... THE LIST IS: ");
75-
82+
print!("\nHERE 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("\nTRY 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!("\nO.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("\nTRY 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!("\nO.K. HOPE YOU HAD FUN!!");
207+
return false;
208+
}
190209
}

0 commit comments

Comments
 (0)