Skip to content

Commit 9eb17c8

Browse files
authored
Add sublist (#348)
1 parent 770bcde commit 9eb17c8

File tree

7 files changed

+256
-0
lines changed

7 files changed

+256
-0
lines changed

config.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,6 +501,14 @@
501501
"prerequisites": [],
502502
"difficulty": 2
503503
},
504+
{
505+
"slug": "sublist",
506+
"name": "Sublist",
507+
"uuid": "860ca217-9d4f-4102-9b98-1c524a477bbf",
508+
"practices": [],
509+
"prerequisites": [],
510+
"difficulty": 2
511+
},
504512
{
505513
"slug": "triangle",
506514
"name": "Triangle",
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Instructions
2+
3+
Given any two lists `A` and `B`, determine if:
4+
5+
- List `A` is equal to list `B`; or
6+
- List `A` contains list `B` (`A` is a superlist of `B`); or
7+
- List `A` is contained by list `B` (`A` is a sublist of `B`); or
8+
- None of the above is true, thus lists `A` and `B` are unequal
9+
10+
Specifically, list `A` is equal to list `B` if both lists have the same values in the same order.
11+
List `A` is a superlist of `B` if `A` contains a sub-sequence of values equal to `B`.
12+
List `A` is a sublist of `B` if `B` contains a sub-sequence of values equal to `A`.
13+
14+
Examples:
15+
16+
- If `A = []` and `B = []` (both lists are empty), then `A` and `B` are equal
17+
- If `A = [1, 2, 3]` and `B = []`, then `A` is a superlist of `B`
18+
- If `A = []` and `B = [1, 2, 3]`, then `A` is a sublist of `B`
19+
- If `A = [1, 2, 3]` and `B = [1, 2, 3, 4, 5]`, then `A` is a sublist of `B`
20+
- If `A = [3, 4, 5]` and `B = [1, 2, 3, 4, 5]`, then `A` is a sublist of `B`
21+
- If `A = [3, 4]` and `B = [1, 2, 3, 4, 5]`, then `A` is a sublist of `B`
22+
- If `A = [1, 2, 3]` and `B = [1, 2, 3]`, then `A` and `B` are equal
23+
- If `A = [1, 2, 3, 4, 5]` and `B = [2, 3, 4]`, then `A` is a superlist of `B`
24+
- If `A = [1, 2, 4]` and `B = [1, 2, 3, 4, 5]`, then `A` and `B` are unequal
25+
- If `A = [1, 2, 3]` and `B = [1, 3, 2]`, then `A` and `B` are unequal
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"authors": [
3+
"BNAndras"
4+
],
5+
"files": {
6+
"solution": [
7+
"sublist.coffee"
8+
],
9+
"test": [
10+
"sublist.spec.coffee"
11+
],
12+
"example": [
13+
".meta/example.coffee"
14+
]
15+
},
16+
"blurb": "Write a function to determine if a list is a sublist of another list."
17+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
Classification =
2+
equal: 'equal'
3+
unequal: 'unequal'
4+
sublist: 'sublist'
5+
superlist: 'superlist'
6+
7+
class Sublist
8+
@classify: (listOne, listTwo) ->
9+
if JSON.stringify(listOne) == JSON.stringify(listTwo)
10+
Classification.equal
11+
else if @is_superlist(listOne, listTwo)
12+
Classification.superlist
13+
else if @is_superlist(listTwo, listOne)
14+
Classification.sublist
15+
else
16+
Classification.unequal
17+
18+
@is_superlist: (listOne, listTwo) ->
19+
for i in [0..listOne.length - listTwo.length]
20+
if listOne.slice(i, i + listTwo.length).join() == listTwo.join()
21+
return true
22+
false
23+
24+
module.exports = { Sublist, Classification }
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# This is an auto-generated file.
2+
#
3+
# Regenerating this file via `configlet sync` will:
4+
# - Recreate every `description` key/value pair
5+
# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications
6+
# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion)
7+
# - Preserve any other key/value pair
8+
#
9+
# As user-added comments (using the # character) will be removed when this file
10+
# is regenerated, comments can be added via a `comment` key.
11+
12+
[97319c93-ebc5-47ab-a022-02a1980e1d29]
13+
description = "empty lists"
14+
15+
[de27dbd4-df52-46fe-a336-30be58457382]
16+
description = "empty list within non empty list"
17+
18+
[5487cfd1-bc7d-429f-ac6f-1177b857d4fb]
19+
description = "non empty list contains empty list"
20+
21+
[1f390b47-f6b2-4a93-bc23-858ba5dda9a6]
22+
description = "list equals itself"
23+
24+
[7ed2bfb2-922b-4363-ae75-f3a05e8274f5]
25+
description = "different lists"
26+
27+
[3b8a2568-6144-4f06-b0a1-9d266b365341]
28+
description = "false start"
29+
30+
[dc39ed58-6311-4814-be30-05a64bc8d9b1]
31+
description = "consecutive"
32+
33+
[d1270dab-a1ce-41aa-b29d-b3257241ac26]
34+
description = "sublist at start"
35+
36+
[81f3d3f7-4f25-4ada-bcdc-897c403de1b6]
37+
description = "sublist in middle"
38+
39+
[43bcae1e-a9cf-470e-923e-0946e04d8fdd]
40+
description = "sublist at end"
41+
42+
[76cf99ed-0ff0-4b00-94af-4dfb43fe5caa]
43+
description = "at start of superlist"
44+
45+
[b83989ec-8bdf-4655-95aa-9f38f3e357fd]
46+
description = "in middle of superlist"
47+
48+
[26f9f7c3-6cf6-4610-984a-662f71f8689b]
49+
description = "at end of superlist"
50+
51+
[0a6db763-3588-416a-8f47-76b1cedde31e]
52+
description = "first list missing element from second list"
53+
54+
[83ffe6d8-a445-4a3c-8795-1e51a95e65c3]
55+
description = "second list missing element from first list"
56+
57+
[7bc76cb8-5003-49ca-bc47-cdfbe6c2bb89]
58+
description = "first list missing additional digits from second list"
59+
60+
[0d7ee7c1-0347-45c8-9ef5-b88db152b30b]
61+
description = "order matters to a list"
62+
63+
[5f47ce86-944e-40f9-9f31-6368aad70aa6]
64+
description = "same digits but different numbers"
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
Classification =
2+
# Replace this line with the necessary Classification object properties.
3+
4+
class Sublist
5+
@classify: (listOne, listTwo) ->
6+
# Replace this line with your code.
7+
8+
module.exports = { Sublist, Classification }
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
{ Sublist, Classification } = require './sublist'
2+
3+
describe 'Sublist', ->
4+
it 'empty lists', ->
5+
listOne = []
6+
listTwo = []
7+
result = Sublist.classify listOne, listTwo
8+
expect(result).toEqual Classification.equal
9+
10+
xit 'empty list within non empty list', ->
11+
listOne = []
12+
listTwo = [1, 2, 3]
13+
result = Sublist.classify listOne, listTwo
14+
expect(result).toEqual Classification.sublist
15+
16+
xit 'non empty list contains empty list', ->
17+
listOne = [1, 2, 3]
18+
listTwo = []
19+
result = Sublist.classify listOne, listTwo
20+
expect(result).toEqual Classification.superlist
21+
22+
xit 'list equals itself', ->
23+
listOne = [1, 2, 3]
24+
listTwo = [1, 2, 3]
25+
result = Sublist.classify listOne, listTwo
26+
expect(result).toEqual Classification.equal
27+
28+
xit 'different lists', ->
29+
listOne = [1, 2, 3]
30+
listTwo = [2, 3, 4]
31+
result = Sublist.classify listOne, listTwo
32+
expect(result).toEqual Classification.unequal
33+
34+
xit 'false start', ->
35+
listOne = [1, 2, 5]
36+
listTwo = [0, 1, 2, 3, 1, 2, 5, 6]
37+
result = Sublist.classify listOne, listTwo
38+
expect(result).toEqual Classification.sublist
39+
40+
xit 'consecutive', ->
41+
listOne = [1, 1, 2]
42+
listTwo = [0, 1, 1, 1, 2, 1, 2]
43+
result = Sublist.classify listOne, listTwo
44+
expect(result).toEqual Classification.sublist
45+
46+
xit 'sublist at start', ->
47+
listOne = [0, 1, 2]
48+
listTwo = [0, 1, 2, 3, 4, 5]
49+
result = Sublist.classify listOne, listTwo
50+
expect(result).toEqual Classification.sublist
51+
52+
xit 'sublist in middle', ->
53+
listOne = [2, 3, 4]
54+
listTwo = [0, 1, 2, 3, 4, 5]
55+
result = Sublist.classify listOne, listTwo
56+
expect(result).toEqual Classification.sublist
57+
58+
xit 'sublist at end', ->
59+
listOne = [3, 4, 5]
60+
listTwo = [0, 1, 2, 3, 4, 5]
61+
result = Sublist.classify listOne, listTwo
62+
expect(result).toEqual Classification.sublist
63+
64+
xit 'at start of superlist', ->
65+
listOne = [0, 1, 2, 3, 4, 5]
66+
listTwo = [0, 1, 2]
67+
result = Sublist.classify listOne, listTwo
68+
expect(result).toEqual Classification.superlist
69+
70+
xit 'in middle of superlist', ->
71+
listOne = [0, 1, 2, 3, 4, 5]
72+
listTwo = [2, 3]
73+
result = Sublist.classify listOne, listTwo
74+
expect(result).toEqual Classification.superlist
75+
76+
xit 'at end of superlist', ->
77+
listOne = [0, 1, 2, 3, 4, 5]
78+
listTwo = [3, 4, 5]
79+
result = Sublist.classify listOne, listTwo
80+
expect(result).toEqual Classification.superlist
81+
82+
xit 'first list missing element from second list', ->
83+
listOne = [1, 3]
84+
listTwo = [1, 2, 3]
85+
result = Sublist.classify listOne, listTwo
86+
expect(result).toEqual Classification.unequal
87+
88+
xit 'second list missing element from first list', ->
89+
listOne = [1, 2, 3]
90+
listTwo = [1, 3]
91+
result = Sublist.classify listOne, listTwo
92+
expect(result).toEqual Classification.unequal
93+
94+
xit 'first list missing additional digits from second list', ->
95+
listOne = [1, 2]
96+
listTwo = [1, 22]
97+
result = Sublist.classify listOne, listTwo
98+
expect(result).toEqual Classification.unequal
99+
100+
xit 'order matters to a list', ->
101+
listOne = [1, 2, 3]
102+
listTwo = [3, 2, 1]
103+
result = Sublist.classify listOne, listTwo
104+
expect(result).toEqual Classification.unequal
105+
106+
xit 'same digits but different numbers', ->
107+
listOne = [1, 0, 1]
108+
listTwo = [10, 1]
109+
result = Sublist.classify listOne, listTwo
110+
expect(result).toEqual Classification.unequal

0 commit comments

Comments
 (0)