Out of fun, I solved "Nice Angles" challenge on CodeEval in C# 4.0:
CHALLENGE DESCRIPTION:
Write a program that outputs the value of angle, reducing its fractional part to minutes and seconds.
INPUT SAMPLE:
The first argument is a path to a file that contains the values of angles with their decimal fractions:
330.39991833 0.001 14.64530319 0.25 254.16991217
OUTPUT SAMPLE:
Print to stdout values of angles with their fractional parts reduced to minutes and seconds.
The whole and fractional parts are separated by period, minutes are separated by apostrophe, seconds by double quotes. The values of minutes and seconds are shown as two numbers (with leading zeros if needed).
330.23'59" 0.00'03" 14.38'43" 0.15'00" 254.10'11"
This is the code I used to solve the problem:
public static void ConvertToMinSec(string path)
{
using (StreamReader reader = File.OpenText(path))
{
while (!reader.EndOfStream)
{
var degreeValues = reader.ReadLine();
if (!string.IsNullOrWhiteSpace(degreeValues))
{
var totalVal = degreeValues.Split('.');
if (totalVal.Length == 1)
{
var temp = totalVal[0] + ".0";
totalVal = temp.Split('.');
}
var intPart = totalVal[0];
var decimalPart = "0." + totalVal[1];
decimal minutes;
decimal.TryParse(decimalPart, out minutes);
minutes = decimal.Multiply(minutes, 60);
var minutePart = (int)minutes;
var remainingDecimal = minutes.ToString().Split('.');
if (remainingDecimal.Length == 1)
{
var tempDecimal = remainingDecimal[0] + ".0";
remainingDecimal = tempDecimal.Split('.');
}
decimal seconds;
decimal.TryParse("0." + remainingDecimal[1], out seconds);
seconds = seconds*60;
var secondsPart = (int) seconds;
var report = string.Format("{0}"+"."+"{1:00}"+"'"+"{2:00}"+'"', intPart,
minutePart, secondsPart);
Console.WriteLine(report);
}
}
}
var report = string.Format("{0}" + "." + "{1:00}" + "'" + "{2:00}" + "''", intPart, minutePart, secondsPart);
You used two apsothropes for seconds separator ("''"
) while they just used doublequete in description. Try changing this string into that -"\""
. \$\endgroup\$