Skip to content

Commit 20b0057

Browse files
committed
CTCI 3.1
Python
1 parent b4b3c5b commit 20b0057

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

CTCI/Chapter3/3.1-Three_In_One.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# CTCI 3.1
2+
# Three in One
3+
4+
import unittest
5+
6+
class ThreeStacks():
7+
def __init__(self):
8+
self.array = [None, None, None]
9+
self.current = [0, 1, 2]
10+
11+
def push(self, item, stack_number):
12+
if not stack_number in [0, 1, 2]:
13+
raise Exception("Bad stack number")
14+
while len(self.array) <= self.current[stack_number]:
15+
self.array += [None] * len(self.array)
16+
self.array[self.current[stack_number]] = item
17+
self.current[stack_number] += 3
18+
19+
def pop(self, stack_number):
20+
if not stack_number in [0, 1, 2]:
21+
raise Exception("Bad stack number")
22+
if self.current[stack_number] > 3:
23+
self.current[stack_number] -= 3
24+
item = self.array[self.current[stack_number]]
25+
self.array[self.current[stack_number]] = None
26+
return item
27+
28+
29+
#-------------------------------------------------------------------------------
30+
# CTCI Solution
31+
32+
#-------------------------------------------------------------------------------
33+
#Testing
34+
35+
class Test(unittest.TestCase):
36+
def test_three_stacks(self):
37+
three_stacks = ThreeStacks()
38+
three_stacks.push(101, 0)
39+
three_stacks.push(102, 0)
40+
three_stacks.push(103, 0)
41+
three_stacks.push(201, 1)
42+
self.assertEqual(three_stacks.pop(0), 103)
43+
self.assertEqual(three_stacks.pop(1), 201)
44+
self.assertEqual(three_stacks.pop(1), None)
45+
self.assertEqual(three_stacks.pop(2), None)
46+
three_stacks.push(301, 2)
47+
three_stacks.push(302, 2)
48+
self.assertEqual(three_stacks.pop(2), 302)
49+
self.assertEqual(three_stacks.pop(2), 301)
50+
self.assertEqual(three_stacks.pop(2), None)
51+
52+
if __name__ == "__main__":
53+
unittest.main()

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ Cracking the Coding Interview 6th Edition Python Solutions
118118
| 2.6| | Palindrome | [Python](CTCI/Chapter2/2.6-Palindrome.py) |
119119
| 2.7| | Intersection | [Python](CTCI/Chapter2/2.7-Intersection.py) |
120120
| 2.8| | Loop Detection | [Python](CTCI/Chapter2/2.8-Loop_Detection.py) |
121+
| | | | |
122+
| 3.1| | Three in One | [Python](CTCI/Chapter2/3.1-Three_In_One.py) |
121123

122124
---
123125

0 commit comments

Comments
 (0)