Задача о трех разработчиках - Академия Selectel

Задача о трех разработчиках

Тирекс
Тирекс Самый зубастый автор
31 мая 2024

Задача будет полезна всем, кто любит строить логические конструкции.

Изображение записи

Условие

В IT-компании работают три программиста: Андрей, Борис и Виктор. Каждый из них использует определенную операционную систему и пишет код на одном языке программирования.

Какие факты о них известны?

  1. Один из программистов сочетает в работе Linux и Java.
  2. Андрей предпочитает не использовать Java и  Windows.
  3. Борис владеет С++ и Java. 
  4. Если бы Андрей писал на С++, Виктор был бы Java-разработчиком.
  5. Если бы Андрей был Python-разработчиком, Виктор работал бы на Windows.

Задача

Определите, какую операционную систему использует и каким языком программирования владеет каждый программист. Варианты не могут повторяться.

Какие есть варианты?

OC: Linux, Windows, macOs.
Языки: С++, Java, Python.

Решение

Эту задачу удобно решать, начиная с Андрея. Он не работает с Windows и не может использовать Linux, потому что не работает с Java. Помним первый факт:

Один из программистов сочетает в работе Linux и Java.

Следовательно, Андрей работает на macOs.

Мы также знаем из условия, что Борис не программирует на Python. А еще он и Виктор не могут использовать macOS, так как эта ОС уже занята Андреем.

АндрейБорисВиктор
С++
Java
Python
Windows
macOs+
Linux

Теперь предположим, что Андрей пишет на С++. Тогда Виктор — Java-разработчик и использует Linux:

Если бы Андрей писал на С++, Виктор был бы Java-разработчиком.

Мы зашли в тупик, ведь для Бориса не остается вариантов: по условию он владеет или С++, или Java. Получается, Андрей пишет код не на C++, а на Python. И тогда Виктор использует Windows:

Если бы Андрей был Python-разработчиком, Виктор работал бы на Windows.

АндрейБорисВиктор
С++
Java
Python+
Windows+
macOs+
Linux

Борису остается Linux — следовательно, он использует и Java. Это следует из первого факта:

Один из программистов сочетает в работе Linux и Java.

И тогда Виктор работает на C++.

АндрейБорисВиктор
С+++
Java+
Python+
Windows+
macOs+
Linux+

Все сложилось!

Но давайте проверим, нет ли другого решения. Предположим, что Борис работает на С++. Тогда Андрею остается только Python, а Виктору достанется Java. 

И здесь не сходятся два факта: Виктор не может работать и на Linux, и на Windows.

Если Андрей — Python-разработчик, Виктор должен работать на Windows — четвертый факт.

Один из программистов сочетает в работе Linux и Java — первый факт. Виктор как раз пишет на Java.

Гипотеза не сработала. Получается, второе предположение было верным.

Ответ

  • Андрей — Python и macOs.
  • Борис — Java и Linux.
  • Виктор — C++ и Windows.

Материалы для обучения