Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions solutions/python/sublist/7/sublist.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
"""
This exercise stub and the test suite contain several enumerated constants.

Enumerated constants can be done with a NAME assigned to an arbitrary,
but unique value. An integer is traditionally used because it’s memory
efficient.

It is a common practice to export both constants and functions that work with
those constants (ex. the constants in the os, subprocess and re modules).

You can learn more here: https://en.wikipedia.org/wiki/Enumerated_type
"""

# Possible sublist categories.
# Change the values as you see fit.
SUBLIST = 0
SUPERLIST = 1
EQUAL = 2
UNEQUAL = 3


def sublist(list_one: list, list_two: list) -> int:
"""
Classify the relationship between two lists.

Determines whether ``list_one`` and ``list_two`` are equal, or whether one
is a contiguous sublist of the other, and returns the appropriate constant.

:param list_one: First list to compare.
:type list_one: list
:param list_two: Second list to compare.
:type list_two: list
:returns: One of ``EQUAL``, ``SUBLIST``, ``SUPERLIST``, or ``UNEQUAL``.
:rtype: int
"""

if len(list_one) == len(list_two):
if list_one == list_two:
return EQUAL
return UNEQUAL

l1: str = ",".join(str(i) for i in list_one)
l2: str = ",".join(str(i) for i in list_two)

if l2 in l1:
return SUPERLIST

if l1 in l2:
return SUBLIST

return UNEQUAL