С клавиатуры вводится строка, состоящая из слов и чисел, разделенных одним
С клавиатуры вводится строчка, состоящая из слов и чисел, разбитых одним либо несколькими пробелами. Подсчитать среднее арифметическое всех чисел, которые состоят из одинаковых цифр.
Задать свой вопрос1 ответ
Максим
// PascalABC.NET 3.2, сборка 1439 от 09.05.2017
// Внимание! Если программка не работает, обновите версию!
begin
ReadlnString.MatchValues('\d+').Select(w-gt;(w,w.Distinct
.OrderBy(c-gt;c).JoinIntoString(''))).GroupBy(t-gt;t[1])
.Where(x-gt;x.Countgt;1).Select(x-gt;x.UnZipTuple.Item1.
Select(x-gt;x.ToInteger).Average).Println;
end.
Пример
это 3242 такая 181 вот 346 странная 432 1118 строка
1837 649.5
Как все это работает (функциональное программирование)
ReadlnString - считываем строчку с клавиатуры
.MatchValues('\d+') - выбираем подстроки символов, состоящие из цифр
.Select(w-gt;(w,w.Distinct.OrderBy(c-gt;c).JoinIntoString(''))) - эта трудная конструкция поначалу в каждой подстроке оставляет только разные числа и сортирует их в порядке возрастания, потом объединяет эти числа в строку и соединяет начальную подстроку с приобретенной строчкой в так нарекаемый кортеж. Приобретенный кортеж для каждой исходной подстроки содержит два элемента: саму подстроку и строку из уникальных цифр этой подстроки, расположенных по возрастанию.
.GroupBy(t-gt;t[1]) - группирует кортежи в более большие блоки так, чтоб каждый блок содержал кортежи, у которых второй элемент одинаков.
.Where(x-gt;x.Countgt;1) - оставляет только те блоки, в которых больше одного кортежа, ведь нам не необходимы "числа-одиночки"
.Select(x-gt;x.UnZipTuple.Item1 - техническая операция, превращающая в каждом блоке кортеж в последовательность подстрок, представляющих начальные числа
.Select(x-gt;x.ToInteger) - любая такая последовательность подстрок превращается в последовательность целых чисел
.Average) - находятся средние арифметические каждой последовательности
.Println - вывод всех отысканных значений.
Все это не так уж просто, но и задание далековато не банальное. Если записать его средствами "традиционного паскаля" - такового приблизительно, как Free Pascal, код будет громадным...
// Внимание! Если программка не работает, обновите версию!
begin
ReadlnString.MatchValues('\d+').Select(w-gt;(w,w.Distinct
.OrderBy(c-gt;c).JoinIntoString(''))).GroupBy(t-gt;t[1])
.Where(x-gt;x.Countgt;1).Select(x-gt;x.UnZipTuple.Item1.
Select(x-gt;x.ToInteger).Average).Println;
end.
Пример
это 3242 такая 181 вот 346 странная 432 1118 строка
1837 649.5
Как все это работает (функциональное программирование)
ReadlnString - считываем строчку с клавиатуры
.MatchValues('\d+') - выбираем подстроки символов, состоящие из цифр
.Select(w-gt;(w,w.Distinct.OrderBy(c-gt;c).JoinIntoString(''))) - эта трудная конструкция поначалу в каждой подстроке оставляет только разные числа и сортирует их в порядке возрастания, потом объединяет эти числа в строку и соединяет начальную подстроку с приобретенной строчкой в так нарекаемый кортеж. Приобретенный кортеж для каждой исходной подстроки содержит два элемента: саму подстроку и строку из уникальных цифр этой подстроки, расположенных по возрастанию.
.GroupBy(t-gt;t[1]) - группирует кортежи в более большие блоки так, чтоб каждый блок содержал кортежи, у которых второй элемент одинаков.
.Where(x-gt;x.Countgt;1) - оставляет только те блоки, в которых больше одного кортежа, ведь нам не необходимы "числа-одиночки"
.Select(x-gt;x.UnZipTuple.Item1 - техническая операция, превращающая в каждом блоке кортеж в последовательность подстрок, представляющих начальные числа
.Select(x-gt;x.ToInteger) - любая такая последовательность подстрок превращается в последовательность целых чисел
.Average) - находятся средние арифметические каждой последовательности
.Println - вывод всех отысканных значений.
Все это не так уж просто, но и задание далековато не банальное. Если записать его средствами "традиционного паскаля" - такового приблизительно, как Free Pascal, код будет громадным...
, оставишь ответ?
Похожие вопросы
-
Вопросы ответы
Новое
NEW
Статьи
Информатика
Статьи
Последние вопросы
Игорь 14 лет назад был на 8 лет моложе, чем его
Математика.
Два тела массами m1 и m2 находящие на расстоянии R друг
Физика.
В сосуде 4целых одна пятая литр воды что бы заполнить сосуд
Математика.
Двум малярам Диме И Олегу поручили выкрасить фасад дома они разделили
Разные вопросы.
найти порядковый номер 41Э если в ядре 20 нейтронов
Разные вопросы.
в ряду натуральных чисел 3, 8, 10, 24, … 18 одно
Математика.
Предприятие по производству с/хоз продукции на производство затратило 3527000 руб Валовый
Разные вопросы.
Математика, задано на каникулы. ВАРИАНТ 1004
НОМЕР 1,2,3,4,5,6,7,8.
Математика.
Имеются три конденсатора емкостью С1=1мкФ, С2=2мкФ и С3=3мкФ. Какую наименьшую емкость
Физика.
Из точки м выходят 3 луча MP MN и MK причём
Геометрия.
Облако тегов