diff --git a/63_Name/rust/Cargo.toml b/63_Name/rust/Cargo.toml new file mode 100644 index 00000000..7d75412a --- /dev/null +++ b/63_Name/rust/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "rust" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/63_Name/rust/src/main.rs b/63_Name/rust/src/main.rs new file mode 100644 index 00000000..1a1f631a --- /dev/null +++ b/63_Name/rust/src/main.rs @@ -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 +}