- 20, Oct 2024
- #1
Фон
числа Гёделя — это способ кодирования любой строки уникальным положительным целым числом с использованием простых факторизаций:
Во-первых, каждому символу алфавита присваивается заранее определенный целочисленный код.
Затем, чтобы закодировать строку \$ x_1 x_2 x_3 \ldots x_n \$, где каждый \$ x_i \$ представляет собой целочисленный код символа, результирующее число равно
$$ \prod_{i=1}^n p_i^{x_i} = 2^{x_1} \cdot 3^{x_2} \cdot 5^{x_3} \cdot \ldots \cdot p_n^{x_n} $$
где \$ p_i \$ представляет собой \$ i \$-е простое число. Согласно фундаментальной теореме арифметики, это гарантированно дает уникальное представление.
В этой задаче мы будем рассматривать только строки, состоящие из символов, которые Гёдель изначально использовал для своих формул, и использовать их значения, а именно:
-
Input Output "" 1 "A" 512 "~s0" 4320 "0A0" 196830 ")(" 1451188224 "sssss0" 160243083000 "~(~0|~s0)" 42214303957706770300186902604046689348928700000 "0s~|A()" 5816705571109335207673649552794052292778133868750
-
0
: 3 -
s
: 5 -
~
: 7 -
~s0
: 9 -
0s~|A()
: 11 -
A
: 13
...хотя для простоты символы |
, ~
, и ∀
can be replaced by the ASCII symbols ∨
, ¬
, and )
соответственно.
(Я не знаю, почему Гёдель использовал для них только нечетные числа, но это то, что он назначил, поэтому мы придерживаемся этого)
Испытание
Учитывая строку, состоящую только из приведенных выше символов, выведите ее кодировку Гёделя как целое число.
Вы можете предположить, что ввод будет состоять только из символов в наборе. (
.
Пример
Для строки ∀
:
- начнем с \$ 1 \$, мультипликативное тождество
- первый персонаж
∨
has code \$ 5 \$; the 1st prime is \$ 2 \$, so multiply by \$ 2 ^ 5 \$; the running product is \$ 32 \$ - 2-й персонаж
¬
has code \$ 3 \$; the 2nd prime is \$ 3 \$, so multiply by \$ 3 ^ 3 \$; the running product is \$ 864 \$ - третий персонаж
s
has code \$ 1 \$; the 3rd prime is \$ 5 \$, so multiply by \$ 5 ^ 1 \$; the running product is \$ 4320 \$ - поэтому окончательный ответ — \$4320\$
Тест-кейсы
0
Правила
- Ваша программа не обязательно должна работать со строками, которые будут выдавать большие целые числа, чем может обрабатывать ваш язык программирования, но теоретически она должна работать.
- Вы можете принять входные данные в виде строки, списка символов или списка кодовых точек.
- Вы можете использовать любой разумный метод ввода-вывода
- Стандартные лазейки запрещены
- Это так, поэтому побеждает самый короткий код в байтах
#код-гольф #код-гольф #строка #теория чисел #целое число #простые числа