From 8ebfb07196f93b699606c3e3d85e8be031c51fad Mon Sep 17 00:00:00 2001 From: Argie Bacomo Date: Wed, 6 Apr 2022 09:22:50 +0800 Subject: [PATCH 1/3] Ruby version for Hangman --- 44_Hangman/ruby/hangman.rb | 280 +++++++++++++++++++++++++++++++++++++ 1 file changed, 280 insertions(+) create mode 100644 44_Hangman/ruby/hangman.rb diff --git a/44_Hangman/ruby/hangman.rb b/44_Hangman/ruby/hangman.rb new file mode 100644 index 00000000..85255785 --- /dev/null +++ b/44_Hangman/ruby/hangman.rb @@ -0,0 +1,280 @@ +class Canvas + BUFFER = [] + def initialize width = 12, height = 12, fill = " " + for i in (0...height) do + line = [] + for i in (0...width) do + line << "" + end + BUFFER << line + end + + clear + end + + def render + lines = [] + for line in BUFFER do + lines << line.join("") + end + + return lines.join("\n") + end + + def put s, x, y + BUFFER[y][x] = s[0] + end + + private + def clear fill = " " + for row in BUFFER do + for x in (0...(row.length)) do + row[x] = fill + end + end + end +end + +def init_gallows canvas + for i in (0...12) do + canvas.put("X", 0, i) + end + + for i in (0...7) do + canvas.put("X", i, 0) + end + + canvas.put("X", 6, 1) +end + +def draw_head canvas + canvas.put("-", 5, 2) + canvas.put("-", 6, 2) + canvas.put("-", 7, 2) + canvas.put("(", 4, 3) + canvas.put(".", 5, 3) + canvas.put(".", 7, 3) + canvas.put(")", 8, 3) + canvas.put("-", 5, 4) + canvas.put("-", 6, 4) + canvas.put("-", 7, 4) +end + +def draw_body canvas + for i in (5...9) do + canvas.put("X", 6, i) + end +end + +def draw_right_arm canvas + for i in (3...8) do + canvas.put("\\", i - 1, i) + end +end + +def draw_left_arm canvas + canvas.put("/", 10, 3) + canvas.put("/", 9, 4) + canvas.put("/", 8, 5) + canvas.put("/", 7, 6) +end + +def draw_right_leg canvas + canvas.put("/", 5, 9) + canvas.put("/", 4, 10) +end + +def draw_left_leg canvas + canvas.put("\\", 7, 9) + canvas.put("\\", 8, 10) +end + +def draw_left_hand canvas + canvas.put("\\", 10, 2) +end + +def draw_right_hand canvas + canvas.put("/", 2, 2) +end + +def draw_left_foot canvas + canvas.put("\\", 9, 11) + canvas.put("-", 10, 11) +end + +def draw_right_foot canvas + canvas.put("-", 2, 11) + canvas.put("/", 3, 11) +end + +PHASES = [ + ["First, we draw a head", 'draw_head'], + ["Now we draw a body.", 'draw_body'], + ["Next we draw an arm.", 'draw_right_arm'], + ["this time it's the other arm.", 'draw_left_arm'], + ["Now, let's draw the right leg.", 'draw_right_leg'], + ["This time we draw the left leg.", 'draw_left_leg'], + ["Now we put up a hand.", 'draw_left_hand'], + ["Next the other hand.", 'draw_right_hand'], + ["Now we draw one foot", 'draw_left_foot'], + ["Here's the other foot -- you're hung!!", 'draw_right_foot'], +] + +WORDS = [ + "GUM", + "SIN", + "FOR", + "CRY", + "LUG", + "BYE", + "FLY", + "UGLY", + "EACH", + "FROM", + "WORK", + "TALK", + "WITH", + "SELF", + "PIZZA", + "THING", + "FEIGN", + "FIEND", + "ELBOW", + "FAULT", + "DIRTY", + "BUDGET", + "SPIRIT", + "QUAINT", + "MAIDEN", + "ESCORT", + "PICKAX", + "EXAMPLE", + "TENSION", + "QUININE", + "KIDNEY", + "REPLICA", + "SLEEPER", + "TRIANGLE", + "KANGAROO", + "MAHOGANY", + "SERGEANT", + "SEQUENCE", + "MOUSTACHE", + "DANGEROUS", + "SCIENTIST", + "DIFFERENT", + "QUIESCENT", + "MAGISTRATE", + "ERRONEOUSLY", + "LOUDSPEAKER", + "PHYTOTOXIC", + "MATRIMONIAL", + "PARASYMPATHOMIMETIC", + "THIGMOTROPISM", +] + +def play_game guess_target + wrong_guesses = 0 + guess_progress = ["-"] * guess_target.length + guess_list = [] + + gallows = Canvas.new + init_gallows(gallows) + + guess_count = 0 + while true + puts "Here are the letters you used:" + puts "#{guess_list.join(",")}\n" + puts "#{guess_progress.join("")}\n" + + guess_letter = "" + guess_word = "" + while guess_letter == "" + print "What is your guess? " + guess_letter = gets.chomp!.upcase[0] + if !guess_letter.match?(/[[:alpha:]]/) + guess_letter = "" + puts "Only letters are allowed!" + elsif guess_list.include?(guess_letter) + guess_letter = "" + puts "You guessed that letter before!" + end + end + + guess_list << guess_letter + guess_count += 1 + + if guess_target.include?(guess_letter) + indices = (0...guess_target.length).find_all { |i| guess_target[i,1] == guess_letter } + + for i in indices do + guess_progress[i] = guess_letter + end + + if guess_progress.join("") == guess_target + puts "You found the word!" + break + else + puts "\n#{guess_progress.join("")}\n" + + while guess_word == "" + print "What is your guess for the word? " + guess_word = gets.chomp!.upcase + if !guess_word.match?(/[[:alpha:]]/) + guess_word = "" + puts "Only words are allowed!" + end + end + + if guess_word == guess_target + puts "Right!! It took you #{guess_count} guesses!" + break + end + end + else + comment, draw_bodypart = PHASES[wrong_guesses] + + puts comment + method(draw_bodypart).call(gallows) + puts gallows.render() + + wrong_guesses += 1 + puts "Sorry, that letter isn't in the word." + + if wrong_guesses == 10 + puts "Sorry, you lose. The word was #{guess_target}" + break + end + end + end +end + + +def main + puts "#{(" " * 32)}HANGMAN" + + shuffled = WORDS.shuffle(random: Random.new(1)) + current_word = 0 + word_count = shuffled.length + + keep_playing = true + while keep_playing + + play_game(WORDS[current_word]) + current_word += 1 + + if current_word == word_count + puts "You did all the words!!" + keep_playing = false + else + print "Want another word? (yes or no) " + a = gets.chomp!.upcase + keep_playing = true if a == 'Y' || a == 'y' || a == 'Yes' || a == 'YES' || a == 'yes' + end + end + puts "It's been fun! Bye for now." +end + +if __FILE__ == $0 + main +end \ No newline at end of file From 840c6f5aeadf5f8e256b4f1d1b2576ae220541e7 Mon Sep 17 00:00:00 2001 From: Argie Bacomo Date: Wed, 6 Apr 2022 09:25:42 +0800 Subject: [PATCH 2/3] indentions chnages --- 44_Hangman/ruby/hangman.rb | 42 +++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/44_Hangman/ruby/hangman.rb b/44_Hangman/ruby/hangman.rb index 85255785..354104ec 100644 --- a/44_Hangman/ruby/hangman.rb +++ b/44_Hangman/ruby/hangman.rb @@ -182,7 +182,7 @@ def play_game guess_target init_gallows(gallows) guess_count = 0 - while true + while true puts "Here are the letters you used:" puts "#{guess_list.join(",")}\n" puts "#{guess_progress.join("")}\n" @@ -246,35 +246,35 @@ def play_game guess_target break end end - end + end end def main - puts "#{(" " * 32)}HANGMAN" + puts "#{(" " * 32)}HANGMAN" - shuffled = WORDS.shuffle(random: Random.new(1)) - current_word = 0 - word_count = shuffled.length + shuffled = WORDS.shuffle(random: Random.new(1)) + current_word = 0 + word_count = shuffled.length - keep_playing = true - while keep_playing + keep_playing = true + while keep_playing - play_game(WORDS[current_word]) - current_word += 1 + play_game(WORDS[current_word]) + current_word += 1 - if current_word == word_count - puts "You did all the words!!" - keep_playing = false - else - print "Want another word? (yes or no) " - a = gets.chomp!.upcase - keep_playing = true if a == 'Y' || a == 'y' || a == 'Yes' || a == 'YES' || a == 'yes' - end - end - puts "It's been fun! Bye for now." + if current_word == word_count + puts "You did all the words!!" + keep_playing = false + else + print "Want another word? (yes or no) " + a = gets.chomp!.upcase + keep_playing = true if a == 'Y' || a == 'y' || a == 'Yes' || a == 'YES' || a == 'yes' + end + end + puts "It's been fun! Bye for now." end if __FILE__ == $0 - main + main end \ No newline at end of file From 3edaf4d00f1a43b89c63f6155fb1962891bf4a7c Mon Sep 17 00:00:00 2001 From: Argie Bacomo Date: Fri, 8 Apr 2022 11:50:49 +0800 Subject: [PATCH 3/3] Ruby version for poetry --- 70_Poetry/ruby/poetry.rb | 141 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 70_Poetry/ruby/poetry.rb diff --git a/70_Poetry/ruby/poetry.rb b/70_Poetry/ruby/poetry.rb new file mode 100644 index 00000000..4fe6afd3 --- /dev/null +++ b/70_Poetry/ruby/poetry.rb @@ -0,0 +1,141 @@ +PAGE_WIDTH = 64 + +class State + attr_accessor :u, :i, :j, :k, :phrase, :line + + def initialize + self.u = 0 + self.i = 0 + self.j = 0 + self.k = 0 + self.phrase = 1 + self.line = "" + end +end + + +def print_centered msg + spaces = " " * ((PAGE_WIDTH - msg.length).fdiv(2)) + print(spaces + msg) +end + +def process_phrase_1 state + line_1_options = [ + "MIDNIGHT DREARY", + "FIERY EYES", + "BIRD OR FIEND", + "THING OF EVIL", + "PROPHET" + ] + + state.line = state.line + line_1_options[state.i] + return state.line +end + +def process_phrase_2 state + line_2_options = [ + ["BEGUILING ME", 2], + ["THRILLED ME", nil], + ["STILL SITTING....", nil], + ["NEVER FLITTING", 2], + ["BURNED", nil] + ] + words, u_modifier = line_2_options[state.i] + state.line += words + if !u_modifier.nil? + state.u = u_modifier + end +end + +def process_phrase_3 state + phrases = [ + [false, "AND MY SOUL"], + [false, "DARKNESS THERE"], + [false, "SHALL BE LIFTED"], + [false, "QUOTH THE RAVEN"], + [true, "SIGN OF PARTING"] + ] + + only_if_u, words = phrases[state.i] + if !only_if_u || state.u > 0 + state.line = state.line + words + end +end + +def process_phrase_4 state + phrases = [ + "NOTHING MORE", + "YET AGAIN", + "SLOWLY CREEPING", + "...EVERMORE", + "NEVERMORE" + ] + + state.line += phrases[state.i] +end + +def maybe_comma state + if state.line.length > 0 && state.line[-1] == "." + return + end + + if state.u != 0 && Random.rand <= 0.19 + state.line += ", " + state.u = 2 + end + + if Random.rand <= 0.65 + state.line += " " + state.u += 1 + else + puts state.line + state.line = "" + state.u = 0 + end +end + +def pick_phrase state + state.i = Random.rand(0..4) + state.j += 1 + state.k += 1 + + if state.u <= 0 && (state.j % 2) != 0 + state.line += (" " * 5) + end + state.phrase = state.j + 1 +end + +def main + print_centered("POETRY") + state = State.new + phrase_processors = { + '1' => 'process_phrase_1', + '2' => 'process_phrase_2', + '3' => 'process_phrase_3', + '4' => 'process_phrase_4' + } + + while true + if state.phrase >= 1 && state.phrase <= 4 + method(phrase_processors[state.phrase.to_s]).call(state) + maybe_comma state + elsif state.phrase == 5 + state.j = 0 + puts state.line + state.line = "" + if state.k > 20 + puts "" + state.u = 0 + state.k = 0 + else + state.phrase = 2 + next + end + end + pick_phrase state + end +end + +if __FILE__ == $0 + main +end \ No newline at end of file