Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
58
Task/Range-extraction/C-sharp/range-extraction-1.cs
Normal file
58
Task/Range-extraction/C-sharp/range-extraction-1.cs
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
class RangeExtraction
|
||||
{
|
||||
static void Main()
|
||||
{
|
||||
const string testString = "0, 1, 2, 4, 6, 7, 8, 11, 12, 14,15, 16, 17, 18, 19, 20, 21, 22, 23, 24,25, 27, 28, 29, 30, 31, 32, 33, 35, 36,37, 38, 39";
|
||||
var result = String.Join(",", RangesToStrings(GetRanges(testString)));
|
||||
Console.Out.WriteLine(result);
|
||||
}
|
||||
|
||||
public static IEnumerable<IEnumerable<int>> GetRanges(string testString)
|
||||
{
|
||||
var numbers = testString.Split(new[] { ',' }).Select(x => Convert.ToInt32(x));
|
||||
var current = new List<int>();
|
||||
foreach (var n in numbers)
|
||||
{
|
||||
if (current.Count == 0)
|
||||
{
|
||||
current.Add(n);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (current.Max() + 1 == n)
|
||||
{
|
||||
current.Add(n);
|
||||
}
|
||||
else
|
||||
{
|
||||
yield return current;
|
||||
current = new List<int> { n };
|
||||
}
|
||||
}
|
||||
}
|
||||
yield return current;
|
||||
}
|
||||
|
||||
public static IEnumerable<string> RangesToStrings(IEnumerable<IEnumerable<int>> ranges)
|
||||
{
|
||||
foreach (var range in ranges)
|
||||
{
|
||||
if (range.Count() == 1)
|
||||
{
|
||||
yield return range.Single().ToString();
|
||||
}
|
||||
else if (range.Count() == 2)
|
||||
{
|
||||
yield return range.Min() + "," + range.Max();
|
||||
}
|
||||
else
|
||||
{
|
||||
yield return range.Min() + "-" + range.Max();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
36
Task/Range-extraction/C-sharp/range-extraction-2.cs
Normal file
36
Task/Range-extraction/C-sharp/range-extraction-2.cs
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
public class RangeExtraction
|
||||
{
|
||||
public static void Main()
|
||||
{
|
||||
string s = "0,1,2,4,6,7,8,11,12,14,15, 16, 17, 18, 19, 20, 21, 22, 23, 24,25, 27, 28, 29, 30, 31, 32, 33, 35, 36,37, 38, 39";
|
||||
Console.WriteLine(string.Join(",", Ranges(s.Split(',').Select(int.Parse))
|
||||
.Select(r => r.end == r.start ? $"{r.start}" : $"{r.start}-{r.end}")));
|
||||
}
|
||||
|
||||
static IEnumerable<(int start, int end)> Ranges(IEnumerable<int> numbers) {
|
||||
if (numbers == null) yield break;
|
||||
var e = numbers.GetEnumerator();
|
||||
if (!e.MoveNext()) yield break;
|
||||
|
||||
int start = e.Current;
|
||||
int end = start;
|
||||
while (e.MoveNext()) {
|
||||
if (e.Current - end != 1) {
|
||||
if (end - start == 1) {
|
||||
yield return (start, start);
|
||||
yield return (end, end);
|
||||
} else {
|
||||
yield return (start, end);
|
||||
}
|
||||
start = e.Current;
|
||||
}
|
||||
end = e.Current;
|
||||
}
|
||||
yield return (start, end);
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue