[После]Новогодние задачи

30.12.20

Разработка - Математика и алгоритмы

Совсем немного времени осталось до того момента, когда отзвучат куранты, шампанское будет выпито, мандарины съедены, и даже оливье закончится. Возникнет вопрос: чем бы занять неожиданно появившееся свободное время?

Я хочу предложить несколько интересных на мой взгляд задач. Скорее всего, не все они имеют практическое применение, но, я надеюсь, позволят взглянуть на казалось бы хорошо знакомые вещи с неожиданной стороны.

1)

Начнем с классики:

Как поменять местами значения двух переменных, не используя третью? В языке 1С существует как минимум три способа для числовых переменных и один - для строковых. Каждый способ имеет свои достоинства, недостатки и область применения. (Конечно же, говоря о количестве переменных, мы имеем в виду прикладной код. Какие переменные используются при этом в платформе нам неведомо). Найдите эти способы. А может быть их число гораздо больше? 

2)

Имеется две таблицы, в первой - M записей, во второй - N записей. Какое максимальное и минимальное число записей может содержать результат а) левого соединения, б) внутреннего соединения и в) полного соединения таблиц? (дополнительные условия ГДЕ (WHERE) не накладываются).

3)

Существует рекомендация для оптимизации запросов: отборы при использовании виртуальных таблиц лучше задавать в параметрах виртуальной таблицы, а не в секции ГДЕ. Но всегда ли результаты будут идентичны? Другими словами: возможна ли ситуация, когда переместив условие из секции ГДЕ в параметры виртуальной таблицы, мы получим другой результат запроса?

4)

Есть справочник Контрагенты с табличной частью Скидки. Для каждого контрагента может быть несколько видов скидок, заданных в процентах.

При вычислении итоговой цены для контрагента все скидки применяются последовательно, т.е. например, если есть две скидки по 50%, то результирующая цена сторублевого товара будет: 100 минус 50% от 100 рублей и минус 50% от результата, итого - 25 руб. Таким образом итоговая скидка составила 75%.

Необходимо разработать отчет, который рассчитывает итоговые скидки контрагентов

5)

Программист Вася (не тот, который кот (c), а тот, который не кот) получил задачу:

Имеется две таблицы значений с колонкой "Наименование". Необходимо найти сколько строк (наименований) из первой таблицы присутствуют во второй. Вася решает сделать это за один проход по предварительно отсортированным таблицам и пишет вот такой код:

	ТЗ1.Сортировать("Наименование");
	ТЗ2.Сортировать("Наименование");
	
	КолВоСовпадений = 0;
	Индекс1 = 0;
	Индекс2 = 0;
	
	Пока Индекс1 < ТЗ1.Количество() И Индекс2 < ТЗ2.Количество()  Цикл
		Если ТЗ1[Индекс1].Наименование = ТЗ2[Индекс2].Наименование Тогда   
			КолВоСовпадений = КолВоСовпадений + 1;
			Индекс1 = Индекс1 + 1;			
		ИначеЕсли ТЗ1[Индекс1].Наименование < ТЗ2[Индекс2].Наименование Тогда   
			Индекс1 = Индекс1 + 1;
		ИначеЕсли ТЗ1[Индекс1].Наименование > ТЗ2[Индекс2].Наименование Тогда   
			Индекс2 = Индекс2 + 1;
		КонецЕсли; 
	КонецЦикла; 
	
	Сообщить("Количество совпадений: " + КолВоСовпадений); 

К сожалению, этот код ошибочен. Где ошибка? Как исправить?

6)

Дано не очень большое положительное целое число. Необходимо разделить его на N целых частей пропорционально (точнее примерно пропорционально) N весам.

Примеры:

Число: 100

частей: 2

веса: 1, 3.

Результат: 25, 75

Число: 1000

частей: 3

веса: 1, 2, 3.

Результат: 167, 333, 500

Обязательное условие: операции умножения и деления использовать нельзя!

 

На этом пока все. Поздравляю всех с Новым годом!

 

PS: Настоятельная просьба: пожалуйста, не пишите ответы и решения в комментариях, не лишайте сообщество удовольствия самостоятельного поиска решения! Желающие могут прислать свои варианты ответов в личку, постараюсь ответить всем.

UPD 16.01.2020:

 
Подсказка №1
 
Подсказка №2
 
Подсказка №3
 
Подсказка №4
 
Подсказка №5
 
Подсказка №6

 

Задачи алгоритмы математика виртуальные таблицы запросы соединения головоломки новый год СКД регистры проверка знаний тестирование загадки

См. также

Метод Дугласа-Пойкера для эффективного хранения метрик

Математика и алгоритмы Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    1715    stopa85    12    

33

Алгоритм симплекс-метода для решения задачи раскроя

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    4320    user1959478    50    

34

Регулярные выражения на 1С

Математика и алгоритмы Инструментарий разработчика Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    7350    4    SpaceOfMyHead    17    

56

[После] Новогодние задачи 2023

Математика и алгоритмы О жизни Бесплатно (free)

Не желаете ли очередную порцию интересных задач?

03.01.2023    2330    Alxby    20    

9

Если хочется низко-низкоуровневого программирования с битами и байтами

Математика и алгоритмы Платформа 1С v8.3 Абонемент ($m)

Все знают, что подавляющее большинство современных компьютеров работает в двоичном коде, т.е. оперирует всего двумя значениями - битами - "0" и "1". Потом из них складываются байты, слова, кило-, мега- и гигабайты etc. Но что происходит внутри процессора, как именно обрабатываются двоичные числа, например выполняются арифметические операции? Об этом — в публикации. Статья, я думаю, будет особенно интересна тем читателям, у которых во время обучения не было соответствующих курсов.

1 стартмани

01.12.2022    1960    Alxby    20    

12

Перечень множественных значений в ячейке динамического списка. Как стало и как было

Механизмы платформы 1С Платформа 1С v8.3 План видов характеристик Абонемент ($m)

В платформе версии 8.3.21 наконец-то появилась возможность указать, что характеристика может содержать более одного значения, и правильно отобразить этот перечень в динамическом списке. Настройка нового механизма, а также альтернативы, используемые ранее, описаны в статье.

1 стартмани

20.09.2022    4775    Alxby    9    

49

Модель распределения суммы по базе

Математика и алгоритмы Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    7820    7    kalyaka    11    

44

Изменения формата файлов конфигурации (CF) в 8.3.16

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Дополнение по формату файлов конфигурации (*.cf) в версии 8.3.16.

16.12.2021    4415    fishca    13    

36
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. capitan 2461 30.12.19 12:16 Сейчас в теме
Вспоминается...
под маской непоймикогото
у ёлки пляшет наш главбух
он восхитительно прекрасен
он бух


Где то я видел такие задачки.
На собеседовании в дочке известно какой компании задавали )
2. Alxby 1134 30.12.19 12:53 Сейчас в теме
(1):))
Нет, эти задачи не связаны с собеседованиями в дочке известно какой компании. Скорее всего те, кто эти собеседования проводил, также как и я, программировали в те времена, когда "640K ought to be enough for anybody"(с). Первая задача на Си вообще решается в одну строку.
3. capitan 2461 30.12.19 12:57 Сейчас в теме
(2)
Первую задачу я еще на Perl решал.
А у вас то доктор откуда такие картинки ? )
4. Alxby 1134 30.12.19 13:13 Сейчас в теме
(3) Ну, к счастью, к доктору из анекдота нам обращаться не требуется). Но я с Вами согласен: разработчики умеющие (и желающие!) решать подобные задачи отличаются от массы "1С-негов", чья работа заключается в "натыкивании" настроек в конструкторах.
5. acanta 30.12.19 13:59 Сейчас в теме
С наступающим! Желаю последовательности во всех начинаниях.
https://youtu.be/g2K4rOfdHqc
6. FesenkoA 57 30.12.19 14:47 Сейчас в теме
Ответ1
8. Alxby 1134 06.01.20 08:27 Сейчас в теме
(6)Интересный подход, надо обдумать. Правда в тексте задачи шла речь о числовых и строковых переменных))
10. FesenkoA 57 08.01.20 12:21 Сейчас в теме
(8) Числовые решаются очень просто

а=1, б=2

Б=А+Б;
А=Б-А;
Б=Б-А;
15. Alxby 1134 08.01.20 15:51 Сейчас в теме
(10)Все верно. Но это не единственный вариант. Для числовых переменных есть еще как минимум два (не считая конечно же тривиальной замены '+' на '-'). Сможете найти? И все же ответы лучше в личку или под спойлер.
7. FesenkoA 57 30.12.19 14:50 Сейчас в теме
Ответ2
9. Alxby 1134 06.01.20 08:28 Сейчас в теме
(7)Ответ неполный и местами неверный...
11. FesenkoA 57 08.01.20 12:27 Сейчас в теме
(9)Почему не полный? 3 подпункта, 3 подответа

Да, с внутренним тупанул..
16. Alxby 1134 08.01.20 15:54 Сейчас в теме
(11)Неполный - в задаче спрашивалось и про минимальное количество записей в соединении.
21. FesenkoA 57 08.01.20 16:27 Сейчас в теме
(16) УУУпс, сорян))
ответ 2 дубль 2
22. Alxby 1134 08.01.20 16:33 Сейчас в теме
12. FesenkoA 57 08.01.20 12:34 Сейчас в теме
ответ 3
17. Alxby 1134 08.01.20 16:13 Сейчас в теме
(12)Можете привести конкретный пример?
Скрытый текст
19. FesenkoA 57 08.01.20 16:23 Сейчас в теме
(17)
Скрытый текст
Живой пример не вспомню, но было в расусовской конфе где то весной`19
13. FesenkoA 57 08.01.20 12:37 Сейчас в теме
Ответ 4= 3 часа работ если без красоты, и больше если с красотой) А если серьезно, то
Скрытый текст
18. Alxby 1134 08.01.20 16:23 Сейчас в теме
(13)Схема СКД = 10 мин. работ, с красотой и тестированием - 15 мин.
Скрытый текст
23. FesenkoA 57 08.01.20 16:59 Сейчас в теме
(18) И опять неправильно прочитал задание, думал то что на картинке - дано, а не результат
Скрытый текст
14. FesenkoA 57 08.01.20 12:45 Сейчас в теме
ответ 5
20. Alxby 1134 08.01.20 16:26 Сейчас в теме
(14)
Скрытый текст
Оставьте свое сообщение