diff --git a/common/package.json b/common/package.json old mode 100755 new mode 100644 diff --git a/exercises/accumulate/package.json b/exercises/accumulate/package.json old mode 100755 new mode 100644 diff --git a/exercises/all-your-base/package.json b/exercises/all-your-base/package.json old mode 100755 new mode 100644 diff --git a/exercises/allergies/package.json b/exercises/allergies/package.json old mode 100755 new mode 100644 diff --git a/exercises/alphametics/package.json b/exercises/alphametics/package.json old mode 100755 new mode 100644 diff --git a/exercises/anagram/package.json b/exercises/anagram/package.json old mode 100755 new mode 100644 diff --git a/exercises/armstrong-numbers/package.json b/exercises/armstrong-numbers/package.json old mode 100755 new mode 100644 diff --git a/exercises/beer-song/package.json b/exercises/beer-song/package.json old mode 100755 new mode 100644 diff --git a/exercises/binary-search/package.json b/exercises/binary-search/package.json old mode 100755 new mode 100644 diff --git a/exercises/bob/package.json b/exercises/bob/package.json old mode 100755 new mode 100644 diff --git a/exercises/bowling/package.json b/exercises/bowling/package.json old mode 100755 new mode 100644 diff --git a/exercises/circular-buffer/package.json b/exercises/circular-buffer/package.json old mode 100755 new mode 100644 diff --git a/exercises/clock/package.json b/exercises/clock/package.json old mode 100755 new mode 100644 diff --git a/exercises/collatz-conjecture/package.json b/exercises/collatz-conjecture/package.json old mode 100755 new mode 100644 diff --git a/exercises/complex-numbers/package.json b/exercises/complex-numbers/package.json old mode 100755 new mode 100644 diff --git a/exercises/connect/package.json b/exercises/connect/package.json old mode 100755 new mode 100644 diff --git a/exercises/crypto-square/package.json b/exercises/crypto-square/package.json old mode 100755 new mode 100644 diff --git a/exercises/custom-set/package.json b/exercises/custom-set/package.json old mode 100755 new mode 100644 diff --git a/exercises/diamond/package.json b/exercises/diamond/package.json old mode 100755 new mode 100644 diff --git a/exercises/diffie-hellman/package.json b/exercises/diffie-hellman/package.json old mode 100755 new mode 100644 diff --git a/exercises/etl/package.json b/exercises/etl/package.json old mode 100755 new mode 100644 diff --git a/exercises/flatten-array/package.json b/exercises/flatten-array/package.json old mode 100755 new mode 100644 diff --git a/exercises/food-chain/package.json b/exercises/food-chain/package.json old mode 100755 new mode 100644 diff --git a/exercises/gigasecond/package.json b/exercises/gigasecond/package.json old mode 100755 new mode 100644 diff --git a/exercises/grade-school/package.json b/exercises/grade-school/package.json old mode 100755 new mode 100644 diff --git a/exercises/grains/package.json b/exercises/grains/package.json old mode 100755 new mode 100644 diff --git a/exercises/hamming/package.json b/exercises/hamming/package.json old mode 100755 new mode 100644 diff --git a/exercises/hello-world/package.json b/exercises/hello-world/package.json old mode 100755 new mode 100644 diff --git a/exercises/house/package.json b/exercises/house/package.json old mode 100755 new mode 100644 diff --git a/exercises/isbn-verifier/package.json b/exercises/isbn-verifier/package.json old mode 100755 new mode 100644 diff --git a/exercises/isogram/package.json b/exercises/isogram/package.json old mode 100755 new mode 100644 diff --git a/exercises/leap/package.json b/exercises/leap/package.json old mode 100755 new mode 100644 diff --git a/exercises/linked-list/package.json b/exercises/linked-list/package.json old mode 100755 new mode 100644 diff --git a/exercises/list-ops/package.json b/exercises/list-ops/package.json old mode 100755 new mode 100644 diff --git a/exercises/luhn/package.json b/exercises/luhn/package.json old mode 100755 new mode 100644 diff --git a/exercises/matrix/package.json b/exercises/matrix/package.json old mode 100755 new mode 100644 diff --git a/exercises/minesweeper/package.json b/exercises/minesweeper/package.json old mode 100755 new mode 100644 diff --git a/exercises/nucleotide-count/package.json b/exercises/nucleotide-count/package.json old mode 100755 new mode 100644 diff --git a/exercises/palindrome-products/package.json b/exercises/palindrome-products/package.json old mode 100755 new mode 100644 diff --git a/exercises/pangram/package.json b/exercises/pangram/package.json old mode 100755 new mode 100644 diff --git a/exercises/pascals-triangle/package.json b/exercises/pascals-triangle/package.json old mode 100755 new mode 100644 diff --git a/exercises/perfect-numbers/package.json b/exercises/perfect-numbers/package.json old mode 100755 new mode 100644 diff --git a/exercises/phone-number/package.json b/exercises/phone-number/package.json old mode 100755 new mode 100644 diff --git a/exercises/pig-latin/package.json b/exercises/pig-latin/package.json old mode 100755 new mode 100644 diff --git a/exercises/prime-factors/package.json b/exercises/prime-factors/package.json old mode 100755 new mode 100644 diff --git a/exercises/protein-translation/package.json b/exercises/protein-translation/package.json old mode 100755 new mode 100644 diff --git a/exercises/proverb/package.json b/exercises/proverb/package.json old mode 100755 new mode 100644 diff --git a/exercises/queen-attack/package.json b/exercises/queen-attack/package.json old mode 100755 new mode 100644 diff --git a/exercises/raindrops/package.json b/exercises/raindrops/package.json old mode 100755 new mode 100644 diff --git a/exercises/rational-numbers/package.json b/exercises/rational-numbers/package.json old mode 100755 new mode 100644 diff --git a/exercises/rectangles/package.json b/exercises/rectangles/package.json old mode 100755 new mode 100644 diff --git a/exercises/resistor-color-duo/package.json b/exercises/resistor-color-duo/package.json old mode 100755 new mode 100644 diff --git a/exercises/resistor-color/package.json b/exercises/resistor-color/package.json old mode 100755 new mode 100644 diff --git a/exercises/reverse-string/package.json b/exercises/reverse-string/package.json old mode 100755 new mode 100644 diff --git a/exercises/rna-transcription/package.json b/exercises/rna-transcription/package.json old mode 100755 new mode 100644 diff --git a/exercises/robot-name/package.json b/exercises/robot-name/package.json old mode 100755 new mode 100644 diff --git a/exercises/roman-numerals/package.json b/exercises/roman-numerals/package.json old mode 100755 new mode 100644 diff --git a/exercises/rotational-cipher/package.json b/exercises/rotational-cipher/package.json old mode 100755 new mode 100644 diff --git a/exercises/run-length-encoding/package.json b/exercises/run-length-encoding/package.json old mode 100755 new mode 100644 diff --git a/exercises/saddle-points/package.json b/exercises/saddle-points/package.json old mode 100755 new mode 100644 diff --git a/exercises/say/package.json b/exercises/say/package.json old mode 100755 new mode 100644 diff --git a/exercises/scrabble-score/package.json b/exercises/scrabble-score/package.json old mode 100755 new mode 100644 diff --git a/exercises/secret-handshake/package.json b/exercises/secret-handshake/package.json old mode 100755 new mode 100644 diff --git a/exercises/sieve/package.json b/exercises/sieve/package.json old mode 100755 new mode 100644 diff --git a/exercises/simple-cipher/package.json b/exercises/simple-cipher/package.json old mode 100755 new mode 100644 diff --git a/exercises/space-age/package.json b/exercises/space-age/package.json old mode 100755 new mode 100644 diff --git a/exercises/spiral-matrix/package.json b/exercises/spiral-matrix/package.json old mode 100755 new mode 100644 diff --git a/exercises/strain/package.json b/exercises/strain/package.json old mode 100755 new mode 100644 diff --git a/exercises/sublist/package.json b/exercises/sublist/package.json old mode 100755 new mode 100644 diff --git a/exercises/sum-of-multiples/package.json b/exercises/sum-of-multiples/package.json old mode 100755 new mode 100644 diff --git a/exercises/transpose/.meta/tests.toml b/exercises/transpose/.meta/tests.toml index 715a1504b..9ae7b0f48 100644 --- a/exercises/transpose/.meta/tests.toml +++ b/exercises/transpose/.meta/tests.toml @@ -32,3 +32,6 @@ # triangle "b80badc9-057e-4543-bd07-ce1296a1ea2c" = true + +# jagged triangle +"76acfd50-5596-4d05-89f1-5116328a7dd9" = true diff --git a/exercises/transpose/package.json b/exercises/transpose/package.json old mode 100755 new mode 100644 diff --git a/exercises/transpose/transpose.example.ts b/exercises/transpose/transpose.example.ts index 40bb5b777..90da4e2a4 100644 --- a/exercises/transpose/transpose.example.ts +++ b/exercises/transpose/transpose.example.ts @@ -1,17 +1,18 @@ -class Transpose { - public static transpose(lines: string[]): string[] { - return lines.reduce((result: string[], line, lineNo) => { - line.split("").map((value, key) => { - if (typeof result[key] === "undefined") { - result[key] = new Array(lineNo + 1).join(" ") - } +const fillColumn: (t: string[], l: string, r: number) => void = + (transposed, fromSource, toColumn) => { + for (let row = 0; row < fromSource.length; row++) { + transposed[row] = + (row in transposed ? transposed[row] : '').padEnd(toColumn) + + fromSource.charAt(row) + } + } - result[key] += value - }) +function transpose(lines: string[]): string[] { + const transposed: string[] = [] + for (let toColumn = 0; toColumn < lines.length; toColumn++) + fillColumn(transposed, lines[toColumn], toColumn) - return result - }, []) - } + return transposed } -export default Transpose +export default transpose diff --git a/exercises/transpose/transpose.test.ts b/exercises/transpose/transpose.test.ts index b04e59b6d..2c5449b7f 100644 --- a/exercises/transpose/transpose.test.ts +++ b/exercises/transpose/transpose.test.ts @@ -1,24 +1,24 @@ -import Transpose from "./transpose" +import transpose from "./transpose" describe("Transpose", () => { it("empty string", () => { const expected: string[] = [] - expect(Transpose.transpose([])).toEqual(expected) + expect(transpose([])).toEqual(expected) }) xit("two characters in a row", () => { const expected = ["A", "1"] - expect(Transpose.transpose(["A1"])).toEqual(expected) + expect(transpose(["A1"])).toEqual(expected) }) xit("two characters in a column", () => { const expected = ["A1"] - expect(Transpose.transpose(["A", "1"])).toEqual(expected) + expect(transpose(["A", "1"])).toEqual(expected) }) xit("simple", () => { const expected = ["A1", "B2", "C3"] - expect(Transpose.transpose(["ABC", "123"])).toEqual(expected) + expect(transpose(["ABC", "123"])).toEqual(expected) }) xit("single line", () => { @@ -36,7 +36,7 @@ describe("Transpose", () => { "e", "." ] - expect(Transpose.transpose(["Single line."])).toEqual(expected) + expect(transpose(["Single line."])).toEqual(expected) }) xit("first line longer than second line", () => { @@ -59,7 +59,7 @@ describe("Transpose", () => { "." ] expect( - Transpose.transpose(["The fourth line.", "The fifth line."]) + transpose(["The fourth line.", "The fifth line."]) ).toEqual(expected) }) @@ -83,14 +83,14 @@ describe("Transpose", () => { " ." ] expect( - Transpose.transpose(["The first line.", "The second line."]) + transpose(["The first line.", "The second line."]) ).toEqual(expected) }) xit("square", () => { const expected = ["HEART", "EMBER", "ABUSE", "RESIN", "TREND"] expect( - Transpose.transpose(["HEART", "EMBER", "ABUSE", "RESIN", "TREND"]) + transpose(["HEART", "EMBER", "ABUSE", "RESIN", "TREND"]) ).toEqual(expected) }) @@ -106,7 +106,7 @@ describe("Transpose", () => { "EDGE" ] expect( - Transpose.transpose(["FRACTURE", "OUTLINED", "BLOOMING", "SEPTETTE"]) + transpose(["FRACTURE", "OUTLINED", "BLOOMING", "SEPTETTE"]) ).toEqual(expected) }) @@ -120,7 +120,29 @@ describe("Transpose", () => { " R" ] expect( - Transpose.transpose(["T", "EE", "AAA", "SSSS", "EEEEE", "RRRRRR"]) + transpose(["T", "EE", "AAA", "SSSS", "EEEEE", "RRRRRR"]) + ).toEqual(expected) + }) + + xit("jagged triangle", () => { + const expected = [ + "123456", + "1 3456", + " 3456", + " 3 56", + " 56", + " 5" + ] + + expect( + transpose([ + "11", + "2", + "3333", + "444", + "555555", + "66666" + ]) ).toEqual(expected) }) @@ -164,24 +186,24 @@ describe("Transpose", () => { " et tormsural", "dniuthwea'g t ", "iennwesnr hsts", - "g,ycoitkrttet", - "n,l rs'a anr", - "ief 'dgcgdi", - "taol eoe,v", - "yneisl,u;e", - ",.sftol ", - " ervdt", - " ;ie o", - " f,r ", - " eem", - " .me", - " on", - " vd", - " e.", - " ," + "g,ycoi tkrttet", + "n ,l r s'a anr", + "i ef 'dgcgdi", + "t aol eoe,v", + "y nei sl,u; e", + ", .sf to l ", + " e rv d t", + " ; ie o", + " f, r ", + " e e m", + " . m e", + " o n", + " v d", + " e .", + " ,", ] expect( - Transpose.transpose([ + transpose([ "Chor. Two households, both alike in dignity,", "In fair Verona, where we lay our scene,", "From ancient grudge break to new mutiny,", diff --git a/exercises/transpose/transpose.ts b/exercises/transpose/transpose.ts index e69de29bb..e96c30b35 100644 --- a/exercises/transpose/transpose.ts +++ b/exercises/transpose/transpose.ts @@ -0,0 +1,5 @@ +function transpose(_lines: string[]): string[] { + return [] +} + +export default transpose diff --git a/exercises/twelve-days/package.json b/exercises/twelve-days/package.json old mode 100755 new mode 100644 diff --git a/exercises/two-bucket/package.json b/exercises/two-bucket/package.json old mode 100755 new mode 100644 diff --git a/exercises/two-fer/package.json b/exercises/two-fer/package.json old mode 100755 new mode 100644 diff --git a/exercises/variable-length-quantity/package.json b/exercises/variable-length-quantity/package.json old mode 100755 new mode 100644 diff --git a/exercises/word-count/package.json b/exercises/word-count/package.json old mode 100755 new mode 100644 diff --git a/exercises/word-search/package.json b/exercises/word-search/package.json old mode 100755 new mode 100644 diff --git a/exercises/wordy/package.json b/exercises/wordy/package.json old mode 100755 new mode 100644