trackler 2.1.0.29 → 2.1.0.30

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/common/exercises/twelve-days/description.md +1 -1
  3. data/lib/trackler/version.rb +1 -1
  4. data/tracks/delphi/SETUP.md +1 -1
  5. data/tracks/ecmascript/Makefile +4 -3
  6. data/tracks/ecmascript/config.json +0 -65
  7. data/tracks/ecmascript/exercises/accumulate/package.json +6 -0
  8. data/tracks/ecmascript/exercises/acronym/package.json +6 -0
  9. data/tracks/ecmascript/exercises/all-your-base/package.json +6 -0
  10. data/tracks/ecmascript/exercises/allergies/package.json +6 -0
  11. data/tracks/ecmascript/exercises/anagram/package.json +6 -0
  12. data/tracks/ecmascript/exercises/atbash-cipher/package.json +6 -0
  13. data/tracks/ecmascript/exercises/beer-song/package.json +6 -0
  14. data/tracks/ecmascript/exercises/binary-search-tree/package.json +6 -0
  15. data/tracks/ecmascript/exercises/binary-search/package.json +6 -0
  16. data/tracks/ecmascript/exercises/binary/package.json +6 -0
  17. data/tracks/ecmascript/exercises/bob/package.json +6 -0
  18. data/tracks/ecmascript/exercises/bracket-push/package.json +6 -0
  19. data/tracks/ecmascript/exercises/circular-buffer/circular-buffer.spec.js +11 -13
  20. data/tracks/ecmascript/exercises/circular-buffer/example.js +15 -14
  21. data/tracks/ecmascript/exercises/circular-buffer/package.json +6 -0
  22. data/tracks/ecmascript/exercises/clock/package.json +6 -0
  23. data/tracks/ecmascript/exercises/connect/package.json +6 -0
  24. data/tracks/ecmascript/exercises/crypto-square/package.json +6 -0
  25. data/tracks/ecmascript/exercises/custom-set/package.json +6 -0
  26. data/tracks/ecmascript/exercises/diamond/package.json +6 -0
  27. data/tracks/ecmascript/exercises/difference-of-squares/package.json +6 -0
  28. data/tracks/ecmascript/exercises/etl/package.json +6 -0
  29. data/tracks/ecmascript/exercises/food-chain/package.json +6 -0
  30. data/tracks/ecmascript/exercises/gigasecond/package.json +6 -0
  31. data/tracks/ecmascript/exercises/grade-school/package.json +6 -0
  32. data/tracks/ecmascript/exercises/grains/package.json +6 -0
  33. data/tracks/ecmascript/exercises/hamming/package.json +6 -0
  34. data/tracks/ecmascript/exercises/hello-world/package.json +6 -0
  35. data/tracks/ecmascript/exercises/hexadecimal/package.json +6 -0
  36. data/tracks/ecmascript/exercises/isogram/package.json +6 -0
  37. data/tracks/ecmascript/exercises/kindergarten-garden/package.json +6 -0
  38. data/tracks/ecmascript/exercises/largest-series-product/package.json +6 -0
  39. data/tracks/ecmascript/exercises/leap/package.json +6 -0
  40. data/tracks/ecmascript/exercises/linked-list/package.json +6 -0
  41. data/tracks/ecmascript/exercises/luhn/package.json +6 -0
  42. data/tracks/ecmascript/exercises/matrix/package.json +6 -0
  43. data/tracks/ecmascript/exercises/meetup/package.json +6 -0
  44. data/tracks/ecmascript/exercises/nth-prime/package.json +6 -0
  45. data/tracks/ecmascript/exercises/ocr-numbers/package.json +6 -0
  46. data/tracks/ecmascript/exercises/octal/package.json +6 -0
  47. data/tracks/ecmascript/exercises/package.json +11 -0
  48. data/tracks/ecmascript/exercises/palindrome-products/package.json +6 -0
  49. data/tracks/ecmascript/exercises/pangram/package.json +6 -0
  50. data/tracks/ecmascript/exercises/pascals-triangle/package.json +6 -0
  51. data/tracks/ecmascript/exercises/perfect-numbers/package.json +6 -0
  52. data/tracks/ecmascript/exercises/phone-number/package.json +6 -0
  53. data/tracks/ecmascript/exercises/pig-latin/package.json +6 -0
  54. data/tracks/ecmascript/exercises/prime-factors/package.json +6 -0
  55. data/tracks/ecmascript/exercises/pythagorean-triplet/package.json +6 -0
  56. data/tracks/ecmascript/exercises/queen-attack/package.json +6 -0
  57. data/tracks/ecmascript/exercises/raindrops/package.json +6 -0
  58. data/tracks/ecmascript/exercises/rna-transcription/package.json +6 -0
  59. data/tracks/ecmascript/exercises/robot-name/package.json +6 -0
  60. data/tracks/ecmascript/exercises/robot-simulator/package.json +6 -0
  61. data/tracks/ecmascript/exercises/roman-numerals/package.json +6 -0
  62. data/tracks/ecmascript/exercises/saddle-points/package.json +6 -0
  63. data/tracks/ecmascript/exercises/say/package.json +6 -0
  64. data/tracks/ecmascript/exercises/scrabble-score/package.json +6 -0
  65. data/tracks/ecmascript/exercises/secret-handshake/package.json +6 -0
  66. data/tracks/ecmascript/exercises/series/package.json +6 -0
  67. data/tracks/ecmascript/exercises/sieve/package.json +6 -0
  68. data/tracks/ecmascript/exercises/simple-cipher/package.json +6 -0
  69. data/tracks/ecmascript/exercises/space-age/package.json +6 -0
  70. data/tracks/ecmascript/exercises/strain/package.json +6 -0
  71. data/tracks/ecmascript/exercises/sum-of-multiples/package.json +6 -0
  72. data/tracks/ecmascript/exercises/triangle/package.json +6 -0
  73. data/tracks/ecmascript/exercises/trinary/package.json +6 -0
  74. data/tracks/ecmascript/exercises/two-bucket/package.json +6 -0
  75. data/tracks/ecmascript/exercises/word-count/package.json +6 -0
  76. data/tracks/ecmascript/exercises/wordy/package.json +6 -0
  77. data/tracks/ecmascript/package.json +6 -0
  78. data/tracks/ecmascript/yarn.lock +9 -2
  79. data/tracks/go/README.md +3 -4
  80. data/tracks/haskell/README.md +1 -1
  81. data/tracks/java/.gitignore +0 -1
  82. data/tracks/java/.travis.yml +15 -1
  83. data/tracks/java/bin/journey-test.sh +3 -4
  84. data/tracks/java/bin/unit-tests.sh +2 -2
  85. data/tracks/java/gradle/wrapper/gradle-wrapper.jar +0 -0
  86. data/tracks/java/gradle/wrapper/gradle-wrapper.properties +6 -0
  87. data/tracks/java/gradlew +172 -0
  88. data/tracks/java/gradlew.bat +84 -0
  89. data/tracks/javascript/config.json +0 -74
  90. data/tracks/javascript/exercises/isogram/isogram.spec.js +6 -0
  91. data/tracks/php/config.json +5 -0
  92. data/tracks/php/exercises/prime-factors/example.php +13 -0
  93. data/tracks/php/exercises/prime-factors/prime-factors_test.php +46 -0
  94. data/tracks/ruby/exercises/isogram/.meta/.version +1 -1
  95. data/tracks/ruby/exercises/isogram/.meta/generator/isogram_case.rb +15 -1
  96. data/tracks/ruby/exercises/isogram/isogram_test.rb +10 -10
  97. data/tracks/ruby/exercises/sum-of-multiples/.meta/.version +1 -0
  98. data/tracks/ruby/exercises/sum-of-multiples/.meta/generator/sum_of_multiples_case.rb +11 -0
  99. data/tracks/ruby/exercises/sum-of-multiples/.meta/solutions/sum_of_multiples.rb +4 -0
  100. data/tracks/ruby/exercises/sum-of-multiples/sum_of_multiples_test.rb +51 -12
  101. data/tracks/rust/exercises/forth/example.rs +2 -6
  102. data/tracks/rust/exercises/forth/tests/forth.rs +18 -18
  103. metadata +10 -2
@@ -0,0 +1,6 @@
1
+ #Tue May 23 10:48:11 BST 2017
2
+ distributionBase=GRADLE_USER_HOME
3
+ distributionPath=wrapper/dists
4
+ zipStoreBase=GRADLE_USER_HOME
5
+ zipStorePath=wrapper/dists
6
+ distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-bin.zip
@@ -0,0 +1,172 @@
1
+ #!/usr/bin/env sh
2
+
3
+ ##############################################################################
4
+ ##
5
+ ## Gradle start up script for UN*X
6
+ ##
7
+ ##############################################################################
8
+
9
+ # Attempt to set APP_HOME
10
+ # Resolve links: $0 may be a link
11
+ PRG="$0"
12
+ # Need this for relative symlinks.
13
+ while [ -h "$PRG" ] ; do
14
+ ls=`ls -ld "$PRG"`
15
+ link=`expr "$ls" : '.*-> \(.*\)$'`
16
+ if expr "$link" : '/.*' > /dev/null; then
17
+ PRG="$link"
18
+ else
19
+ PRG=`dirname "$PRG"`"/$link"
20
+ fi
21
+ done
22
+ SAVED="`pwd`"
23
+ cd "`dirname \"$PRG\"`/" >/dev/null
24
+ APP_HOME="`pwd -P`"
25
+ cd "$SAVED" >/dev/null
26
+
27
+ APP_NAME="Gradle"
28
+ APP_BASE_NAME=`basename "$0"`
29
+
30
+ # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
31
+ DEFAULT_JVM_OPTS=""
32
+
33
+ # Use the maximum available, or set MAX_FD != -1 to use that value.
34
+ MAX_FD="maximum"
35
+
36
+ warn ( ) {
37
+ echo "$*"
38
+ }
39
+
40
+ die ( ) {
41
+ echo
42
+ echo "$*"
43
+ echo
44
+ exit 1
45
+ }
46
+
47
+ # OS specific support (must be 'true' or 'false').
48
+ cygwin=false
49
+ msys=false
50
+ darwin=false
51
+ nonstop=false
52
+ case "`uname`" in
53
+ CYGWIN* )
54
+ cygwin=true
55
+ ;;
56
+ Darwin* )
57
+ darwin=true
58
+ ;;
59
+ MINGW* )
60
+ msys=true
61
+ ;;
62
+ NONSTOP* )
63
+ nonstop=true
64
+ ;;
65
+ esac
66
+
67
+ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
68
+
69
+ # Determine the Java command to use to start the JVM.
70
+ if [ -n "$JAVA_HOME" ] ; then
71
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
72
+ # IBM's JDK on AIX uses strange locations for the executables
73
+ JAVACMD="$JAVA_HOME/jre/sh/java"
74
+ else
75
+ JAVACMD="$JAVA_HOME/bin/java"
76
+ fi
77
+ if [ ! -x "$JAVACMD" ] ; then
78
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
79
+
80
+ Please set the JAVA_HOME variable in your environment to match the
81
+ location of your Java installation."
82
+ fi
83
+ else
84
+ JAVACMD="java"
85
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
86
+
87
+ Please set the JAVA_HOME variable in your environment to match the
88
+ location of your Java installation."
89
+ fi
90
+
91
+ # Increase the maximum file descriptors if we can.
92
+ if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
93
+ MAX_FD_LIMIT=`ulimit -H -n`
94
+ if [ $? -eq 0 ] ; then
95
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
96
+ MAX_FD="$MAX_FD_LIMIT"
97
+ fi
98
+ ulimit -n $MAX_FD
99
+ if [ $? -ne 0 ] ; then
100
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
101
+ fi
102
+ else
103
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
104
+ fi
105
+ fi
106
+
107
+ # For Darwin, add options to specify how the application appears in the dock
108
+ if $darwin; then
109
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
110
+ fi
111
+
112
+ # For Cygwin, switch paths to Windows format before running java
113
+ if $cygwin ; then
114
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
115
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
116
+ JAVACMD=`cygpath --unix "$JAVACMD"`
117
+
118
+ # We build the pattern for arguments to be converted via cygpath
119
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
120
+ SEP=""
121
+ for dir in $ROOTDIRSRAW ; do
122
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
123
+ SEP="|"
124
+ done
125
+ OURCYGPATTERN="(^($ROOTDIRS))"
126
+ # Add a user-defined pattern to the cygpath arguments
127
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
128
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
129
+ fi
130
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
131
+ i=0
132
+ for arg in "$@" ; do
133
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
134
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
135
+
136
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
137
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
138
+ else
139
+ eval `echo args$i`="\"$arg\""
140
+ fi
141
+ i=$((i+1))
142
+ done
143
+ case $i in
144
+ (0) set -- ;;
145
+ (1) set -- "$args0" ;;
146
+ (2) set -- "$args0" "$args1" ;;
147
+ (3) set -- "$args0" "$args1" "$args2" ;;
148
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
149
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
150
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
151
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
152
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
153
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
154
+ esac
155
+ fi
156
+
157
+ # Escape application args
158
+ save ( ) {
159
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
160
+ echo " "
161
+ }
162
+ APP_ARGS=$(save "$@")
163
+
164
+ # Collect all arguments for the java command, following the shell quoting and substitution rules
165
+ eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
166
+
167
+ # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
168
+ if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
169
+ cd "$(dirname "$0")"
170
+ fi
171
+
172
+ exec "$JAVACMD" "$@"
@@ -0,0 +1,84 @@
1
+ @if "%DEBUG%" == "" @echo off
2
+ @rem ##########################################################################
3
+ @rem
4
+ @rem Gradle startup script for Windows
5
+ @rem
6
+ @rem ##########################################################################
7
+
8
+ @rem Set local scope for the variables with windows NT shell
9
+ if "%OS%"=="Windows_NT" setlocal
10
+
11
+ set DIRNAME=%~dp0
12
+ if "%DIRNAME%" == "" set DIRNAME=.
13
+ set APP_BASE_NAME=%~n0
14
+ set APP_HOME=%DIRNAME%
15
+
16
+ @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17
+ set DEFAULT_JVM_OPTS=
18
+
19
+ @rem Find java.exe
20
+ if defined JAVA_HOME goto findJavaFromJavaHome
21
+
22
+ set JAVA_EXE=java.exe
23
+ %JAVA_EXE% -version >NUL 2>&1
24
+ if "%ERRORLEVEL%" == "0" goto init
25
+
26
+ echo.
27
+ echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28
+ echo.
29
+ echo Please set the JAVA_HOME variable in your environment to match the
30
+ echo location of your Java installation.
31
+
32
+ goto fail
33
+
34
+ :findJavaFromJavaHome
35
+ set JAVA_HOME=%JAVA_HOME:"=%
36
+ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37
+
38
+ if exist "%JAVA_EXE%" goto init
39
+
40
+ echo.
41
+ echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42
+ echo.
43
+ echo Please set the JAVA_HOME variable in your environment to match the
44
+ echo location of your Java installation.
45
+
46
+ goto fail
47
+
48
+ :init
49
+ @rem Get command-line arguments, handling Windows variants
50
+
51
+ if not "%OS%" == "Windows_NT" goto win9xME_args
52
+
53
+ :win9xME_args
54
+ @rem Slurp the command line arguments.
55
+ set CMD_LINE_ARGS=
56
+ set _SKIP=2
57
+
58
+ :win9xME_args_slurp
59
+ if "x%~1" == "x" goto execute
60
+
61
+ set CMD_LINE_ARGS=%*
62
+
63
+ :execute
64
+ @rem Setup the command line
65
+
66
+ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
67
+
68
+ @rem Execute Gradle
69
+ "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
70
+
71
+ :end
72
+ @rem End local scope for the variables with windows NT shell
73
+ if "%ERRORLEVEL%"=="0" goto mainEnd
74
+
75
+ :fail
76
+ rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
77
+ rem the _cmd.exe /c_ return code!
78
+ if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
79
+ exit /b 1
80
+
81
+ :mainEnd
82
+ if "%OS%"=="Windows_NT" endlocal
83
+
84
+ :omega
@@ -4,80 +4,6 @@
4
4
  "repository": "https://github.com/exercism/xjavascript",
5
5
  "active": true,
6
6
  "test_pattern": ".*[.]spec[.]js$",
7
- "problems": [
8
- "hello-world",
9
- "leap",
10
- "hamming",
11
- "rna-transcription",
12
- "bob",
13
- "gigasecond",
14
- "perfect-numbers",
15
- "word-count",
16
- "isogram",
17
- "pangram",
18
- "beer-song",
19
- "phone-number",
20
- "anagram",
21
- "food-chain",
22
- "grade-school",
23
- "robot-name",
24
- "etl",
25
- "space-age",
26
- "grains",
27
- "triangle",
28
- "clock",
29
- "acronym",
30
- "scrabble-score",
31
- "roman-numerals",
32
- "circular-buffer",
33
- "binary",
34
- "prime-factors",
35
- "raindrops",
36
- "allergies",
37
- "strain",
38
- "atbash-cipher",
39
- "accumulate",
40
- "crypto-square",
41
- "trinary",
42
- "sieve",
43
- "simple-cipher",
44
- "octal",
45
- "luhn",
46
- "pig-latin",
47
- "pythagorean-triplet",
48
- "series",
49
- "difference-of-squares",
50
- "secret-handshake",
51
- "proverb",
52
- "linked-list",
53
- "wordy",
54
- "flatten-array",
55
- "hexadecimal",
56
- "largest-series-product",
57
- "kindergarten-garden",
58
- "binary-search",
59
- "binary-search-tree",
60
- "matrix",
61
- "robot-simulator",
62
- "nth-prime",
63
- "palindrome-products",
64
- "pascals-triangle",
65
- "say",
66
- "custom-set",
67
- "sum-of-multiples",
68
- "queen-attack",
69
- "saddle-points",
70
- "ocr-numbers",
71
- "meetup",
72
- "bracket-push",
73
- "two-bucket",
74
- "bowling",
75
- "diamond",
76
- "all-your-base",
77
- "run-length-encoding",
78
- "minesweeper",
79
- "alphametics"
80
- ],
81
7
  "exercises": [
82
8
  {
83
9
  "slug": "hello-world",
@@ -60,5 +60,11 @@ describe('Isogram Test Suite', function () {
60
60
 
61
61
  expect(word.isIsogram()).toEqual(false);
62
62
  });
63
+
64
+ xit('Àcrobàt', function () {
65
+ var word = new Isogram('Àcrobàt');
66
+
67
+ expect(word.isIsogram()).toEqual(false);
68
+ });
63
69
 
64
70
  });
@@ -392,6 +392,11 @@
392
392
  "slug": "binary-search",
393
393
  "difficulty": 3,
394
394
  "topics" : []
395
+ },
396
+ {
397
+ "slug": "prime-factors",
398
+ "difficulty": 3,
399
+ "topics" : []
395
400
  }
396
401
  ]
397
402
  }
@@ -0,0 +1,13 @@
1
+ <?php
2
+ function factors($n)
3
+ {
4
+ $factorList = [];
5
+ $limit = sqrt($n) * 10;
6
+ for ($i = 2; $i <= $limit && $n > 1; $i++) {
7
+ while ($n > 1 && $n % $i === 0) {
8
+ $factorList[]=$i;
9
+ $n = $n / $i;
10
+ }
11
+ }
12
+ return $factorList;
13
+ }
@@ -0,0 +1,46 @@
1
+ <?php
2
+ require_once "prime-factors.php";
3
+
4
+ class PrimeFactorsTest extends PHPUnit\Framework\TestCase
5
+ {
6
+ public function testNoFactors()
7
+ {
8
+ $this->assertSame([], factors(1));
9
+ }
10
+
11
+ public function testOneFactor()
12
+ {
13
+ $this->markTestSkipped();
14
+ $this->assertSame([2], factors(2));
15
+ }
16
+
17
+ public function testSquareOfPrime()
18
+ {
19
+ $this->markTestSkipped();
20
+ $this->assertSame([3, 3], factors(9));
21
+ }
22
+
23
+ public function testCubeOfPrime()
24
+ {
25
+ $this->markTestSkipped();
26
+ $this->assertSame([2, 2, 2], factors(8));
27
+ }
28
+
29
+ public function testProductOfPrimesAndNon()
30
+ {
31
+ $this->markTestSkipped();
32
+ $this->assertEquals([2, 2, 3], factors(12));
33
+ }
34
+
35
+ public function testProductOfPrimes()
36
+ {
37
+ $this->markTestSkipped();
38
+ $this->assertEquals([5, 17, 23, 461], factors(901255));
39
+ }
40
+
41
+ public function testFactorsIncludeLargePrime()
42
+ {
43
+ $this->markTestSkipped();
44
+ $this->assertEquals([11, 9539, 894119], factors(93819012551));
45
+ }
46
+ }
@@ -1 +1 @@
1
- 3
1
+ 4
@@ -6,9 +6,23 @@ class IsogramCase < Generator::ExerciseCase
6
6
  indent_lines(
7
7
  [
8
8
  "string = #{input.inspect}",
9
- "#{assert} Isogram.is_isogram?(string)"
9
+ "#{assert} Isogram.isogram?(string), #{failure_message}"
10
10
  ], 4
11
11
  )
12
12
  end
13
13
 
14
+ private
15
+
16
+ def failure_message
17
+ %Q("Expected #{expected}, #{reason}")
18
+ end
19
+
20
+ def reason
21
+ "'#{input}' #{is_or_not} an isogram"
22
+ end
23
+
24
+ def is_or_not
25
+ expected ? 'is' : 'is not'
26
+ end
27
+
14
28
  end