trackler 2.1.0.14 → 2.1.0.15
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/csharp/exercises/acronym/AcronymTest.cs +2 -2
 - data/tracks/ecmascript/config.json +8 -1
 - data/tracks/ecmascript/exercises/connect/connect.spec.js +110 -0
 - data/tracks/ecmascript/exercises/connect/example.js +68 -0
 - data/tracks/ecmascript/exercises/connect/package.json +82 -0
 - data/tracks/haskell/exercises/difference-of-squares/package.yaml +1 -1
 - data/tracks/haskell/exercises/difference-of-squares/test/Tests.hs +3 -4
 - data/tracks/java/exercises/all-your-base/src/test/java/BaseConverterTest.java +1 -1
 - data/tracks/java/exercises/bracket-push/src/test/java/BracketCheckerTest.java +1 -1
 - data/tracks/java/exercises/wordy/src/test/java/WordProblemSolverTest.java +1 -1
 - data/tracks/lisp/.travis.yml +12 -14
 - data/tracks/lisp/README.md +16 -48
 - data/tracks/objective-c/config.json +9 -0
 - data/tracks/objective-c/exercises/luhn/LuhnExample.h +9 -0
 - data/tracks/objective-c/exercises/luhn/LuhnExample.m +50 -0
 - data/tracks/objective-c/exercises/luhn/LuhnTest.m +80 -0
 - data/tracks/objective-c/xcodeProject/ObjectiveC.xcodeproj/project.pbxproj +18 -0
 - data/tracks/php/config.json +397 -382
 - data/tracks/php/exercises/binary-search/binary-search_test.php +58 -0
 - data/tracks/php/exercises/binary-search/example.php +21 -0
 - data/tracks/php/exercises/nth-prime/example.php +19 -0
 - data/tracks/php/exercises/nth-prime/nth-prime_test.php +31 -0
 - data/tracks/php/exercises/pascals-triangle/example.php +28 -0
 - data/tracks/php/exercises/pascals-triangle/pascals-triangle_test.php +42 -0
 - data/tracks/python/exercises/difference-of-squares/difference_of_squares_test.py +9 -12
 - data/tracks/r/docs/INSTALLATION.md +2 -6
 - data/tracks/rust/exercises/difference-of-squares/Cargo.toml +1 -1
 - data/tracks/rust/exercises/difference-of-squares/tests/difference-of-square.rs +24 -6
 - data/tracks/typescript/config.json +6 -0
 - data/tracks/typescript/exercises/raindrops/package.json +36 -0
 - data/tracks/typescript/exercises/raindrops/raindrops.example.ts +17 -0
 - data/tracks/typescript/exercises/raindrops/raindrops.test.ts +38 -0
 - data/tracks/typescript/exercises/raindrops/tsconfig.json +21 -0
 - data/tracks/typescript/exercises/raindrops/tslint.json +127 -0
 - data/tracks/typescript/exercises/raindrops/yarn.lock +2739 -0
 - metadata +20 -3
 - data/tracks/lisp/bin/cl-travis-install.sh +0 -325
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 4cc8feb981bb581bf3e184bc80c36e688a053780
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 99ba32cbd4a8150d8e61cd98529c24e0b9e84560
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 8ff2e026ea8852d5d536b4c2e2438fe61d73a7f0a3fa5f7722960f9a78425178b9aff48121fbce323625b136869339cf0f2edf407fe56cd72c47c2b3892fce52
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: d96344f2ceb0c6e8179c1b23c5f1c914ecf329e7ab49a8fc0bcd6afae2e41c304296c1a26efe5414d1eea88df30ed6ed9d924f6364c09610c7f4ff302c4483f4
         
     | 
    
        data/lib/trackler/version.rb
    CHANGED
    
    
| 
         @@ -15,7 +15,7 @@ public void Lowercase_words() 
     | 
|
| 
       15 
15 
     | 
    
         
             
                }
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
17 
     | 
    
         
             
                [Fact(Skip = "Remove to run test")]
         
     | 
| 
       18 
     | 
    
         
            -
                public void  
     | 
| 
      
 18 
     | 
    
         
            +
                public void PascalCase()
         
     | 
| 
       19 
19 
     | 
    
         
             
                {
         
     | 
| 
       20 
20 
     | 
    
         
             
                    Assert.Equal("HTML", Acronym.Abbreviate("HyperText Markup Language"));
         
     | 
| 
       21 
21 
     | 
    
         
             
                }
         
     | 
| 
         @@ -43,4 +43,4 @@ public void Hyphenated() 
     | 
|
| 
       43 
43 
     | 
    
         
             
                {
         
     | 
| 
       44 
44 
     | 
    
         
             
                    Assert.Equal("CMOS", Acronym.Abbreviate("Complementary metal-oxide semiconductor"));
         
     | 
| 
       45 
45 
     | 
    
         
             
                }
         
     | 
| 
       46 
     | 
    
         
            -
            }
         
     | 
| 
      
 46 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -66,7 +66,8 @@ 
     | 
|
| 
       66 
66 
     | 
    
         
             
                "two-bucket",
         
     | 
| 
       67 
67 
     | 
    
         
             
                "diamond",
         
     | 
| 
       68 
68 
     | 
    
         
             
                "isogram",
         
     | 
| 
       69 
     | 
    
         
            -
                "all-your-base"
         
     | 
| 
      
 69 
     | 
    
         
            +
                "all-your-base",
         
     | 
| 
      
 70 
     | 
    
         
            +
                "connect"
         
     | 
| 
       70 
71 
     | 
    
         
             
              ],
         
     | 
| 
       71 
72 
     | 
    
         
             
              "exercises": [
         
     | 
| 
       72 
73 
     | 
    
         
             
                {
         
     | 
| 
         @@ -440,6 +441,12 @@ 
     | 
|
| 
       440 
441 
     | 
    
         
             
                  "difficulty": 1,
         
     | 
| 
       441 
442 
     | 
    
         
             
                  "topics": [
         
     | 
| 
       442 
443 
     | 
    
         
             
                  ]
         
     | 
| 
      
 444 
     | 
    
         
            +
                },
         
     | 
| 
      
 445 
     | 
    
         
            +
            	{
         
     | 
| 
      
 446 
     | 
    
         
            +
                  "slug": "connect",
         
     | 
| 
      
 447 
     | 
    
         
            +
                  "difficulty": 7,
         
     | 
| 
      
 448 
     | 
    
         
            +
                  "topics": [
         
     | 
| 
      
 449 
     | 
    
         
            +
                  ]
         
     | 
| 
       443 
450 
     | 
    
         
             
                }
         
     | 
| 
       444 
451 
     | 
    
         
             
              ],
         
     | 
| 
       445 
452 
     | 
    
         
             
              "deprecated": [
         
     | 
| 
         @@ -0,0 +1,110 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            import Board from './connect';
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe('Judging a game of connect', () => {
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              it("an empty board has no winner", () => {
         
     | 
| 
      
 6 
     | 
    
         
            +
                let board = [
         
     | 
| 
      
 7 
     | 
    
         
            +
                  ". . . . .",
         
     | 
| 
      
 8 
     | 
    
         
            +
                  " . . . . .",
         
     | 
| 
      
 9 
     | 
    
         
            +
                  "  . . . . .",
         
     | 
| 
      
 10 
     | 
    
         
            +
                  "   . . . . .",
         
     | 
| 
      
 11 
     | 
    
         
            +
                  "    . . . . ."
         
     | 
| 
      
 12 
     | 
    
         
            +
                ];
         
     | 
| 
      
 13 
     | 
    
         
            +
                expect(new Board(board).winner()).toEqual("");
         
     | 
| 
      
 14 
     | 
    
         
            +
              });
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              xit("X can win on a 1x1 board", () => {
         
     | 
| 
      
 17 
     | 
    
         
            +
                let board =  [
         
     | 
| 
      
 18 
     | 
    
         
            +
                  "X"
         
     | 
| 
      
 19 
     | 
    
         
            +
                ];
         
     | 
| 
      
 20 
     | 
    
         
            +
                expect(new Board(board).winner()).toEqual("X");
         
     | 
| 
      
 21 
     | 
    
         
            +
              });
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              xit("O can win on a 1x1 board", () => {
         
     | 
| 
      
 24 
     | 
    
         
            +
                let board =  [
         
     | 
| 
      
 25 
     | 
    
         
            +
                  "O"
         
     | 
| 
      
 26 
     | 
    
         
            +
                ];
         
     | 
| 
      
 27 
     | 
    
         
            +
                expect(new Board(board).winner()).toEqual("O");
         
     | 
| 
      
 28 
     | 
    
         
            +
              });
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              xit( "only edges does not make a winner", () => {
         
     | 
| 
      
 31 
     | 
    
         
            +
                let board =   [
         
     | 
| 
      
 32 
     | 
    
         
            +
                  "O O O X",
         
     | 
| 
      
 33 
     | 
    
         
            +
                  " X . . X",
         
     | 
| 
      
 34 
     | 
    
         
            +
                  "  X . . X",
         
     | 
| 
      
 35 
     | 
    
         
            +
                  "   X O O O"
         
     | 
| 
      
 36 
     | 
    
         
            +
                ];
         
     | 
| 
      
 37 
     | 
    
         
            +
                expect(new Board(board).winner()).toEqual("");
         
     | 
| 
      
 38 
     | 
    
         
            +
              });
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              xit("illegal diagonal does not make a winner", () => {
         
     | 
| 
      
 41 
     | 
    
         
            +
                let board =  [
         
     | 
| 
      
 42 
     | 
    
         
            +
                  "X O . .",
         
     | 
| 
      
 43 
     | 
    
         
            +
                  " O X X X",
         
     | 
| 
      
 44 
     | 
    
         
            +
                  "  O X O .",
         
     | 
| 
      
 45 
     | 
    
         
            +
                  "   . O X .",
         
     | 
| 
      
 46 
     | 
    
         
            +
                  "    X X O O"
         
     | 
| 
      
 47 
     | 
    
         
            +
                ];
         
     | 
| 
      
 48 
     | 
    
         
            +
                expect(new Board(board).winner()).toEqual("");
         
     | 
| 
      
 49 
     | 
    
         
            +
              });
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
              xit("nobody wins crossing adjacent angles", () => {
         
     | 
| 
      
 52 
     | 
    
         
            +
                let board =  [
         
     | 
| 
      
 53 
     | 
    
         
            +
                  "X . . .",
         
     | 
| 
      
 54 
     | 
    
         
            +
                  " . X O .",
         
     | 
| 
      
 55 
     | 
    
         
            +
                  "  O . X O",
         
     | 
| 
      
 56 
     | 
    
         
            +
                  "   . O . X",
         
     | 
| 
      
 57 
     | 
    
         
            +
                  "    . . O ."
         
     | 
| 
      
 58 
     | 
    
         
            +
                ];
         
     | 
| 
      
 59 
     | 
    
         
            +
                expect(new Board(board).winner()).toEqual("");
         
     | 
| 
      
 60 
     | 
    
         
            +
              });
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
              xit("X wins crossing from left to right", () => {
         
     | 
| 
      
 63 
     | 
    
         
            +
                let board =  [
         
     | 
| 
      
 64 
     | 
    
         
            +
                  ". O . .",
         
     | 
| 
      
 65 
     | 
    
         
            +
                  " O X X X",
         
     | 
| 
      
 66 
     | 
    
         
            +
                  "  O X O .",
         
     | 
| 
      
 67 
     | 
    
         
            +
                  "   X X O X",
         
     | 
| 
      
 68 
     | 
    
         
            +
                  "    . O X ."
         
     | 
| 
      
 69 
     | 
    
         
            +
                ];
         
     | 
| 
      
 70 
     | 
    
         
            +
                expect(new Board(board).winner()).toEqual("X");
         
     | 
| 
      
 71 
     | 
    
         
            +
              });
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
              xit("O wins crossing from top to bottom", () => {
         
     | 
| 
      
 74 
     | 
    
         
            +
                let board =  [
         
     | 
| 
      
 75 
     | 
    
         
            +
                  ". O . .",
         
     | 
| 
      
 76 
     | 
    
         
            +
                  " O X X X",
         
     | 
| 
      
 77 
     | 
    
         
            +
                  "  O O O .",
         
     | 
| 
      
 78 
     | 
    
         
            +
                  "   X X O X",
         
     | 
| 
      
 79 
     | 
    
         
            +
                  "    . O X ."
         
     | 
| 
      
 80 
     | 
    
         
            +
                ];
         
     | 
| 
      
 81 
     | 
    
         
            +
                expect(new Board(board).winner()).toEqual("O");
         
     | 
| 
      
 82 
     | 
    
         
            +
              });
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
              xit("X wins using a convoluted path", () => {
         
     | 
| 
      
 85 
     | 
    
         
            +
                let board =  [
         
     | 
| 
      
 86 
     | 
    
         
            +
                  ". X X . .",
         
     | 
| 
      
 87 
     | 
    
         
            +
                  " X . X . X",
         
     | 
| 
      
 88 
     | 
    
         
            +
                  "  . X . X .",
         
     | 
| 
      
 89 
     | 
    
         
            +
                  "   . X X . .",
         
     | 
| 
      
 90 
     | 
    
         
            +
                  "    O O O O O"
         
     | 
| 
      
 91 
     | 
    
         
            +
                ];
         
     | 
| 
      
 92 
     | 
    
         
            +
                expect(new Board(board).winner()).toEqual("X");
         
     | 
| 
      
 93 
     | 
    
         
            +
              });
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
              xit("X wins using a spiral path", () => {
         
     | 
| 
      
 96 
     | 
    
         
            +
                let board =   [
         
     | 
| 
      
 97 
     | 
    
         
            +
                  "O X X X X X X X X",
         
     | 
| 
      
 98 
     | 
    
         
            +
                  " O X O O O O O O O",
         
     | 
| 
      
 99 
     | 
    
         
            +
                  "  O X O X X X X X O",
         
     | 
| 
      
 100 
     | 
    
         
            +
                  "   O X O X O O O X O",
         
     | 
| 
      
 101 
     | 
    
         
            +
                  "    O X O X X X O X O",
         
     | 
| 
      
 102 
     | 
    
         
            +
                  "     O X O O O X O X O",
         
     | 
| 
      
 103 
     | 
    
         
            +
                  "      O X X X X X O X O",
         
     | 
| 
      
 104 
     | 
    
         
            +
                  "       O O O O O O O X O",
         
     | 
| 
      
 105 
     | 
    
         
            +
                  "        X X X X X X X X O"
         
     | 
| 
      
 106 
     | 
    
         
            +
                ];
         
     | 
| 
      
 107 
     | 
    
         
            +
                expect(new Board(board).winner()).toEqual("X");
         
     | 
| 
      
 108 
     | 
    
         
            +
              });
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
            });
         
     | 
| 
         @@ -0,0 +1,68 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            /**
         
     | 
| 
      
 2 
     | 
    
         
            +
             * "Player O" plays from top to bottom, "Player X" plays from left to right.
         
     | 
| 
      
 3 
     | 
    
         
            +
             * @param board
         
     | 
| 
      
 4 
     | 
    
         
            +
             */
         
     | 
| 
      
 5 
     | 
    
         
            +
            export default class {
         
     | 
| 
      
 6 
     | 
    
         
            +
              constructor(board) {
         
     | 
| 
      
 7 
     | 
    
         
            +
                this.board = board.map((b) => [...b]);
         
     | 
| 
      
 8 
     | 
    
         
            +
              }
         
     | 
| 
      
 9 
     | 
    
         
            +
              winner() {
         
     | 
| 
      
 10 
     | 
    
         
            +
                const players = ['X','O'];
         
     | 
| 
      
 11 
     | 
    
         
            +
                for(let player of players) {
         
     | 
| 
      
 12 
     | 
    
         
            +
                  if(this.checkWin(player)) {
         
     | 
| 
      
 13 
     | 
    
         
            +
                    return player;
         
     | 
| 
      
 14 
     | 
    
         
            +
                  }
         
     | 
| 
      
 15 
     | 
    
         
            +
                }
         
     | 
| 
      
 16 
     | 
    
         
            +
                return "";
         
     | 
| 
      
 17 
     | 
    
         
            +
              }
         
     | 
| 
      
 18 
     | 
    
         
            +
              checkWin(player) {
         
     | 
| 
      
 19 
     | 
    
         
            +
                let positions = this.startPositions(player);
         
     | 
| 
      
 20 
     | 
    
         
            +
                for(let position of positions) {
         
     | 
| 
      
 21 
     | 
    
         
            +
                  if(this.search(position, player,[])) {
         
     | 
| 
      
 22 
     | 
    
         
            +
                    return true;
         
     | 
| 
      
 23 
     | 
    
         
            +
                  }
         
     | 
| 
      
 24 
     | 
    
         
            +
                }
         
     | 
| 
      
 25 
     | 
    
         
            +
                return false;
         
     | 
| 
      
 26 
     | 
    
         
            +
              }
         
     | 
| 
      
 27 
     | 
    
         
            +
              search(pos, XorO, checked) {
         
     | 
| 
      
 28 
     | 
    
         
            +
                if(! this.matches(pos, XorO)) {
         
     | 
| 
      
 29 
     | 
    
         
            +
                  return false;
         
     | 
| 
      
 30 
     | 
    
         
            +
                }
         
     | 
| 
      
 31 
     | 
    
         
            +
                if(this.winningSpot(pos, XorO)) {
         
     | 
| 
      
 32 
     | 
    
         
            +
                  return true;
         
     | 
| 
      
 33 
     | 
    
         
            +
                }
         
     | 
| 
      
 34 
     | 
    
         
            +
                checked = checked.slice(0);
         
     | 
| 
      
 35 
     | 
    
         
            +
                checked.push(pos);
         
     | 
| 
      
 36 
     | 
    
         
            +
                const matches = this.neighbors(pos).filter(({x,y}) => {
         
     | 
| 
      
 37 
     | 
    
         
            +
                  return this.matches({x,y}, XorO) && checked.filter((spot) => spot.x === x && spot.y === y).length === 0;
         
     | 
| 
      
 38 
     | 
    
         
            +
                });
         
     | 
| 
      
 39 
     | 
    
         
            +
                if(matches.length === 0) return false;
         
     | 
| 
      
 40 
     | 
    
         
            +
                return matches.filter(spot => this.search(spot, XorO, checked)).length > 0;
         
     | 
| 
      
 41 
     | 
    
         
            +
              }
         
     | 
| 
      
 42 
     | 
    
         
            +
              neighbors({x,y}) {
         
     | 
| 
      
 43 
     | 
    
         
            +
                return [
         
     | 
| 
      
 44 
     | 
    
         
            +
                  {x, y: y + 2},
         
     | 
| 
      
 45 
     | 
    
         
            +
                  {x, y: y - 2},
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                  {x: x + 1, y: y + 1},
         
     | 
| 
      
 48 
     | 
    
         
            +
                  {x: x - 1, y: y + 1},
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                  {x: x + 1, y: y - 1},
         
     | 
| 
      
 51 
     | 
    
         
            +
                  {x: x - 1, y: y - 1}
         
     | 
| 
      
 52 
     | 
    
         
            +
                ];
         
     | 
| 
      
 53 
     | 
    
         
            +
              }
         
     | 
| 
      
 54 
     | 
    
         
            +
              startPositions(XorO) {
         
     | 
| 
      
 55 
     | 
    
         
            +
                return XorO === "X" ?
         
     | 
| 
      
 56 
     | 
    
         
            +
                  this.board.map((pos, i) => ({x:i,y:i})) :
         
     | 
| 
      
 57 
     | 
    
         
            +
                  this.board[0].map((pos, i) => ({x:0, y:i}));
         
     | 
| 
      
 58 
     | 
    
         
            +
              }
         
     | 
| 
      
 59 
     | 
    
         
            +
              winningSpot({x,y},XorO) {
         
     | 
| 
      
 60 
     | 
    
         
            +
                return XorO === "X" ?
         
     | 
| 
      
 61 
     | 
    
         
            +
                  y === this.board[0].length - 1 + x:
         
     | 
| 
      
 62 
     | 
    
         
            +
                  x === this.board.length - 1;
         
     | 
| 
      
 63 
     | 
    
         
            +
              }
         
     | 
| 
      
 64 
     | 
    
         
            +
              matches({x,y}, XorO) {
         
     | 
| 
      
 65 
     | 
    
         
            +
                return this.board[x] !== undefined && this.board[x][y] === XorO;
         
     | 
| 
      
 66 
     | 
    
         
            +
              }
         
     | 
| 
      
 67 
     | 
    
         
            +
            }
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,82 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            {
         
     | 
| 
      
 2 
     | 
    
         
            +
              "name": "xecmascript",
         
     | 
| 
      
 3 
     | 
    
         
            +
              "version": "0.0.0",
         
     | 
| 
      
 4 
     | 
    
         
            +
              "description": "Exercism exercises in ECMAScript 6.",
         
     | 
| 
      
 5 
     | 
    
         
            +
              "author": "Katrina Owen",
         
     | 
| 
      
 6 
     | 
    
         
            +
              "private": true,
         
     | 
| 
      
 7 
     | 
    
         
            +
              "repository": {
         
     | 
| 
      
 8 
     | 
    
         
            +
                "type": "git",
         
     | 
| 
      
 9 
     | 
    
         
            +
                "url": "https://github.com/exercism/xecmascript"
         
     | 
| 
      
 10 
     | 
    
         
            +
              },
         
     | 
| 
      
 11 
     | 
    
         
            +
              "devDependencies": {
         
     | 
| 
      
 12 
     | 
    
         
            +
                "babel-jest": "^19.0.0",
         
     | 
| 
      
 13 
     | 
    
         
            +
                "babel-preset-env": "^1.3.3",
         
     | 
| 
      
 14 
     | 
    
         
            +
                "eslint": "^3.19.0",
         
     | 
| 
      
 15 
     | 
    
         
            +
                "jest": "^19.0.2"
         
     | 
| 
      
 16 
     | 
    
         
            +
              },
         
     | 
| 
      
 17 
     | 
    
         
            +
              "jest": {
         
     | 
| 
      
 18 
     | 
    
         
            +
                "modulePathIgnorePatterns": [
         
     | 
| 
      
 19 
     | 
    
         
            +
                  "package.json"
         
     | 
| 
      
 20 
     | 
    
         
            +
                ]
         
     | 
| 
      
 21 
     | 
    
         
            +
              },
         
     | 
| 
      
 22 
     | 
    
         
            +
              "babel": {
         
     | 
| 
      
 23 
     | 
    
         
            +
                "presets": [
         
     | 
| 
      
 24 
     | 
    
         
            +
                  "env"
         
     | 
| 
      
 25 
     | 
    
         
            +
                ]
         
     | 
| 
      
 26 
     | 
    
         
            +
              },
         
     | 
| 
      
 27 
     | 
    
         
            +
              "scripts": {
         
     | 
| 
      
 28 
     | 
    
         
            +
                "test": "jest --no-cache ./*",
         
     | 
| 
      
 29 
     | 
    
         
            +
                "watch": "jest --no-cache --watch ./*",
         
     | 
| 
      
 30 
     | 
    
         
            +
                "lint": "eslint *.js; exit 0;",
         
     | 
| 
      
 31 
     | 
    
         
            +
                "lint-test": "eslint *.js && jest --no-cache ./* "
         
     | 
| 
      
 32 
     | 
    
         
            +
              },
         
     | 
| 
      
 33 
     | 
    
         
            +
              "eslintConfig": {
         
     | 
| 
      
 34 
     | 
    
         
            +
                "parserOptions": {
         
     | 
| 
      
 35 
     | 
    
         
            +
                  "ecmaVersion": 6,
         
     | 
| 
      
 36 
     | 
    
         
            +
                  "sourceType": "module"
         
     | 
| 
      
 37 
     | 
    
         
            +
                },
         
     | 
| 
      
 38 
     | 
    
         
            +
                "rules": {
         
     | 
| 
      
 39 
     | 
    
         
            +
                  "comma-dangle": [
         
     | 
| 
      
 40 
     | 
    
         
            +
                    2,
         
     | 
| 
      
 41 
     | 
    
         
            +
                    "never"
         
     | 
| 
      
 42 
     | 
    
         
            +
                  ],
         
     | 
| 
      
 43 
     | 
    
         
            +
                  "no-cond-assign": [
         
     | 
| 
      
 44 
     | 
    
         
            +
                    2,
         
     | 
| 
      
 45 
     | 
    
         
            +
                    "always"
         
     | 
| 
      
 46 
     | 
    
         
            +
                  ],
         
     | 
| 
      
 47 
     | 
    
         
            +
                  "no-console": 2,
         
     | 
| 
      
 48 
     | 
    
         
            +
                  "no-constant-condition": 2,
         
     | 
| 
      
 49 
     | 
    
         
            +
                  "no-control-regex": 2,
         
     | 
| 
      
 50 
     | 
    
         
            +
                  "no-debugger": 2,
         
     | 
| 
      
 51 
     | 
    
         
            +
                  "no-dupe-args": 2,
         
     | 
| 
      
 52 
     | 
    
         
            +
                  "no-dupe-keys": 2,
         
     | 
| 
      
 53 
     | 
    
         
            +
                  "no-duplicate-case": 2,
         
     | 
| 
      
 54 
     | 
    
         
            +
                  "no-empty-character-class": 2,
         
     | 
| 
      
 55 
     | 
    
         
            +
                  "no-empty": 2,
         
     | 
| 
      
 56 
     | 
    
         
            +
                  "no-ex-assign": 2,
         
     | 
| 
      
 57 
     | 
    
         
            +
                  "no-extra-boolean-cast": 2,
         
     | 
| 
      
 58 
     | 
    
         
            +
                  "no-extra-parens": 2,
         
     | 
| 
      
 59 
     | 
    
         
            +
                  "no-extra-semi": 2,
         
     | 
| 
      
 60 
     | 
    
         
            +
                  "no-func-assign": 2,
         
     | 
| 
      
 61 
     | 
    
         
            +
                  "no-inner-declarations": [
         
     | 
| 
      
 62 
     | 
    
         
            +
                    2,
         
     | 
| 
      
 63 
     | 
    
         
            +
                    "both"
         
     | 
| 
      
 64 
     | 
    
         
            +
                  ],
         
     | 
| 
      
 65 
     | 
    
         
            +
                  "no-invalid-regexp": 2,
         
     | 
| 
      
 66 
     | 
    
         
            +
                  "no-irregular-whitespace": 2,
         
     | 
| 
      
 67 
     | 
    
         
            +
                  "no-negated-in-lhs": 2,
         
     | 
| 
      
 68 
     | 
    
         
            +
                  "no-obj-calls": 2,
         
     | 
| 
      
 69 
     | 
    
         
            +
                  "no-regex-spaces": 2,
         
     | 
| 
      
 70 
     | 
    
         
            +
                  "no-sparse-arrays": 2,
         
     | 
| 
      
 71 
     | 
    
         
            +
                  "no-unexpected-multiline": 2,
         
     | 
| 
      
 72 
     | 
    
         
            +
                  "no-unreachable": 2,
         
     | 
| 
      
 73 
     | 
    
         
            +
                  "use-isnan": 2,
         
     | 
| 
      
 74 
     | 
    
         
            +
                  "valid-jsdoc": 2,
         
     | 
| 
      
 75 
     | 
    
         
            +
                  "valid-typeof": 2
         
     | 
| 
      
 76 
     | 
    
         
            +
                }
         
     | 
| 
      
 77 
     | 
    
         
            +
              },
         
     | 
| 
      
 78 
     | 
    
         
            +
              "licenses": [
         
     | 
| 
      
 79 
     | 
    
         
            +
                "MIT"
         
     | 
| 
      
 80 
     | 
    
         
            +
              ],
         
     | 
| 
      
 81 
     | 
    
         
            +
              "dependencies": {}
         
     | 
| 
      
 82 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -12,19 +12,18 @@ specs :: Spec 
     | 
|
| 
       12 
12 
     | 
    
         
             
            specs = do
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
                describe "squareOfSums" $ do
         
     | 
| 
      
 15 
     | 
    
         
            +
                  it "square of sum 1"   $ squareOfSums   1 `shouldBe`        1
         
     | 
| 
       15 
16 
     | 
    
         
             
                  it "square of sum 5"   $ squareOfSums   5 `shouldBe`      225
         
     | 
| 
       16 
     | 
    
         
            -
                  it "square of sum 10"  $ squareOfSums  10 `shouldBe`     3025
         
     | 
| 
       17 
17 
     | 
    
         
             
                  it "square of sum 100" $ squareOfSums 100 `shouldBe` 25502500
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
                describe "sumOfSquares" $ do
         
     | 
| 
      
 20 
     | 
    
         
            +
                  it "sum of squares 1"   $ sumOfSquares   1 `shouldBe`      1
         
     | 
| 
       20 
21 
     | 
    
         
             
                  it "sum of squares 5"   $ sumOfSquares   5 `shouldBe`     55
         
     | 
| 
       21 
     | 
    
         
            -
                  it "sum of squares 10"  $ sumOfSquares  10 `shouldBe`    385
         
     | 
| 
       22 
22 
     | 
    
         
             
                  it "sum of squares 100" $ sumOfSquares 100 `shouldBe` 338350
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
24 
     | 
    
         
             
                describe "differenceOfSquares" $ do
         
     | 
| 
       25 
     | 
    
         
            -
                  it "difference of squares  
     | 
| 
      
 25 
     | 
    
         
            +
                  it "difference of squares 1"   $ difference   1 `shouldBe`        0
         
     | 
| 
       26 
26 
     | 
    
         
             
                  it "difference of squares 5"   $ difference   5 `shouldBe`      170
         
     | 
| 
       27 
     | 
    
         
            -
                  it "difference of squares 10"  $ difference  10 `shouldBe`     2640
         
     | 
| 
       28 
27 
     | 
    
         
             
                  it "difference of squares 100" $ difference 100 `shouldBe` 25164150
         
     | 
| 
       29 
28 
     | 
    
         | 
| 
       30 
29 
     | 
    
         
             
                -- Track-specific tests.
         
     | 
| 
         @@ -7,7 +7,7 @@ import java.util.Arrays; 
     | 
|
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            import static org.junit.Assert.assertArrayEquals;
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
            public  
     | 
| 
      
 10 
     | 
    
         
            +
            public class BaseConverterTest {
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
                /*
         
     | 
| 
       13 
13 
     | 
    
         
             
                 * See https://github.com/junit-team/junit4/wiki/Rules for information on JUnit Rules in general and
         
     | 
| 
         @@ -5,7 +5,7 @@ import static org.junit.Assert.assertEquals; 
     | 
|
| 
       5 
5 
     | 
    
         
             
            import static org.junit.Assert.assertFalse;
         
     | 
| 
       6 
6 
     | 
    
         
             
            import static org.junit.Assert.assertTrue;
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
            public  
     | 
| 
      
 8 
     | 
    
         
            +
            public class BracketCheckerTest {
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
                @Test
         
     | 
| 
       11 
11 
     | 
    
         
             
                public void testPairedSquareBrackets() {
         
     | 
| 
         @@ -6,7 +6,7 @@ import org.junit.rules.ExpectedException; 
     | 
|
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            import static org.junit.Assert.assertEquals;
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
            public  
     | 
| 
      
 9 
     | 
    
         
            +
            public class WordProblemSolverTest {
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
                /*
         
     | 
| 
       12 
12 
     | 
    
         
             
                 * See https://github.com/junit-team/junit4/wiki/Rules for information on JUnit Rules in general and
         
     | 
    
        data/tracks/lisp/.travis.yml
    CHANGED
    
    | 
         @@ -3,34 +3,32 @@ language: lisp 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            env:
         
     | 
| 
       5 
5 
     | 
    
         
             
              matrix:
         
     | 
| 
       6 
     | 
    
         
            -
                - LISP=sbcl
         
     | 
| 
       7 
     | 
    
         
            -
                - LISP=ccl
         
     | 
| 
      
 6 
     | 
    
         
            +
                - LISP=sbcl-bin
         
     | 
| 
      
 7 
     | 
    
         
            +
                - LISP=ccl-bin
         
     | 
| 
       8 
8 
     | 
    
         
             
                - LISP=ecl
         
     | 
| 
       9 
9 
     | 
    
         
             
                - LISP=clisp
         
     | 
| 
       10 
     | 
    
         
            -
                - LISP=abcl
         
     | 
| 
       11 
     | 
    
         
            -
                - LISP= 
     | 
| 
       12 
     | 
    
         
            -
                - LISP= 
     | 
| 
       13 
     | 
    
         
            -
                - LISP= 
     | 
| 
       14 
     | 
    
         
            -
                # - LISP=allegro
         
     | 
| 
       15 
     | 
    
         
            -
                # - LISP=cmucl
         
     | 
| 
      
 10 
     | 
    
         
            +
                - LISP=abcl-bin
         
     | 
| 
      
 11 
     | 
    
         
            +
                - LISP=allegro
         
     | 
| 
      
 12 
     | 
    
         
            +
                # - LISP=clasp
         
     | 
| 
      
 13 
     | 
    
         
            +
                # - LISP=cmu-bin
         
     | 
| 
       16 
14 
     | 
    
         | 
| 
       17 
15 
     | 
    
         
             
            matrix:
         
     | 
| 
       18 
16 
     | 
    
         
             
              fast_finish: true
         
     | 
| 
       19 
17 
     | 
    
         
             
              allow_failures:
         
     | 
| 
       20 
     | 
    
         
            -
                - env: LISP=abcl
         
     | 
| 
       21 
     | 
    
         
            -
                - env: LISP= 
     | 
| 
       22 
     | 
    
         
            -
                - env: LISP= 
     | 
| 
       23 
     | 
    
         
            -
                - env: LISP= 
     | 
| 
      
 18 
     | 
    
         
            +
                - env: LISP=abcl-bin
         
     | 
| 
      
 19 
     | 
    
         
            +
                - env: LISP=allegro
         
     | 
| 
      
 20 
     | 
    
         
            +
                # - env: LISP=cmu-bin
         
     | 
| 
      
 21 
     | 
    
         
            +
                # - env: LISP=clasp
         
     | 
| 
       24 
22 
     | 
    
         | 
| 
       25 
23 
     | 
    
         
             
            install:
         
     | 
| 
       26 
     | 
    
         
            -
              -  
     | 
| 
      
 24 
     | 
    
         
            +
              - curl -L 'https://raw.githubusercontent.com/snmsts/roswell/release/scripts/install-for-ci.sh' | sh
         
     | 
| 
       27 
25 
     | 
    
         | 
| 
       28 
26 
     | 
    
         
             
            before_script:
         
     | 
| 
       29 
27 
     | 
    
         
             
              - bin/fetch-configlet
         
     | 
| 
       30 
28 
     | 
    
         
             
              - bin/configlet .
         
     | 
| 
       31 
29 
     | 
    
         | 
| 
       32 
30 
     | 
    
         
             
            script:
         
     | 
| 
       33 
     | 
    
         
            -
              -  
     | 
| 
      
 31 
     | 
    
         
            +
              - ros run -l 'bin/xlisp-test.lisp' -e '(xlisp-test:travis-build)' -q
         
     | 
| 
       34 
32 
     | 
    
         | 
| 
       35 
33 
     | 
    
         
             
            # Cut and paste above to run all tests locally.
         
     | 
| 
       36 
34 
     | 
    
         | 
    
        data/tracks/lisp/README.md
    CHANGED
    
    | 
         @@ -50,25 +50,18 @@ All changes will be built under several implementations via the 
     | 
|
| 
       50 
50 
     | 
    
         
             
            to be able to run at least some of those same builds locally before
         
     | 
| 
       51 
51 
     | 
    
         
             
            submitting the changes.
         
     | 
| 
       52 
52 
     | 
    
         | 
| 
       53 
     | 
    
         
            -
            A contributor will need to install
         
     | 
| 
       54 
     | 
    
         
            -
            [CIM](https://github.com/KeenS/CIM),
         
     | 
| 
       55 
     | 
    
         
            -
            [QuickLisp](https://www.quicklisp.org/beta/), and a few Lisp
         
     | 
| 
       56 
     | 
    
         
            -
            implementations.
         
     | 
| 
      
 53 
     | 
    
         
            +
            A contributor will need to install:
         
     | 
| 
       57 
54 
     | 
    
         | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
      
 55 
     | 
    
         
            +
            * [Roswell](https://github.com/roswell/roswell)
         
     | 
| 
      
 56 
     | 
    
         
            +
            * [QuickLisp](https://www.quicklisp.org/beta/)
         
     | 
| 
      
 57 
     | 
    
         
            +
            * and a few Lisp implementations.
         
     | 
| 
       59 
58 
     | 
    
         | 
| 
       60 
     | 
    
         
            -
            Instructions for installing CIM can be found in its
         
     | 
| 
       61 
     | 
    
         
            -
            [README](https://github.com/KeenS/CIM#install). The simplest form is:
         
     | 
| 
       62 
59 
     | 
    
         | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
            curl -L https://raw.github.com/KeenS/CIM/master/scripts/cim_installer | /bin/sh
         
     | 
| 
       65 
     | 
    
         
            -
            cim config sh >> ~/.bashrc
         
     | 
| 
       66 
     | 
    
         
            -
            ```
         
     | 
| 
      
 60 
     | 
    
         
            +
            ###### Roswell
         
     | 
| 
       67 
61 
     | 
    
         | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
            multi-implementation installation and upgrade system.
         
     | 
| 
      
 62 
     | 
    
         
            +
            Instructions for installing Roswell can be found in
         
     | 
| 
      
 63 
     | 
    
         
            +
            its
         
     | 
| 
      
 64 
     | 
    
         
            +
            [README](https://github.com/roswell/roswell#installation-dependency--usage).
         
     | 
| 
       72 
65 
     | 
    
         | 
| 
       73 
66 
     | 
    
         
             
            ###### Lisp Implementations
         
     | 
| 
       74 
67 
     | 
    
         | 
| 
         @@ -76,33 +69,13 @@ It is beyond the scope of this document to describe how to install 
     | 
|
| 
       76 
69 
     | 
    
         
             
            different Lisp implementations. Please find those instructions on
         
     | 
| 
       77 
70 
     | 
    
         
             
            those implementations' websites.
         
     | 
| 
       78 
71 
     | 
    
         | 
| 
       79 
     | 
    
         
            -
            After installing Lisp implementations. Check that  
     | 
| 
       80 
     | 
    
         
            -
            running ` 
     | 
| 
       81 
     | 
    
         
            -
            suffixed with `-system` (designating that CIM did not install them).
         
     | 
| 
       82 
     | 
    
         
            -
            Then to ensure CIM can use them properly run:
         
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
            ```
         
     | 
| 
       85 
     | 
    
         
            -
            for i in `cim list use`; do cim use $i; done
         
     | 
| 
       86 
     | 
    
         
            -
            ```
         
     | 
| 
      
 72 
     | 
    
         
            +
            After installing Lisp implementations. Check that Roswell can see them by
         
     | 
| 
      
 73 
     | 
    
         
            +
            running `ros list installed`.
         
     | 
| 
       87 
74 
     | 
    
         | 
| 
       88 
75 
     | 
    
         
             
            ###### QuickLisp
         
     | 
| 
       89 
76 
     | 
    
         | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
       92 
     | 
    
         
            -
            these instructions will install the QuickLisp system into
         
     | 
| 
       93 
     | 
    
         
            -
            `~/.quicklisp`.
         
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
       95 
     | 
    
         
            -
            To ensure CIM and all your implementations know and use QuickLisp you
         
     | 
| 
       96 
     | 
    
         
            -
            can run the following commands:
         
     | 
| 
       97 
     | 
    
         
            -
             
     | 
| 
       98 
     | 
    
         
            -
            ```
         
     | 
| 
       99 
     | 
    
         
            -
            ln ~/quicklisp ~/.cim/quicklisp
         
     | 
| 
       100 
     | 
    
         
            -
            cim for all do -l ~/.quicklisp/setup.lisp -e '(ql:add-to-init-file)'
         
     | 
| 
       101 
     | 
    
         
            -
            ```
         
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
     | 
    
         
            -
            (the last command will, for each implementation, install QuickLisp
         
     | 
| 
       104 
     | 
    
         
            -
            setup code into that implementation's startup file. It will prompt the
         
     | 
| 
       105 
     | 
    
         
            -
            user for confirmation before doing so.
         
     | 
| 
      
 77 
     | 
    
         
            +
            Although [QuickLisp](https://www.quicklisp.org/beta/) is
         
     | 
| 
      
 78 
     | 
    
         
            +
            required, Roswell will install and configure it for you, by default.
         
     | 
| 
       106 
79 
     | 
    
         | 
| 
       107 
80 
     | 
    
         
             
            ##### Creating a new exercise.
         
     | 
| 
       108 
81 
     | 
    
         | 
| 
         @@ -120,16 +93,11 @@ Travis build.  This build will run all exercises on many Common Lisp 
     | 
|
| 
       120 
93 
     | 
    
         
             
            implementations. To run the build yourself on your implementation load
         
     | 
| 
       121 
94 
     | 
    
         
             
            `bin/xlisp-test.lisp` and then evaluate `(xlisp-test:full-build)`.
         
     | 
| 
       122 
95 
     | 
    
         | 
| 
       123 
     | 
    
         
            -
            If  
     | 
| 
       124 
     | 
    
         
            -
            can be done with (this will return with a non-zero 
     | 
| 
       125 
     | 
    
         
            -
            are problems):
         
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
     | 
    
         
            -
            	cl -f bin/xlisp-test.lisp -e '(xlisp-test:travis-build)'
         
     | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
       129 
     | 
    
         
            -
            To run all the tests for *all* the implementations use this command
         
     | 
| 
       130 
     | 
    
         
            -
            line:
         
     | 
| 
      
 96 
     | 
    
         
            +
            If Roswell is installed then running all the tests for one
         
     | 
| 
      
 97 
     | 
    
         
            +
            implementation can be done with (this will return with a non-zero
         
     | 
| 
      
 98 
     | 
    
         
            +
            error code if there are problems):
         
     | 
| 
       131 
99 
     | 
    
         | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
      
 100 
     | 
    
         
            +
                ros run -l 'bin/xlisp-test.lisp' -e '(xlisp-test:travis-build)' -q
         
     | 
| 
       133 
101 
     | 
    
         | 
| 
       134 
102 
     | 
    
         
             
            ##### Style Guidelines
         
     | 
| 
       135 
103 
     | 
    
         |