Skip to content

Commit 244ca46

Browse files
Merge pull request #925 from marquesrs/name-rust-implementation
Rust implementation for the game Name
2 parents ea2e7be + 44b4e63 commit 244ca46

File tree

2 files changed

+122
-0
lines changed

2 files changed

+122
-0
lines changed

63_Name/rust/Cargo.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[package]
2+
name = "rust"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[dependencies]

63_Name/rust/src/main.rs

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
/** NAME GAME BY GEOFFREY CHASE
2+
* https://github.com/coding-horror/basic-computer-games/blob/main/63_Name/name.bas
3+
* Direct conversion from BASIC to Rust by Pablo Marques (marquesrs).
4+
* No additional features or improvements were added. As a faithful translation,
5+
* many of the code here are done in an unrecommended way by today's standards.
6+
* 17/02/25
7+
*/
8+
9+
use std::io::Write;
10+
11+
fn main() {
12+
let mut input = String::new();
13+
14+
//1 PRINT TAB(34);"NAME"
15+
//2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
16+
//3 PRINT: PRINT: PRINT
17+
print!("{}{}\n{}{}\n\n\n\n",
18+
" ".repeat(34),
19+
"NAME",
20+
" ".repeat(15),
21+
"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
22+
);
23+
24+
//5 DIM B$(40)
25+
let mut b = [0; 40];
26+
27+
//10 PRINT "HELLO.": PRINT "MY NAME IS CREATIVE COMPUTER."
28+
//20 PRINT "WHAT'S YOUR NAME (FIRST AND LAST";: INPUT A$: L=LEN(A$)
29+
print!("{}\n{}\n{}",
30+
"HELLO.",
31+
"MY NAME IS CREATIVE COMPUTER.",
32+
"WHAT'S YOUR NAME (FIRST AND LAST)? "
33+
);
34+
35+
let _ = std::io::stdout().flush().unwrap();
36+
std::io::stdin().read_line(&mut input).unwrap();
37+
let a = input.trim().to_uppercase();
38+
let l = a.len();
39+
40+
//30 PRINT: PRINT "THANK YOU, ";
41+
print!("\nTHANK YOU, ");
42+
43+
//40 FOR I=1 TO L: B$(I)=MID$(A$,I,1): NEXT I
44+
for i in 1..=l {
45+
b[i-1] = a.chars().nth(i-1).unwrap() as u8;
46+
}
47+
48+
//50 FOR I=L TO 1 STEP -1: PRINT B$(I);: NEXT I
49+
for i in (1..=l).rev() {
50+
print!("{}", b[i-1] as char);
51+
}
52+
53+
//60 PRINT ".": PRINT "OOPS! I GUESS I GOT IT BACKWARDS. A SMART"
54+
//70 PRINT "COMPUTER LIKE ME SHOULDN'T MAKE A MISTAKE LIKE THAT!": PRINT
55+
//80 PRINT "BUT I JUST NOTICED YOUR LETTERS ARE OUT OF ORDER."
56+
//90 PRINT "LET'S PUT THEM IN ORDER LIKE THIS: ";
57+
print!("{}\n{}\n{}\n\n{}\n{}",
58+
".",
59+
"OOPS! I GUESS I GOT IT BACKWARDS. A SMART",
60+
"COMPUTER LIKE ME SHOULDN'T MAKE A MISTAKE LIKE THAT!",
61+
"BUT I JUST NOTICED YOUR LETTERS ARE OUT OF ORDER.",
62+
"LET'S PUT THEM IN ORDER LIKE THIS: "
63+
);
64+
65+
//100 FOR J=2 TO L: I=J-1: T$=B$(J)
66+
let mut i;
67+
let mut t;
68+
for j in 2..=l {
69+
i = j - 1;
70+
t = b[j-1];
71+
loop {
72+
//110 IF T$>B$(I) THEN 130
73+
if i == 0 || t > b[i-1] {
74+
//130 B$(I+1)=T$: NEXT J
75+
b[i] = t;
76+
break;
77+
} else {
78+
//120 B$(I+1)=B$(I): I=I-1: IF I>0 THEN 110
79+
b[i] = b[i-1];
80+
i = i - 1;
81+
}
82+
}
83+
}
84+
85+
//140 FOR I=1 TO L: PRINT B$(I);: NEXT I: PRINT: PRINT
86+
for i in 1..=l {
87+
print!("{}", b[i-1] as char);
88+
}
89+
print!("\n\n");
90+
91+
//150 PRINT "DON'T YOU LIKE THAT BETTER";: INPUT D$
92+
print!("DON'T YOU LIKE THAT BETTER? ");
93+
94+
let _ = std::io::stdout().flush().unwrap();
95+
input.clear();
96+
std::io::stdin().read_line(&mut input).unwrap();
97+
let d = input.trim().to_uppercase();
98+
99+
//160 IF D$="YES" THEN 180
100+
if d == "YES" || d == "Y" {
101+
//180 PRINT: PRINT "I KNEW YOU'D AGREE!!"
102+
print!("\nI KNEW YOU'D AGREE!!");
103+
}
104+
else {
105+
//170 PRINT: PRINT "I'M SORRY YOU DON'T LIKE IT THAT WAY.": GOTO 200
106+
print!("\nI'M SORRY YOU DON'T LIKE IT THAT WAY.");
107+
}
108+
109+
print!("\n\n{}{}.\n{}\n",
110+
"I REALLY ENJOYED MEETING YOU ",
111+
a,
112+
"HAVE A NICE DAY!"
113+
);
114+
115+
//999 END
116+
}

0 commit comments

Comments
 (0)