Обновления: ограничение по времени снято. Вы должны быть в состоянии описать вывод - см. Новое правило.
Панграмма является предложением , которое использует каждую букву в алфавите , по крайней мере один раз, такие как:
Идеально панграмма использует каждую букву только один раз.
Подумайте о том, чтобы написать программу, которая является идеальной панграммой, используя в качестве алфавита 95 печатных символов ASCII (шестнадцатеричные коды от 20 до 7E):
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Такая программа должна содержать ровно 95 символов, причем каждый печатный символ ASCII встречается ровно один раз, но в любом порядке. (Таким образом, существует 95! = 1,03 × 10 148 возможностей.)
Ваша задача состоит в том, чтобы написать эту программу так, чтобы количество печатаемых символов ASCII, печатаемых на стандартный вывод, было как можно выше (т.е. плодовитым).
Ваша оценка - это количество печатаемых символов ASCII, которые выводит ваша программа ( общая сумма, а не отдельная сумма: AABC
баллы 4, тогда как ABC
баллы 3) . Самый высокий балл побеждает.
Детали
- Вывод может содержать любые символы (включая дубликаты), но только экземпляры из 95 печатных символов ASCII засчитываются в ваш счет.
- Вы можете использовать этот JSFiddle для подсчета количества печатных символов ASCII в любой строке.
- Если у вашего языка нет стандартного вывода, используйте наиболее подходящую альтернативу.
- Ваша программа ...
- должно иметь конечное время выполнения (ограничение по времени было снято)
- должен иметь конечный вывод
- может содержать комментарии
- должен компилироваться и запускаться без ошибок
- не должен запрашивать или требовать ввода
- должен быть инвариантным по времени и детерминированным
- не должен использовать внешние библиотеки
- не должен требовать подключения к сети
- не должен использовать внешние файлы
- (вы можете использовать сам файл программы, если изменение имени файла не влияет на поведение программы)
- Если эта задача невозможна, это какой-то язык, который слишком плох.
- Вы должны дать свой точный вывод или точно описать его, если он слишком велик, чтобы поместиться в посте . Вы на самом деле не должны запускать вашу программу. До тех пор, пока он будет работать за ограниченное время на компьютере с неограниченным объемом памяти, он действителен.
пример
Эта упрощенная программа на Python 2 является возможным решением:
print 9876543210#!"$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghjklmoqsuvwxyz{|}~
Он выводит, 9876543210
который содержит 10 печатных символов ASCII, получая при этом 10.
источник
a
шесть квадриллионов раз, когда даже невозможно получить точный верхний предел количество символов Во всяком случае, я все еще горжусь своими 95, даже если это немного. Знаете, размер - это еще не все.Ответы:
GolfScript, более 2 ↑↑↑ (9871 ↑↑ 2) символов
Печатает целое число Воспользуйтесь неограниченным размером регистра ЦП (который определяет максимальную длину строки в Ruby), памятью и временем выполнения. Перевод строки предназначен исключительно для удобства чтения.
Код
Результат
Определите b = 9871 ↑↑ 2 (см. Обозначение Кнута со стрелкой вверх ).
.? выполняет f: x ↦ x ↑ x .
Внутренний блок выполняет g: x ↦ f x (x) .
Поскольку f (x) = x ↑ x = x, 2 , f 2 (x) = (x ↑ x) ↑ (x ↑ x)> x ↑ x ↑ x = x ↑↑ 3 ,
f 3 (x) = ((x ↑ x) ↑ (x ↑ x)) ↑ ((x ↑ x) ↑ (x ↑ x))> (x ↑ x ↑ x) ↑ (x ↑ x ↑ x)> x ↑ x ↑ x ↑ x = x ↑↑ 4 и так далее, мы имеем
g (x)> x ↑↑ (x + 1)> x ↑↑ x .
Внешний блок выполняет h: x ↦ g b (x) .
Поскольку g (x) = x ↑↑ x = x ↑↑↑ 2 , g 2 (x) = (x ↑↑ x) ↑↑ (x ↑↑ x)> x ↑↑ x ↑↑ x = x ↑↑↑ 3 ,
g 3 (x) = ((x ↑↑ x) ↑↑ (x ↑↑ x)) ↑↑ ((x ↑↑ x) ↑↑ (x ↑↑ x))> (x ↑↑ x ↑↑ x) ↑ (x ↑↑ x ↑↑ x)> x ↑↑ x ↑↑ x ↑↑ x = x ↑↑↑ 4 и т. д., h (x)> x ↑↑↑ (b + 1) .
Мы начинаем с целого числа 2 в стеке, поэтому код вычисляет h (2)> 2 ↑↑↑ (b + 1).
Счет - это число десятичных цифр h (2) , которое равно log (h (2)) + 1> log (2 ↑↑↑ (b + 1))> 2 ↑↑↑ b .
Таким образом, оценка превышает 2 ↑↑↑ (9871 ↑↑ 2) .
2 ↑↑↑ n растет с нелепой скоростью, когда n становится больше. 2 ↑↑↑ 4: = 2 ↑↑ 2 ↑↑ 2 ↑↑ 2 = 2 ↑↑ 2 ↑↑ 4 = 2 ↑↑ 65536 , что является правоассоциативной энергетической башней из 65536 экземпляров 2 :
Точно так же 2 ↑↑↑ 5: = 2 ↑↑ (2 ↑↑↑ 4) , который является силовой башней 2 copies 4 копии 2 .
Теперь счет не 2 ↑↑↑ 4 или 2 ↑↑↑ 5 , он больше 2 ↑↑↑ b , где b> 2 × 10 39 428 . Это большое число ...
источник
in `*': bignum too big to convert into `long' (RangeError)
.Perl, 70 * 18446744073709551615 * 10 ^ 987654320
Выход:
повторяется 18446744073709551615 * 10 ^ 987654320 раз.
$[
по умолчанию0
, поэтому~$[
эквивалентно18446744073709551615
.Как примечание, у меня не хватило памяти, пытаясь создать номер
10^987654320
.Старый ответ (7703703696):
Выход:
повторяется 98765432 раза.
Примечание: запустить все образцы с
perl -Mbignum -E
источник
perl -E'say qw{m}x(9876543210*ord$")'
Bash + coreutils, 151 888 888 888 888 905 (1,5 * 10 ^ 17)
Выводит целые числа от 1 до 9x10 15 , по одному на строку. Занимает много времени.
Почему
9E15
? Оказывается, что GNU,seq
похоже, использует внутренне 64-битные числа с плавающей точкой (double). Самое большое целое число, которое мы можем представить этим типом, до того, как приращение на единицу перестанет работать из-за недостатка точности, равно 2 53 или 9007199254740992. Самое близкое к этому значение с экспоненциальной нотацией - 9E15 или 9000000000000000.Чтобы рассчитать счет, я использую сложение всех чисел с заданным количеством цифр и добавление 9E15, потому что между каждым числом есть новая строка:
Я мог бы перенаправить этот вывод
od
на дополнительный порядок или около того, но это усложняет вычисление баллов.Ответ перед изменением правила:
Bash + coreutils, 18 926 221 380
Выводы с 1 по 1592346780. На моем macbook середины 2012 года (который не так уж далек от связанного теста) это занимает около 9м45 с.
Я не мог удержаться, чтобы оптимизировать его немного больше, хотя это, вероятно, бессмысленно.
Выход:
источник
seq 9876543210;
?9876543210
. Вы можете прочитать новое последнее правило.GolfScript, ≈ 3 * 10 ^ (2 * 10 ^ 7), т.е. ≈ 3x10 20000000
Как это работает
Вот
X
количество символов (длина) строкового представления массива,[0, 1, 2..,(87^9654321) - 1]
которое будет[0 1 2 3 4 ... (87^9654321) - 1]
Я пытаюсь рассчитатьX
здесь, чтобы найти свой счет.(87^9654321) - 1
примерно10^(10^7.272415829713899)
с18724742
десятичными цифрами.X
примерно3*10^(2*10^7)
такX*X
же и только то же самое. Обратите внимание, что эти значения находятся на очень низкой стороне, так как из-за вычислительных ограничений (даже) вольфрамы , я не смог вычислить,sum (floor(log10(x)) + 1) for x = 1 to (87^9654321 - 1)
что является истинным значениемX
источник
87 9654321?
является справедливымInfinity
.2**(2**64)-1
для 64-битного Ruby.МАТЛАБ, 95
Код
Выход
Вывод содержит все указанные символы ASCII, каждый ровно один раз и по порядку.
источник
Руби, 89
Выход:
Содержит все символы ASCII , за исключением,
p
,,
%
,q
,{
, и}
.источник
GolfScript, 93
Выход:
Содержит все символы ASCII, кроме
"
и'
.источник
"
ни того,'
ни другого.#
его из текущей позиции и добавьте#"'
в конец. Счет уменьшится на один, хотя.Гольфскрипт - 27 * 2 6543 9870
Это моя первая подача Golfscript! :)
Объяснение:
Вывод представляет собой загрузку списков чисел. Рассмотрим следующий код:
С
12,
его помощью выдает следующий массив:Обратный удар превращает это в строку, передавая ее блоку
{.+}
. Это дублирует строку и затем объединяет два, производя:1*
Говорит интерпретатор для выполнения в предыдущий раз один блок (2 1 = 2).Итак, исходя из этого:
Выводит на выходе
12,`
2 n раз.источник