Еще одна задача на собеседовании

1. scientes 295 25.01.23 14:05 Сейчас в теме
Есть строка, состоящая из набора чисел, разделенных различными символами. Средствами 1С нужно найти максимальное число, не используя оператор цикла.
Пример входной строки - "09ы!!выв0000032323ав??@а678900ллл1212".
Ответ: 678 900
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
10. user_2010 952 26.01.23 13:47 Сейчас в теме
(1) без цикла, значит рекурсией?
2. user1880116 25.01.23 16:14 Сейчас в теме
На собеседование кого и куда? Приемы инфоцыганщины разъедают мозг?

Задача решается при помощи нескольких СтрРазделить и СтрСоединить с финальным Вычислить по полученной строке.
ivan1703; +1 Ответить
3. scientes 295 25.01.23 17:09 Сейчас в теме
Еще один вариант этой задачи. Определить есть ли в строке числа, которые делятся на 17.
4. user1880116 25.01.23 19:00 Сейчас в теме
(3) Строка для Вычислить начинает содержать в себе вызовы функций с аргументом - извлеченным числом из предыдущей задачи.

Так куда мы "собеседуемся"-то? На какой оклад, какую позицию?
Или весь этот бред ради красного словца, потешить самолюбие найденным в интернете?
5. ivan1703 79 25.01.23 20:32 Сейчас в теме
МассивЧисел = СтрРазделить(ВходящаяСтрока, "абвгдеёжзиклмнопрстуфхшщьъыэюя!№;%:?*()_+-=@''", False); 
	
СписокЧисел = Новый СписокЗначений;
СписокЧисел.ЗагрузитьЗначения(МассивЧисел);
СписокЧисел.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
	
МаксимальноеЧисло = СписокЧисел[0];
6. user1880116 26.01.23 08:26 Сейчас в теме
(5) Будет отсортировано как строки, а не как числа.

Ты не прошел собеседование незнамо куда. Возможно это и к лучшему.
ivan1703; +1 Ответить
12. ivan1703 79 26.01.23 14:21 Сейчас в теме
(6)

Процедура НайтиЧислоНаСервере(ВходящаяСтрока)


	МассивЧисел = СтрРазделить(ВходящаяСтрока, "абвгдеёжзиклмнопрстуфхшщьъыэюя!№;%:?*()_+-=@''", False);  
	
	ТаблицаЧисел = Новый ТаблицаЗначений;
	ТаблицаЧисел.Колонки.Добавить("Числа", Новый ОписаниеТипов("Число",,,Новый КвалификаторыЧисла("15"))); 
	
	РазмерМассива = МассивЧисел.Количество();
	
	ДобавитьРекурсивно(ТаблицаЧисел, РазмерМассива);
	ТаблицаЧисел.ЗагрузитьКолонку(МассивЧисел, "Числа");
	
	ТаблицаЧисел.Сортировать("Числа УБЫВ");
	
	МаксимальноеЧисло = ТаблицаЧисел[0].Числа;
		
		
КонецПроцедуры

 Процедура ДобавитьРекурсивно(ТаблицаЧисел, Размер)  

	Если Размер > 0 Тогда 
		ТаблицаЧисел.Добавить();
		ДобавитьРекурсивно(ТаблицаЧисел, Размер - 1)
	КонецЕсли;
	
КонецПроцедуры
Показать
8. starik-2005 3088 26.01.23 10:01 Сейчас в теме
Я русский бы выучил только за то....чтобы читать такие темы в местной помойке )))
9. user1880116 26.01.23 11:46 Сейчас в теме
(8)
чтобы читать такие
И писать на 1С =)
Полноценный вывих мозга для потомков:

Процедура КнопкаВыполнитьНажатие(Кнопка)

	ВходнаяСтрока = "09ы!!выв0000032323ав??@а678900ллл1212";
	
	Разделители = СтрСоединить(СтрРазделить(ВходнаяСтрока, "0123456789", Ложь), "");
	Коллекция = СтрРазделить(ВходнаяСтрока, Разделители, Ложь);

	// Решение первого варианта
	СтрокаКода = "Макс(" + СтрСоединить(Коллекция, ",") + ")";
	Максимум = Вычислить(СтрокаКода);
	
	Сообщить("Максимум = " + Максимум);

	// Универсальный подход
	Контекст = Новый Структура;
	Контекст.Вставить("Коллекция", Коллекция);
	Контекст.Вставить("ИндексТекущегоЭлемента", 0);
	Контекст.Вставить("Максимум");
	Контекст.Вставить("Есть17", Ложь);
	
	Генератор = Новый Массив(Коллекция.Количество() + 1);
	СтрокаКода = """""" + СтрСоединить(Генератор, " + ПочтиЛямбда(Контекст)");
	Заглушка = Вычислить(СтрокаКода);
	
	Сообщить("Максимум = " + Контекст.Максимум);
	Сообщить("Есть делящиеся на 17 = " + Контекст.Есть17);
	
КонецПроцедуры

Функция ПочтиЛямбда(Контекст)

	Коллекция = Контекст.Коллекция;
	Индекс = Контекст.ИндексТекущегоЭлемента;
	Контекст.ИндексТекущегоЭлемента = Контекст.ИндексТекущегоЭлемента + 1;
	
	Элемент = Число(Коллекция[Индекс]);

	Если Контекст.Максимум = Неопределено Или Контекст.Максимум < Элемент Тогда
		Контекст.Максимум = Элемент;
	КонецЕсли;

	Если Элемент % 17 = 0 Тогда
		Контекст.Есть17 = Истина;
	КонецЕсли;
	
КонецФункции
Показать
SlavaKron; +1 Ответить
11. scientes 295 26.01.23 14:21 Сейчас в теме
(9) С делимостью на 17 решается значительно проще
13. SlavaKron 26.01.23 14:28 Сейчас в теме
(11) Перемножить все элементы и проверить результат на делимость 17?
14. scientes 295 26.01.23 14:29 Сейчас в теме
Как вариант, можно перемножить остатки от деления на 17.
15. user1880116 26.01.23 15:47 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот