Представление десятичной дроби с двойной точностью может гарантировать точность только до 15 десятичных разрядов, таким образом, число пи приблизительно:
3.141592653589793
Вы можете видеть, что цифра 3
в позициях 1, 10, 16
, цифра 1
в позициях 2, 4
и т. Д.
Вызов
Ваша задача - создать программу или функцию, которая создает случайное двойное число от 0 до 1 и отображает значения этого числа на значение pi. Вы делаете это, помещая различные цифры в случайные числа в положение, которое цифра имеет в пи. Если цифра не найдена в pi, вы пропустите ее, и каждая цифра в pi, которой нет в случайном числе, будет представлена как x
. Каждое значение можно использовать только один раз, начиная слева.
Несколько примеров, вероятно, прояснят это. В следующих примерах первое число равно pi, второе - случайное число, а последнее - желаемое значение.
3.141592653589793
0.111111111111111
x.1x1xxxxxxxxxxxx
3.141592653589793
0.531000000000000
3.1xx5xxxxxxxxxxx
3.141592653589793
0.123456789123456
3.141592653x8x7xx
3.141592653589793
0.967552381459391
3.14159265358979x
Правила:
- Функция не должна принимать никаких входных данных (возможное исключение объяснено в пуле 3)
- Выходные данные должны состоять только из выходной строки с необязательным символом новой строки (также допускается один завершающий пробел)
- Если ваша программа не имеет встроенного значения Пи и / или ГСЧ, вы можете жестко закодировать Пи и принять случайное число в качестве входного. Вы не можете жестко закодировать случайное число или взять Pi в качестве ввода.
- И жестко запрограммированное значение для Pi, и 15 случайных цифр (вы можете пропустить,
0.
поскольку вы знаете, что оно будет между 0 и 1), будут включены в число байтов. - Если ваш язык не обладает необходимой точностью, вы можете использовать меньшую точность при следующих ограничениях
- Цифры Пи должны быть точными с точностью до вашей
- Вы не можете вывести больше значений, чем вы гарантированно получите правильно, т.е. вы не можете вывести 15 цифр, если точность допускает только 8 точных десятичных знаков.
- Значение Pi в жестком коде будет считаться 16 байтами (вам не требуется десятичная точка), даже если ваша программа поддерживает только 8 цифр.
- Входное значение для случайного числа будет считаться 15 байтами (вам не нужно
0.
. Это потому, что языки с низкой точностью не должны иметь несправедливого преимущества. - Программа должна поддерживать точность до 5 десятичных знаков (как минимум).
- Редактировать: для проверки ответа: случайное число должно быть напечатано каким-либо образом, но эта операция не должна быть включена в число байтов. Так, например, если есть возможность вставить
print r
в конец скрипта, эта часть не будет увеличивать счет. - Вы не можете вычесть байты, если это часть другой необходимой операции. Т.е. если код есть
print pi, r
, то можно только вычесть, r
. - Если вам нужно вставить части в нескольких местах кода, пожалуйста, включите обе версии (ту, которая печатает случайное число, и ту, которая не содержит комментариев, таких как:
_p
и_oNo
которые необходимы для печати случайного числа._p
Делает xxx и_oNo
делает гггг_p
и_oNo
не будут включены в число байтов.
Самый короткий код в байтах побеждает.
Leaderboard
Фрагмент стека в нижней части этого поста создает каталог из ответов а) в виде списка кратчайшего решения для каждого языка и б) в качестве общей таблицы лидеров.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
## Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш результат равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
## Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать имя языка ссылкой, которая будет отображаться во фрагменте кода:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
0 < random < 1
или0 <= random <= 1
?Ответы:
Pyth, 25 байт
Попробуйте онлайн: демонстрация или тест, показывающий случайное число
Объяснение:
источник
LabVIEW, 53 примитива LabVIEW
Я сопоставляю Strings и помещаю число в «пустую» строку x.xxx и удаляю число из pi, чтобы оно больше не отображалось.
случайное число и одиночные символы здесь видны, это нормально, или мне нужно повторить запись?
источник
Mathematica, 105 или 147 символов
Если случайное число « между 0 и 1» означает
0 <= random <= 1
, то есть включает 0 & 1.(105 символов)
В противном случае, взять случайное число « от 0 до 1», чтобы означать
0 < random < 1
.Цикл, чтобы получить 15 случайных целых чисел, а не все ноль. Выберите дополнение в диапазоне от 0 до 9, то есть те числа от 0 до 9, которых нет в случайном списке. Преобразуйте эти целые числа в строки и замените соответствующие символы в строке pi.
(147 знаков)
Случайные цифры: -
источник
True
это1>0
,RandomInteger
можно использовать инфиксное обозначение{0,9}~RandomInteger~15
. Вероятно, вы можете сохранить несколько байтов, задавr
некоторое значение и фактически используя условиеWhile
вместо использования «Break.
Тогда»For
может сохранить еще один байтWhile
. Хотя я не понимаю, зачем вам вообще нужен цикл, если вместо этого вы принимаете случайное число в диапазоне[0,1)
.1>0
:-)JavaScript (ES6),
8987 байтобъяснение
Редактировать: Случайная строка теперь не обрезается, как пояснил автор.
Перебирает каждую цифру числа Пи и удаляет цифру из случайного числа, если оно было найдено, иначе заменяет цифру в Пи на
x
.Тест
Тест выводит также случайное число.
Показать фрагмент кода
источник
Math.random()
производит ряд диапазона,[0,1)
так что он мог бы,0
но никогда1
. ОП конкретно не указывал, был ли диапазон инклюзивным или эксклюзивным, поэтому я предположил, что все, что было разумно, хорошо. Это также диапазон, который используют другие ответы. Однако вы дали мне понять, что если это именно так, то0
это не удастся, потому что.
in pi не будет совпадать и становитьсяx
. Это имеет шанс 1 к 2 ^ 53, но я все равно решил это исправить.[0,1]
как и в любом случае(0,1)
).CJam,
4846423836 байтПроверьте это здесь.
И вот версия, которая печатает и π и случайное число:
Проверьте это здесь.
Я не усекаю случайное число до 15 знаков после запятой, как пояснил ОП в комментарии.
объяснение
Идея состоит в том, чтобы превратить каждый символ в строковом представлении π в пару этого символа и
x
. Для каждого символа в случайном числе мы меняем первую пару, которая начинается с этого символа. В конце мы выводим второй символ каждой пары.источник
Lua,
231230 байтПояснения
К сожалению, Луа мне здесь совсем не помогает. math.pi вокруг последней цифры числа, которое он возвращает:
Я должен усечь это число:
Вторым по умолчанию решением этой проблемы было отсутствие lua в string.replace (). Поскольку я делаю это действие дважды
s:sub(1,l-1)..c..s:sub(l+1)
, я хотел сделать анонимную функцию, думая, что она будет короче. Это не так, поэтому я сохранил это дважды.Причина, по которой я должен быть осторожен с точкой, заключается в том, как Луа возвращает свою позицию. В регулярных выражениях точка означает «любой символ», поэтому, когда я оцениваю символ
.
в моем цикле, он соответствует первому символу:Вы можете проверить Луа онлайн . Так как я не загружаю PRNG, вот код, позволяющий вам выполнить несколько тестов, все еще наблюдая за значениями.
источник
Python 2.7,
117110 байтПротестировано на последнем Android-приложении QPython, но должно работать где угодно.
Редактировать 1: изменено
str(pi)
на галочки.Для тестирования:
источник
Python, 147 байт
Довольно понятно: лямбда-функция конвертирует float в список; Затем мы перебираем пи-список, пытаясь удалить каждую цифру из случайного списка. Если мы можем, хорошо, добавьте это к ответу; если нет, добавьте вместо этого «х».
источник
str(t)
дает только 11 цифр точностиt
,repr(t)
дает вам всеt
15 цифр.Perl, 70 байт
С комментариями:
Эта версия будет печатать пи, случайное число и результат:
Пример вывода:
Я надеюсь, что это нормально
9
) является точной.источник