СОСТАВИТЬ ПРОГРАММУ НА ПИТОНЕ (ТЕМА СЛОВАРИ) 20) Некоторый поезд в пути следования останавливается на N станциях (станция номер 1 — начальная, а станция номер N — конечная). Дан список пассажиров поезда, для каждого из которых известно, на какой станции он садится, а на какой — выходит. Напишите эффективную по времени работы и используемой памяти программу, которая по этим данным определяет, на каких перегонах (то есть между какими соседними станциями) в поезде было наименьшее число пассажиров. На вход программе в первой сроке подается количество станций N и количество пассажиров P. В каждой из последующих P строк находится информация о пассажирах в следующем формате:
где – строка, состоящая не более, чем из 20 символов без пробелов, – строка, состоящая не более, чем из 20 символов без пробелов, и — числа от 1 до N, при этом номер станции посадки меньше номера станции выхода.
Пример входных данных:
6 3
Иванов Сергей 2 4
Сергеев Петр 1 3
Петров Кирилл 3 6
Программа должна вывести список перегонов, на которых в поезде было наименьшее число пассажиров. Каждый перегон выводится в виде двух последовательных номеров станций, разделенных знаком “-“. Для примера выше результат работы программы должен быть таким (на данных перегонах в поезде находилось наименьшее число пассажиров):
1-2
4-5
5-6
При выполнении задания следует учитывать, что значение N не превосходит 10, а значение P может быть большим (до 1000).
using System;
using System.Collections.Generic;
using System.Linq;
namespace Help
{
class MainClass
{
public static void Main(string[] args)
{
int day = 1;
double mass = 50;
double changing = 1.2;
while(mass < 120)
{
mass *= changing;
day++;
}
Console.WriteLine($"В {day} день");
}
}
}
// Версия 3.3.5 сборка 1662 (29.04.2018)
begin
var b := ReadlnString('Введите строку -').ToLower+' ';
var (z,r) := (',!?.:;'.ToCharArray,'!.?;'.ToCharArray);
var tt:=true; Range(1,b.Length+b.ToCharArray.Where(t->t in z).Count).ForEach(t->if (b[t] in z) and tt then begin Insert(' ', b, t); tt:=false end else tt:=true);
var a := b.ToWords;
var x := ReadlnChar('Буква -');
var (w, i) := a.Select((w, i)-> (w, i)).Where(t -> t[0].ToString.First.ToLower = x).Reverse.UnZipTuple;
i := i.Reverse;
foreach var t in w.Zip(i, (p, q)-> (p, q)) do a[t[1]] := t[0];
b := string.Join(' ', a);
tt:=true; Range(1,b.Length-b.ToCharArray.Where(t->t in z).Count+1).ForEach(t->if (b[t] in z) and tt then begin Delete(b, t - 1, 1); tt:=false end else tt:=true);
b.Println; Println('Количество предложений:',b.ToWords(r).Count);
end.
Пример в приложении.