# Coding Bat: Python. Logic-2

All solutions were successfully tested on 18 April 2013.

make_bricks:

```def make_bricks(small, big, goal):
return goal%5 >= 0 and goal%5 - small <= 0 and small + 5*big >= goal
```

lone_sum:

```def lone_sum(a, b, c):
if a == b == c:
return 0
if b == c:
return a
if a == c:
return b
if a == b:
return c
return a + b + c
```

lucky_sum:

```def lucky_sum(a, b, c):
if a == 13:
return 0
if b == 13:
return a
if c == 13:
return a + b
return a + b + c
```

no_teen_sum:

```def no_teen_sum(a, b, c):
return fix_teen(a) + fix_teen(b) + fix_teen(c)

def fix_teen(n):
#if 13 <= n <= 14 or 17 <= n <= 19:
if n in [13, 14, 17, 18, 19]:
return 0
return n
```

I consider checking for list membership to be more elegant than multiple comparison operations.

round_sum:

```def round_sum(a, b, c):
return round10(a) + round10(b) + round10(c)

def round10(n):
if n % 10 >= 5:
return n + 10 - (n % 10)
return n - (n % 10)
```

close_far:

```def close_far(a, b, c):
cond1 = abs(a-b) <= 1 and abs(b-c) >=2 and abs(a-c) >= 2
cond2 = abs(a-c) <= 1 and abs(a-b) >=2 and abs(c-b) >= 2
return cond1 or cond2
```

make_chocolate:

```def make_chocolate(small, big, goal):
maxBig = goal / 5

if big >= maxBig:
if small >= (goal - maxBig * 5):
return goal - maxBig * 5
if big < maxBig:
if small >= (goal - big * 5):
return goal - big * 5
return -1
```

## 12 thoughts on “Coding Bat: Python. Logic-2”

1. Tom Tabak

Hi! I’m just starting to learn coding(for about 5 days now) so I’m still not clear if all working solutions are acceptable, or should I follow some unwritten rules. If so, I would like to know which ones 🙂
For example, here is my take on the def make_chocolate problem:
Thank you for your effort! I believe I learned a lot from your solutions.

def make_chocolate(small, big, goal):
x = goal%5
if x>small or small+big*5big:
return (goal-big*5)
return x

1. Tom Tabak

[CODE]
def make_chocolate(small, big, goal):
x = goal%5
if x>small or small+big*5big:
return (goal-big*5)
return x
[/CODE]

2. Tom Tabak

Sorry, can’t find a way to post code,feel free to delete all comments 🙂

3. John

good job on the make_bricks problem
you can simplify it a bit:

def make_bricks(small, big, goal):
return small >= goal%5 and small + 5*big >= goal

your “goal%5 >= 0” clause is a tautology, because a%b is always >= 0

4. Tania

I appreciate the solutions you have posted. Very helpful. Here is an alternative for lone_sum

def lone_sum(a, b, c):
sum = 0
values = [a, b, c]
for v in values:
if values.count(v) == 1:
sum += v
return sum

5. DarkBergamotte

Here is an alternative for make_chocolate :

def make_chocolate(small, big, goal):
if goal>big*5 + small or small<goal % 5:
return -1
remaining = goal – big*5
while remaining<0:
remaining += 5
return remaining

6. Solomon Li

def no_teen_sum(a, b, c):
return sum(filter(fix_teen, [a, b, c]))

def fix_teen(n):
my_range = list(range(13, 15)) + list(range(17, 20))
return n not in my_range

7. Leo Liang

For make_chocolate, I have
def make_chocolate(small, big, goal):
if goal / 5 <= big:
amount_big = goal / 5
else:
amount_big = big

if goal – (amount_big * 5) <= small:
amount_small = goal – (amount_big * 5)
else:
amount_small = -1

return amount_small
———- or simply ————–
def make_chocolate(small, big, goal):
amount_big = (goal / 5) if (goal / 5 <= big) else big
amount_small = (goal – (amount_big * 5)) if (goal – (amount_big * 5) <= small) else -1

return amount_small

8. Josiah

def make_chocolate(small, big, goal):
while big > 0 and goal >= 5:
goal = goal – 5
big = big – 1
if goal <= small:
return goal
return -1

There's my solution for make chocolate. Hope this helps!

9. Al

Little quicker, cleaner way to run round_sum

def round_sum(a, b, c):
return round10(a) + round10(b) + round10(c)

def round10(num):
return int(round(num,-1))

1. Gregor Ulm Post author

Just like with the other comment you left, you’re using an in-built method. This defeats the purpose of this exercise. Imagine you face a problem for which there is no library function available. What would you do then?

10. Natka

Thank you

This site uses Akismet to reduce spam. Learn how your comment data is processed.