- 22, Oct 2024
- #1
Ваша задача — написать короткую программу, представляющую большой (бесконечный) порядковый номер, используя упорядоченный набор положительных целых чисел. Ваша программа возьмет два разных положительных целых числа и укажет, какое из них больше в выбранном вами порядке. Тип заказа колодца представляет собой представленный порядковый номер. Задача состоит в том, чтобы минимизировать размер вашего кода и представленный порядковый номер соответственно.
Объяснение
Обычно положительные целые числа располагаются следующим образом:
1, 2, 4, 8, 16, ..., 3, 6, 12, 24, 48, ..., 9, 18, 36, 72, ..., ..., 5, 10, 20, 40, 80, ..., 15, 30, ..., 45, ..., ..., ..., etc.
В таком порядке выражения: 2, 4, 8, 16, 32, ..., 3, 9, 27, 81, ..., 5, 25, 125, ..., ..., 1, 6, 10, 12, 14, ...
, 1, 2, 4, 8, 16, ..., 3, 5, 6, 9, 10, 12, 17, 18, ..., 7, 11, 13, 14, 19, 21, 22, ..., 15, 23, 27, ..., ...
, 1, 3, 2, 4, 5, 7, 6, 8, ...
, are true, as usual. The expressions 1, 2, 3, 4, 5, ...
2, 4, 6, 8, 10, ..., 1, 3, 5, 7, ...
2, 4, 6, 8, 10, ..., 3, 9, 15, 21, ..., 5, 25, ..., ..., 1
, 1, 3, 5, 7, 9, ..., ..., 10, 8, 6, 4, 2
, and so on, are false. However, we can order the positive integers also in the following way:
2, 4, 6, 8, 10, ..., 3, 9, 15, 21, ..., 5, 25, 35, 55, ..., 7, 49, 77, ..., ..., 1
Здесь за всеми четными числами следуют все нечетные числа. Теперь выражения 120 < 110
, 5 < 3
, 101 < 2
, 100 < 51
верны, а выражения 1 < 5
6 < 8
и 2 < 1
are false.
Это еще один хороший порядок:
2, 4, 6, 8, 10, ..., 1, 3, 5, 7, ...
Сначала у нас есть все четные числа, затем все оставшиеся числа, которые делятся на 3, затем те, которые делятся на 5 и так далее. Наконец, в самом конце стоит 1. Обратите внимание, что у нас есть вложенный «...». Это разрешено. Что недопустимо, так это «...», начинающееся слева.
10 < 3
Это не порядок (просто полный порядок). Более строгий способ формулировки этого правила состоит в том, что каждое непустое подмножество должно иметь наименьший элемент. Здесь подмножество четных чисел не имеет ни одного наименьшего элемента.
Другой способ взглянуть на это — представить, что вы начинаете справа и идете налево. Вы можете перепрыгивать произвольное (возможно, бесконечное) количество чисел, но вам всегда придется идти налево. Если числа упорядочены, ваша прогулка всегда будет занимать конечное количество шагов. Однако в этом примере вы можете просто оставаться на четной стороне, никогда не перепрыгивая через три точки и, таким образом, никогда не достигая начала.
Обратите внимание: если вы положите три порядка колодцев друг на друга следующим образом:
5 < 2
Они имеют разную «длину». Нижний – самый длинный, верхний – самый короткий. «Длина» называется «типом ордера» и может измеряться порядковым числом. Наш первый порядок колодца имеет тип порядка \$\omega\$, второй \$\omega\cdot2\$ и третий \$\omega^2+1\$
Ваша программа сравнит два положительных целых числа в соответствии с выбранным вами упорядочением. Таким образом, ваша программа будет представлять тип ордера вашего заказа.
Для получения дополнительной информации об ординалах посетите страницу Википедии: ординалы и порядковая арифметика. Дополнительные порядковые номера см. на странице Гугология вики. Также ознакомьтесь с предыдущий бесконечный порядковый вопрос по Code Golf.
Более порядковые примеры
\$\омега\$ 3 < 19
\$\омега^2\$ 1 < 2
(popcount then value)
\$\omega^2+\omega\$ 2 < 5
\$\омега^\омега\$ 1, 2, 3, 4, 5, ...
(reverse lexiographic ordering of the стандартная форма)
Правила
Вы должны выбрать хороший порядок на \$\mathbb{Z}^+\$. Хороший порядок — это бинарное отношение \$<\$ такое, что для всех различных элементов \$a\$, \$b\$, \$c\$, \$a
Ваша программа получит два различных положительных целых числа \$a\$ и \$b\$ в некотором разумном формате. Программа выведет TRUE, если \$a
Вместо чтения из stdin/cmdline и записи в sdtout вы можете создать функцию, принимающую два целых числа. Функция по-прежнему должна иметь только два возможных (различных) возвращаемых значения, хотя они не обязательно должны быть строками.
Если ваш язык программирования не имеет встроенной поддержки bignum, вы можете предположить, что собственный целочисленный тип данных имеет бесконечный диапазон (не переполняется).
Подсчет очков
Ваша оценка — это кортеж \$(Value, Bytes)\$, где \$Value\$ — представленный порядковый номер, а \$Bytes\$ — количество байтов в вашей программе. Например, если вы реализуете порядковый номер \$\omega^3+\omega\$ в 6 байтах, ваша оценка составит \$(\omega^3+\omega, 6)\$.
Для сравнения результатов мы определяем частичный порядок \$\ge\$ так, что \$(v_0, b_0)\ge (v_1, b_1)\$ тогда и только тогда, когда \$v_0\ge v_1\$ и \$b_0\le b_1\$ . Оценка \$(v_0, b_0)\$ лучше, чем оценка \$(v_1, b_1)\$ тогда и только тогда, когда \$(v_0, b_0)\ge (v_1, b_1)\$ и оценки не равны.
Другими словами, ваша работа лучше, чем другая, если вы добьетесь большей отдачи от затраченных средств. То есть вы достигаете большего порядкового номера с тем же количеством байт или достигаете того же порядкового номера с меньшим количеством байтов. И очевидно, что если вы достигнете большего порядкового номера с меньшим количеством байтов, ваше представление будет лучше.
Это означает, что некоторые результаты нельзя сравнивать. Например, \$(\omega\cdot 2, 2)\$ и \$(\omega^2, 4)\$ несравнимы.
Вы победитель, если ни одна работа не окажется лучше вашей.
Если есть две или более заявки с одинаковым количеством баллов, победителем считается та, которая была отправлена первой. Поскольку некоторые результаты невозможно сравнить с другими, победителей может быть несколько. Вы можете подать несколько заявок и, возможно, иметь несколько победителей.
Список победителей | Байты | Ценить |
---|---|---|
1 | Язык и автор | \$\омега\$ |
6 | Полиглот — вики сообщества | \$\омега^\омега\$ |
12 | \$\омега^\омега+1\$ | Хаск — Доминик ван Эссен |
17 | \$\varepsilon_0\$ | Пиф - Андерс Касеорг |
208 | \$\phi_{\Omega^\omega}(0)\cdot\omega\$ | Haskell — зерновой призрак |
218+2\$n\$ | \$\phi_{\Omega^\omega}(0)^n\cdot\omega\$ | Haskell — зерновой призрак |
#математика #вызов кода #задача принятия решения #открытая функция #занятый бобер