Диалог парня-программиста и девушки-гуманитария: сортировка пар целых чисел

в 13:07, , рубрики: Песочница, юмор, метки:

Предыстория: парень-программист (далее — ПП) и девушка-гуманитарий (далее — ДГ) одинаково хорошо справились с тестом на логику и решили это обсудить…

image

(Диалог имел место в реальной жизни; сокращённая версия выложена с согласия обеих сторон.)

ДГ:
… Я как визуал воочию представляю себе множества, накладывающиеся друг на друга, если вопрос связан с ними. :) Иначе не получается.
Стало быть, представляю себе множество уузок (будто это такие маленькие уточки), которых облили водой — то есть, словно такой цепочкой привязали их к облитию водой — ни одной не отвертеться, и это происходит незамедлительно. И осознаю в итоге, что поблизости могут бегать и не облитые водой уточки… Ну или какое там было задание…

ПП:
А я раскладываю в утверждения булевой алгебры. Хотя на настолько простых вопросах даже этого делать не приходится :)

ДГ:
А я не знаю булеву алгебру. :) То есть, может, и знаю… Но не знаю, что это именно она.

ПП:
А чего её знать-то? :)) Четыре действия. Это даже не теория, а способ записи высказываний.

ДГ:
Ну да. Ведь её же, наверное, вывели изначально из множества «уточек». Понимаешь? Действительность была вначале. Разве нет? И здравосмысленное прогнозирование этой действительности на бесконечность. Так что можно мыслить логически, не запоминая этих вещей, а опираясь на существующие в уме здравосмысленные выводы. Или я не то говорю? %)

ПП:
Конечно, всё так. Проблема в том, что здравый смысл плохо масштабируется. :)

ДГ:
Может, и так… А попробуй придумать для меня задачу, где я не смогу ответить, и ты убедишь меня, что он плохо масштабируется.

ПП:
Как отсортировать множество пар из двух целых чисел?

ДГ:
Прости. Я не поняла задачу) Какие требования к сортировке?
Мда, хорошее начало…

ПП:
Определить непротиворечивую операцию сравнения двух пар целых чисел. То есть, даны две пары — и нужно сказать, какая из них больше.

ДГ:
Родной мой. Прости меня) Но я не могу взять в толк — «непротиворечиво» — это как? Что требуется? Скажи, что от меня требуется) Ох, ну с поправкой на идиотов…
Я понимаю, обливать уузок водой...)) Но что тут-то меня нужно?

ПП:
Надо построить пары чисел «по росту», при этом непротиворечиво:
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

* - обязательные к заполнению поля