Takie proste zadania na tej maturze? widać, że system edukacji w Polsce to porażka.
Takie zadania rozwiązuje się 1 linq chainem, no ale aby nie być gołosłownym to wrzucam rozwiązanie:
trochę długo liczy, bo było to optymalizowane pod 100rdzeniowe procesory
Wynik:
150
31968
74
private static bool Predicate(int? a, int? b)
{
while (a != 0 && b != 0)
{
if (a > b)
a %= b;
else
b %= a;
}
return (a == 0 ? b : a) != 1;
}
public static void Main(string[] Args)
{
var path = @"C:\liczby.txt";
var numbers = File
.ReadAllLines(path)
.Select(x => (int?)Convert.ToInt32(x))
.ToList();
var _ =
Enumerable
.Range
(0,
numbers
.Select
(
(z, i) =>
(i == numbers.Count() - 1) ?
z :
Predicate(z, numbers[i + 1]) ?
z :
null
)
.Select((z, i) => new { z, i = i + 1 })
.Where(z => z.z.HasValue)
.Select(z => z.i)
.ToList()
.Select((x, i) => new { x, i })
.Where(x => x.i < numbers
.Select
(
(z, i) =>
(i == numbers.Count() - 1) ?
z :
Predicate(z, numbers[i + 1]) ?
z :
null
)
.Select((z, i) => new { z, i = i + 1 })
.Where(z => z.z.HasValue)
.Select(z => z.i)
.ToList().Count() - 1 && numbers
.Select
(
(z, i) =>
(i == numbers.Count() - 1) ?
z :
Predicate(z, numbers[i + 1]) ?
z :
null
)
.Select((z, i) => new { z, i = i + 1 })
.Where(z => z.z.HasValue)
.Select(z => z.i)
.ToList()[x.i] + 1 != numbers
.Select
(
(z, i) =>
(i == numbers.Count() - 1) ?
z :
Predicate(z, numbers[i + 1]) ?
z :
null
)
.Select((z, i) => new { z, i = i + 1 })
.Where(z => z.z.HasValue)
.Select(z => z.i)
.ToList()[x.i + 1])
.Select(x => x.i)
.Count()
)
.Select
(
x =>
new
{
ctr = x,
val = numbers
.Select
(
(z, i) =>
(i == numbers.Count() - 1) ?
z :
Predicate(z, numbers[i + 1]) ?
z :
null
)
.Select((z, i) => new { z, i = i + 1 })
.Where(z => z.z.HasValue)
.Select(z => z.i)
.ToList()
.Select((a, i) => new { x, i })
.Where(a => a.i <
numbers
.Select
(
(z, i) =>
(i == numbers.Count() - 1) ?
z :
Predicate(z, numbers[i + 1]) ?
z :
null
)
.Select((z, i) => new { z, i = i + 1 })
.Where(z => z.z.HasValue)
.Select(z => z.i)
.ToList().Count() - 1
&&
numbers
.Select
(
(z, i) =>
(i == numbers.Count() - 1) ?
z :
Predicate(z, numbers[i + 1]) ?
z :
null
)
.Select((z, i) => new { z, i = i + 1 })
.Where(z => z.z.HasValue)
.Select(z => z.i)
.ToList()
[a.i] + 1 !=
numbers
.Select
(
(z, i) =>
(i == numbers.Count() - 1) ?
z :
Predicate(z, numbers[i + 1]) ?
z :
null
)
.Select((z, i) => new { z, i = i + 1 })
.Where(z => z.z.HasValue)
.Select(z => z.i)
.ToList()[a.i + 1])
.Select(a => a.i)
.ToList()[x],
prev = numbers
.Select
(
(z, i) =>
(i == numbers.Count() - 1) ?
z :
Predicate(z, numbers[i + 1]) ?
z :
null
)
.Select((z, i) => new { z, i = i + 1 })
.Where(z => z.z.HasValue)
.Select(z => z.i)
.ToList()
.Select((a, i) => new { x, i })
.Where(a => a.i < numbers
.Select
(
(z, i) =>
(i == numbers.Count() - 1) ?
z :
Predicate(z, numbers[i + 1]) ?
z :
null
)
.Select((z, i) => new { z, i = i + 1 })
.Where(z => z.z.HasValue)
.Select(z => z.i)
.ToList().Count() - 1 && numbers
.Select
(
(z, i) =>
(i == numbers.Count() - 1) ?
z :
Predicate(z, numbers[i + 1]) ?
z :
null
)
.Select((z, i) => new { z, i = i + 1 })
.Where(z => z.z.HasValue)
.Select(z => z.i)
.ToList()[a.i] + 1 != numbers
.Select
(
(z, i) =>
(i == numbers.Count() - 1) ?
z :
Predicate(z, numbers[i + 1]) ?
z :
null
)
.Select((z, i) => new { z, i = i + 1 })
.Where(z => z.z.HasValue)
.Select(z => z.i)
.ToList()[a.i + 1])
.Select(a => a.i)
.ToList()
.ElementAtOrDefault(x - 1)
}
)
.Select
(
x =>
new List<int>
(
numbers
.Select
(
(z, i) =>
(i == numbers.Count() - 1) ?
z :
Predicate(z, numbers[i + 1]) ?
z :
null
)
.Select((z, i) => new { z, i = i + 1 })
.Where(z => z.z.HasValue)
.Select(z => z.i)
.Where((c, i) => x.ctr == 0 ? i <= x.val : i <= x.val && i > x.prev).
ToList()
)
)
.OrderByDescending(x => x.Count)
.First();
Console.WriteLine(_.Count);
Console.WriteLine(numbers[_.First()]);
Console.WriteLine(_.Select(x => numbers[x]).Min());
}
:D