|
| 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