7. List Manipulation Advanced
Здравейте, бих била много благодарна, ако някой види защо в тази задача във вижуъл студио всичко излиза, както е по условието, а в джъдж ми дава 50 точки.
Става дума за последната задача от лаба за листове.
Ето кода:
https://pastebin.com/88YRTw7K?fbclid=IwAR2wHdBRPusrybwTy5hgxe9DNvtf08uG7C0eaiMgkWafRoaYAcWn1e_BeKU
Ето и условието:
7. List Manipulation Advanced
Next, we are going to implement more complicated list commands, extending the previous task. Again, read a list
and keep reading commands until you receive "end":
Contains {number} – check if the list contains the number and if so - print "Yes", otherwise print "No such number".
PrintEven – print all the even numbers, separated by a space.
PrintOdd – print all the odd numbers, separated by a space.
GetSum – print the sum of all the numbers.
Filter {condition} {number} – print all the numbers that fulfill the given condition. The condition will be either '<',
'>', ">=", "<=".
After the end command, print the list only if you have made some changes to the original list. Changes are made
only from the commands from the previous task.
Ето и моето предложение 100/100.
Като стил винаги предпочитам да огранича четенето от конзолата с while, също switch вместо if-else, когато има възможност. Използвам тернарния оператор също, за да си спестявам if-else.
Спестявам и изолзването на променливи,
По-късно забелязах, че може и четните и нечетни да се съкратят с
IEnumerable<int> oddNumbers = numbers.Where(n => n % 2 != 0);
https://pastebin.com/ipEit2Jm
...
List<int> numbers = Console.ReadLine().Split().Select(int.Parse).ToList();
string input = Console.ReadLine();
bool isChanged = false;
while (input != "end")
{
string[] tokens = input.Split();
switch (tokens[0])
{
case "Add": numbers.Add(int.Parse(tokens[1]));
isChanged = true;
break;
case "Remove":
numbers.Remove(int.Parse(tokens[1]));
isChanged = true;
break;
case "RemoveAt":
numbers.RemoveAt(int.Parse(tokens[1]));
isChanged = true;
break;
case "Insert":
int index = int.Parse(tokens[1]);
int number = int.Parse(tokens[2]);
numbers.Insert(number, index);
isChanged = true;
break;
case "Contains":
bool contains = numbers.Contains(int.Parse(tokens[1]));
Console.WriteLine(contains ? "Yes" : "No such number");
break;
case "PrintEven":
IEnumerable<int> evenNumbers = numbers.Where(n => n % 2 == 0);
Console.WriteLine(string.Join(" ", evenNumbers));
break;
case "PrintOdd":
IEnumerable<int> oddNumbers = numbers.Where(n => n % 2 != 0);
Console.WriteLine(string.Join(" ", oddNumbers));
break;
case "GetSum":
int sum = numbers.Sum();
Console.WriteLine($"{sum}");
break;
case "Filter":
string condition = tokens[1];
number = int.Parse(tokens[2]);
List<int> result = new List<int>();
switch (condition)
{
case "<": result = numbers.Where(n => n < number).ToList();
break;
case ">":
result = numbers.Where(n => n > number).ToList();
break;
case "<=":
result = numbers.Where(n => n <= number).ToList();
break;
case ">=":
result = numbers.Where(n => n >= number).ToList();
break;
}
Console.WriteLine(string.Join(" ", result));
break;
}
input = Console.ReadLine();
}
if (isChanged)
Console.WriteLine(string.Join(" ", numbers));