### Archive

Posts Tagged ‘exercise’

## Prison break

Exercise

The big boss of Montreal Prison celebrates his 50th birthday next week. For this special occasion he came up with the idea to let some prisoners go. In the prison there are 600 cells, one person in each. The cells are numbered from 1 to 600. The prison guard should go through all cells and open the doors. Then he goes to the 2nd cell and flips the lock at every second cell (that is, close the door if it was open and open it if it was closed). Then go the 3rd cell and flip the lock of every third cell, etc. This procedure should be repeated with every cell. Question: who are those lucky guys who get release, i.e. which cells remain open at the end?

Example with 8 cells:

```00000000        initialization, all cells are closed
11111111        step 1, flip every lock
10101010        step 2, flip every 2nd lock
10001110        step 3, flip every 3rd lock
10011111        step 4, flip every 4th lock
10010111        step 5, flip every 5th lock
10010011        step 6, flip every 6th lock
10010001        step 7, flip every 7th lock
10010000        step 8, flip every 8th lock
```
Categories: python Tags: , , ,

## Reverse an integer

September 29, 2010 1 comment

Exercise

Take an integer and reverse its digits. The result is also an integer. Example: 83657 becomes 75638.

Solution

```#!/usr/bin/env python

def reverse_int(n):
return int(str(n)[::-1])

n = 83657
print n                 # 83657
print reverse_int(n)    # 75638
```

Summary: convert the number to string, reverse the string, then convert it back to integer. Details: `83657` -> `str(83657)` returns `"83657"` which is a string -> reverse it, we get `"75638"` -> `int("75638")` converts it to an integer.

Notes

If you want to concatenate a string and an integer, first you need to convert the integer to string. Example:

```n = 83657
print "The value of n is " + n          # error, won't work
print "The value of n is " + str(n)     # OK
```
Categories: python Tags: , ,

## Fibonacci numbers

September 28, 2010 1 comment

Exercise

Now an easy one. Calculate the first `N` Fibonacci numbers, where F0 = 0, F1 = 1, …, Fn = Fn-1 + Fn-2. Write a function that receives `N` as a parameter and returns a list with the first `N` Fibonacci numbers. Example: `fib(10)` would produce `[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]`. Notice that F0 = 0 is included in the result.

Solution

```#!/usr/bin/env python

# fibonacci.py

def fib(n):
assert(n >= 0)
li = []
a, b = 0, 1
for i in range(n+1):
li.append(a)
a, b = b, a+b
return li

if __name__ == "__main__":
print fib(10)
```

Here we solved the problem in an iterative way, but you can do it with recursive calls too.

See http://www.scriptol.com/programming/fibonacci.php for a comprehensive list how to implement it in any language.

Categories: python Tags: ,

## Reverse a file

Exercise

Take a text file and reverse it the following ways: (1) reverse characters in each line, and (2) reverse the order of lines too. Let’s see an example:

Input:

```#!/usr/bin/env python
```

Output:

```"!yletelpmoc em esrever ,esaelP" tnirp
nohtyp vne/nib/rsu/!#
```
Categories: python Tags: , ,

## Pretty print an integer

Exercise: Take an integer and print it in a pretty way, i.e. use commas as thousands separators. Example: 1977 should be 1,977.

Solution:

```#!/usr/bin/env python

def numberToPrettyString(n):
"""Converts a number to a nicely formatted string.
Example: 6874 => '6,874'."""
l = []
for i, c in enumerate(str(n)[::-1]):
if i%3==0 and i!=0:
l += ','
l += c
return "".join(l[::-1])
#

if __name__ == "__main__":
number = 6874
print numberToPrettyString(number)   # '6,874'
```

The idea is simple. Consider the number `1977`. Convert it to string (`"1977"`) and reverse it (`"7791"`). Start processing it from left to right and after every third character add a comma: `"7"` -> `"77"` -> `"779,"` (comma added) -> `"779,1"`. Now reverse the string (`"1,977"`). Done.

Update (20131125)
There is an easier way. You can do it with string formatting too:

```>>> n = 1977
>>> "{:,}".format(n)
'1,977'
```

Thanks to Krisztián B. for the tip.

Categories: python Tags: , , ,

## Reverse a string

Exercise #1: Take a string and reverse its characters. For instance “ab12” => “21ba”.

Solution:

```#!/usr/bin/env python

print s[::-1]   # serutnevda nohtyP
```

Slice notation has the form `[start:stop:step]`. By default, `start` is at the beginning of a sequence, `stop` is at the end, and `step` is 1. So the slice `[::-1]` returns the full sequence in reverse order.

Exercise #2: Decide if a word is a palindrome.

Solution:

```#!/usr/bin/env python

def is_palindrome(str):
return str == str[::-1]

print is_palindrome('1367631')      # True
print is_palindrome('Python')       # False
```
Categories: python Tags: , , ,

## ASCII table

Exercise: Print out the ASCII table.

Solution:

```#!/usr/bin/env python

for char in range(256):
print "%d: %c" % (char, char)
```

Note that `range(N)` creates a list of elements in the interval `[0, N)`, that is `N` is excluded. In the example, it will be `0..255`.

Output (special characters are removed):

```0:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33: !
34: "
35: #
36: \$
37: %
38: &
39: '
40: (
41: )
42: *
43: +
44: ,
45: -
46: .
47: /
48: 0
49: 1
50: 2
51: 3
52: 4
53: 5
54: 6
55: 7
56: 8
57: 9
58: :
59: ;
60: <
61: =
62: >
63: ?
64: @
65: A
66: B
67: C
68: D
69: E
70: F
71: G
72: H
73: I
74: J
75: K
76: L
77: M
78: N
79: O
80: P
81: Q
82: R
83: S
84: T
85: U
86: V
87: W
88: X
89: Y
90: Z
91: [
92: \
93: ]
94: ^
95: _
96: `
97: a
98: b
99: c
100: d
101: e
102: f
103: g
104: h
105: i
106: j
107: k
108: l
109: m
110: n
111: o
112: p
113: q
114: r
115: s
116: t
117: u
118: v
119: w
120: x
121: y
122: z
123: {
124: |
125: }
126: ~
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161: ¡
162: ¢
163: £
164: ¤
165: ¥
166: ¦
167: §
168: ¨
170: ª
171: «
172: ¬
173: ­
174: ®
175: ¯
176: °
177: ±
178: ²
179: ³
180: ´
181: µ
182: ¶
183: ·
184: ¸
185: ¹
186: º
187: »
188: ¼
189: ½
190: ¾
191: ¿
192: À
193: Á
194: Â
195: Ã
196: Ä
197: Å
198: Æ
199: Ç
200: È
201: É
202: Ê
203: Ë
204: Ì
205: Í
206: Î
207: Ï
208: Ð
209: Ñ
210: Ò
211: Ó
212: Ô
213: Õ
214: Ö
215: ×
216: Ø
217: Ù
218: Ú
219: Û
220: Ü
221: Ý
222: Þ
223: ß
224: à
225: á
226: â
227: ã
228: ä
229: å
230: æ
231: ç
232: è
233: é
234: ê
235: ë
236: ì
237: í
238: î
239: ï
240: ð
241: ñ
242: ò
243: ó
244: ô
245: õ
246: ö
247: ÷
248: ø
249: ù
250: ú
251: û
252: ü
253: ý
254: þ
255: ÿ
```
Categories: python Tags: ,