Written by
Christos Samaras
on
Thursday, 30 April 2015
at
23:58

###
**About CodeEval post series**

CodeEval is a series of posts which are different than the typical engineering/Excel/VBA posts that are
being published in this blog.

The purpose of this series is to demonstrate possible solutions on various CodeEval programming challenges.
Each solution has already been submitted and accepted as valid on
CodeEval platform, so if you try to submit the presented solution as it
is, you will probably get a

*“not unique solution”* result.

The
solutions will be presented in C# language, but the logic/algorithm
behind them is similar despite the language you might use.

###
**Reverse And Add – challenge description**

Choose a number, reverse its digits and add it to the original. If the sum is not a palindrome (which means, it is not the same number from left to right and right to left), repeat this procedure.

Example:

195 (initial number) + 591 (reverse of initial number) = 786

786 + 687 = 1473

1473 + 3741 = 5214

5214 + 4125 = 9339 (palindrome)

In this particular case the palindrome 9339 appeared after the 4th addition. This method leads to palindromes in a few step for almost all of the integers. But there are interesting exceptions. 196 is the first number for which no palindrome has been found. It is not proven though, that there is no such a palindrome.

__Input sample__

Your program should accept as its first argument a path to a file name. Each line in this file is one test case. Each test case will contain an integer n < 10,000. Assume each test case will always have an answer and that it is computable with less than 100 iterations (additions).

__Output sample__

For each line of input, generate a line of output which is the number of iterations (additions) to compute the palindrome and the resulting palindrome. (they should be on one line and separated by a single space character). Example:

4 9339

The particular challenge has a relatively low success rate (66.6% - 30/04/2015) and its level of difficulty is medium. More info you can
find

here.

###
**Solution**

Apart from the main code, the solution incorporates two helping methods for reversing the input number ("ReverseNumber") and for checking if a number is palindrome ("IsPalindrome").

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
/*
------------------------------------------------------------------
The code below solves the CodeEval challenge - Reverse And Add.
Written by: Christos Samaras
Date: 02/07/2014
e-mail: xristos.samaras@gmail.com
site: http://www.myengineeringworld.net
------------------------------------------------------------------
*/
namespace ReverseAndAdd
{
class Program
{
static void Main(string[] args)
{
{
using (StreamReader reader = File.OpenText(args[0]))
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
if (line != null)
{
int cnt = 0;
while (IsPalindrome(line) == false)
{
int reversedNumber = int.Parse(ReverseNumber(line));
line = (int.Parse(line) + reversedNumber).ToString();
cnt++;
}
Console.WriteLine(cnt + " " + line);
}
}
Console.ReadLine();
}
}
public static string ReverseNumber(string number)
{
char[] charArray = number.ToCharArray();
Array.Reverse(charArray);
return new string(charArray);
}
public static bool IsPalindrome(string num)
{
if (num == ReverseNumber(num))
return true;
else
return false;
}
}
}

###
**Points**

Here is the proof that the

solution works and the points given by the CodeEval platform.

**
Did you like this post? If yes, then share it with your friends. Thank you!
**