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

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

 

Вступайте в нашу телеграмм-группу Инфостарт

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

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Математика и алгоритмы Программист 1С 8.3 Абонемент ($m)

Данная внешняя обработка для платформы 1С:Предприятие реализует усовершенствованный алгоритм Левенштейна для вычисления схожести строк с учетом различных лингвистических особенностей русского языка. В отличие от классической реализации, этот алгоритм учитывает фонетические, визуальные и контекстные особенности набора текста.

1 стартмани

07.11.2025    5418    14    InFlach    17    

27

Математика и алгоритмы Запросы Программист 1С:Предприятие 8 Бесплатно (free)

Рассмотрим быстрый алгоритм поиска дублей с использованием hash функции по набору полей шапки и табличных частей.

08.07.2024    5629    ivanov660    9    

24

Математика и алгоритмы Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Абонемент ($m)

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

1 стартмани

30.01.2024    13641    stopa85    12    

43

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

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

19.10.2023    21607    user1959478    57    

40

Математика и алгоритмы Разное 1С:Предприятие 8 1C:Бухгалтерия Россия Абонемент ($m)

Расширение (+ обработка) представляют собою математический тренажер. Ваш ребенок сможет проверить свои знание на математические вычисление до 100.

2 стартмани

29.09.2023    12860    maksa2005    8    

27

Математика и алгоритмы Инструментарий разработчика Программист 1С:Предприятие 8 Россия Абонемент ($m)

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

1 стартмани

09.06.2023    22476    11    SpaceOfMyHead    20    

65

Математика и алгоритмы Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.

03.04.2023    14584    RustIG    9    

30

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

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

03.01.2023    4360    Alxby    20    

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


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

а=1, б=2

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

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