## Pages

### CodeEval Real fake

Given in input a string representing a credit card number, four groups of four digits, separated by a blank, return "Real" or "Fake" accordingly to the checksum. Adding all ciphers together, multiplying by two the ones in even position, should give a multiple of ten.
This is the CodeEval problem #227 and I have solved it using Python 3 as implementation language.

Here is how I converted the samples in test cases:
```def test_provided_1(self):
self.assertEqual('Fake', solution('9999 9999 9999 9999'))

def test_provided_2(self):
self.assertEqual('Real', solution('9999 9999 9999 9993'))
```

The solution, even though it is pretty short, could be logically divided in three parts.

Extracting data from the provided string
```numbers = [int(i) for i in line if i.isdigit()]
```
I used a list comprehension to convert the input string in a list of integer. For each character in the line I check if it is a digit. If so, I convert it to integer and then I append it to the list.

Calculate the checksum
```result = 0
for i in range(len(numbers)):
result += numbers[i] if i%2 else numbers[i] * 2
```
I applied the rule. Looping on all numbers, add to the result the current value if it is in odd position, or its square value otherwise.

Return the result
```return 'Fake' if result % 10 else 'Real'
```
It is natural for me using here a conditional expression, given my background as C programmer where a ternary operator (?:) would have done the job.
If the division by ten gives a remainder, aka result modulo ten is not zero, we have a fake credit card, otherwise the checksum is passed.

Solution accepted by CodeEval, so I pushed test case and python script to GitHub.