trackler 2.0.6.12 → 2.0.6.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/lib/trackler/version.rb +1 -1
 - data/tracks/c/docs/ABOUT.md +5 -0
 - data/tracks/c/docs/INSTALLATION.md +5 -6
 - data/tracks/c/docs/LEARNING.md +34 -0
 - data/tracks/c/docs/RESOURCES.md +3 -0
 - data/tracks/csharp/config.json +9 -0
 - data/tracks/csharp/exercises/pov/Example.cs +125 -0
 - data/tracks/csharp/exercises/pov/PovTest.cs +160 -0
 - data/tracks/csharp/exercises/sum-of-multiples/SumOfMultiplesTest.cs +12 -6
 - data/tracks/go/exercises/meetup/cases_test.go +0 -0
 - data/tracks/go/exercises/raindrops/cases_test.go +0 -0
 - data/tracks/go/exercises/rna-transcription/cases_test.go +0 -0
 - data/tracks/go/exercises/roman-numerals/cases_test.go +0 -0
 - data/tracks/go/exercises/word-count/cases_test.go +0 -0
 - data/tracks/go/gen/gen.go +1 -1
 - data/tracks/java/docs/MAINTAINING.md +11 -6
 - data/tracks/java/exercises/meetup/src/test/java/MeetupTest.java +91 -91
 - data/tracks/java/exercises/settings.gradle +1 -0
 - data/tracks/kotlin/config.json +2 -1
 - data/tracks/kotlin/exercises/_template/build.gradle +1 -1
 - data/tracks/kotlin/exercises/accumulate/build.gradle +1 -1
 - data/tracks/kotlin/exercises/acronym/build.gradle +1 -1
 - data/tracks/kotlin/exercises/allergies/build.gradle +1 -1
 - data/tracks/kotlin/exercises/anagram/build.gradle +1 -1
 - data/tracks/kotlin/exercises/atbash-cipher/build.gradle +1 -1
 - data/tracks/kotlin/exercises/beer-song/build.gradle +1 -1
 - data/tracks/kotlin/exercises/binary-search/build.gradle +1 -1
 - data/tracks/kotlin/exercises/binary/build.gradle +1 -1
 - data/tracks/kotlin/exercises/bob/build.gradle +1 -1
 - data/tracks/kotlin/exercises/bracket-push/build.gradle +1 -1
 - data/tracks/kotlin/exercises/change/build.gradle +1 -1
 - data/tracks/kotlin/exercises/difference-of-squares/build.gradle +1 -1
 - data/tracks/kotlin/exercises/etl/build.gradle +1 -1
 - data/tracks/kotlin/exercises/flatten-array/build.gradle +1 -1
 - data/tracks/kotlin/exercises/gigasecond/build.gradle +1 -1
 - data/tracks/kotlin/exercises/grade-school/build.gradle +1 -1
 - data/tracks/kotlin/exercises/hamming/build.gradle +1 -1
 - data/tracks/kotlin/exercises/hello-world/build.gradle +1 -1
 - data/tracks/kotlin/exercises/hexadecimal/build.gradle +1 -1
 - data/tracks/kotlin/exercises/isogram/build.gradle +1 -1
 - data/tracks/kotlin/exercises/largest-series-product/build.gradle +1 -1
 - data/tracks/kotlin/exercises/leap/build.gradle +1 -1
 - data/tracks/kotlin/exercises/linked-list/build.gradle +1 -1
 - data/tracks/kotlin/exercises/luhn/build.gradle +1 -1
 - data/tracks/kotlin/exercises/nth-prime/build.gradle +1 -1
 - data/tracks/kotlin/exercises/nucleotide-count/build.gradle +1 -1
 - data/tracks/kotlin/exercises/pangram/build.gradle +1 -1
 - data/tracks/kotlin/exercises/pascals-triangle/build.gradle +1 -1
 - data/tracks/kotlin/exercises/phone-number/build.gradle +1 -1
 - data/tracks/kotlin/exercises/pig-latin/build.gradle +1 -1
 - data/tracks/kotlin/exercises/raindrops/build.gradle +1 -1
 - data/tracks/kotlin/exercises/rna-transcription/build.gradle +1 -1
 - data/tracks/kotlin/exercises/rna-transcription/src/example/kotlin/RnaTranscription.kt +9 -12
 - data/tracks/kotlin/exercises/rna-transcription/src/main/kotlin/RnaTranscription.kt +9 -0
 - data/tracks/kotlin/exercises/rna-transcription/src/test/kotlin/RnaTranscriptionTest.kt +6 -6
 - data/tracks/kotlin/exercises/robot-name/build.gradle +1 -1
 - data/tracks/kotlin/exercises/roman-numerals/build.gradle +1 -1
 - data/tracks/kotlin/exercises/scrabble-score/build.gradle +1 -1
 - data/tracks/kotlin/exercises/series/build.gradle +1 -1
 - data/tracks/kotlin/exercises/sieve/build.gradle +1 -1
 - data/tracks/kotlin/exercises/simple-cipher/build.gradle +1 -1
 - data/tracks/kotlin/exercises/space-age/build.gradle +1 -1
 - data/tracks/kotlin/exercises/strain/build.gradle +1 -1
 - data/tracks/kotlin/exercises/word-count/build.gradle +1 -1
 - data/tracks/lua/exercises/circular-buffer/circular-buffer_spec.lua +1 -1
 - data/tracks/pascal/docs/INSTALLATION.md +7 -5
 - data/tracks/pascal/docs/TESTS.md +4 -0
 - data/tracks/php/config.json +9 -0
 - data/tracks/php/exercises/ocr-numbers/example.php +113 -0
 - data/tracks/php/exercises/ocr-numbers/ocr-numbers_test.php +222 -0
 - metadata +10 -3
 - data/tracks/kotlin/exercises/rna-transcription/src/main/kotlin/.keep +0 -0
 
| 
         @@ -1,18 +1,20 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # Installing Delphi and DUnitX Testing Framework #
         
     | 
| 
       2 
2 
     | 
    
         
             
            ### Windows ###
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
            30 day free trial of Embarcadero's RAD Studio or Delphi may be downloaded from [here](https://www.embarcadero.com/products?utm_source=google&utm_medium=cpc&utm_campaign=brand&utm_content=brand&utm_embarcadero&gclid=CjwKEAiAp97CBRDr2Oyl-faxqRMSJABx4kh9V8bOEuG0CznQ9AGToIyuKeTzvevljmHTboYXk4n6OxoC4Frw_wcB).  Follow installation instructions included with the product.
         
     | 
| 
      
 4 
     | 
    
         
            +
            A 30 day free trial of Embarcadero's RAD Studio or Delphi may be downloaded from [here](https://www.embarcadero.com/products?utm_source=google&utm_medium=cpc&utm_campaign=brand&utm_content=brand&utm_embarcadero&gclid=CjwKEAiAp97CBRDr2Oyl-faxqRMSJABx4kh9V8bOEuG0CznQ9AGToIyuKeTzvevljmHTboYXk4n6OxoC4Frw_wcB).  Alternatively, a free [Starter Edition](https://www.embarcadero.com/products/delphi/starter/promotional-download) version is also available.  Follow installation instructions included with the product.
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            ### Non-Windows based Operating Systems ###
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
      
 8 
     | 
    
         
            +
            Delphi will not run in a non-Windows based operating system.  However, it is possible to run Delphi within a virtual machine that is hosting Windows.
         
     | 
| 
       10 
9 
     | 
    
         | 
| 
       11 
10 
     | 
    
         
             
            ### Installing DUnitX Test Framework ###
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
      
 11 
     | 
    
         
            +
            DUnitX comes installed in Delphi version XE8 and up with an exception for the Starter Edition of Delphi.
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            With Delphi successfully installed, and working correctly, please follow these steps for retrieving and installing DUnitX if you find that your installation of Delphi is lacking the DUnitX framework.
         
     | 
| 
       13 
14 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
            - DUnitX is an open source project by [VSoftTechnologies](https://www.github.com/VSoftTechnologies).  The DUnitX  
     | 
| 
      
 15 
     | 
    
         
            +
            - DUnitX is an open source project by [VSoftTechnologies](https://www.github.com/VSoftTechnologies).  The DUnitX GitHub repo is available [here](https://github.com/VSoftTechnologies/DUnitX).
         
     | 
| 
       15 
16 
     | 
    
         
             
            - It is best to fork the repo and then clone or otherwise download the fork to your local machine.
         
     | 
| 
       16 
17 
     | 
    
         
             
            - Step-by-step instructions on how to install DUnitX into Delphi have been posted by Vincent Parrett in a blog post located [here](https://www.finalbuilder.com/resources/blogs/postid/702/dunitx-has-a-wizard).
         
     | 
| 
      
 18 
     | 
    
         
            +
            - The Starter Edition of Delphi doesn't allow the use of project experts.  DUnitX comes with an expert which will aid the student in creating a new DUnitX based project.  The expert creates the project's .DPR file.  The exercises in this track all include the .DPR file making the expert not necessary.  DUnitX otherwise has no issues with projects created in Delphi versions starting with XE all the way up to and including the Starter Edition of Berlin.
         
     | 
| 
       17 
19 
     | 
    
         | 
| 
       18 
20 
     | 
    
         
             
            *Note: It is assumed that Delphi versions XE and higher are being utilized by the student.*
         
     | 
    
        data/tracks/pascal/docs/TESTS.md
    CHANGED
    
    | 
         @@ -0,0 +1,4 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            All tests have been ignored except the first one for you to work on. To continue, just comment the ```[Ignore]``` attribute on the test to start working on it.
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            Make sure [DUnitX](https://github.com/VSoftTechnologies/DUnitX) is installed, if not already installed from the setup above.
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
    
        data/tracks/php/config.json
    CHANGED
    
    
| 
         @@ -0,0 +1,113 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <?php
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            function recognize($ocr)
         
     | 
| 
      
 4 
     | 
    
         
            +
            {
         
     | 
| 
      
 5 
     | 
    
         
            +
                return (new OcrBlock($ocr))->recognize();
         
     | 
| 
      
 6 
     | 
    
         
            +
            }
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            class OcrBlock
         
     | 
| 
      
 9 
     | 
    
         
            +
            {
         
     | 
| 
      
 10 
     | 
    
         
            +
                protected $ocr = [];
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                public function __construct($ocr)
         
     | 
| 
      
 14 
     | 
    
         
            +
                {
         
     | 
| 
      
 15 
     | 
    
         
            +
                    $this->ocr = $ocr;
         
     | 
| 
      
 16 
     | 
    
         
            +
                    $this->validate();
         
     | 
| 
      
 17 
     | 
    
         
            +
                }
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                /**
         
     | 
| 
      
 21 
     | 
    
         
            +
                 * Validate OCR block format: size, proportions
         
     | 
| 
      
 22 
     | 
    
         
            +
                 * @throws InvalidArgumentException
         
     | 
| 
      
 23 
     | 
    
         
            +
                 */
         
     | 
| 
      
 24 
     | 
    
         
            +
                public function validate()
         
     | 
| 
      
 25 
     | 
    
         
            +
                {
         
     | 
| 
      
 26 
     | 
    
         
            +
                    $numRows = count($this->ocr);
         
     | 
| 
      
 27 
     | 
    
         
            +
                    $numColumns = strlen($this->ocr[0]);
         
     | 
| 
      
 28 
     | 
    
         
            +
                    if (!$numRows
         
     | 
| 
      
 29 
     | 
    
         
            +
                        || ($numRows % OcrSymbol::NUM_ROWS != 0)
         
     | 
| 
      
 30 
     | 
    
         
            +
                        || !$numColumns
         
     | 
| 
      
 31 
     | 
    
         
            +
                        || ($numColumns % OcrSymbol::NUM_COLUMNS != 0)
         
     | 
| 
      
 32 
     | 
    
         
            +
                    ) {
         
     | 
| 
      
 33 
     | 
    
         
            +
                        throw new InvalidArgumentException('Malformed OCR Input');
         
     | 
| 
      
 34 
     | 
    
         
            +
                    }
         
     | 
| 
      
 35 
     | 
    
         
            +
                    foreach ($this->ocr as $row) {
         
     | 
| 
      
 36 
     | 
    
         
            +
                        if (strlen($row) != $numColumns) {
         
     | 
| 
      
 37 
     | 
    
         
            +
                            throw new InvalidArgumentException('Malformed OCR Input');
         
     | 
| 
      
 38 
     | 
    
         
            +
                        }
         
     | 
| 
      
 39 
     | 
    
         
            +
                    }
         
     | 
| 
      
 40 
     | 
    
         
            +
                }
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                /**
         
     | 
| 
      
 44 
     | 
    
         
            +
                 * Recognize OCR block: split it into vertical fragments,
         
     | 
| 
      
 45 
     | 
    
         
            +
                 * explode them into symbols and recognize them.
         
     | 
| 
      
 46 
     | 
    
         
            +
                 * @return string
         
     | 
| 
      
 47 
     | 
    
         
            +
                 */
         
     | 
| 
      
 48 
     | 
    
         
            +
                public function recognize()
         
     | 
| 
      
 49 
     | 
    
         
            +
                {
         
     | 
| 
      
 50 
     | 
    
         
            +
                    return implode(',', array_map(function ($x) {
         
     | 
| 
      
 51 
     | 
    
         
            +
                        return implode('', array_map(function ($y) {
         
     | 
| 
      
 52 
     | 
    
         
            +
                            return (new OcrSymbol($y))->getDigit();
         
     | 
| 
      
 53 
     | 
    
         
            +
                        }, $this->explode($x)));
         
     | 
| 
      
 54 
     | 
    
         
            +
                    }, array_chunk($this->ocr, OcrSymbol::NUM_ROWS)));
         
     | 
| 
      
 55 
     | 
    
         
            +
                }
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                /**
         
     | 
| 
      
 59 
     | 
    
         
            +
                 * Explode OCR fragment into OCR symbols
         
     | 
| 
      
 60 
     | 
    
         
            +
                 * @param type $ocrFragment
         
     | 
| 
      
 61 
     | 
    
         
            +
                 * @return type
         
     | 
| 
      
 62 
     | 
    
         
            +
                 */
         
     | 
| 
      
 63 
     | 
    
         
            +
                protected function explode($ocrFragment)
         
     | 
| 
      
 64 
     | 
    
         
            +
                {
         
     | 
| 
      
 65 
     | 
    
         
            +
                    $exploded = array_map(function ($x) {
         
     | 
| 
      
 66 
     | 
    
         
            +
                        return str_split($x, OcrSymbol::NUM_COLUMNS);
         
     | 
| 
      
 67 
     | 
    
         
            +
                    }, $ocrFragment);
         
     | 
| 
      
 68 
     | 
    
         
            +
                    return array_map(function ($a, $b, $c, $d) {
         
     | 
| 
      
 69 
     | 
    
         
            +
                        return [$a, $b, $c, $d];
         
     | 
| 
      
 70 
     | 
    
         
            +
                    }, $exploded[0], $exploded[1], $exploded[2], $exploded[3]);
         
     | 
| 
      
 71 
     | 
    
         
            +
                }
         
     | 
| 
      
 72 
     | 
    
         
            +
            }
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
            class OcrSymbol
         
     | 
| 
      
 76 
     | 
    
         
            +
            {
         
     | 
| 
      
 77 
     | 
    
         
            +
                const NUM_ROWS = 4;
         
     | 
| 
      
 78 
     | 
    
         
            +
                const NUM_COLUMNS = 3;
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                protected $map = [
         
     | 
| 
      
 81 
     | 
    
         
            +
                    'x_x|x||_|xxx' => '0',
         
     | 
| 
      
 82 
     | 
    
         
            +
                    'xxxxx|xx|xxx' => '1',
         
     | 
| 
      
 83 
     | 
    
         
            +
                    'x_xx_||_xxxx' => '2',
         
     | 
| 
      
 84 
     | 
    
         
            +
                    'x_xx_|x_|xxx' => '3',
         
     | 
| 
      
 85 
     | 
    
         
            +
                    'xxx|_|xx|xxx' => '4',
         
     | 
| 
      
 86 
     | 
    
         
            +
                    'x_x|_xx_|xxx' => '5',
         
     | 
| 
      
 87 
     | 
    
         
            +
                    'x_x|_x|_|xxx' => '6',
         
     | 
| 
      
 88 
     | 
    
         
            +
                    'x_xxx|xx|xxx' => '7',
         
     | 
| 
      
 89 
     | 
    
         
            +
                    'x_x|_||_|xxx' => '8',
         
     | 
| 
      
 90 
     | 
    
         
            +
                    'x_x|_|x_|xxx' => '9',
         
     | 
| 
      
 91 
     | 
    
         
            +
                ];
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                protected $ocr;
         
     | 
| 
      
 94 
     | 
    
         
            +
                protected $digit;
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                public function __construct($ocr)
         
     | 
| 
      
 97 
     | 
    
         
            +
                {
         
     | 
| 
      
 98 
     | 
    
         
            +
                    $this->ocr = $ocr;
         
     | 
| 
      
 99 
     | 
    
         
            +
                }
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                /**
         
     | 
| 
      
 102 
     | 
    
         
            +
                 * Translate OCR to digit
         
     | 
| 
      
 103 
     | 
    
         
            +
                 * @return string
         
     | 
| 
      
 104 
     | 
    
         
            +
                 */
         
     | 
| 
      
 105 
     | 
    
         
            +
                public function getDigit()
         
     | 
| 
      
 106 
     | 
    
         
            +
                {
         
     | 
| 
      
 107 
     | 
    
         
            +
                    if ($this->digit === null) {
         
     | 
| 
      
 108 
     | 
    
         
            +
                        $encoded = str_replace(' ', 'x', implode($this->ocr));
         
     | 
| 
      
 109 
     | 
    
         
            +
                        $this->digit = array_key_exists($encoded, $this->map) ? $this->map[$encoded] : '?';
         
     | 
| 
      
 110 
     | 
    
         
            +
                    }
         
     | 
| 
      
 111 
     | 
    
         
            +
                    return $this->digit;
         
     | 
| 
      
 112 
     | 
    
         
            +
                }
         
     | 
| 
      
 113 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -0,0 +1,222 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <?php
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            include_once 'ocr-numbers.php';
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            class OcrNumbersTest extends PHPUnit_Framework_TestCase
         
     | 
| 
      
 6 
     | 
    
         
            +
            {
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                /**
         
     | 
| 
      
 9 
     | 
    
         
            +
                 * Recognition result should be returned as a string
         
     | 
| 
      
 10 
     | 
    
         
            +
                 */
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                public function testRecognizes0()
         
     | 
| 
      
 13 
     | 
    
         
            +
                {
         
     | 
| 
      
 14 
     | 
    
         
            +
                    $input = [
         
     | 
| 
      
 15 
     | 
    
         
            +
                        " _ ",
         
     | 
| 
      
 16 
     | 
    
         
            +
                        "| |",
         
     | 
| 
      
 17 
     | 
    
         
            +
                        "|_|",
         
     | 
| 
      
 18 
     | 
    
         
            +
                        "   ",
         
     | 
| 
      
 19 
     | 
    
         
            +
                    ];
         
     | 
| 
      
 20 
     | 
    
         
            +
                    $this->assertSame('0', recognize($input));
         
     | 
| 
      
 21 
     | 
    
         
            +
                }
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                public function testRecognizes1()
         
     | 
| 
      
 24 
     | 
    
         
            +
                {
         
     | 
| 
      
 25 
     | 
    
         
            +
                    $input = [
         
     | 
| 
      
 26 
     | 
    
         
            +
                        "   ",
         
     | 
| 
      
 27 
     | 
    
         
            +
                        "  |",
         
     | 
| 
      
 28 
     | 
    
         
            +
                        "  |",
         
     | 
| 
      
 29 
     | 
    
         
            +
                        "   ",
         
     | 
| 
      
 30 
     | 
    
         
            +
                    ];
         
     | 
| 
      
 31 
     | 
    
         
            +
                    $this->assertSame('1', recognize($input));
         
     | 
| 
      
 32 
     | 
    
         
            +
                }
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                /**
         
     | 
| 
      
 35 
     | 
    
         
            +
                 * Unreadable but correctly sized inputs return ?
         
     | 
| 
      
 36 
     | 
    
         
            +
                 */
         
     | 
| 
      
 37 
     | 
    
         
            +
                public function testUnreadable()
         
     | 
| 
      
 38 
     | 
    
         
            +
                {
         
     | 
| 
      
 39 
     | 
    
         
            +
                    $input = [
         
     | 
| 
      
 40 
     | 
    
         
            +
                        "   ",
         
     | 
| 
      
 41 
     | 
    
         
            +
                        "  _",
         
     | 
| 
      
 42 
     | 
    
         
            +
                        "  |",
         
     | 
| 
      
 43 
     | 
    
         
            +
                        "   ",
         
     | 
| 
      
 44 
     | 
    
         
            +
                    ];
         
     | 
| 
      
 45 
     | 
    
         
            +
                    $this->assertSame('?', recognize($input));
         
     | 
| 
      
 46 
     | 
    
         
            +
                }
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                /**
         
     | 
| 
      
 49 
     | 
    
         
            +
                 * Input with a number of lines that is not a multiple of four raises an error
         
     | 
| 
      
 50 
     | 
    
         
            +
                 * @expectedException InvalidArgumentException
         
     | 
| 
      
 51 
     | 
    
         
            +
                 */
         
     | 
| 
      
 52 
     | 
    
         
            +
                public function testErrorWrongNumberOfLines()
         
     | 
| 
      
 53 
     | 
    
         
            +
                {
         
     | 
| 
      
 54 
     | 
    
         
            +
                    $input = [
         
     | 
| 
      
 55 
     | 
    
         
            +
                        " _ ",
         
     | 
| 
      
 56 
     | 
    
         
            +
                        "| |",
         
     | 
| 
      
 57 
     | 
    
         
            +
                        "   ",
         
     | 
| 
      
 58 
     | 
    
         
            +
                    ];
         
     | 
| 
      
 59 
     | 
    
         
            +
                    recognize($input);
         
     | 
| 
      
 60 
     | 
    
         
            +
                }
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                /**
         
     | 
| 
      
 63 
     | 
    
         
            +
                 * Input with a number of columns that is not a multiple of three raises an error
         
     | 
| 
      
 64 
     | 
    
         
            +
                 * @expectedException InvalidArgumentException
         
     | 
| 
      
 65 
     | 
    
         
            +
                 */
         
     | 
| 
      
 66 
     | 
    
         
            +
                public function testErrorWrongNumberOfColumns()
         
     | 
| 
      
 67 
     | 
    
         
            +
                {
         
     | 
| 
      
 68 
     | 
    
         
            +
                    $input = [
         
     | 
| 
      
 69 
     | 
    
         
            +
                        "    ",
         
     | 
| 
      
 70 
     | 
    
         
            +
                        "   |",
         
     | 
| 
      
 71 
     | 
    
         
            +
                        "   |",
         
     | 
| 
      
 72 
     | 
    
         
            +
                        "    ",
         
     | 
| 
      
 73 
     | 
    
         
            +
                    ];
         
     | 
| 
      
 74 
     | 
    
         
            +
                    recognize($input);
         
     | 
| 
      
 75 
     | 
    
         
            +
                }
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                public function testRecognizes110101100()
         
     | 
| 
      
 78 
     | 
    
         
            +
                {
         
     | 
| 
      
 79 
     | 
    
         
            +
                    $input = [
         
     | 
| 
      
 80 
     | 
    
         
            +
                        "       _     _        _  _ ",
         
     | 
| 
      
 81 
     | 
    
         
            +
                        "  |  || |  || |  |  || || |",
         
     | 
| 
      
 82 
     | 
    
         
            +
                        "  |  ||_|  ||_|  |  ||_||_|",
         
     | 
| 
      
 83 
     | 
    
         
            +
                        "                           ",
         
     | 
| 
      
 84 
     | 
    
         
            +
                    ];
         
     | 
| 
      
 85 
     | 
    
         
            +
                    $this->assertSame('110101100', recognize($input));
         
     | 
| 
      
 86 
     | 
    
         
            +
                }
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                /**
         
     | 
| 
      
 89 
     | 
    
         
            +
                 * Garbled numbers in a string are replaced with ?
         
     | 
| 
      
 90 
     | 
    
         
            +
                 */
         
     | 
| 
      
 91 
     | 
    
         
            +
                public function testGarbled()
         
     | 
| 
      
 92 
     | 
    
         
            +
                {
         
     | 
| 
      
 93 
     | 
    
         
            +
                    $input = [
         
     | 
| 
      
 94 
     | 
    
         
            +
                        "       _     _           _ ",
         
     | 
| 
      
 95 
     | 
    
         
            +
                        "  |  || |  || |     || || |",
         
     | 
| 
      
 96 
     | 
    
         
            +
                        "  |  | _|  ||_|  |  ||_||_|",
         
     | 
| 
      
 97 
     | 
    
         
            +
                        "                           ",
         
     | 
| 
      
 98 
     | 
    
         
            +
                    ];
         
     | 
| 
      
 99 
     | 
    
         
            +
                    $this->assertSame('11?10?1?0', recognize($input));
         
     | 
| 
      
 100 
     | 
    
         
            +
                }
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                public function testRecognizes2()
         
     | 
| 
      
 103 
     | 
    
         
            +
                {
         
     | 
| 
      
 104 
     | 
    
         
            +
                    $input = [
         
     | 
| 
      
 105 
     | 
    
         
            +
                        " _ ",
         
     | 
| 
      
 106 
     | 
    
         
            +
                        " _|",
         
     | 
| 
      
 107 
     | 
    
         
            +
                        "|_ ",
         
     | 
| 
      
 108 
     | 
    
         
            +
                        "   ",
         
     | 
| 
      
 109 
     | 
    
         
            +
                    ];
         
     | 
| 
      
 110 
     | 
    
         
            +
                    $this->assertSame('2', recognize($input));
         
     | 
| 
      
 111 
     | 
    
         
            +
                }
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                public function testRecognizes3()
         
     | 
| 
      
 114 
     | 
    
         
            +
                {
         
     | 
| 
      
 115 
     | 
    
         
            +
                    $input = [
         
     | 
| 
      
 116 
     | 
    
         
            +
                        " _ ",
         
     | 
| 
      
 117 
     | 
    
         
            +
                        " _|",
         
     | 
| 
      
 118 
     | 
    
         
            +
                        " _|",
         
     | 
| 
      
 119 
     | 
    
         
            +
                        "   ",
         
     | 
| 
      
 120 
     | 
    
         
            +
                    ];
         
     | 
| 
      
 121 
     | 
    
         
            +
                    $this->assertSame('3', recognize($input));
         
     | 
| 
      
 122 
     | 
    
         
            +
                }
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
| 
      
 124 
     | 
    
         
            +
                public function testRecognizes4()
         
     | 
| 
      
 125 
     | 
    
         
            +
                {
         
     | 
| 
      
 126 
     | 
    
         
            +
                    $input = [
         
     | 
| 
      
 127 
     | 
    
         
            +
                        "   ",
         
     | 
| 
      
 128 
     | 
    
         
            +
                        "|_|",
         
     | 
| 
      
 129 
     | 
    
         
            +
                        "  |",
         
     | 
| 
      
 130 
     | 
    
         
            +
                        "   ",
         
     | 
| 
      
 131 
     | 
    
         
            +
                    ];
         
     | 
| 
      
 132 
     | 
    
         
            +
                    $this->assertSame('4', recognize($input));
         
     | 
| 
      
 133 
     | 
    
         
            +
                }
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
                public function testRecognizes5()
         
     | 
| 
      
 136 
     | 
    
         
            +
                {
         
     | 
| 
      
 137 
     | 
    
         
            +
                    $input = [
         
     | 
| 
      
 138 
     | 
    
         
            +
                        " _ ",
         
     | 
| 
      
 139 
     | 
    
         
            +
                        "|_ ",
         
     | 
| 
      
 140 
     | 
    
         
            +
                        " _|",
         
     | 
| 
      
 141 
     | 
    
         
            +
                        "   ",
         
     | 
| 
      
 142 
     | 
    
         
            +
                    ];
         
     | 
| 
      
 143 
     | 
    
         
            +
                    $this->assertSame('5', recognize($input));
         
     | 
| 
      
 144 
     | 
    
         
            +
                }
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
                public function testRecognizes6()
         
     | 
| 
      
 147 
     | 
    
         
            +
                {
         
     | 
| 
      
 148 
     | 
    
         
            +
                    $input = [
         
     | 
| 
      
 149 
     | 
    
         
            +
                        " _ ",
         
     | 
| 
      
 150 
     | 
    
         
            +
                        "|_ ",
         
     | 
| 
      
 151 
     | 
    
         
            +
                        "|_|",
         
     | 
| 
      
 152 
     | 
    
         
            +
                        "   ",
         
     | 
| 
      
 153 
     | 
    
         
            +
                    ];
         
     | 
| 
      
 154 
     | 
    
         
            +
                    $this->assertSame('6', recognize($input));
         
     | 
| 
      
 155 
     | 
    
         
            +
                }
         
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
      
 157 
     | 
    
         
            +
                public function testRecognizes7()
         
     | 
| 
      
 158 
     | 
    
         
            +
                {
         
     | 
| 
      
 159 
     | 
    
         
            +
                    $input = [
         
     | 
| 
      
 160 
     | 
    
         
            +
                        " _ ",
         
     | 
| 
      
 161 
     | 
    
         
            +
                        "  |",
         
     | 
| 
      
 162 
     | 
    
         
            +
                        "  |",
         
     | 
| 
      
 163 
     | 
    
         
            +
                        "   ",
         
     | 
| 
      
 164 
     | 
    
         
            +
                    ];
         
     | 
| 
      
 165 
     | 
    
         
            +
                    $this->assertSame('7', recognize($input));
         
     | 
| 
      
 166 
     | 
    
         
            +
                }
         
     | 
| 
      
 167 
     | 
    
         
            +
             
     | 
| 
      
 168 
     | 
    
         
            +
                public function testRecognizes8()
         
     | 
| 
      
 169 
     | 
    
         
            +
                {
         
     | 
| 
      
 170 
     | 
    
         
            +
                    $input = [
         
     | 
| 
      
 171 
     | 
    
         
            +
                        " _ ",
         
     | 
| 
      
 172 
     | 
    
         
            +
                        "|_|",
         
     | 
| 
      
 173 
     | 
    
         
            +
                        "|_|",
         
     | 
| 
      
 174 
     | 
    
         
            +
                        "   ",
         
     | 
| 
      
 175 
     | 
    
         
            +
                    ];
         
     | 
| 
      
 176 
     | 
    
         
            +
                    $this->assertSame('8', recognize($input));
         
     | 
| 
      
 177 
     | 
    
         
            +
                }
         
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
      
 179 
     | 
    
         
            +
                public function testRecognizes9()
         
     | 
| 
      
 180 
     | 
    
         
            +
                {
         
     | 
| 
      
 181 
     | 
    
         
            +
                    $input = [
         
     | 
| 
      
 182 
     | 
    
         
            +
                        " _ ",
         
     | 
| 
      
 183 
     | 
    
         
            +
                        "|_|",
         
     | 
| 
      
 184 
     | 
    
         
            +
                        " _|",
         
     | 
| 
      
 185 
     | 
    
         
            +
                        "   ",
         
     | 
| 
      
 186 
     | 
    
         
            +
                    ];
         
     | 
| 
      
 187 
     | 
    
         
            +
                    $this->assertSame('9', recognize($input));
         
     | 
| 
      
 188 
     | 
    
         
            +
                }
         
     | 
| 
      
 189 
     | 
    
         
            +
             
     | 
| 
      
 190 
     | 
    
         
            +
                public function testRecognizesStringOfDecimalNumbers()
         
     | 
| 
      
 191 
     | 
    
         
            +
                {
         
     | 
| 
      
 192 
     | 
    
         
            +
                    $input = [
         
     | 
| 
      
 193 
     | 
    
         
            +
                        "    _  _     _  _  _  _  _  _ ",
         
     | 
| 
      
 194 
     | 
    
         
            +
                        "  | _| _||_||_ |_   ||_||_|| |",
         
     | 
| 
      
 195 
     | 
    
         
            +
                        "  ||_  _|  | _||_|  ||_| _||_|",
         
     | 
| 
      
 196 
     | 
    
         
            +
                        "                              ",
         
     | 
| 
      
 197 
     | 
    
         
            +
                    ];
         
     | 
| 
      
 198 
     | 
    
         
            +
                    $this->assertSame('1234567890', recognize($input));
         
     | 
| 
      
 199 
     | 
    
         
            +
                }
         
     | 
| 
      
 200 
     | 
    
         
            +
             
     | 
| 
      
 201 
     | 
    
         
            +
                /**
         
     | 
| 
      
 202 
     | 
    
         
            +
                 * Numbers separated by empty lines are recognized. Lines are joined by commas.
         
     | 
| 
      
 203 
     | 
    
         
            +
                 */
         
     | 
| 
      
 204 
     | 
    
         
            +
                public function testLinesWithCommas()
         
     | 
| 
      
 205 
     | 
    
         
            +
                {
         
     | 
| 
      
 206 
     | 
    
         
            +
                    $input = [
         
     | 
| 
      
 207 
     | 
    
         
            +
                        "    _  _ ",
         
     | 
| 
      
 208 
     | 
    
         
            +
                        "  | _| _|",
         
     | 
| 
      
 209 
     | 
    
         
            +
                        "  ||_  _|",
         
     | 
| 
      
 210 
     | 
    
         
            +
                        "         ",
         
     | 
| 
      
 211 
     | 
    
         
            +
                        "    _  _ ",
         
     | 
| 
      
 212 
     | 
    
         
            +
                        "|_||_ |_ ",
         
     | 
| 
      
 213 
     | 
    
         
            +
                        "  | _||_|",
         
     | 
| 
      
 214 
     | 
    
         
            +
                        "         ",
         
     | 
| 
      
 215 
     | 
    
         
            +
                        " _  _  _ ",
         
     | 
| 
      
 216 
     | 
    
         
            +
                        "  ||_||_|",
         
     | 
| 
      
 217 
     | 
    
         
            +
                        "  ||_| _|",
         
     | 
| 
      
 218 
     | 
    
         
            +
                        "         ",
         
     | 
| 
      
 219 
     | 
    
         
            +
                    ];
         
     | 
| 
      
 220 
     | 
    
         
            +
                    $this->assertSame('123,456,789', recognize($input));
         
     | 
| 
      
 221 
     | 
    
         
            +
                }
         
     | 
| 
      
 222 
     | 
    
         
            +
            }
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: trackler
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 2.0.6. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 2.0.6.13
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Katrina Owen
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2017-01- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2017-01-18 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: rubyzip
         
     | 
| 
         @@ -539,7 +539,10 @@ files: 
     | 
|
| 
       539 
539 
     | 
    
         
             
            - tracks/c/bin/run-tests
         
     | 
| 
       540 
540 
     | 
    
         
             
            - tracks/c/bin/verify-indent
         
     | 
| 
       541 
541 
     | 
    
         
             
            - tracks/c/config.json
         
     | 
| 
      
 542 
     | 
    
         
            +
            - tracks/c/docs/ABOUT.md
         
     | 
| 
       542 
543 
     | 
    
         
             
            - tracks/c/docs/INSTALLATION.md
         
     | 
| 
      
 544 
     | 
    
         
            +
            - tracks/c/docs/LEARNING.md
         
     | 
| 
      
 545 
     | 
    
         
            +
            - tracks/c/docs/RESOURCES.md
         
     | 
| 
       543 
546 
     | 
    
         
             
            - tracks/c/docs/TESTS.md
         
     | 
| 
       544 
547 
     | 
    
         
             
            - tracks/c/exercises/allergies/makefile
         
     | 
| 
       545 
548 
     | 
    
         
             
            - tracks/c/exercises/allergies/src/allergies.h
         
     | 
| 
         @@ -1442,6 +1445,8 @@ files: 
     | 
|
| 
       1442 
1445 
     | 
    
         
             
            - tracks/csharp/exercises/pig-latin/PigLatinTest.cs
         
     | 
| 
       1443 
1446 
     | 
    
         
             
            - tracks/csharp/exercises/poker/Example.cs
         
     | 
| 
       1444 
1447 
     | 
    
         
             
            - tracks/csharp/exercises/poker/PokerTest.cs
         
     | 
| 
      
 1448 
     | 
    
         
            +
            - tracks/csharp/exercises/pov/Example.cs
         
     | 
| 
      
 1449 
     | 
    
         
            +
            - tracks/csharp/exercises/pov/PovTest.cs
         
     | 
| 
       1445 
1450 
     | 
    
         
             
            - tracks/csharp/exercises/prime-factors/Example.cs
         
     | 
| 
       1446 
1451 
     | 
    
         
             
            - tracks/csharp/exercises/prime-factors/PrimeFactorsTest.cs
         
     | 
| 
       1447 
1452 
     | 
    
         
             
            - tracks/csharp/exercises/protein-translation/Example.cs
         
     | 
| 
         @@ -4144,7 +4149,7 @@ files: 
     | 
|
| 
       4144 
4149 
     | 
    
         
             
            - tracks/kotlin/exercises/raindrops/src/test/kotlin/RaindropsTest.kt
         
     | 
| 
       4145 
4150 
     | 
    
         
             
            - tracks/kotlin/exercises/rna-transcription/build.gradle
         
     | 
| 
       4146 
4151 
     | 
    
         
             
            - tracks/kotlin/exercises/rna-transcription/src/example/kotlin/RnaTranscription.kt
         
     | 
| 
       4147 
     | 
    
         
            -
            - tracks/kotlin/exercises/rna-transcription/src/main/kotlin 
     | 
| 
      
 4152 
     | 
    
         
            +
            - tracks/kotlin/exercises/rna-transcription/src/main/kotlin/RnaTranscription.kt
         
     | 
| 
       4148 
4153 
     | 
    
         
             
            - tracks/kotlin/exercises/rna-transcription/src/test/kotlin/RnaTranscriptionTest.kt
         
     | 
| 
       4149 
4154 
     | 
    
         
             
            - tracks/kotlin/exercises/robot-name/build.gradle
         
     | 
| 
       4150 
4155 
     | 
    
         
             
            - tracks/kotlin/exercises/robot-name/src/example/kotlin/Robot.kt
         
     | 
| 
         @@ -5479,6 +5484,8 @@ files: 
     | 
|
| 
       5479 
5484 
     | 
    
         
             
            - tracks/php/exercises/minesweeper/minesweeper_test.php
         
     | 
| 
       5480 
5485 
     | 
    
         
             
            - tracks/php/exercises/nucleotide-count/example.php
         
     | 
| 
       5481 
5486 
     | 
    
         
             
            - tracks/php/exercises/nucleotide-count/nucleotide-count_test.php
         
     | 
| 
      
 5487 
     | 
    
         
            +
            - tracks/php/exercises/ocr-numbers/example.php
         
     | 
| 
      
 5488 
     | 
    
         
            +
            - tracks/php/exercises/ocr-numbers/ocr-numbers_test.php
         
     | 
| 
       5482 
5489 
     | 
    
         
             
            - tracks/php/exercises/pangram/example.php
         
     | 
| 
       5483 
5490 
     | 
    
         
             
            - tracks/php/exercises/pangram/pangram_test.php
         
     | 
| 
       5484 
5491 
     | 
    
         
             
            - tracks/php/exercises/phone-number/example.php
         
     | 
| 
         
            File without changes
         
     |