Update it all, VisualStudio Changes
This commit is contained in:
18
csharp/etl/ETL.cs
Normal file
18
csharp/etl/ETL.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using System.IO;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
class ETL {
|
||||
public static Dictionary<string, int> Transform(Dictionary<int, IList<string>> inp) {
|
||||
Dictionary<string, int> ret = new Dictionary<string, int>();
|
||||
foreach(KeyValuePair<int, IList<string>> entry in inp) {
|
||||
foreach(string val in entry.Value) {
|
||||
string v = val.ToLower();
|
||||
if(!ret.ContainsKey(v)) {
|
||||
ret.Add(v, entry.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
}
|
56
csharp/etl/ETLTest.cs
Normal file
56
csharp/etl/ETLTest.cs
Normal file
@@ -0,0 +1,56 @@
|
||||
using System.Collections.Generic;
|
||||
using NUnit.Framework;
|
||||
|
||||
[TestFixture]
|
||||
public class ETLTest
|
||||
{
|
||||
[Ignore]
|
||||
[Test]
|
||||
public void Transforms_one_value()
|
||||
{
|
||||
var old = new Dictionary<int, IList<string>> { { 1, new List<string> { "A" } } };
|
||||
var expected = new Dictionary<string, int> { { "a", 1 } };
|
||||
Assert.That(ETL.Transform(old), Is.EqualTo(expected));
|
||||
}
|
||||
|
||||
[Ignore]
|
||||
[Test]
|
||||
public void Transforms_multiple_values()
|
||||
{
|
||||
var old = new Dictionary<int, IList<string>> { { 1, new List<string> { "A", "E", "I", "O", "U" } } };
|
||||
var expected = new Dictionary<string, int> { { "a", 1 }, { "e", 1 }, { "i", 1 }, { "o", 1 }, { "u", 1 } };
|
||||
Assert.That(ETL.Transform(old), Is.EqualTo(expected));
|
||||
}
|
||||
|
||||
[Ignore]
|
||||
[Test]
|
||||
public void Transforms_multiple_keys()
|
||||
{
|
||||
var old = new Dictionary<int, IList<string>> { { 1, new List<string> { "A", "E" } }, { 2, new List<string> { "D", "G" } } };
|
||||
var expected = new Dictionary<string, int> { { "a", 1 }, { "e", 1 }, { "d", 2 }, { "g", 2 } };
|
||||
Assert.That(ETL.Transform(old), Is.EqualTo(expected));
|
||||
}
|
||||
|
||||
[Ignore]
|
||||
[Test]
|
||||
public void Transforms_a_full_dataset()
|
||||
{
|
||||
var old = new Dictionary<int, IList<string>>
|
||||
{
|
||||
{ 1, new List<string> { "A", "E", "I", "O", "U", "L", "N", "R", "S", "T" } },
|
||||
{ 2, new List<string> { "D", "G" } },
|
||||
{ 3, new List<string> { "B", "C", "M", "P" } },
|
||||
{ 4, new List<string> { "F", "H", "V", "W", "Y" } },
|
||||
{ 5, new List<string> { "K" } },
|
||||
{ 8, new List<string> { "J", "X" } },
|
||||
{ 10, new List<string> { "Q", "Z" } },
|
||||
};
|
||||
var expected = new Dictionary<string, int>
|
||||
{
|
||||
{ "a", 1 }, { "b", 3 }, { "c", 3 }, { "d", 2 }, { "e", 1 }, { "f", 4 }, { "g", 2 }, { "h", 4 }, { "i", 1 },
|
||||
{ "j", 8 }, { "k", 5 }, { "l", 1 }, { "m", 3 }, { "n", 1 }, { "o", 1 }, { "p", 3 }, { "q", 10 }, { "r", 1 },
|
||||
{ "s", 1 }, { "t", 1 }, { "u", 1 }, { "v", 4 }, { "w", 4 }, { "x", 8 }, { "y", 4 }, { "z", 10 }
|
||||
};
|
||||
Assert.That(ETL.Transform(old), Is.EqualTo(expected));
|
||||
}
|
||||
}
|
59
csharp/etl/README.md
Normal file
59
csharp/etl/README.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# Etl
|
||||
|
||||
We are going to do the `Transform` step of an Extract-Transform-Load.
|
||||
|
||||
### ETL
|
||||
Extract-Transform-Load (ETL) is a fancy way of saying, "We have some crufty, legacy data over in this system, and now we need it in this shiny new system over here, so
|
||||
we're going to migrate this."
|
||||
|
||||
(Typically, this is followed by, "We're only going to need to run this
|
||||
once." That's then typically followed by much forehead slapping and
|
||||
moaning about how stupid we could possibly be.)
|
||||
|
||||
### The goal
|
||||
We're going to extract some scrabble scores from a legacy system.
|
||||
|
||||
The old system stored a list of letters per score:
|
||||
|
||||
- 1 point: "A", "E", "I", "O", "U", "L", "N", "R", "S", "T",
|
||||
- 2 points: "D", "G",
|
||||
- 3 points: "B", "C", "M", "P",
|
||||
- 4 points: "F", "H", "V", "W", "Y",
|
||||
- 5 points: "K",
|
||||
- 8 points: "J", "X",
|
||||
- 10 points: "Q", "Z",
|
||||
|
||||
The shiny new scrabble system instead stores the score per letter, which
|
||||
makes it much faster and easier to calculate the score for a word. It
|
||||
also stores the letters in lower-case regardless of the case of the
|
||||
input letters:
|
||||
|
||||
- "a" is worth 1 point.
|
||||
- "b" is worth 3 points.
|
||||
- "c" is worth 3 points.
|
||||
- "d" is worth 2 points.
|
||||
- Etc.
|
||||
|
||||
Your mission, should you choose to accept it, is to write a program that
|
||||
transforms the legacy data format to the shiny new format.
|
||||
|
||||
### Notes
|
||||
|
||||
A final note about scoring, Scrabble is played around the world in a
|
||||
variety of languages, each with its own unique scoring table. For
|
||||
example, an "E" is scored at 2 in the Māori-language version of the
|
||||
game while being scored at 4 in the Hawaiian-language version.
|
||||
|
||||
### Submitting Exercises
|
||||
|
||||
Note that, when trying to submit an exercise, make sure you're exercise file you're submitting is in the `exercism/csharp/<exerciseName>` directory.
|
||||
|
||||
For example, if you're submitting `bob.cs` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/csharp/bob/bob.cs`.
|
||||
|
||||
## Source
|
||||
|
||||
The Jumpstart Lab team [http://jumpstartlab.com](http://jumpstartlab.com)
|
||||
|
||||
## Submitting Incomplete Problems
|
||||
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
||||
|
Reference in New Issue
Block a user