Система порядковых чисел - это система с бесконечными числами. Много бесконечных чисел. Так много бесконечных чисел, что буквально не имеет бесконечности, чтобы представлять свою собственную бесконечность. Изображение выше дает небольшое представление о том, как они работают. Порядковый номер ( конструкция фон Неймана ) - это набор предыдущих порядковых чисел . Например, 0 - это пустой набор, 1 - это набор {0}, 2 - это набор {0, 1} и т. Д. Затем мы получаем ω, который равен {0, 1, 2, 3 ...}. ω + 1 равно {0, 1, 2, 3 ... ω}, ω, умноженное на два, равно {0, 1, 2 ... ω, ω + 1, ω + 2 ...}, и вы просто продолжаете что.
Ваша программа выведет набор порядковых чисел, например {0, 1, 4}. Тогда ваш счет будет наименьшим порядковым числом, чем все порядковые в вашем наборе. Для {0, 1, 4} оценка будет 5. Для {0, 1, 2 ...} оценка будет ω.
Как вы выводите свои порядковые номера вы спрашиваете. Код конечно. А именно, ваша программа выведет потенциально бесконечный список других программ в кавычках, по одной в каждой строке (используйте литеральную строку "\ n" для представления новых строк). Программа соответствует своей оценке, как указано выше. Например, если вы выводите
"A"
"B"
"C"
где A, B и C сами по себе являются действительными ответами и имеют оценки {0, 1, 4}, оценка вашей программы будет 5. Обратите внимание, что A, B и C должны быть полными программами, а не фрагментами.
Исходя из приведенных выше правил, программа, которая ничего не выводит, имеет оценку 0 (наименьший порядковый номер больше всех {} равен 0). Кроме того, помните, что набор не может содержать себя через аксиому основания . А именно, каждый набор (и, следовательно, порядковый номер) имеет путь до нуля. Это означает, что полная квинна будет недействительной, поскольку она не является набором.
Кроме того, ни одной программе не разрешен доступ к внешним ресурсам (собственный файл, Интернет и т. Д.). Кроме того , когда вы перечисляете ваш счет, положить Кантор нормальную форму партитуры рядом с ним , если он не в кантором нормальной форме уже, если вы можете (если нет, то кто - то другой может).
После учета всего вышесказанного фактический ответ, который вы публикуете, должен быть не более 1 000 000 байт (не считая комментариев). (Эта верхняя граница, скорее всего, вступит в действие только для автоматически сгенерированного кода). Кроме того, вы можете увеличивать свой счет за каждый байт, который вы не используете (поскольку мы имеем дело с бесконечностью, это, вероятно, будет учитываться только тогда, когда порядковые числа очень близки или одинаковы). Опять же, этот абзац применяется только к опубликованному ответу, а не к сгенерированным или сгенерированным, и так далее.
У него есть тег quine, поскольку может быть полезно сгенерировать хотя бы часть исходного кода для использования при создании больших порядковых чисел. Это ни в коем случае не требуется (например, для представления с оценкой 5, вероятно, не понадобится собственный исходный код).
Отработанный и аннотированный пример смотрите здесь .
источник
Ответы:
Haskell: ψ (Ω Ω ω ) + 999672 баллов
329 байт кода с порядковым номером ψ (Ω Ω ω ) + 1. Используется древовидное представление ординалов, открытое Джервеллом (2005) . Дерево с детьми α , β ,…, γ обозначается
α :@ (β :@ (… :@ (γ :@ Z)…))
. Этот порядок слева направо согласуется с Джервеллом, хотя обратите внимание, что Мадор переворачивает его справа налево.Haskell: Γ 0 + 999777 баллов
224 байт коды с порядковым Г 0 + 1. Это основан на обобщение Worm Беклемишева к порядковым многозначным элементам, которые сами по себе являются рекурсивно представлены червями.
Haskell: ε 0 + 999853 очков
148 байт кода с порядковым е 0 + 1. Это основано на Worm Беклемишев в . Список
представляет собой порядковый номер (ш & gamma + ⋯ + ш & beta ; + ш & alpha ; ) - 1. Таким образом, выходы второго уровня
[0]
,[1]
,[2]
,[3]
, ... представляют собой 1, ш, ш ш , ш ш ш , ..., выходной сигнал первого уровня представляет е 0 , и исходная программа представляет ε 0 + 1.Haskell: ε 0 + 999807 очков
194 байта кода с порядковым номером 0 + 1.
Z
представляет 0, и мы можем доказать посредством трансфинитной индукции по α , а затем по β , чтоα :@ β
≥ ω α + β . Таким образом, выходы второго уровня, по крайней мере, такие же большие, как и любая вышка ω ω ⋰ ω , что означает, что выход первого уровня составляет по крайней мере ε 0, а начальная программа - по крайней мере ε 0 + 1.источник
Рубин, ψ 0 (ψ X (ψ M + 1 (Ω M + 1 Ω M + 1 )) (0)) + 999663 баллов
Предполагая, что я правильно понимаю свою программу, мой результат равен ψ 0 (ψ X (ψ M + 1 (Ω M + 1 Ω M + 1 )) (0)) + 999663 баллов, где ψ - ординальная коллапсирующая функция, X - chi функция (коллапсирующая функция Мало), а М - первый «ординал» Мало.
Эта программа является расширением той, которую я написал для Golf, на число больше, чем TREE (3), и пока полностью превосходит все остальные решения, представленные здесь.
Попробуйте онлайн!
Рубин, ψ 0 (ψ I (I I )) + 999674 очка
Попробуйте онлайн! (предупреждение: ничего не выйдет, поскольку явно
(0..1.0/0).map{...}
не может завершиться. Так я печатаю бесконечно много программ.)Рубин, ψ 0 (ψ I (0)) + 999697 баллов
Попробуйте онлайн!
Более разумная тестовая программа, которая реализует
(0..5).map{...}
вместо этого:Попробуйте онлайн!
К сожалению, даже в этом случае
(1..1).map{...}
вы обнаружите, что эта программа чрезвычайно интенсивно использует память. Я имею в виду, длина вывода превышает такие вещи, как SCG (13).Используя более простую программу, мы можем рассмотреть несколько значений:
Попробуйте онлайн!
Он в основном печатает одну и ту же программу несколько раз, в формате:
где инициализированные
x
записи - порядковый номер, к которому относится программа, и"..."
удержания программ послеx
сокращения. Еслиx==0
, то печатаетэто программа, которая ничего не печатает с нулевым счетом, следовательно,
имеет оценку 1, и
имеет оценку 2, и
имеет 3 балла и т. д., и моя оригинальная программа печатает эти программы в формате
где
...
программы, перечисленные выше.Моя настоящая программа на самом деле печатает эти программы в формате
Бесконечно много раз, и для таких ценностей, как
ω
, он делает что-то похожее наИ, таким образом, оценка программы
есть
1+some_ordinal
, и оценкаесть
1+some_ordinal+1
, и оценкаесть
1+some_ordinal+2
.Объяснение ординалов:
f[a,n,b]
уменьшает порядковый номерa
.Каждое натуральное число сводится к натуральному числу под ним.
[c,0,e]
является преемникомc
, и это всегда сводится кc
.[c,d,e]
является обратной ассоциативной гипероперацией, сводится к следующему:[0]
является первым бесконечным порядковым числом (эквивалентным ω) и уменьшается следующим образом:[c]
порядковый номер омега ом и сокращается следующим образом:[c,d]
ψ d (c) и уменьшает следующим образом:[c,d,e,0]
в основном такой же, как[c,d,e]
, за исключением того, что перечисляет операцию[c]
вместо операции -преемника.источник
I
это ординал, который относится к первому недоступному кардиналу, так же, как ω относится к нулевому алефу.Java + Brainf ***, ω + 999180 баллов
Java-программа, которая производит бесконечно много программ Brainf ***, каждая из которых выдает последнюю в качестве вывода.
Зачем? Потому что я могу.
Любые улучшения в части поколения Brainf ***, безусловно, приветствуются.
источник
*
в качестве символа подстановки, поэтому просто введитеbrainf***
, илиbrainf
. Все эти варианты появляются в результатах поиска. codegolf.stackexchange.com/help/searchingГрамотный Хаскелл (GHC 7.10): ω² + 999686 баллов.
Это послужит примером ответа. Поскольку это пример, имеет смысл использовать только грамотное программирование . Это не будет хорошо, хотя. Птички уменьшат мой счет, ну да ладно. Во-первых, давайте сделаем вспомогательную функцию s. Если x - ординал, sx = x + 1, но мы находим неожиданное использование s.
К счастью, функция show выполняет всю очистку строк. Также стоит сделать 0. Ноль не является преемником чего-либо, но s "" будет равно "main = putStrLn" "", что равно 0.
Теперь мы сделаем функцию, которая принимает n и возвращает ω * n.
Это работает, делая ω * n с помощью {ω * (n-1), ω * (n-1) +1, ω * (n-1) +2, ...}. Что это за д? Почему, это причина, по которой у нас есть тег quine . q вышеупомянутые вспомогательные функции до сих пор.
Обратите внимание, что только по потребностям q, а не по любому из его преемников (s (o (n)), s (s (o (n)))), так как им не нужны вспомогательные функции (кроме косвенно из o n.) Теперь нам нужно вывести только ω * n для конечного n.
Вот и мы. ω ^ 2 Используя только 314 кодовых символов, я требую окончательный бонус 999686, что дает мне окончательный результат ω ^ 2 + 999686, который уже находится в обычной форме кантора.
Первые четыре строки вывода (0, ω, ω * 2, ω * 3):
источник
GolfScript, + 1 + 999537 баллов
Возможно, это может быть и лучше, но мне стало лень отлаживать и доказывать большие порядковые числа.
Меньшие ординалы
источник
Javascript (Нашорн), ω2 + 999807 баллов
Nashorn - это движок Javascript, встроенный в Java. Это может также работать в Rhino, но я еще не проверял это в этом.
источник