trackler 2.2.1.101 → 2.2.1.102

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/protein-translation/description.md +2 -2
  4. data/problem-specifications/exercises/robot-simulator/canonical-data.json +27 -27
  5. data/problem-specifications/exercises/run-length-encoding/canonical-data.json +40 -14
  6. data/problem-specifications/exercises/tournament/canonical-data.json +71 -49
  7. data/tracks/bash/CONTRIBUTING.md +5 -10
  8. data/tracks/bash/POLICIES.md +57 -0
  9. data/tracks/bash/_template/example.sh +20 -1
  10. data/tracks/bash/exercises/hello-world/hello_world.sh +22 -0
  11. data/tracks/ceylon/exercises/anagram/source/anagram/AnagramTest.ceylon +1 -9
  12. data/tracks/ceylon/exercises/rna-transcription/README.md +1 -1
  13. data/tracks/fsharp/exercises/matrix/Example.fs +16 -13
  14. data/tracks/fsharp/exercises/matrix/Matrix.fs +2 -4
  15. data/tracks/fsharp/exercises/matrix/MatrixTest.fs +26 -67
  16. data/tracks/fsharp/exercises/saddle-points/Example.fs +19 -15
  17. data/tracks/fsharp/exercises/saddle-points/SaddlePointsTest.fs +31 -31
  18. data/tracks/fsharp/exercises/sublist/SublistTest.fs +71 -41
  19. data/tracks/fsharp/exercises/tournament/TournamentTest.fs +115 -48
  20. data/tracks/fsharp/exercises/transpose/Example.fs +10 -13
  21. data/tracks/fsharp/exercises/transpose/TransposeTest.fs +150 -219
  22. data/tracks/fsharp/generators/Generators.fs +55 -0
  23. data/tracks/go/exercises/clock/clock_test.go +1 -1
  24. data/tracks/go/exercises/poker/.meta/gen.go +5 -3
  25. data/tracks/go/exercises/poker/cases_test.go +2 -2
  26. data/tracks/go/exercises/prime-factors/.meta/gen.go +5 -3
  27. data/tracks/go/exercises/prime-factors/cases_test.go +2 -2
  28. data/tracks/go/exercises/rail-fence-cipher/.meta/gen.go +9 -7
  29. data/tracks/go/exercises/rail-fence-cipher/cases_test.go +2 -2
  30. data/tracks/go/exercises/raindrops/.meta/gen.go +4 -2
  31. data/tracks/go/exercises/raindrops/cases_test.go +2 -2
  32. data/tracks/go/exercises/reverse-string/.meta/gen.go +5 -3
  33. data/tracks/go/exercises/reverse-string/cases_test.go +2 -2
  34. data/tracks/go/exercises/rna-transcription/.meta/gen.go +11 -19
  35. data/tracks/go/exercises/rna-transcription/cases_test.go +20 -18
  36. data/tracks/go/exercises/rna-transcription/rna_transcription_test.go +3 -2
  37. data/tracks/go/exercises/run-length-encoding/.meta/gen.go +15 -9
  38. data/tracks/go/exercises/run-length-encoding/cases_test.go +2 -2
  39. data/tracks/go/exercises/sieve/.meta/gen.go +5 -3
  40. data/tracks/go/exercises/sieve/cases_test.go +2 -2
  41. data/tracks/go/exercises/space-age/.meta/gen.go +7 -5
  42. data/tracks/go/exercises/space-age/cases_test.go +2 -2
  43. data/tracks/go/exercises/sublist/.meta/gen.go +7 -5
  44. data/tracks/go/exercises/sublist/cases_test.go +2 -2
  45. data/tracks/go/exercises/variable-length-quantity/.meta/gen.go +7 -5
  46. data/tracks/go/exercises/variable-length-quantity/cases_test.go +2 -2
  47. data/tracks/haskell/exercises/rna-transcription/README.md +1 -1
  48. data/tracks/haskell/exercises/rna-transcription/package.yaml +1 -1
  49. data/tracks/haskell/exercises/rna-transcription/test/Tests.hs +12 -0
  50. data/tracks/javascript/.travis.yml +1 -1
  51. data/tracks/ruby/exercises/accumulate/.meta/hints.md +6 -3
  52. data/tracks/ruby/exercises/accumulate/README.md +6 -3
  53. metadata +4 -3
  54. data/tracks/fsharp/exercises/transpose/TrinaryTest.fs +0 -26
@@ -1,81 +1,111 @@
1
- // This file was created manually and its version is 1.0.0.
1
+ // This file was auto-generated based on version 1.1.0 of the canonical data.
2
2
 
3
3
  module SublistTest
4
4
 
5
- open Xunit
6
5
  open FsUnit.Xunit
6
+ open Xunit
7
7
 
8
8
  open Sublist
9
9
 
10
10
  [<Fact>]
11
- let ``Empty equals empty`` () =
12
- sublist [] [] |> should equal Equal
11
+ let ``Empty lists`` () =
12
+ let listOne = []
13
+ let listTwo = []
14
+ sublist listOne listTwo |> should equal Equal
13
15
 
14
16
  [<Fact(Skip = "Remove to run test")>]
15
- let ``Empty is a sublist of anything`` () =
16
- sublist [] [1; 2; 3; 4] |> should equal Sublist
17
+ let ``Empty list within non empty list`` () =
18
+ let listOne = []
19
+ let listTwo = [1; 2; 3]
20
+ sublist listOne listTwo |> should equal Sublist
17
21
 
18
22
  [<Fact(Skip = "Remove to run test")>]
19
- let ``Anything is a superlist of empty`` () =
20
- sublist [1; 2; 3; 4] [] |> should equal Superlist
23
+ let ``Non empty list contains empty list`` () =
24
+ let listOne = [1; 2; 3]
25
+ let listTwo = []
26
+ sublist listOne listTwo |> should equal Superlist
21
27
 
22
28
  [<Fact(Skip = "Remove to run test")>]
23
- let ``1 is not 2`` () =
24
- sublist [1] [2] |> should equal Unequal
29
+ let ``List equals itself`` () =
30
+ let listOne = [1; 2; 3]
31
+ let listTwo = [1; 2; 3]
32
+ sublist listOne listTwo |> should equal Equal
25
33
 
26
34
  [<Fact(Skip = "Remove to run test")>]
27
- let ``Compare larger equal lists`` () =
28
- let xs = List.replicate 1000 'x'
29
- sublist xs xs |> should equal Equal
35
+ let ``Different lists`` () =
36
+ let listOne = [1; 2; 3]
37
+ let listTwo = [2; 3; 4]
38
+ sublist listOne listTwo |> should equal Unequal
30
39
 
31
40
  [<Fact(Skip = "Remove to run test")>]
32
- let ``Sublist at start`` () =
33
- sublist [1; 2; 3] [1; 2; 3; 4; 5] |> should equal Sublist
41
+ let ``False start`` () =
42
+ let listOne = [1; 2; 5]
43
+ let listTwo = [0; 1; 2; 3; 1; 2; 5; 6]
44
+ sublist listOne listTwo |> should equal Sublist
34
45
 
35
46
  [<Fact(Skip = "Remove to run test")>]
36
- let ``Sublist in middle`` () =
37
- sublist [4; 3; 2] [5; 4; 3; 2; 1] |> should equal Sublist
47
+ let ``Consecutive`` () =
48
+ let listOne = [1; 1; 2]
49
+ let listTwo = [0; 1; 1; 1; 2; 1; 2]
50
+ sublist listOne listTwo |> should equal Sublist
38
51
 
39
52
  [<Fact(Skip = "Remove to run test")>]
40
- let ``Sublist at end`` () =
41
- sublist [3; 4; 5] [1; 2; 3; 4; 5] |> should equal Sublist
53
+ let ``Sublist at start`` () =
54
+ let listOne = [0; 1; 2]
55
+ let listTwo = [0; 1; 2; 3; 4; 5]
56
+ sublist listOne listTwo |> should equal Sublist
42
57
 
43
58
  [<Fact(Skip = "Remove to run test")>]
44
- let ``Partially matching sublist at start`` () =
45
- sublist [1; 1; 2] [1; 1; 1; 2] |> should equal Sublist
59
+ let ``Sublist in middle`` () =
60
+ let listOne = [2; 3; 4]
61
+ let listTwo = [0; 1; 2; 3; 4; 5]
62
+ sublist listOne listTwo |> should equal Sublist
46
63
 
47
64
  [<Fact(Skip = "Remove to run test")>]
48
- let ``Sublist early in huge list`` () =
49
- sublist [3; 4; 5] [1 .. 1000000] |> should equal Sublist
50
-
51
- [<Fact(Skip = "Remove to run test")>]
52
- let ``Huge sublist not in huge list`` () =
53
- sublist [10 .. 1000001] [1 .. 1000000] |> should equal Unequal
65
+ let ``Sublist at end`` () =
66
+ let listOne = [3; 4; 5]
67
+ let listTwo = [0; 1; 2; 3; 4; 5]
68
+ sublist listOne listTwo |> should equal Sublist
54
69
 
55
70
  [<Fact(Skip = "Remove to run test")>]
56
- let ``Superlist at start`` () =
57
- sublist [1; 2; 3; 4; 5] [1; 2; 3] |> should equal Superlist
71
+ let ``At start of superlist`` () =
72
+ let listOne = [0; 1; 2; 3; 4; 5]
73
+ let listTwo = [0; 1; 2]
74
+ sublist listOne listTwo |> should equal Superlist
58
75
 
59
76
  [<Fact(Skip = "Remove to run test")>]
60
- let ``Superlist in middle`` () =
61
- sublist [5; 4; 3; 2; 1] [4; 3; 2] |> should equal Superlist
77
+ let ``In middle of superlist`` () =
78
+ let listOne = [0; 1; 2; 3; 4; 5]
79
+ let listTwo = [2; 3]
80
+ sublist listOne listTwo |> should equal Superlist
62
81
 
63
82
  [<Fact(Skip = "Remove to run test")>]
64
- let ``Superlist at end`` () =
65
- sublist [1; 2; 3; 4; 5] [3; 4; 5] |> should equal Superlist
83
+ let ``At end of superlist`` () =
84
+ let listOne = [0; 1; 2; 3; 4; 5]
85
+ let listTwo = [3; 4; 5]
86
+ sublist listOne listTwo |> should equal Superlist
66
87
 
67
88
  [<Fact(Skip = "Remove to run test")>]
68
- let ``Partially matching superlist at start`` () =
69
- sublist [1; 1; 1; 2] [1; 1; 2] |> should equal Superlist
89
+ let ``First list missing element from second list`` () =
90
+ let listOne = [1; 3]
91
+ let listTwo = [1; 2; 3]
92
+ sublist listOne listTwo |> should equal Unequal
70
93
 
71
94
  [<Fact(Skip = "Remove to run test")>]
72
- let ``Superlist early in huge list`` () =
73
- sublist [1 .. 1000000] [3; 4; 5] |> should equal Superlist
95
+ let ``Second list missing element from first list`` () =
96
+ let listOne = [1; 2; 3]
97
+ let listTwo = [1; 3]
98
+ sublist listOne listTwo |> should equal Unequal
74
99
 
75
100
  [<Fact(Skip = "Remove to run test")>]
76
- let ``Recurring values sublist`` () =
77
- sublist [1; 2; 1; 2; 3] [1; 2; 3; 1; 2; 1; 2; 3; 2; 1] |> should equal Sublist
101
+ let ``Order matters to a list`` () =
102
+ let listOne = [1; 2; 3]
103
+ let listTwo = [3; 2; 1]
104
+ sublist listOne listTwo |> should equal Unequal
78
105
 
79
106
  [<Fact(Skip = "Remove to run test")>]
80
- let ``Recurring values unequal`` () =
81
- sublist [1; 2; 1; 2; 3] [1; 2; 3; 1; 2; 3; 2; 3; 2; 1] |> should equal Unequal
107
+ let ``Same digits but different numbers`` () =
108
+ let listOne = [1; 0; 1]
109
+ let listTwo = [10; 1]
110
+ sublist listOne listTwo |> should equal Unequal
111
+
@@ -1,68 +1,135 @@
1
- // This file was created manually and its version is 1.0.0.
1
+ // This file was auto-generated based on version 1.4.0 of the canonical data.
2
2
 
3
3
  module TournamentTest
4
-
5
- open Xunit
4
+
6
5
  open FsUnit.Xunit
6
+ open Xunit
7
7
 
8
8
  open Tournament
9
9
 
10
10
  [<Fact>]
11
- let ``Correctly displays the tournament table`` () =
12
- let actual =
13
- ["Αllegoric Alaskians;Blithering Badgers;win";
14
- "Devastating Donkeys;Courageous Californians;draw";
15
- "Devastating Donkeys;Αllegoric Alaskians;win";
16
- "Courageous Californians;Blithering Badgers;loss";
17
- "Blithering Badgers;Devastating Donkeys;loss";
18
- "Αllegoric Alaskians;Courageous Californians;win"]
11
+ let ``Just the header if no input`` () =
12
+ let rows = []
13
+ let expected = ["Team | MP | W | D | L | P"]
14
+ tally rows |> should equal expected
19
15
 
16
+ [<Fact(Skip = "Remove to run test")>]
17
+ let ``A win is three points, a loss is zero points`` () =
18
+ let rows = ["Allegoric Alaskans;Blithering Badgers;win"]
20
19
  let expected =
21
- ["Team | MP | W | D | L | P";
22
- "Devastating Donkeys | 3 | 2 | 1 | 0 | 7";
23
- "Αllegoric Alaskians | 3 | 2 | 0 | 1 | 6";
24
- "Blithering Badgers | 3 | 1 | 0 | 2 | 3";
25
- "Courageous Californians | 3 | 0 | 1 | 2 | 1"]
20
+ [ "Team | MP | W | D | L | P";
21
+ "Allegoric Alaskans | 1 | 1 | 0 | 0 | 3";
22
+ "Blithering Badgers | 1 | 0 | 0 | 1 | 0" ]
23
+ tally rows |> should equal expected
26
24
 
27
- tally actual |> should equal expected
25
+ [<Fact(Skip = "Remove to run test")>]
26
+ let ``A win can also be expressed as a loss`` () =
27
+ let rows = ["Blithering Badgers;Allegoric Alaskans;loss"]
28
+ let expected =
29
+ [ "Team | MP | W | D | L | P";
30
+ "Allegoric Alaskans | 1 | 1 | 0 | 0 | 3";
31
+ "Blithering Badgers | 1 | 0 | 0 | 1 | 0" ]
32
+ tally rows |> should equal expected
28
33
 
29
34
  [<Fact(Skip = "Remove to run test")>]
30
- let ``Ignores incorrect input`` () =
31
- let actual =
32
- ["Allegoric Alaskians;Blithering Badgers;win";
33
- "Devastating Donkeys_Courageous Californians;draw";
34
- "Devastating Donkeys;Allegoric Alaskians;win";
35
- "";
36
- "Courageous Californians;Blithering Badgers;loss";
37
- "Bla;Bla;Bla";
38
- "Blithering Badgers;Devastating Donkeys;loss";
39
- "# Yackity yackity yack";
40
- "Allegoric Alaskians;Courageous Californians;win";
41
- "Devastating Donkeys;Courageous Californians;draw";
42
- "Devastating Donkeys@Courageous Californians;draw"]
35
+ let ``A different team can win`` () =
36
+ let rows = ["Blithering Badgers;Allegoric Alaskans;win"]
37
+ let expected =
38
+ [ "Team | MP | W | D | L | P";
39
+ "Blithering Badgers | 1 | 1 | 0 | 0 | 3";
40
+ "Allegoric Alaskans | 1 | 0 | 0 | 1 | 0" ]
41
+ tally rows |> should equal expected
43
42
 
43
+ [<Fact(Skip = "Remove to run test")>]
44
+ let ``A draw is one point each`` () =
45
+ let rows = ["Allegoric Alaskans;Blithering Badgers;draw"]
44
46
  let expected =
45
- ["Team | MP | W | D | L | P";
46
- "Devastating Donkeys | 3 | 2 | 1 | 0 | 7";
47
- "Allegoric Alaskians | 3 | 2 | 0 | 1 | 6";
48
- "Blithering Badgers | 3 | 1 | 0 | 2 | 3";
49
- "Courageous Californians | 3 | 0 | 1 | 2 | 1"]
47
+ [ "Team | MP | W | D | L | P";
48
+ "Allegoric Alaskans | 1 | 0 | 1 | 0 | 1";
49
+ "Blithering Badgers | 1 | 0 | 1 | 0 | 1" ]
50
+ tally rows |> should equal expected
50
51
 
51
- tally actual |> should equal expected
52
+ [<Fact(Skip = "Remove to run test")>]
53
+ let ``There can be more than one match`` () =
54
+ let rows =
55
+ [ "Allegoric Alaskans;Blithering Badgers;win";
56
+ "Allegoric Alaskans;Blithering Badgers;win" ]
57
+ let expected =
58
+ [ "Team | MP | W | D | L | P";
59
+ "Allegoric Alaskans | 2 | 2 | 0 | 0 | 6";
60
+ "Blithering Badgers | 2 | 0 | 0 | 2 | 0" ]
61
+ tally rows |> should equal expected
52
62
 
53
63
  [<Fact(Skip = "Remove to run test")>]
54
- let ``Correctly displays another tournament table`` () =
55
- let actual =
56
- ["Allegoric Alaskians;Blithering Badgers;win";
57
- "Devastating Donkeys;Allegoric Alaskians;win";
58
- "Courageous Californians;Blithering Badgers;loss";
59
- "Allegoric Alaskians;Courageous Californians;win"]
64
+ let ``There can be more than one winner`` () =
65
+ let rows =
66
+ [ "Allegoric Alaskans;Blithering Badgers;loss";
67
+ "Allegoric Alaskans;Blithering Badgers;win" ]
68
+ let expected =
69
+ [ "Team | MP | W | D | L | P";
70
+ "Allegoric Alaskans | 2 | 1 | 0 | 1 | 3";
71
+ "Blithering Badgers | 2 | 1 | 0 | 1 | 3" ]
72
+ tally rows |> should equal expected
60
73
 
74
+ [<Fact(Skip = "Remove to run test")>]
75
+ let ``There can be more than two teams`` () =
76
+ let rows =
77
+ [ "Allegoric Alaskans;Blithering Badgers;win";
78
+ "Blithering Badgers;Courageous Californians;win";
79
+ "Courageous Californians;Allegoric Alaskans;loss" ]
80
+ let expected =
81
+ [ "Team | MP | W | D | L | P";
82
+ "Allegoric Alaskans | 2 | 2 | 0 | 0 | 6";
83
+ "Blithering Badgers | 2 | 1 | 0 | 1 | 3";
84
+ "Courageous Californians | 2 | 0 | 0 | 2 | 0" ]
85
+ tally rows |> should equal expected
86
+
87
+ [<Fact(Skip = "Remove to run test")>]
88
+ let ``Typical input`` () =
89
+ let rows =
90
+ [ "Allegoric Alaskans;Blithering Badgers;win";
91
+ "Devastating Donkeys;Courageous Californians;draw";
92
+ "Devastating Donkeys;Allegoric Alaskans;win";
93
+ "Courageous Californians;Blithering Badgers;loss";
94
+ "Blithering Badgers;Devastating Donkeys;loss";
95
+ "Allegoric Alaskans;Courageous Californians;win" ]
96
+ let expected =
97
+ [ "Team | MP | W | D | L | P";
98
+ "Devastating Donkeys | 3 | 2 | 1 | 0 | 7";
99
+ "Allegoric Alaskans | 3 | 2 | 0 | 1 | 6";
100
+ "Blithering Badgers | 3 | 1 | 0 | 2 | 3";
101
+ "Courageous Californians | 3 | 0 | 1 | 2 | 1" ]
102
+ tally rows |> should equal expected
103
+
104
+ [<Fact(Skip = "Remove to run test")>]
105
+ let ``Incomplete competition (not all pairs have played)`` () =
106
+ let rows =
107
+ [ "Allegoric Alaskans;Blithering Badgers;loss";
108
+ "Devastating Donkeys;Allegoric Alaskans;loss";
109
+ "Courageous Californians;Blithering Badgers;draw";
110
+ "Allegoric Alaskans;Courageous Californians;win" ]
111
+ let expected =
112
+ [ "Team | MP | W | D | L | P";
113
+ "Allegoric Alaskans | 3 | 2 | 0 | 1 | 6";
114
+ "Blithering Badgers | 2 | 1 | 1 | 0 | 4";
115
+ "Courageous Californians | 2 | 0 | 1 | 1 | 1";
116
+ "Devastating Donkeys | 1 | 0 | 0 | 1 | 0" ]
117
+ tally rows |> should equal expected
118
+
119
+ [<Fact(Skip = "Remove to run test")>]
120
+ let ``Ties broken alphabetically`` () =
121
+ let rows =
122
+ [ "Courageous Californians;Devastating Donkeys;win";
123
+ "Allegoric Alaskans;Blithering Badgers;win";
124
+ "Devastating Donkeys;Allegoric Alaskans;loss";
125
+ "Courageous Californians;Blithering Badgers;win";
126
+ "Blithering Badgers;Devastating Donkeys;draw";
127
+ "Allegoric Alaskans;Courageous Californians;draw" ]
61
128
  let expected =
62
- ["Team | MP | W | D | L | P";
63
- "Allegoric Alaskians | 3 | 2 | 0 | 1 | 6";
64
- "Blithering Badgers | 2 | 1 | 0 | 1 | 3";
65
- "Devastating Donkeys | 1 | 1 | 0 | 0 | 3";
66
- "Courageous Californians | 2 | 0 | 0 | 2 | 0"]
129
+ [ "Team | MP | W | D | L | P";
130
+ "Allegoric Alaskans | 3 | 2 | 1 | 0 | 7";
131
+ "Courageous Californians | 3 | 2 | 1 | 0 | 7";
132
+ "Blithering Badgers | 3 | 0 | 1 | 2 | 1";
133
+ "Devastating Donkeys | 3 | 0 | 1 | 2 | 1" ]
134
+ tally rows |> should equal expected
67
135
 
68
- tally actual |> should equal expected
@@ -1,29 +1,26 @@
1
1
  module Transpose
2
2
 
3
- let transpose (input: string) =
4
- let rows = input.Split '\n'
5
-
3
+ let transpose (rows: string list): string list =
6
4
  let transposedCoordinates =
7
5
  rows
8
- |> Array.mapi (fun row str -> str |> Seq.mapi (fun col char -> (col, (row, char))) |> Seq.toArray)
9
- |> Array.concat
6
+ |> List.mapi (fun row str -> str |> Seq.mapi (fun col char -> (col, (row, char))) |> List.ofSeq)
7
+ |> List.concat
10
8
 
11
9
  let groupedByTransposedColumns =
12
10
  transposedCoordinates
13
- |> Array.groupBy fst
14
- |> Array.map (fun (row, chars) -> (row, chars |> Array.map snd))
11
+ |> List.groupBy fst
12
+ |> List.map (fun (row, chars) -> (row, chars |> List.map snd))
15
13
 
16
- let transposedColToRow (input: (int * char)[]) =
17
- let maxCol = input |> Array.map fst |> Array.max
14
+ let transposedColToRow (input: (int * char) list) =
15
+ let maxCol = input |> List.map fst |> List.max
18
16
  let findCharacter col =
19
- match Array.tryFind (fun (c, _) -> c = col) input with
17
+ match List.tryFind (fun (c, _) -> c = col) input with
20
18
  | Some y -> snd y
21
19
  | None -> ' '
22
-
20
+
23
21
  [| 0..maxCol |]
24
22
  |> Array.map findCharacter
25
23
  |> System.String
26
24
 
27
25
  groupedByTransposedColumns
28
- |> Seq.map (snd >> transposedColToRow)
29
- |> String.concat "\n"
26
+ |> List.map (snd >> transposedColToRow)
@@ -1,256 +1,187 @@
1
- // This file was created manually and its version is 1.0.0.
1
+ // This file was auto-generated based on version 1.1.0 of the canonical data.
2
2
 
3
3
  module TransposeTest
4
4
 
5
- open Xunit
6
5
  open FsUnit.Xunit
6
+ open Xunit
7
7
 
8
8
  open Transpose
9
9
 
10
10
  [<Fact>]
11
- let ``Empty string`` () =
12
- let input = ""
13
- let expected = ""
14
-
15
- transpose input |> should equal expected
11
+ let ``Empty string`` () =
12
+ let lines: string list = []
13
+ let expected: string list = []
14
+ transpose lines |> should equal expected
16
15
 
17
16
  [<Fact(Skip = "Remove to run test")>]
18
- let ``Two characters in a row`` () =
19
- let input =
20
- "A1"
21
-
17
+ let ``Two characters in a row`` () =
18
+ let lines = ["A1"]
22
19
  let expected =
23
- "A\n" +
24
- "1"
25
-
26
- transpose input |> should equal expected
20
+ [ "A";
21
+ "1" ]
22
+ transpose lines |> should equal expected
27
23
 
28
24
  [<Fact(Skip = "Remove to run test")>]
29
- let ``Two characters in a column`` () =
30
- let input =
31
- "A\n" +
32
- "1";
33
-
34
- let expected =
35
- "A1"
36
-
37
- transpose input |> should equal expected
25
+ let ``Two characters in a column`` () =
26
+ let lines =
27
+ [ "A";
28
+ "1" ]
29
+ let expected = ["A1"]
30
+ transpose lines |> should equal expected
38
31
 
39
32
  [<Fact(Skip = "Remove to run test")>]
40
- let ``Simple`` () =
41
- let input =
42
- "ABC\n" +
43
- "123"
44
-
33
+ let ``Simple`` () =
34
+ let lines =
35
+ [ "ABC";
36
+ "123" ]
45
37
  let expected =
46
- "A1\n" +
47
- "B2\n" +
48
- "C3"
49
-
50
- transpose input |> should equal expected
38
+ [ "A1";
39
+ "B2";
40
+ "C3" ]
41
+ transpose lines |> should equal expected
51
42
 
52
43
  [<Fact(Skip = "Remove to run test")>]
53
- let ``Single line`` () =
54
- let input =
55
- "Single line."
56
-
44
+ let ``Single line`` () =
45
+ let lines = ["Single line."]
57
46
  let expected =
58
- "S\n" +
59
- "i\n" +
60
- "n\n" +
61
- "g\n" +
62
- "l\n" +
63
- "e\n" +
64
- " \n" +
65
- "l\n" +
66
- "i\n" +
67
- "n\n" +
68
- "e\n" +
69
- "."
70
-
71
- transpose input |> should equal expected
47
+ [ "S";
48
+ "i";
49
+ "n";
50
+ "g";
51
+ "l";
52
+ "e";
53
+ " ";
54
+ "l";
55
+ "i";
56
+ "n";
57
+ "e";
58
+ "." ]
59
+ transpose lines |> should equal expected
72
60
 
73
61
  [<Fact(Skip = "Remove to run test")>]
74
- let ``First line longer than second line`` () =
75
- let input =
76
- "The fourth line.\n" +
77
- "The fifth line."
78
-
62
+ let ``First line longer than second line`` () =
63
+ let lines =
64
+ [ "The fourth line.";
65
+ "The fifth line." ]
79
66
  let expected =
80
- "TT\n" +
81
- "hh\n" +
82
- "ee\n" +
83
- " \n" +
84
- "ff\n" +
85
- "oi\n" +
86
- "uf\n" +
87
- "rt\n" +
88
- "th\n" +
89
- "h \n" +
90
- " l\n" +
91
- "li\n" +
92
- "in\n" +
93
- "ne\n" +
94
- "e.\n" +
95
- "."
96
-
97
- transpose input |> should equal expected
67
+ [ "TT";
68
+ "hh";
69
+ "ee";
70
+ " ";
71
+ "ff";
72
+ "oi";
73
+ "uf";
74
+ "rt";
75
+ "th";
76
+ "h ";
77
+ " l";
78
+ "li";
79
+ "in";
80
+ "ne";
81
+ "e.";
82
+ "." ]
83
+ transpose lines |> should equal expected
98
84
 
99
85
  [<Fact(Skip = "Remove to run test")>]
100
- let ``Second line longer than first line`` () =
101
- let input =
102
- "The first line.\n" +
103
- "The second line."
104
-
86
+ let ``Second line longer than first line`` () =
87
+ let lines =
88
+ [ "The first line.";
89
+ "The second line." ]
105
90
  let expected =
106
- "TT\n" +
107
- "hh\n" +
108
- "ee\n" +
109
- " \n" +
110
- "fs\n" +
111
- "ie\n" +
112
- "rc\n" +
113
- "so\n" +
114
- "tn\n" +
115
- " d\n" +
116
- "l \n" +
117
- "il\n" +
118
- "ni\n" +
119
- "en\n" +
120
- ".e\n" +
121
- " ."
122
-
123
- transpose input |> should equal expected
91
+ [ "TT";
92
+ "hh";
93
+ "ee";
94
+ " ";
95
+ "fs";
96
+ "ie";
97
+ "rc";
98
+ "so";
99
+ "tn";
100
+ " d";
101
+ "l ";
102
+ "il";
103
+ "ni";
104
+ "en";
105
+ ".e";
106
+ " ." ]
107
+ transpose lines |> should equal expected
124
108
 
125
109
  [<Fact(Skip = "Remove to run test")>]
126
- let ``Square`` () =
127
- let input =
128
- "HEART\n" +
129
- "EMBER\n" +
130
- "ABUSE\n" +
131
- "RESIN\n" +
132
- "TREND"
133
-
110
+ let ``Mixed line length`` () =
111
+ let lines =
112
+ [ "The longest line.";
113
+ "A long line.";
114
+ "A longer line.";
115
+ "A line." ]
134
116
  let expected =
135
- "HEART\n" +
136
- "EMBER\n" +
137
- "ABUSE\n" +
138
- "RESIN\n" +
139
- "TREND"
140
-
141
- transpose input |> should equal expected
117
+ [ "TAAA";
118
+ "h ";
119
+ "elll";
120
+ " ooi";
121
+ "lnnn";
122
+ "ogge";
123
+ "n e.";
124
+ "glr";
125
+ "ei ";
126
+ "snl";
127
+ "tei";
128
+ " .n";
129
+ "l e";
130
+ "i .";
131
+ "n";
132
+ "e";
133
+ "." ]
134
+ transpose lines |> should equal expected
142
135
 
143
136
  [<Fact(Skip = "Remove to run test")>]
144
- let ``Rectangle`` () =
145
- let input =
146
- "FRACTURE\n" +
147
- "OUTLINED\n" +
148
- "BLOOMING\n" +
149
- "SEPTETTE"
150
-
137
+ let ``Square`` () =
138
+ let lines =
139
+ [ "HEART";
140
+ "EMBER";
141
+ "ABUSE";
142
+ "RESIN";
143
+ "TREND" ]
151
144
  let expected =
152
- "FOBS\n"+
153
- "RULE\n"+
154
- "ATOP\n"+
155
- "CLOT\n"+
156
- "TIME\n"+
157
- "UNIT\n"+
158
- "RENT\n"+
159
- "EDGE"
160
-
161
- transpose input |> should equal expected
145
+ [ "HEART";
146
+ "EMBER";
147
+ "ABUSE";
148
+ "RESIN";
149
+ "TREND" ]
150
+ transpose lines |> should equal expected
162
151
 
163
152
  [<Fact(Skip = "Remove to run test")>]
164
- let ``Triangle`` () =
165
- let input =
166
- "T\n" +
167
- "EE\n" +
168
- "AAA\n" +
169
- "SSSS\n" +
170
- "EEEEE\n" +
171
- "RRRRRR"
172
-
153
+ let ``Rectangle`` () =
154
+ let lines =
155
+ [ "FRACTURE";
156
+ "OUTLINED";
157
+ "BLOOMING";
158
+ "SEPTETTE" ]
173
159
  let expected =
174
- "TEASER\n" +
175
- " EASER\n" +
176
- " ASER\n" +
177
- " SER\n" +
178
- " ER\n" +
179
- " R"
180
-
181
- transpose input |> should equal expected
160
+ [ "FOBS";
161
+ "RULE";
162
+ "ATOP";
163
+ "CLOT";
164
+ "TIME";
165
+ "UNIT";
166
+ "RENT";
167
+ "EDGE" ]
168
+ transpose lines |> should equal expected
182
169
 
183
170
  [<Fact(Skip = "Remove to run test")>]
184
- let ``Many lines`` () =
185
- let input =
186
- "Chor. Two households, both alike in dignity,\n" +
187
- "In fair Verona, where we lay our scene,\n" +
188
- "From ancient grudge break to new mutiny,\n" +
189
- "Where civil blood makes civil hands unclean.\n" +
190
- "From forth the fatal loins of these two foes\n" +
191
- "A pair of star-cross'd lovers take their life;\n" +
192
- "Whose misadventur'd piteous overthrows\n" +
193
- "Doth with their death bury their parents' strife.\n" +
194
- "The fearful passage of their death-mark'd love,\n" +
195
- "And the continuance of their parents' rage,\n" +
196
- "Which, but their children's end, naught could remove,\n" +
197
- "Is now the two hours' traffic of our stage;\n" +
198
- "The which if you with patient ears attend,\n" +
199
- "What here shall miss, our toil shall strive to mend."
171
+ let ``Triangle`` () =
172
+ let lines =
173
+ [ "T";
174
+ "EE";
175
+ "AAA";
176
+ "SSSS";
177
+ "EEEEE";
178
+ "RRRRRR" ]
179
+ let expected =
180
+ [ "TEASER";
181
+ " EASER";
182
+ " ASER";
183
+ " SER";
184
+ " ER";
185
+ " R" ]
186
+ transpose lines |> should equal expected
200
187
 
201
- let expected =
202
- "CIFWFAWDTAWITW\n" +
203
- "hnrhr hohnhshh\n" +
204
- "o oeopotedi ea\n" +
205
- "rfmrmash cn t\n" +
206
- ".a e ie fthow \n" +
207
- " ia fr weh,whh\n" +
208
- "Trnco miae ie\n" +
209
- "w ciroitr btcr\n" +
210
- "oVivtfshfcuhhe\n" +
211
- " eeih a uote \n" +
212
- "hrnl sdtln is\n" +
213
- "oot ttvh tttfh\n" +
214
- "un bhaeepihw a\n" +
215
- "saglernianeoyl\n" +
216
- "e,ro -trsui ol\n" +
217
- "h uofcu sarhu \n" +
218
- "owddarrdan o m\n" +
219
- "lhg to'egccuwi\n" +
220
- "deemasdaeehris\n" +
221
- "sr als t ists\n" +
222
- ",ebk 'phool'h,\n" +
223
- " reldi ffd \n" +
224
- "bweso tb rtpo\n" +
225
- "oea ileutterau\n" +
226
- "t kcnoorhhnatr\n" +
227
- "hl isvuyee'fi \n" +
228
- " atv es iisfet\n" +
229
- "ayoior trr ino\n" +
230
- "l lfsoh ecti\n" +
231
- "ion vedpn l\n" +
232
- "kuehtteieadoe \n" +
233
- "erwaharrar,fas\n" +
234
- " nekt te rh\n" +
235
- "ismdsehphnnosa\n" +
236
- "ncuse ra-tau l\n" +
237
- " et tormsural\n" +
238
- "dniuthwea'g t \n" +
239
- "iennwesnr hsts\n" +
240
- "g,ycoi tkrttet\n" +
241
- "n ,l r s'a anr\n" +
242
- "i ef 'dgcgdi\n" +
243
- "t aol eoe,v\n" +
244
- "y nei sl,u; e\n" +
245
- ", .sf to l \n" +
246
- " e rv d t\n" +
247
- " ; ie o\n" +
248
- " f, r \n" +
249
- " e e m\n" +
250
- " . m e\n" +
251
- " o n\n" +
252
- " v d\n" +
253
- " e .\n" +
254
- " ,"
255
-
256
- transpose input |> should equal expected