trackler 2.0.3.4 → 2.0.3.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/common/exercises/all-your-base/canonical-data.json +21 -21
- data/common/exercises/wordy/description.md +24 -38
- data/common/exercises/wordy/metadata.yml +1 -1
- data/lib/trackler/version.rb +1 -1
- data/tracks/c/config.json +10 -0
- data/tracks/c/exercises/meetup/makefile +15 -0
- data/tracks/c/exercises/meetup/src/example.c +139 -0
- data/tracks/c/exercises/meetup/src/example.h +7 -0
- data/tracks/c/exercises/meetup/test/test_meetup.c +223 -0
- data/tracks/c/exercises/meetup/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/meetup/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/meetup/test/vendor/unity_internals.h +701 -0
- data/tracks/crystal/config.json +12 -0
- data/tracks/crystal/exercises/pascals-triangle/spec/pascals_triangle_spec.cr +30 -0
- data/tracks/crystal/exercises/pascals-triangle/src/example.cr +19 -0
- data/tracks/crystal/exercises/pascals-triangle/src/pascals_triangle.cr +1 -0
- data/tracks/crystal/exercises/run-length-encoding/spec/run_length_encoding_spec.cr +36 -0
- data/tracks/crystal/exercises/run-length-encoding/src/example.cr +40 -0
- data/tracks/crystal/src/generator/exercises/pascals-triangle.cr +58 -0
- data/tracks/crystal/src/generator/exercises/run_length_encoding.cr +42 -0
- data/tracks/javascript/config.json +8 -1
- data/tracks/javascript/exercises/all-your-base/all-your-base.spec.js +141 -0
- data/tracks/javascript/exercises/all-your-base/example.js +59 -0
- data/tracks/javascript/exercises/word-count/example.js +5 -5
- data/tracks/javascript/exercises/word-count/word-count.spec.js +23 -8
- data/tracks/lua/SETUP.md +60 -7
- data/tracks/lua/config.json +9 -0
- data/tracks/lua/exercises/say/example.lua +4 -4
- data/tracks/lua/exercises/variable-length-quantity/example.lua +36 -0
- data/tracks/lua/exercises/variable-length-quantity/variable-length-quantity_spec.lua +73 -0
- data/tracks/objective-c/.travis.yml +1 -0
- data/tracks/objective-c/config.json +8 -0
- data/tracks/objective-c/docs/TESTS.md +1 -1
- data/tracks/objective-c/exercises/transpose/TransposeExample.h +7 -0
- data/tracks/objective-c/exercises/transpose/TransposeExample.m +59 -0
- data/tracks/objective-c/exercises/transpose/TransposeTest.m +150 -0
- data/tracks/objective-c/xcodeProject/ObjectiveC.xcodeproj/project.pbxproj +18 -0
- data/tracks/ocaml/.gitignore +1 -0
- data/tracks/ocaml/tools/test-generator/Makefile +3 -0
- data/tracks/ocaml/tools/test-generator/src/controller.ml +11 -16
- data/tracks/ocaml/tools/test-generator/src/model.ml +4 -0
- data/tracks/ocaml/tools/test-generator/src/parser.ml +8 -1
- data/tracks/ocaml/tools/test-generator/src/special_cases.ml +5 -0
- data/tracks/ocaml/tools/test-generator/templates/all-your-base/template.ml +16 -0
- data/tracks/ocaml/tools/test-generator/test/model_test.ml +2 -0
- data/tracks/ocaml/tools/test-generator/test/parser_test.ml +8 -0
- data/tracks/perl5/docs/RESOURCES.md +57 -0
- data/tracks/perl5/exercises/hamming/Example.pm +7 -0
- data/tracks/perl5/exercises/hamming/hamming.t +17 -4
- data/tracks/perl5/exercises/rna-transcription/rna.t +4 -4
- data/tracks/perl6/.gitignore +2 -0
- data/tracks/perl6/config.json +5 -0
- data/tracks/perl6/exercises/phone-number/Example.pm +30 -0
- data/tracks/perl6/exercises/phone-number/cases.json +47 -0
- data/tracks/perl6/exercises/phone-number/phone.t +48 -0
- data/tracks/purescript/.gitignore +8 -0
- data/tracks/purescript/config.json +8 -3
- data/tracks/purescript/exercises/hello-world/bower.json +17 -0
- data/tracks/purescript/exercises/hello-world/examples/src/HelloWorld.purs +8 -0
- data/tracks/purescript/exercises/hello-world/src/HelloWorld.purs +6 -0
- data/tracks/purescript/exercises/hello-world/test/Main.purs +18 -0
- data/tracks/scala/exercises/leap/HINTS.md +4 -0
- data/tracks/scala/exercises/robot-name/HINTS.md +5 -0
- data/tracks/swift/docs/INSTALLATION.md +4 -1
- data/tracks/swift/exercises/accumulate/AccumulateTest.swift +1 -1
- data/tracks/swift/exercises/binary/BinaryExample.swift +4 -1
- data/tracks/swift/exercises/crypto-square/CryptoSquareExample.swift +3 -2
- data/tracks/swift/exercises/leap/LeapExample.swift +1 -3
- data/tracks/swift/exercises/pascals-triangle/PascalsTriangleTest.swift +1 -1
- data/tracks/swift/exercises/poker/PokerExample.swift +3 -3
- data/tracks/swift/exercises/poker/PokerTest.swift +38 -38
- data/tracks/swift/exercises/saddle-points/SaddlePointsTest.swift +1 -1
- data/tracks/swift/exercises/scrabble-score/ScrabbleScoreExample.swift +6 -3
- data/tracks/swift/exercises/series/SeriesTest.swift +1 -1
- data/tracks/swift/exercises/simple-linked-list/SimpleLinkedListExample.swift +2 -2
- data/tracks/swift/exercises/space-age/SpaceAgeExample.swift +10 -12
- data/tracks/swift/exercises/strain/StrainTest.swift +1 -1
- data/tracks/swift/exercises/tournament/TournamentExample.swift +2 -2
- data/tracks/swift/exercises/triangle/TriangleExample.swift +7 -3
- data/tracks/swift/exercises/wordy/WordyExample.swift +1 -2
- metadata +34 -3
- data/tracks/purescript/exercises/.keep +0 -0
@@ -0,0 +1,48 @@
|
|
1
|
+
#!/usr/bin/env perl6
|
2
|
+
use v6;
|
3
|
+
use Test;
|
4
|
+
use JSON::Tiny;
|
5
|
+
use lib my $path = IO::Path.new($?FILE).parent.path;
|
6
|
+
|
7
|
+
BEGIN {
|
8
|
+
plan 12;
|
9
|
+
use-ok %*ENV<EXERCISM> ?? 'Example' !! 'Phone', 'Module loaded';
|
10
|
+
|
11
|
+
unless $*PERL.compiler.version ~~ v2016.10+ {
|
12
|
+
sub bail-out {};
|
13
|
+
note 'Perl 6 ' ~ $*PERL.compiler.version ~ ' is not supported. Please use v2016.10 or newer';
|
14
|
+
skip-rest;
|
15
|
+
exit;
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
my %tests = from-json open("$path/cases.json").slurp-rest;
|
20
|
+
|
21
|
+
subtest 'number, area-code and pretty methods', {
|
22
|
+
plan 3;
|
23
|
+
ok Phone.can('number'), 'can Phone.number';
|
24
|
+
ok Phone.can('area-code'), 'can Phone.area-code';
|
25
|
+
ok Phone.can('pretty'), 'can Phone.pretty';
|
26
|
+
} or bail-out 'Missing method(s).';
|
27
|
+
|
28
|
+
for @(%tests<valid>) {
|
29
|
+
my $phone = Phone.new(number => .<input>);
|
30
|
+
my $msg = 'for ' ~ .<test>;
|
31
|
+
is $phone.number, .<number>, "number $msg";
|
32
|
+
is $phone.area-code, .<area-code>, "area-code $msg";
|
33
|
+
is $phone.pretty, .<pretty>, "pretty $msg";
|
34
|
+
}
|
35
|
+
|
36
|
+
my $exception;
|
37
|
+
if %*ENV<EXERCISM> {
|
38
|
+
$exception = X::Phone::Invalid;
|
39
|
+
}
|
40
|
+
else {
|
41
|
+
todo 'Optional Exception Tests'; # Remove this line for invalid input tests
|
42
|
+
$exception = Exception; # Change this if you wish to specify a specific exception
|
43
|
+
}
|
44
|
+
|
45
|
+
subtest 'Throw exceptions for invalid input', {
|
46
|
+
plan 5;
|
47
|
+
throws-like {Phone.new(number => .<input>)}, $exception, .<test> for @(%tests<invalid>);
|
48
|
+
}
|
@@ -3,9 +3,14 @@
|
|
3
3
|
"language": "PureScript",
|
4
4
|
"repository": "https://github.com/exercism/xpurescript",
|
5
5
|
"active": false,
|
6
|
-
"
|
7
|
-
|
8
|
-
|
6
|
+
"exercises": [
|
7
|
+
{
|
8
|
+
"slug": "hello-world",
|
9
|
+
"difficulty": 1,
|
10
|
+
"topics": [
|
11
|
+
"maybe"
|
12
|
+
]
|
13
|
+
}
|
9
14
|
],
|
10
15
|
"deprecated": [
|
11
16
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
{
|
2
|
+
"name": "hello-world",
|
3
|
+
"ignore": [
|
4
|
+
"**/.*",
|
5
|
+
"node_modules",
|
6
|
+
"bower_components",
|
7
|
+
"output"
|
8
|
+
],
|
9
|
+
"dependencies": {
|
10
|
+
"purescript-prelude": "^2.1.0",
|
11
|
+
"purescript-console": "^2.0.0"
|
12
|
+
},
|
13
|
+
"devDependencies": {
|
14
|
+
"purescript-psci-support": "^2.0.0",
|
15
|
+
"purescript-test-unit": "^10.0.1"
|
16
|
+
}
|
17
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Test.Main where
|
2
|
+
|
3
|
+
import Prelude
|
4
|
+
import Test.Unit (suite, test)
|
5
|
+
import Test.Unit.Main (runTest)
|
6
|
+
import Test.Unit.Assert as Assert
|
7
|
+
import Data.Maybe (Maybe(Just, Nothing))
|
8
|
+
import HelloWorld (helloWorld)
|
9
|
+
|
10
|
+
|
11
|
+
main = runTest do
|
12
|
+
suite "HelloWorld.helloWorld" do
|
13
|
+
test "Hello with no name" do
|
14
|
+
Assert.equal "Hello, World!" (helloWorld Nothing)
|
15
|
+
test "Hello to a sample name" do
|
16
|
+
Assert.equal "Hello, Alice!" (helloWorld (Just "Alice"))
|
17
|
+
test "Hello to another sample name" do
|
18
|
+
Assert.equal "Hello, Bob!" (helloWorld (Just "Bob"))
|
@@ -0,0 +1,4 @@
|
|
1
|
+
## Hints
|
2
|
+
Try to avoid code repetition, use private helper functions if you can.
|
3
|
+
|
4
|
+
And you might consider using a single `Boolean` expression instead of `if-else` for better readability. See [here](http://cs.wellesley.edu/~cs111/spring00/lectures/boolean-simplification.html) on how this could be done (the link is for Java, but of course the logic is valid for Scala, too).
|
@@ -0,0 +1,5 @@
|
|
1
|
+
## Hints
|
2
|
+
Make sure your solution is general enough to be easily scalable for longer names containing more letters and digits. This usually makes for better code quality, too.
|
3
|
+
|
4
|
+
Suggestion (this is not explicitly tested):
|
5
|
+
To make sure you always have a unique name you could implement your own cache or use a `Stream` with its built-in cache.
|
@@ -1,6 +1,9 @@
|
|
1
1
|
## Installing Swift
|
2
2
|
|
3
|
-
In order to use Swift, you must be running Xcode version 8.0 or greater
|
3
|
+
In order to use Swift, you must be running Xcode version 8.0 or greater.
|
4
4
|
|
5
|
+
The current release version is available at the [Mac App Store](https://itunes.apple.com/us/app/xcode/id497799835?mt=12).
|
6
|
+
|
7
|
+
Additional versions of Xcode (including the most recent beta) are available at [Apple's developer center](https://developer.apple.com/xcode/downloads/).
|
5
8
|
|
6
9
|
All exercises tested with Xcode 8.0 using Swift 3
|
@@ -16,7 +16,7 @@ private extension String {
|
|
16
16
|
}
|
17
17
|
|
18
18
|
private extension XCTest {
|
19
|
-
func XCTAssertEqualMultiArray(_ aArray1:
|
19
|
+
func XCTAssertEqualMultiArray(_ aArray1: [[String]], _ aArray2: [[String]]) {
|
20
20
|
XCTAssertEqual(Array(aArray1.joined()), Array(aArray2.joined()))
|
21
21
|
}
|
22
22
|
}
|
@@ -8,7 +8,10 @@ extension Int {
|
|
8
8
|
}
|
9
9
|
struct Binary {
|
10
10
|
private var UIntValue: UInt = 0
|
11
|
-
fileprivate var toDecimal: Int {
|
11
|
+
fileprivate var toDecimal: Int {
|
12
|
+
return Int(UIntValue)
|
13
|
+
}
|
14
|
+
|
12
15
|
private func bi2Uint(_ input: String) -> UInt? {
|
13
16
|
let orderedInput = Array(input.characters.reversed())
|
14
17
|
var tempUInt: UInt = 0
|
@@ -64,12 +64,13 @@ struct Crypto {
|
|
64
64
|
}
|
65
65
|
|
66
66
|
var normalizeCiphertext: String {
|
67
|
-
|
68
67
|
let sizeNormal: Int = (ciphertext.characters.count == self.size * self.size ) ? getSquareSize(self.ciphertext) : getSquareSize(self.ciphertext, floorNoCeling: true)
|
69
68
|
|
70
69
|
return segmentSorter(ciphertext, spacing: sizeNormal).joined(separator: " ")
|
71
70
|
}
|
72
|
-
var plaintextSegments: [String] {
|
71
|
+
var plaintextSegments: [String] {
|
72
|
+
return segmentSorter(self.normalizePlaintext, spacing: self.size)
|
73
|
+
}
|
73
74
|
var textValue: String = ""
|
74
75
|
var normalizePlaintext: String = ""
|
75
76
|
var size: Int = 0
|
@@ -3,7 +3,7 @@
|
|
3
3
|
#endif
|
4
4
|
|
5
5
|
private extension XCTest {
|
6
|
-
func XCTAssertEqualMultiArray(_ aArray1:
|
6
|
+
func XCTAssertEqualMultiArray(_ aArray1: [[Int]], _ aArray2: [[Int]]) {
|
7
7
|
XCTAssertEqual(Array(aArray1.joined()), Array(aArray2.joined()))
|
8
8
|
}
|
9
9
|
}
|
@@ -57,7 +57,7 @@ enum HandRank {
|
|
57
57
|
}
|
58
58
|
}
|
59
59
|
|
60
|
-
static func parsePairs(_ inputHand: PokerHand)->[(rank: Rank, count: Int)] {
|
60
|
+
static func parsePairs(_ inputHand: PokerHand) -> [(rank: Rank, count: Int)] {
|
61
61
|
let ranks = inputHand.hand.map({$0.rank})
|
62
62
|
let rankSet = Set(ranks)
|
63
63
|
var toReturn = [Rank:Int]()
|
@@ -73,7 +73,7 @@ enum HandRank {
|
|
73
73
|
return result
|
74
74
|
}
|
75
75
|
|
76
|
-
static func isFlush(_ inputHand: PokerHand)->(bool: Bool, suit: Suit) {
|
76
|
+
static func isFlush(_ inputHand: PokerHand) -> (bool: Bool, suit: Suit) {
|
77
77
|
let suits = inputHand.hand.map({$0.suit})
|
78
78
|
let first = suits[0]
|
79
79
|
for each in suits {
|
@@ -82,7 +82,7 @@ enum HandRank {
|
|
82
82
|
return (true, first)
|
83
83
|
}
|
84
84
|
|
85
|
-
static func isStraight(_ inputHand: PokerHand)->(bool: Bool, highest: Rank) {
|
85
|
+
static func isStraight(_ inputHand: PokerHand) -> (bool: Bool, highest: Rank) {
|
86
86
|
let sorted = inputHand.hand.sorted(by: {$0.rank < $1.rank})
|
87
87
|
let first = sorted[0].rank.rawValue
|
88
88
|
for (index, each) in sorted.enumerated() {
|
@@ -58,8 +58,8 @@ class PokerTest: XCTestCase {
|
|
58
58
|
hands: [
|
59
59
|
"4♢ 3♤ 4♤ J♤ K♤",
|
60
60
|
"A♡ K♡ J♢ 10♧ 9♡",
|
61
|
-
"2♢ 8♡ 5♢ 2♡ 8♧"
|
62
|
-
|
61
|
+
"2♢ 8♡ 5♢ 2♡ 8♧"
|
62
|
+
],
|
63
63
|
best: "2♢ 8♡ 5♢ 2♡ 8♧"
|
64
64
|
),
|
65
65
|
(
|
@@ -67,8 +67,8 @@ class PokerTest: XCTestCase {
|
|
67
67
|
hands: [
|
68
68
|
"4♢ J♧ 4♤ J♤ K♤",
|
69
69
|
"A♡ K♡ J♢ 10♧ 9♡",
|
70
|
-
"2♢ 8♡ 5♢ 2♡ 8♧"
|
71
|
-
|
70
|
+
"2♢ 8♡ 5♢ 2♡ 8♧"
|
71
|
+
],
|
72
72
|
best: "4♢ J♧ 4♤ J♤ K♤"
|
73
73
|
),
|
74
74
|
(
|
@@ -76,8 +76,8 @@ class PokerTest: XCTestCase {
|
|
76
76
|
hands: [
|
77
77
|
"4♢ J♧ 4♤ J♤ K♤",
|
78
78
|
"A♡ K♡ J♢ 10♧ 9♡",
|
79
|
-
"3♢ J♡ 5♢ 3♡ J♢"
|
80
|
-
|
79
|
+
"3♢ J♡ 5♢ 3♡ J♢"
|
80
|
+
],
|
81
81
|
best: "4♢ J♧ 4♤ J♤ K♤"
|
82
82
|
),
|
83
83
|
(
|
@@ -85,8 +85,8 @@ class PokerTest: XCTestCase {
|
|
85
85
|
hands: [
|
86
86
|
"4♢ J♧ 4♤ J♤ 2♤",
|
87
87
|
"A♡ K♡ J♢ 10♧ 9♡",
|
88
|
-
"4♧ J♡ 5♢ 4♡ J♢"
|
89
|
-
|
88
|
+
"4♧ J♡ 5♢ 4♡ J♢"
|
89
|
+
],
|
90
90
|
best: "4♧ J♡ 5♢ 4♡ J♢"
|
91
91
|
),
|
92
92
|
(
|
@@ -95,8 +95,8 @@ class PokerTest: XCTestCase {
|
|
95
95
|
"4♢ 3♤ 4♤ J♤ K♤",
|
96
96
|
"A♡ K♡ J♢ 10♧ 9♡",
|
97
97
|
"3♡ 8♡ 3♢ 3♧ 8♧",
|
98
|
-
"2♢ 8♡ 5♢ 2♡ 8♧"
|
99
|
-
|
98
|
+
"2♢ 8♡ 5♢ 2♡ 8♧"
|
99
|
+
],
|
100
100
|
best: "3♡ 8♡ 3♢ 3♧ 8♧"
|
101
101
|
),
|
102
102
|
(
|
@@ -105,8 +105,8 @@ class PokerTest: XCTestCase {
|
|
105
105
|
"4♢ 3♤ 4♤ J♤ 4♡",
|
106
106
|
"A♡ K♡ J♢ 10♧ 9♡",
|
107
107
|
"3♢ 8♡ 3♡ 3♧ 9♧",
|
108
|
-
"2♢ 8♡ 5♢ 2♡ 8♧"
|
109
|
-
|
108
|
+
"2♢ 8♡ 5♢ 2♡ 8♧"
|
109
|
+
],
|
110
110
|
best: "4♢ 3♤ 4♤ J♤ 4♡"
|
111
111
|
),
|
112
112
|
(
|
@@ -115,8 +115,8 @@ class PokerTest: XCTestCase {
|
|
115
115
|
"4♢ 3♤ 4♤ J♤ K♤",
|
116
116
|
"Q♡ K♡ J♢ 10♧ 9♡",
|
117
117
|
"3♡ 8♡ 3♢ 3♧ 9♧",
|
118
|
-
"2♢ 8♡ 5♢ 2♡ 8♧"
|
119
|
-
|
118
|
+
"2♢ 8♡ 5♢ 2♡ 8♧"
|
119
|
+
],
|
120
120
|
best: "Q♡ K♡ J♢ 10♧ 9♡"
|
121
121
|
),
|
122
122
|
(
|
@@ -125,8 +125,8 @@ class PokerTest: XCTestCase {
|
|
125
125
|
"4♢ 3♤ 4♤ J♤ K♤",
|
126
126
|
"2♤ 3♡ A♤ 5♤ 4♤",
|
127
127
|
"3♢ 8♡ 3♡ 3♧ 9♧",
|
128
|
-
"2♢ 8♡ 5♢ 2♡ 8♧"
|
129
|
-
|
128
|
+
"2♢ 8♡ 5♢ 2♡ 8♧"
|
129
|
+
],
|
130
130
|
best: "2♤ 3♡ A♤ 5♤ 4♤"
|
131
131
|
),
|
132
132
|
(
|
@@ -135,8 +135,8 @@ class PokerTest: XCTestCase {
|
|
135
135
|
"4♢ 3♤ 4♤ J♤ K♤",
|
136
136
|
"Q♡ K♡ J♢ 10♧ 9♡",
|
137
137
|
"A♢ K♧ 10♢ J♢ Q♢",
|
138
|
-
"2♢ 8♡ 5♢ 2♡ 8♧"
|
139
|
-
|
138
|
+
"2♢ 8♡ 5♢ 2♡ 8♧"
|
139
|
+
],
|
140
140
|
best: "A♢ K♧ 10♢ J♢ Q♢"
|
141
141
|
),
|
142
142
|
(
|
@@ -145,8 +145,8 @@ class PokerTest: XCTestCase {
|
|
145
145
|
"4♤ 3♤ 8♤ J♤ K♤",
|
146
146
|
"Q♡ K♡ J♢ 10♧ 9♡",
|
147
147
|
"3♢ 8♡ 3♢ 3♧ 9♧",
|
148
|
-
"2♢ 8♡ 5♢ 2♡ 8♧"
|
149
|
-
|
148
|
+
"2♢ 8♡ 5♢ 2♡ 8♧"
|
149
|
+
],
|
150
150
|
best: "4♤ 3♤ 8♤ J♤ K♤"
|
151
151
|
),
|
152
152
|
(
|
@@ -155,8 +155,8 @@ class PokerTest: XCTestCase {
|
|
155
155
|
"4♤ 3♤ 8♤ J♤ K♤",
|
156
156
|
"Q♡ K♡ J♢ 10♧ 9♡",
|
157
157
|
"3♢ 8♢ A♢ 2♢ 7♢",
|
158
|
-
"2♢ 8♡ 5♢ 2♡ 8♧"
|
159
|
-
|
158
|
+
"2♢ 8♡ 5♢ 2♡ 8♧"
|
159
|
+
],
|
160
160
|
best: "3♢ 8♢ A♢ 2♢ 7♢"
|
161
161
|
),
|
162
162
|
(
|
@@ -165,8 +165,8 @@ class PokerTest: XCTestCase {
|
|
165
165
|
"4♤ 3♤ 8♤ J♤ K♤",
|
166
166
|
"2♢ 8♡ 8♢ 2♡ 8♧",
|
167
167
|
"Q♡ K♡ J♢ 10♧ 9♡",
|
168
|
-
"3♡ A♡ 3♢ 3♧ A♧"
|
169
|
-
|
168
|
+
"3♡ A♡ 3♢ 3♧ A♧"
|
169
|
+
],
|
170
170
|
best: "2♢ 8♡ 8♢ 2♡ 8♧"
|
171
171
|
),
|
172
172
|
(
|
@@ -175,8 +175,8 @@ class PokerTest: XCTestCase {
|
|
175
175
|
"4♤ 3♤ 8♤ J♤ K♤",
|
176
176
|
"2♢ 8♡ 8♢ 2♡ 8♧",
|
177
177
|
"5♡ 5♢ A♤ 5♧ A♢",
|
178
|
-
"3♡ A♡ 3♢ 3♧ A♧"
|
179
|
-
|
178
|
+
"3♡ A♡ 3♢ 3♧ A♧"
|
179
|
+
],
|
180
180
|
best: "2♢ 8♡ 8♢ 2♡ 8♧"
|
181
181
|
),
|
182
182
|
(
|
@@ -185,8 +185,8 @@ class PokerTest: XCTestCase {
|
|
185
185
|
"4♤ 5♤ 8♤ J♤ K♤",
|
186
186
|
"2♢ 8♡ 8♢ 2♡ 8♧",
|
187
187
|
"Q♡ K♡ J♢ 10♧ 9♡",
|
188
|
-
"3♢ 3♡ 3♤ 3♧ A♧"
|
189
|
-
|
188
|
+
"3♢ 3♡ 3♤ 3♧ A♧"
|
189
|
+
],
|
190
190
|
best: "3♢ 3♡ 3♤ 3♧ A♧"
|
191
191
|
),
|
192
192
|
(
|
@@ -195,8 +195,8 @@ class PokerTest: XCTestCase {
|
|
195
195
|
"4♤ 5♤ 8♤ J♤ K♤",
|
196
196
|
"2♢ 2♧ 8♢ 2♡ 2♤",
|
197
197
|
"Q♡ K♡ J♢ 10♧ 9♡",
|
198
|
-
"3♢ 3♡ 3♤ 3♧ A♧"
|
199
|
-
|
198
|
+
"3♢ 3♡ 3♤ 3♧ A♧"
|
199
|
+
],
|
200
200
|
best: "3♢ 3♡ 3♤ 3♧ A♧"
|
201
201
|
),
|
202
202
|
(
|
@@ -205,8 +205,8 @@ class PokerTest: XCTestCase {
|
|
205
205
|
"4♤ 4♢ 4♡ 4♧ K♤",
|
206
206
|
"2♢ 8♡ 8♢ 2♡ 8♧",
|
207
207
|
"Q♡ K♡ 8♡ 10♡ 9♡",
|
208
|
-
"2♤ 3♤ A♤ 5♤ 4♤"
|
209
|
-
|
208
|
+
"2♤ 3♤ A♤ 5♤ 4♤"
|
209
|
+
],
|
210
210
|
best: "2♤ 3♤ A♤ 5♤ 4♤"
|
211
211
|
),
|
212
212
|
(
|
@@ -215,8 +215,8 @@ class PokerTest: XCTestCase {
|
|
215
215
|
"4♤ 5♤ 8♤ J♤ K♤",
|
216
216
|
"2♢ 8♡ 8♢ 2♡ 8♧",
|
217
217
|
"Q♡ K♡ J♡ 10♡ 9♡",
|
218
|
-
"Q♢ K♢ J♢ 10♢ A♢"
|
219
|
-
|
218
|
+
"Q♢ K♢ J♢ 10♢ A♢"
|
219
|
+
],
|
220
220
|
best: "Q♢ K♢ J♢ 10♢ A♢"
|
221
221
|
),
|
222
222
|
(
|
@@ -230,10 +230,10 @@ class PokerTest: XCTestCase {
|
|
230
230
|
"A♡ 2♡ 3♡ 4♡ 5♡",
|
231
231
|
"A♤ 2♤ 3♤ 4♤ 5♤",
|
232
232
|
"5♧ 4♧ 3♧ 2♧ A♧",
|
233
|
-
"A♢ 2♢ 6♢ 4♢ 5♢"
|
234
|
-
|
233
|
+
"A♢ 2♢ 6♢ 4♢ 5♢"
|
234
|
+
],
|
235
235
|
best: "A♤ 2♤ 3♤ 4♤ 5♤"
|
236
|
-
)
|
236
|
+
)
|
237
237
|
]
|
238
238
|
|
239
239
|
invalidTestCases =
|
@@ -277,7 +277,7 @@ class PokerTest: XCTestCase {
|
|
277
277
|
(
|
278
278
|
name: "double suits after rank",
|
279
279
|
hand: "2♡ 3♡ 5♡♡ 8♡ 9♡"
|
280
|
-
)
|
280
|
+
)
|
281
281
|
]
|
282
282
|
|
283
283
|
}
|