Merge pull request #925 from marquesrs/name-rust-implementation

Rust implementation for the game Name
This commit is contained in:
Jeff Atwood
2025-02-21 09:12:53 -08:00
committed by GitHub
2 changed files with 122 additions and 0 deletions

6
63_Name/rust/Cargo.toml Normal file
View File

@@ -0,0 +1,6 @@
[package]
name = "rust"
version = "0.1.0"
edition = "2021"
[dependencies]

116
63_Name/rust/src/main.rs Normal file
View File

@@ -0,0 +1,116 @@
/** NAME GAME BY GEOFFREY CHASE
* https://github.com/coding-horror/basic-computer-games/blob/main/63_Name/name.bas
* Direct conversion from BASIC to Rust by Pablo Marques (marquesrs).
* No additional features or improvements were added. As a faithful translation,
* many of the code here are done in an unrecommended way by today's standards.
* 17/02/25
*/
use std::io::Write;
fn main() {
let mut input = String::new();
//1 PRINT TAB(34);"NAME"
//2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
//3 PRINT: PRINT: PRINT
print!("{}{}\n{}{}\n\n\n\n",
" ".repeat(34),
"NAME",
" ".repeat(15),
"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
);
//5 DIM B$(40)
let mut b = [0; 40];
//10 PRINT "HELLO.": PRINT "MY NAME IS CREATIVE COMPUTER."
//20 PRINT "WHAT'S YOUR NAME (FIRST AND LAST";: INPUT A$: L=LEN(A$)
print!("{}\n{}\n{}",
"HELLO.",
"MY NAME IS CREATIVE COMPUTER.",
"WHAT'S YOUR NAME (FIRST AND LAST)? "
);
let _ = std::io::stdout().flush().unwrap();
std::io::stdin().read_line(&mut input).unwrap();
let a = input.trim().to_uppercase();
let l = a.len();
//30 PRINT: PRINT "THANK YOU, ";
print!("\nTHANK YOU, ");
//40 FOR I=1 TO L: B$(I)=MID$(A$,I,1): NEXT I
for i in 1..=l {
b[i-1] = a.chars().nth(i-1).unwrap() as u8;
}
//50 FOR I=L TO 1 STEP -1: PRINT B$(I);: NEXT I
for i in (1..=l).rev() {
print!("{}", b[i-1] as char);
}
//60 PRINT ".": PRINT "OOPS! I GUESS I GOT IT BACKWARDS. A SMART"
//70 PRINT "COMPUTER LIKE ME SHOULDN'T MAKE A MISTAKE LIKE THAT!": PRINT
//80 PRINT "BUT I JUST NOTICED YOUR LETTERS ARE OUT OF ORDER."
//90 PRINT "LET'S PUT THEM IN ORDER LIKE THIS: ";
print!("{}\n{}\n{}\n\n{}\n{}",
".",
"OOPS! I GUESS I GOT IT BACKWARDS. A SMART",
"COMPUTER LIKE ME SHOULDN'T MAKE A MISTAKE LIKE THAT!",
"BUT I JUST NOTICED YOUR LETTERS ARE OUT OF ORDER.",
"LET'S PUT THEM IN ORDER LIKE THIS: "
);
//100 FOR J=2 TO L: I=J-1: T$=B$(J)
let mut i;
let mut t;
for j in 2..=l {
i = j - 1;
t = b[j-1];
loop {
//110 IF T$>B$(I) THEN 130
if i == 0 || t > b[i-1] {
//130 B$(I+1)=T$: NEXT J
b[i] = t;
break;
} else {
//120 B$(I+1)=B$(I): I=I-1: IF I>0 THEN 110
b[i] = b[i-1];
i = i - 1;
}
}
}
//140 FOR I=1 TO L: PRINT B$(I);: NEXT I: PRINT: PRINT
for i in 1..=l {
print!("{}", b[i-1] as char);
}
print!("\n\n");
//150 PRINT "DON'T YOU LIKE THAT BETTER";: INPUT D$
print!("DON'T YOU LIKE THAT BETTER? ");
let _ = std::io::stdout().flush().unwrap();
input.clear();
std::io::stdin().read_line(&mut input).unwrap();
let d = input.trim().to_uppercase();
//160 IF D$="YES" THEN 180
if d == "YES" || d == "Y" {
//180 PRINT: PRINT "I KNEW YOU'D AGREE!!"
print!("\nI KNEW YOU'D AGREE!!");
}
else {
//170 PRINT: PRINT "I'M SORRY YOU DON'T LIKE IT THAT WAY.": GOTO 200
print!("\nI'M SORRY YOU DON'T LIKE IT THAT WAY.");
}
print!("\n\n{}{}.\n{}\n",
"I REALLY ENJOYED MEETING YOU ",
a,
"HAVE A NICE DAY!"
);
//999 END
}