From 131fa5ff0e67fc46a8347c17e55b5f16073f3056 Mon Sep 17 00:00:00 2001 From: dee Date: Mon, 16 Jul 2018 14:06:17 -0700 Subject: [PATCH] intro on adagrams readme --- README.md | 167 ++++++++++++++++++++++++++++++++++++++++ assets/letter-tiles.jpg | Bin 0 -> 34209 bytes 2 files changed, 167 insertions(+) create mode 100644 README.md create mode 100644 assets/letter-tiles.jpg diff --git a/README.md b/README.md new file mode 100644 index 0000000..57053a3 --- /dev/null +++ b/README.md @@ -0,0 +1,167 @@ +# Adagrams + +## At a Glance +- Pair, [stage 2](https://github.com/Ada-Developers-Academy/pedagogy/blob/master/rule-of-three.md#stage-2) project +- Due before class, **DATE HERE** + +## Introduction + +An [anagram](https://en.wikipedia.org/wiki/Anagram) is a word or phrase formed by rearranging the letters of a different word or phrase. _Adagrams_ is a fictional game in which a player is given a random set of letters and must make an anagram using those letters. _Adagrams_ has a specific scoring system, so that the player's submitted anagram scores points. The rules for Adagrams are roughly inspired by the "Letter Round" portion of the British game show [Countdown](https://en.wikipedia.org/wiki/Countdown_%28game_show%29%23Letters_round). + +While working on _Adagrams_, it may help to think of a physical metaphor for this game, such as other common word games like _Scrabble_ or _Bananagrams_. These analog games all feature a _pile_ of letter _tiles_ that the player _draws_ from. + +![an image of a pile of letter tiles](assets/letter-tiles.jpg) + +## Learning Goals + +- Write Ruby code with methods that store data, read data, and manipulate data +- Write Ruby code that takes in user input +- Use pair-programming techniques +- Instill the habit of running unit tests to verify that the program works as expected + +## Objective + +We will make a Ruby implementation of _Adagrams_ that runs [in the command line](https://en.wikipedia.org/wiki/Command-line_interface). The player will run this program. The program should give some output, wait for user interaction, and calculate output afterwards. + +The program should also pass the provided unit tests. + +## Getting Started + +* From the project root, you are able to execute all of your specs by running `rake` in Terminal +* You will need to use `require_relative` to tell Ruby how to work with code defined in multiple files + +
+For the curious about `rake`, click here +`rake` [(official site)](https://github.com/ruby/rake) is a program that runs tasks that we define. In this case, we have a pre-defined task that executes the tests. By running `rake`, we are saying something like, "Please run the tasks, which includes the task that executes the tests." +
+ +### Tests +We will use [minitest](https://github.com/seattlerb/minitest) for this project. + +We have provided you with a `Rakefile` and spec files. The tests in these spec files require that you follow the naming conventions we define for you below. + +Do not move onto a new tier of requirements until the minimum requirements of the previous tier are complete and your specs are green across the board. + + + +### Pair Programming +Utilize good pair programming practices. Refer to articles from the [Agile Alliance](http://guide.agilealliance.org/guide/pairing.html), the [Agile Institute](http://powersoftwo.agileinstitute.com/2015/02/benefits-of-pair-programming-revisited.html), and [our own suggestions for pairing](https://github.com/Ada-Developers-Academy/textbook-curriculum/blob/master/00-programming-fundamentals/programming-techniques-pairs-or-solo.md#pair-programming) if you need a refresher for some best practices. Switch _driver_ and _navigator_ roles often. When there is uncertainty or confusion, step away from the keyboard and discuss, plan, and document on paper or whiteboard before continuing. + +## Baseline +### Setup +1. You'll be working with an assigned pair. High-five your pair. +1. Choose **one person** to fork the project repo. +1. Add the other person in the pair (who didn't fork) to the forked repo as a _collaborator_. Instructions [here](https://help.github.com/articles/inviting-collaborators-to-a-personal-repository/). +1. Both individuals will clone the forked repo: `$ git clone [YOUR FORKED REPO URL]` +1. Both individuals `cd` into the dir created. + +### Requirements +#### Pair Plan +First, come up with a "plan of action" for how you want to work as a pair. Discuss your learning style, how you prefer to receive feedback, and one team communication skill you want to improve with this experience. Then, review the requirements for Wave 1 and come up with a "plan of action" for your implementation. + +#### Implementation +- Read through the file `lib/scoring.rb`. Inside this file, you should find: + - A `Scrabble` module + - A `Scrabble::Scoring` **class** +- Add some sort of data structure to `Scrabble::Scoring` to store the **individual letter scores** listed below +- Read through the spec file `specs/scoring_spec.rb`, which corresponds to your `Scrabble::Scoring` class. This file has some tests pre-written and some test stubs that you will need to fill in. +- Be able to execute the tests using `rake` from the project root. + +#### Score chart +|Letter | Value| +|:----------------------------:|:----:| +|A, E, I, O, U, L, N, R, S, T | 1 | +|D, G | 2 | +|B, C, M, P | 3 | +|F, H, V, W, Y | 4 | +|K | 5 | +|J, X | 8 | +|Q, Z | 10 | + +## Wave 1 +### Primary Requirements +For wave 1 you are given some scaffolding: tests and test stubs in `specs/scoring_spec.rb`, and method stubs in `lib/scoring.rb`. + +Complete the `Scrabble::Scoring` class with __full unit testing/specs__. All provided tests should pass, and all stubbed tests should be fully implemented (and pass). The class should have the following **class methods**: + +- `self.score(word)`: returns the total score for the given word. The word is input as a string (case insensitive). The chart in the baseline requirements shows the point value for a given letter. + - A seven letter word means that a player used all the tiles. Seven letter words receive a __50__ point bonus. + - Tests for `Scoring.score` are _already written_. Your job is to write code to make them pass. +- `self.highest_score_from(array_of_words)`: returns **the word in the array with the highest score**. In the case of tie, use these tie-breaking rules: + - It’s better to use fewer tiles, in the case of a tie, prefer the word with the fewest letters. + - There is a bonus for words that are seven letters. If the top score is tied between multiple words and one used all seven letters, choose the one with seven letters over the one with fewer tiles. + - If the there are multiple words that are the same score and same length, pick the first one in the supplied list. + - Tests for this logic are _stubbed_, meaning the test has a name but no code written. You will have to implement them as you work on this method. + - Ensure that `self.highest_score_from(array_of_words)` works correctly regardless of the order of the words. Write a test for this case + +## Wave 2 +### Primary Requirements +For waves 2 and 3, you are given no starter code. You and your pair will have to create all files and classes and write all the tests yourselves. + +Create a `Scrabble::Player` class with __full unit testing/specs__. You should have a spec that tests all pieces of functionality and logic. + +The constructor for `Scrabble::Player` should take exactly one argument: the player's `name`. Instances of the class should respond to the following messages: + +- `#name`: returns the value of the `@name` instance variable +- `#plays`: returns an Array of the words played by the player +- `#play(word)`: Adds the input word to the `plays` Array + - Returns `false` if player has already won + - Otherwise returns the score of the `word` +- `#total_score`: Returns the sum of scores of played words +- `#won?`: If the player has over 100 points, returns `true`, otherwise returns `false` +- `#highest_scoring_word`: Returns the highest scoring played word +- `#highest_word_score`: Returns the `highest_scoring_word` score + +For example, + +```ruby +player = Scrabble::Player.new("Ada") +player.name # => "Ada" +player.play('cat') # => 5 +player.play('lizard') # => 16 +puts player.highest_scoring_word +# prints out "lizard" +``` + +## Wave 3 +### Primary Requirements +#### `TileBag` +Create a `Scrabble::TileBag` class with __full unit testing/specs__. You should have a spec that tests all pieces of functionality and logic. It should have the following class and instance methods: + +- `#initialize` Should set up the instance with a collection of all default tiles +- `#draw_tiles(num)` returns a collection of random tiles, removes the tiles from the default set +- `#tiles_remaining` returns the number of tiles remaining in the bag + +##### Initial Distribution of Letters +| Letter : Qty. | Letter : Qty. | +|:------:|:-----:| +| A : 9 | N : 6 | +| B : 2 | O : 8 | +| C : 2 | P : 2 | +| D : 4 | Q : 1 | +| E : 12 | R : 6 | +| F : 2 | S : 4 | +| G : 3 | T : 6 | +| H : 2 | U : 4 | +| I : 9 | V : 2 | +| J : 1 | W : 2 | +| K : 1 | X : 1 | +| L : 4 | Y : 2 | +| M : 2 | Z : 1 | + +#### Modifications to `Player` +Create specs for and add to the `Player` class the following instance methods: + +- `#tiles` a collection of letters that the player can play (max 7) +- `#draw_tiles(tile_bag)` fills tiles array until it has 7 letters from the given tile bag + - It is not in the primary requirements to modify the existing `#play(word)` to use `#tiles` or check against the player's tiles + +### Optional Enhancements +These need to be tested too! +- Modify in `Player` the `#play(word)` method to only allow the player to play words using letters that the player has tiles for. +- Create a `Scrabble::Dictionary` class that includes a method (class or instance) for searching a list of words to determine if a given word is valid (__must have tests__). +- Create a `Scrabble::Board` class (__must have tests__) that has a matrix (array of arrays) of tile places. Check if a word can be played on a given tile place in a certain direction (up/down or left/right). + +## What Instructors Are Looking For +Check out the [feedback template](feedback.md) which lists the items instructors will be looking for as they evaluate your project. diff --git a/assets/letter-tiles.jpg b/assets/letter-tiles.jpg new file mode 100644 index 0000000000000000000000000000000000000000..065ecc7efafd2ead7f9509ba9abcbee942ffe323 GIT binary patch literal 34209 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