Предыстория: парень-программист (далее — ПП) и девушка-гуманитарий (далее — ДГ) одинаково хорошо справились с тестом на логику и решили это обсудить…
(Диалог имел место в реальной жизни; сокращённая версия выложена с согласия обеих сторон.)
ДГ:
… Я как визуал воочию представляю себе множества, накладывающиеся друг на друга, если вопрос связан с ними. :) Иначе не получается.
Стало быть, представляю себе множество уузок (будто это такие маленькие уточки), которых облили водой — то есть, словно такой цепочкой привязали их к облитию водой — ни одной не отвертеться, и это происходит незамедлительно. И осознаю в итоге, что поблизости могут бегать и не облитые водой уточки… Ну или какое там было задание…
ПП:
А я раскладываю в утверждения булевой алгебры. Хотя на настолько простых вопросах даже этого делать не приходится :)
ДГ:
А я не знаю булеву алгебру. :) То есть, может, и знаю… Но не знаю, что это именно она.
ПП:
А чего её знать-то? :)) Четыре действия. Это даже не теория, а способ записи высказываний.
ДГ:
Ну да. Ведь её же, наверное, вывели изначально из множества «уточек». Понимаешь? Действительность была вначале. Разве нет? И здравосмысленное прогнозирование этой действительности на бесконечность. Так что можно мыслить логически, не запоминая этих вещей, а опираясь на существующие в уме здравосмысленные выводы. Или я не то говорю? %)
ПП:
Конечно, всё так. Проблема в том, что здравый смысл плохо масштабируется. :)
ДГ:
Может, и так… А попробуй придумать для меня задачу, где я не смогу ответить, и ты убедишь меня, что он плохо масштабируется.
ПП:
Как отсортировать множество пар из двух целых чисел?
ДГ:
Прости. Я не поняла задачу) Какие требования к сортировке?
Мда, хорошее начало…
ПП:
Определить непротиворечивую операцию сравнения двух пар целых чисел. То есть, даны две пары — и нужно сказать, какая из них больше.
ДГ:
Родной мой. Прости меня) Но я не могу взять в толк — «непротиворечиво» — это как? Что требуется? Скажи, что от меня требуется) Ох, ну с поправкой на идиотов…
Я понимаю, обливать уузок водой...)) Но что тут-то меня нужно?
ПП:
Надо построить пары чисел «по росту», при этом непротиворечиво:
1) если вдруг из получившейся шеренги уберут одну или несколько пар, надо, чтобы остальные остались на своих местах;
2) для каждой вновь прибывшей пары должно быть однозначно определённое место в шеренге.
ДГ:
Поняла.
<cпустя полчаса>
Ок. Я вижу это так.
Путешествуем, выбираем красивый большой холм.
В середине холма (на «полу», то есть, на плоскости холма) рисуем яркой краской образец-разметку для всех прибывающих пар (и сразу выдаём всем прибывающим парам бинокли, чтобы видели, что там нарисовано на середине пути холма, и куда им потом идти).
На образце написано (цитирую сверху вниз):
============================================
И ТАК ДАЛЕЕ (когда первая пара — (n+2) и больше)
_____________
и так далее (когда вторая пара — (n+2) и больше)
^
|
(n+1); (n+1)
(n+1); n
(n+1); (n-1)
|
v
и так далее (когда вторая пара — (n-2) и меньше)
_____________
и так далее (когда вторая пара — (n+2) и больше)
^
|
n; (n+1)
n; n < — ПОСМОТРИ ВНАЧАЛЕ СЮДА, ЧУВАК!
n; (n-1)
|
v
и так далее (когда вторая пара — (n-2) и меньше)
_____________
и так далее (когда вторая пара — (n+2) и больше)
^
|
(n-1); (n+1)
(n-1); n
(n-1); (n-1)
|
v
и так далее (когда вторая пара — (n-2) и меньше)
_____________
И ТАК ДАЛЕЕ (когда первая пара — (n-2) и меньше)
=============================================
При выдаче бинокля попутно выдаём прибывающим парам информацию: «n равно нулю», — а также бейджи и карандаш, чтобы и первый, и второй в паре охарактеризовали себя в формате «n+x» (где x — это на сколько они там больше или меньше единиц, нежели n) и потом нацепили эти бейджи на себя для удобства всех присутствующих.
Затем вкалываем обоим зелье послушания в задницу и отправляем на холм.
Кроме того, на том месте, где мы принимаем новые пары, расположено большое объявление, обращённое к холму (чтобы оттуда можно было увидеть его в бинокль): «Если вы пришли, а пара чуваков с такими же бейджами, как у вас, уже есть, то вставайте рядом с ними, но ниже, ибо вы пришли позже».
И там же размещаем объявление: «Пока вас мало, размещайтесь на глаз, а потом, когда будут прибывать новые пары, размещайтесь так, чтобы всем хватало места — но сохраняйте соотношение, кто выше и кто ниже».
… Всё.
Надо им только ещё сухой паёк хотя бы выдавать с собой, и бутылку минералки.
ПП:
То есть, всё, что ты хотела сказать, это
* если первые числа двух пар не равны, то результат сравнения пар = результат сравнения первых чисел
* в обратном случае результат сравнения пар = результат сравнения вторых чисел
?
ДГ:
А что, всё плохо и неправильно?
ПП:
Всё совершенно правильно. :)
ДГ:
Ура. :)) Ну видишь, и с бесконечностью можно такое представить.
ПП:
Видимо, тебе так легче :)… Уникальный ты человек. Просто мне решение этой задачки традиционно представляется как
bool less(int a[2], int b[2]) { return (a[0] != b[0])? (a[0] < b[0]): (a[1] < b[1]); }
ДГ:
OMG %)
Уникальный ты человек.)
Автор: qui_prodest