mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-12 07:40:50 -08:00
Merge pull request #925 from marquesrs/name-rust-implementation
Rust implementation for the game Name
This commit is contained in:
6
63_Name/rust/Cargo.toml
Normal file
6
63_Name/rust/Cargo.toml
Normal file
@@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "rust"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
116
63_Name/rust/src/main.rs
Normal file
116
63_Name/rust/src/main.rs
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user