From ede6acee55f7f2ba6bc2705a4751da7d33befb68 Mon Sep 17 00:00:00 2001 From: Pat Ludwig Date: Sun, 2 Jan 2022 16:41:07 -0600 Subject: [PATCH] 82_Stars perl implementation --- 82_Stars/perl/stars.pl | 56 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100755 82_Stars/perl/stars.pl diff --git a/82_Stars/perl/stars.pl b/82_Stars/perl/stars.pl new file mode 100755 index 00000000..6c1b5392 --- /dev/null +++ b/82_Stars/perl/stars.pl @@ -0,0 +1,56 @@ +#!/usr/bin/perl + +use v5.11; # for say and use strict +use warnings; + +my $MAX_NUMBER = 100; +my $MAX_GUESSES = 7; + +print<<__END_OF_INTRO; + Stars + Creative Computing Morristown, New Jersey + + + +__END_OF_INTRO + +print "Do you want instructions? "; +chomp( my $answer = <> ); +if ( $answer !~ /^N/i ) { + print<<__END_OF_INSTRUCTIONS; +I am thinking of a whole number from 1 to $MAX_NUMBER +Try to guess my number. After you guess, I +will type one or more stars (*). The more +stars I type, the closer you are to my number. +One star (*) means far away, seven stars (*******) +means really close! You get $MAX_GUESSES guesses. +__END_OF_INSTRUCTIONS +} + + +while (1) { + my $number_to_guess = int(rand($MAX_NUMBER) + 1); + say "\n\nOK, I am thinking of a number, start guessing."; + + my $guess_number = 1; + while ( $guess_number <= $MAX_GUESSES ) { + print "\nYour Guess? "; + chomp( my $guess = <> ); + last if $guess == $number_to_guess; + $guess_number++; + my $difference = abs $guess - $number_to_guess; + print '*' if $difference < 2; + print '*' if $difference < 4; + print '*' if $difference < 8; + print '*' if $difference < 16; + print '*' if $difference < 32; + print '*' if $difference < 64; + print "*\n"; + } + if ( $guess_number > $MAX_GUESSES ) { # didn't guess + say "\nSorry, that's $MAX_GUESSES guesses, number was $number_to_guess"; + } else { # winner! + say '*' x 50, '!!!'; + say "You got it in $guess_number guesses!!! Let's play again..."; + } +}