Задача о трех разработчиках
Задача будет полезна всем, кто любит строить логические конструкции.
Условие
В IT-компании работают три программиста: Андрей, Борис и Виктор. Каждый из них использует определенную операционную систему и пишет код на одном языке программирования.
Какие факты о них известны?
- Один из программистов сочетает в работе Linux и Java.
- Андрей предпочитает не использовать Java и Windows.
- Борис владеет С++ и Java.
- Если бы Андрей писал на С++, Виктор был бы Java-разработчиком.
- Если бы Андрей был 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.