Гольф трансцендентное число


46

Определения

  • Алгебраическое число - это число, которое является нулем ненулевого полинома с целыми коэффициентами. Например, квадратный корень из 2алгебраический, потому что это ноль x^2 - 2.
  • Трансцендентное число - это действительное число, которое не является алгебраическим.

задача

Вы должны выбрать трансцендентное число.

Затем напишите программу / функцию, которая принимает положительное целое число nи выводит nдесятую десятую цифру после десятичной запятой выбранного вами трансцендентного числа. Вы должны четко указать в своем представлении, какой трансцендентный номер используется.

Вы можете использовать 0-индексирование или 1-индексирование.

пример

e^2=7.389056098...это трансцендентное число. Для этого номера:

n output
1 3
2 8
3 9
4 0
5 5
6 6
7 0
8 9
9 8
...

Обратите внимание, что начальное значение 7игнорируется.

Как я уже упоминал выше, вы можете выбрать другие трансцендентные числа.

счет

Это . Самый низкий результат в байтах побеждает.


Как разные ответы обрабатывают тот факт, что существует конечное число целых чисел, которые можно использовать в качестве аргумента? 0 будет приемлемым ответом, поскольку существует трансцендентное число, первые цифры maxInteger которого равны 0
WNG

1
@WNG Языки имеют произвольную точность. Там нет maxinteger.
Утренняя монахиня

1
@WNG Вы можете рассматривать входной индекс как строку, а не как целое число, в языках, которые не имеют произвольно большого числа типов.
Исаак

Ответы:


112

Python , 3 байта

min

Попробуйте онлайн!

Принимает числовую строку, выводит ее наименьшую цифру как наименьший символ. Так , например, 254дает 2. Десятичное число с этими цифрами начинается

0.0123456789011111111101222222220123333333012344444401234555550123456666012345678801234567

Это OEIS A054054 .

Заявить: это число cтрансцендентное

Доказательство: обратите внимание, что cэто очень разреженный: почти все его цифры равны нулю. Это связано с тем n, что большая вероятность того n, что цифра равна нулю, равна нулю. Более того, cимеет длинные пробеги последовательных нулей. Мы используем существующий результат, который утверждает, что это средство cтрансцендентно.

После этого вопроса по математике давайте Z(k)представим положение kй ненулевой цифры c, и пусть c_kэта ненулевая цифра будет целым числом между 1и 9. Тогда мы выражаем разложение десятичного из c, но только с ненулевыми цифрами, а также на сумму свыше k=1,2,3,...из c_k/10^Z(k).

Мы используем результат пункта 4 этого ответа Джорджа Лоутера: это cтрансцендентно, если существует бесконечно много серий нулей, которые до сих пор составляют по крайней мере постоянную долю числа цифр. Формально должно быть ε>0так, что Z(k+1)/Z(k) > 1+εдля бесконечно многих k. Мы будем использоватьε=1/9

Для любого количества цифр d, возьмите kс Z(k) = 99...99с dдевятками. Такое kсуществует, потому что эта цифра в cявляется 9, и поэтому ненулевой. Считая 99...99, что все эти числа содержат нулевую цифру, поэтому она отмечает начало длинного ряда нулей в c. Следующая ненулевая цифра - только Z(k+1) = 1111...11с d+1единицами. Соотношение Z(k+1)/Z(k)немного превышает 1+1/9.

Это удовлетворяет условию для каждого d, подразумевая результат.


Я был бы очень рад увидеть доказательства.
Утренняя монахиня

1
Это разрешено? minсам по себе не принимает никакого ввода и не предоставляет никакого вывода, что, по-видимому, является требованием вопроса. Конечно, это ключевая функция в целом, но она ничего не делает без оператора генерации и печати, явного в «Попробуй онлайн».
Мачта

6
@Mast Да, проблема в том, чтобы вывести n-ую цифру, заданную n, а не генерировать десятичную дробь. Тестовый код должен показать последовательность цифр. И выражение, которое оценивает функцию, включая литерал функции, является допустимым представлением функции .
xnor

1
восхитительно :)))
Noodle9

38

Pyth, 1 байт

h

Вход и выход являются строками. Функция берет первую цифру индекса. Полученное трансцендентное число выглядит так:

0.0123456789111111111122222222223 ...

Это трансцендентно, потому что это 1/9плюс число, которое имеет отрезки нулей длины, по крайней мере, с постоянной долей числа. Основываясь на этом ответе math.stackexchange , это означает, что число трансцендентно.

Есть отрезки нулей от цифры 100 ... 000до 199 ... 999, поэтому отношение Z(k+1)к Z(k)равно 2 бесконечно часто.

Таким образом, указанное число минус 1/9является трансцендентным, и поэтому указанное число является трансцендентным.


1
Обратите внимание, что вопрос, заданный в связанном сообщении M.SE, не относится к этому номеру, но пункт 4 ответа Джорджа Лоутера относится.
Хеннинг

16

Python 2 , 19 байт

lambda n:1>>(n&~-n)

П - й цифра 1 , если п является степенью 2 и 0 в противном случае.

Попробуйте онлайн!


3
Я собирался ответить на это, но я не нашел доказательств его трансцендентности. Что заставляет вас верить, что это число трансцендентно? n&~-n>0короче кстати.
orlp



@ или я должен был бы спросить ОП, если логические значения в порядке.
Деннис

1
@ Scrooble Эти
Деннис

11

брейкфук, 2 байта

,.

Аналогично некоторым другим ответам, возвращает первую десятичную цифру и игнорирует остальные.



5

Сетчатка, 4 байта

1!`.

Возвращает первую цифру введенного номера. Поскольку этот порт был таким скучным, вот еще несколько портов:

O`.
1!`.

(8 байт) Возвращает минимальную цифру введенного номера.

.+
$*
+`^(11)+$
$#1$*
^1$

(25 байтов) Возвращает 1, если входное число является степенью 2.

.+
$*_

$.`
+1`.(\d*)_
$1
1!`.

(30 байт) константа Шампернаун.


4

Brachylog 2, 7 байт

⟦₁c;?∋₎

Попробуйте онлайн!

Вычисляет цифры константы Champernowne (возможно, умножить на десять из-за проблем с индексацией, которые здесь явно не имеют значения). По сути, это просто объединяет целые числа, а затем принимает n-ую цифру.


Зачем вам нужен ⟦₁?
Утренняя монахиня

@LeakyNun: Потому что в противном случае мы начали бы объединять числа с 0, и вы не можете сделать это, потому что 0123это не число (оно имеет начальный ноль, что не вписывается в концепцию Брахилога о том, что такое число).

4

Python 2, 13 байт

Вход и выход являются строками.

lambda n:n[0]

Цифра n числа является самой значимой цифрой n, когда она записана в десятичном виде.


4
Вы должны указать, почему это число трансцендентно.
orlp

2
@orlp Похоже, что ссылка xnor может быть легко применена и здесь - вычтите 1/9 из числа, а затем Z (n + 1) / Z (n) ~ = 2 бесконечно часто (между 10 ^ x и 2 * 10 ^ x ).
feersum

4

MATL , 7 байт

4YA50<A

Здесь используется первое из двух приведенных здесь чисел, разделенных на 3 (что поддерживает трансцендентность ):

+1,100110000000000110011 ...

Вход основан на 1. Попробуйте онлайн! Или посмотрите первые 20 десятичных знаков .

объяснение

4YA     % Convert to base 4 using chars '0', '1', '2', '3' as digits
50<A    % Are all digits less than '2'? Gives 0 (false) or 1 (true) 

3

JavaScript, 51 байт

Эта функция вычисляет nth цифру константы Champernowne. Добавить f=в начале и вызвать как f(arg). Обратите внимание, что n1-индексированный.

n=>[..."1".repeat(n)].map((c,i)=>c*++i).join``[n-1]

объяснение

Эта функция принимает один аргумент n. Затем он создает nстроку -characters long из повторяющихся единиц. Затем он разбивает эту строку на массив единиц. После этого он перебирает каждый элемент массива и умножает их на их индекс в массиве, увеличенный на 1. Затем он объединяет массив ""(пустая строка) для формирования строки. Наконец, он возвращает nth-й элемент полученной String.

Примечание . Тип возвращаемого значения всегда String .

Тестовый фрагмент

let f =

n=>[..."1".repeat(n)].map((c,i)=>c*++i).join``[n-1]

i.oninput = e => o.innerHTML = f(parseInt(e.target.value,10));
<input id=i><pre id=o></pre>


3

Python 2, 43 байта

Константа чемпиона.

lambda n:"".join(`i`for i in range(n+1))[n]

Зачем вам нужен n+1?
Утренняя монахиня

@LeakyNun Потому что еще я получаю ошибки индексации для n <= 1.
orlp

Вы можете использовать 1-индексирование.
Утренняя монахиня

@LeakyNun n <= 1.
orlp

Я думаю, вам нужно указать Python 2 для этого.
Numbermaniac

3

APL (Дьялог) , 3 байта

2|⍴

Попробуйте онлайн! (набор тестов генерирует диапазон чисел от 1до 10000, преобразует их в строку, а затем применяет к 2|⍴ним последовательность ).

Принимает входной номер в виде строки и возвращает его длину mod 2. Так 123=> 3 mod 2=> 1.

Последовательность начинается примерно так:

1  1  1  1  1  1  1  1  1  0  0  0  0  0  0  ...

так что это можно обобщить так: 9 1s 90 0s 900 1s ...

Умножение этого числа на 9 дает нам число Лиувилля , которое, как доказывают, является трансцендентным.


Я не думаю, что это обязательно число Лиувилля - для меня не очевидно, что вы можете получить n> 10. Это действительно соответствует более сильной теореме, которую использовали другие люди здесь, все же.
Орджан Йохансен

@ ØrjanJohansen Вы можете выразить это как 1 - 10^-9 + 10^-99 - 10^-999 + 10^-9999 - 10^-99999 + ..., так что это число Лиувилля.
Утренняя монахиня

@LeakyNun Доля последовательных показателей составляет приблизительно 10, но чтобы соответствовать определению в Википедии, она должна быть неограниченной - поэтому в 1-индексе исходной константы Лиувилля используется факториал, а не экспонента.
Орьян Йохансен,

3

Haskell, 25 байтов 17 байтов

(!!)$concat$map show[1..]

Константа Champernowne может быть равна 0 или 1, поскольку C10 * .01 все еще трансцендентен.

Редактировать: согласно комментарию Nimis вы можете использовать монаду списка, чтобы уменьшить это до

(!!)$show=<<[1..]

2
=<<из списка монады concat.map: (!!)$show=<<[1..].
Ними,

2

JavaScript, 73 байта

Это программа, которая вычисляет nдесятую цифру константы Лиувилля, где nэто число ввода, заданное вызовом функции gкак g(arg)nиндексированное 1). Обратите внимание, что новая строка в коде необходима.

f=n=>n<1?1:n*f(n-1);g=(n,r=0)=>{for(i=0;i<=n;i++)if(f(i)==n)r=1
return r}

объяснение

Программа состоит из двух функций, fи g. fявляется рекурсивной факториально-вычислительной функцией и gявляется основной функцией программы. g предполагает наличие единственного аргумента n. Он определяет аргумент по умолчанию rсо значением 0. Затем он перебирает все целые числа от 0 до nи на каждой итерации проверяет, равна ли функция, fпримененная к i(текущий индекс) n, т. Е. nЯвляется ли она факториалом i. Если это так, rзначение устанавливается равным 1. В конце функции rвозвращается значение.

Фрагмент для тестирования

f=n=>n<1?1:n*f(n-1);g=(n,r=0)=>{for(i=0;i<=n;i++)if(f(i)==n)r=1
return r}

i.oninput = e => o.innerHTML = g(parseInt(e.target.value,10))
<input id=i><pre id=o></pre>

Предупреждение: не помещайте очень большое значение в поле ввода Сниппета! В противном случае ваше устройство может зависнуть!


1

Pyth, 7 5 4 байта

@jkS

Попробуйте онлайн!

Использует константу Champernowne.

Сохранено 2 3 байта благодаря Leaky Nun.


1
Вы можете использовать, jkчтобы заменить sm`d, я считаю.
Дрянная Монахиня

1
Вы можете использовать Sвместо Uh?
Утренняя монахиня

Я думаю, что они функционально идентичны, так что да. Я полностью прочитал документы>.>
хлопать

Они не идентичны по функциональности. Sначинается с 1и Uначинается с 0.
Дрянная Монахиня

Почему вы отменили свою правку? Полученное число все еще трансцендентно.
Утренняя монахиня



1

Древесный уголь , 24 байта (неконкурентный)

NαAIUVN⟦UGPi⁺α¹⟧β§β⁺α›α⁰

Попробуйте онлайн!

Примечание: по состоянию на время поста, не работает, nгде nположительное значение, кратное 14.

объяснение

Nα                             Input number to a
   A                  β        Assign to b
     I                         Cast
       UVN                    Evaluate variable N
            ⟦UGPi⁺α¹⟧         With arguments GetVariable(Pi) and a+1
                        §β⁺α›α⁰ Print b[a+(a>0)]

GetVariable(Pi)? Итак, нет πпредопределенной переменной?
Нейл

@Neil Пока нет, и я не собираюсь πравняться пи, потому что это ASCII-ориентированный язык, а не математический
только ASCII

1

Japt , 3 1 + 1 = 2 1 байт

Еще один порт решения Feersum .

Принимает ввод в виде строки.

g

Попробуйте онлайн


объяснение

   :Implicit input of string U
g  :The first character of the string

Ввод может быть строкой, поэтому вы можете сделать gдля 1 байта :)
Оливер

В задаче не упоминается строковый ввод @obarakon, поэтому я использовал целые числа в своих портах JS, а затем, в свою очередь, здесь.
Лохматый

Ах, понял. Многие другие ответы использовали строковые входы. Но вы правы, ОП не упомянул об этом в конкурсе.
Оливер

1

TI-BASIC, 16 байтов

В основном проверяет, является ли вход N(1-индексированный) треугольным числом. Это то же самое, что возвращать Nth-ю цифру 0.1010010001…, которая оказалась трансцендентной. Последовательность цифр OEIS A010054 .

Input N
int(√(2N
2N=Ans(Ans+1


0

JavaScript (ES6)

Просто несколько портов некоторых других решений


Python-решение feersum , 12 байт

n=>(""+n)[0]


Python-решение Дениса , 13 байт

n=>1>>(n&--n)


Python-решение xnor , 20 байт

n=>Math.min(...""+n)



0

05AB1E , 3 1 байт

РЕДАКТИРОВАТЬ : Используя доказательство из других ответов, возвращает первую цифру ввода

¬

1 индексируется для π (только до 100000 цифр)

žs¤

Как это устроено

žs  # Implicit input. Gets n digits of pi (including 3 before decimal)
  ¤ # Get last digit

Или, если вы предпочитаете e (все еще с 1 индексом) (только до 10000 цифр)

žt¤

Попробуйте онлайн!


0

J, 2 байта

То же решение, которое используют все остальные:

{.

Возвращает первую цифру n. IO на струнах

Константа Лиувилля, 9 байт

(=<.)!inv

Возвращает, 1если input является факториалом целого числа.

Пи, 13 байт

{:":<.@o.10x^

Последняя не десятичная цифра пи умножается на 10 ^ n.





Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.