This repository my work for the Exercism C# track.
exercism download --track=csharp --exercise=phone-number-analysis
exercism submit "Exercism\csharp\log-analysis\PhoneNumberAnalysis.cs"
Welcome to Phone Number Analysis on Exercism's C# Track.
If you need help running the tests or submitting your code, check out HELP.md
.
If you get stuck on the exercise, check out HINTS.md
, but try and solve it without using those first :)
In C#, a tuple is a data structure which organizes data, holding two or more fields of any type.
A tuple is typically created by placing 2 or more expressions separated by commas, within a set of parentheses.
string boast = "All you need to know";
bool success = !string.IsNullOrWhiteSpace(boast);
(bool, int, string) triple = (success, 42, boast);
A tuple can be used in assignment and initialization operations, as a return value or a method argument.
Fields are extracted using dot syntax. By default, the first field is Item1
,
the second Item2
, etc. Non-default names are discussed below.
// initialization
(int, int, int) vertices = (90, 45, 45);
// assignment
vertices = (60, 60, 60);
// return value
(bool, int) GetSameOrBigger(int num1, int num2)
{
return (num1 == num2, num1 > num2 ? num1 : num2);
}
// method argument
int Add((int, int) operands)
{
return operands.Item1 + operands.Item2;
}
Field names Item1
etc. do not make for readable code. The code below shows
2 ways to name the fields of tuples. Note also, in the code below, that var
can be used with tuples and the type inferred. This works equally well for tuples with named and unnamed fields.
// name items in declaration
(bool success, string message) results = (true, "well done!");
bool mySuccess = results.success;
string myMessage = results.message;
// name items in creating expression
var results2 = (success: true, message: "well done!");
bool mySuccess2 = results2.success;
string myMessage2 = results2.message;
This exercise has you analyze phone numbers.
You are asked to implement 2 features.
Phone numbers passed to the routines are guaranteed to be in the form NNN-NNN-NNNN e.g. 212-515-9876 and non-null.
Your analysis should return 3 pieces of data
- An indication of whether the number has a New York dialing code ie. 212 as the first 3 digits
- An indication of whether the number is fake having 555 as a prefix code in positions 5 to 7 (numbering from 1)
- The last 4 digits of the number.
Implement the (static) method PhoneNumber.Analyze()
to produce the phone number info.
PhoneNumber.Analyze("631-555-1234");
// => (false, true, "1234")
Implement the (static) method PhoneNumber.IsFake()
to detect whether the phone number is fake using the phone number info produced in task 1.
PhoneNumber.IsFake(PhoneNumbers.Analyze("631-555-1234"));
// => true
- @mikedamay
- @ErikSchierboom
- @yzAlvin