В День программиста в один бар набилась толпа программистов. Бармен решил выяснить, на каком из языков пишет большинство из них: Python, C или Java. Он стал спрашивать это у каждого и вести счёт на доске.
Выяснилось, что из 100 посетителей 90 могут программировать на Python, 80 — на C и 75 — на Java. Один хитрый программист предложил пари: бармен угостит всех за счёт заведения, если на трёх языках программирует меньше половины посетителей.
Бармен согласился и внезапно проиграл спор. Как так получилось?
Бармен думал так:
- В бар пришло 100 человек, каждый из которых точно знает какой-то язык программирования, а может даже и не один.
- После подсчёта стало ясно, что 90 пишут на одном языке, 80 на другом и 75 — на третьем.
- Самая маленькая группа здесь — 75 человек, которые пишут на Java, поэтому они точно входят в те 80, которые пишут на С (потому что 80 > 75), и точно входят в те 90, которые пишут на Python (потому что 90 > 75).
- А раз так, то 75 человек умеют писать на трёх языках.
Бармен прикинул, что 75 — это точно больше, чем половина от сотни, поэтому так легко согласился на пари, уверенный, что он его точно выиграет.
А вот картинка, которая была у бармена в голове:
На самом деле было так:
- В бар пришло 100 человек, каждый из которых точно знает какой-то язык программирования, а может даже и не один.
- После подсчёта стало ясно, что 90 пишут на одном языке, 80 на другом и 75 — на третьем.
- Это значит, что 10 человек не пишут на Python, 20 человек не пишут на C и 25 человек не пишут на Java.
- Оказалось, что это всё — разные группы, которые никак не пересекаются между собой. Это значит, что в баре оказалось 10 + 20 + 25 = 55 человек, которые не умеют писать как минимум на одном языке из трёх.
- Получается, что программировать на всех трёх языках могут только 100 − 55 = 45 человек, а это меньше половины от сотни, поэтому бармену пришлось угощать всех за счёт заведения.
Посетителям — радость, бармену — наука на будущее. Если вы смогли найти правильный ответ раньше нас — вам тоже всё за счёт заведения.