Выведите один случайный символ для каждого символа исходного кода (как показано ниже). Вероятность каждого символа - это его частота в исходном коде. Таким образом, результатом будет поддельный исходный код, напоминающий квинну.
Спецификация
- ограничения
- Применяются стандартные ограничения по квине . Нет пустых программ или функций. Также нет чтения вашего собственного источника.
- Выход
- Количество выводимых символов должно соответствовать количеству символов в исходном коде.
- Каждый выходной символ должен быть выбран случайным образом
- Вероятность выбора любого персонажа равна
(occurrences in source) / (length of source)
- Это означает, что даже унарное решение должно «случайно» выбирать 1с вероятностью
1
. То есть, результат не может быть жестко закодирован.
- выигрыш
- Это код гольф, поэтому побеждает меньше байтов
пример
Program Frequency Probability Possible Output
------- --------- ----------- ---------------
a@!@ a - 1 a - 25% @@a@
! - 1 ! - 25%
@ - 2 @ - 50%
Program Frequency Probability Possible Output
------- --------- ----------- ---------------
caBaDBcDaBDB a - 3 a - 25% aaaBBBBccDDD
B - 4 B - 33%
c - 2 c - 17%
D - 3 D - 25%
Ответы:
CJam , 14 байтов
Попробуйте онлайн!
объяснение
Каждый символ появляется ровно дважды, поэтому вероятности символов должны быть одинаковыми.
источник
Желе , 13 байт
Попробуйте онлайн!
Как это работает
источник
Perl, 59 байт
Я использовал существующую квину в качестве основы и изменил ее для печати случайных символов из исходного содержимого.
использование
Сохранить как
faux-source-code.pl
и запустить с помощью:Создает что-то вроде следующего:
В кратком тесте ~ 3% результатов программы
eval
успешно. Я не уверен, что это говорит о Perl ...источник
eval
! Хороший! ;-)'
илиq//
, иq{}
т. Д.)!Japt , 22 байта
Проверьте это онлайн!
Как это работает
источник
Pyth, 16 байт
попробуйте это онлайн!
Содержит каждый символ дважды, поэтому вероятность такая же, как если бы каждый был там только один раз.
источник
PHP,
71140110124140120 байтбежать с
php -d
ord
(такая же вероятность, как если бы я удвоил строку и добавил две кавычки);
Может быть, дальше играть в гольф, но мои попытки на eval, где пока что бесполезны.
Я, вероятно, не буду здесь углубляться.
источник
The probability of each character is its frequency in the original source code.
Я могу ошибаться, но, похоже, эта запись не соответствует этому требованию.syntax error, unexpected '<'
. Но я не знаком с PHP, как мне это проверить?php
илиphp-cgi
без каких-либо флагов. Может быть, вы можете использовать heredoc.<?
для использования с-d
.Python 2, 88 байт
Вся реальная заслуга в этом далеко идет до mbomb007 - спасибо за вашу помощь (и указатель на обратную косую черту)
источник
n
символы), вам необходимо напечататьn
случайные символы. Где вероятностьc
выбора символа равна(number of times c occurs in your solution) / n
.exec("""s = 'from random import choice; print "".join([choice(s) for c in s])'; exec(s)""")
join
.s='''from random import*;print"".join(choice(s)for c in s+"s='';''exec s''")''';exec s
. Хотел бы я подумать об этом.Рубин, 47 байтов
Это основано на стандартной
eval
квине:Это на байт длиннее самой короткой квин, но обычно это лучший выбор для обобщенных квин, потому что любые вычисления, выполняемые для строки исходного кода, не должны дублироваться. В то время как в обычной квине все дополнительные вычисления должны проходить как внутри, так и снаружи главной строки, они нужны только внутри основной строки для этого вида квин.
Что касается того, что код на самом деле делает: после получения строки, представляющей весь исходный код, мы просто выбираем случайный символ (путем выбора случайного индекса) 47 раз и печатаем каждый символ отдельно.
источник
Wolfram Language / Mathematica, 109 байт
образец вывода:
Ох уж эти квадратные скобки.
источник
Желе, 44 байта
Я надеюсь, что я правильно истолковал все правила (я не совсем уверен, что означает «переносить полезную нагрузку» в мета или даже имеет ли это отношение к этой проблеме).
Проверьте это на TryItOnline
Это создает строку для выбора символов. Исходная строка содержит все используемые символы, кроме открытых и закрытых кавычек. Затем он удваивает эту строку и объединяет одну из каждой открытой и закрывающей кавычек из ординалов (отсюда и необходимость удваивать другие символы). Наконец, он многократно выбирает случайные символы из составленной строки по длине программы.
источник
Пайк, 35 байт
Попробуй это здесь!
Для проверки: удалите финальную
H
строку, и полученная строка содержит правильное число каждого символа (с дополнительнымH
)Это НЕ использует обобщенную квин или фактически квин. Он основан на возможности создать строку, содержащую все символы в источнике. Это должно быть в состоянии сделать это для любого кода, но каждый символ логарифмически увеличивает размер кода. Единственное число раз, когда символ допускается в источнике - 2 или 7
источник
Рубин,
8167 байтСпасла кучу байтов, украдя некоторые уловки из решения Мартина
Я не осознавал, что вы должны были выбирать случайным образом каждый раз; Я думал, что шаффл поможет. Это, вероятно, можно сыграть в гольф, но это самое короткое, что я мог получить.
Стандартный Ruby Quine с несколькими модификациями, поэтому он выводит перемешанную строку. Мне грустно, потому что потребовалось минут пятнадцать, чтобы выяснить причуды форматирования, прежде чем я понял, что я все равно подсознательно краду это.
Я думаю, что перестановка строк может быть сокращена, но я не знаю как; Я также мог бы сделать форматирование короче, если немного подумать. Помощь будет оценена.
Попробуйте онлайн!
источник
64.times{$><<"64.times{$><<.inspect[rand 32]}".inspect[rand 32]}
eval r="47.times{$><<('eval r=%p'%r)[rand 47]}"
C 125 байтов
C, 60 байтов для игры в гольф, но не код quine, берущий любую строку
Хотя для подсчета символов моему решению понадобилось 86:
источник
f
принимает строку и печатает на стандартный вывод: строка может быть любой последовательностью символов.rand()%LENGTH_OF_STRING
принимает символ в соответствии с вероятностью этого символа с нормальным распределением, предоставленнымrand()
. Возможно, я не понимаюquine
подход для C ....s
просто нужно содержатьchar*s="";
. Я думаю, что-то подобноеchar*s="char*s=l,i;f(){l=i=strlen(s);while(i--)putchar(s[rand()%l]);};+''"+'""'
сделало бы это (но я не знаком с C).JavaScript, 128 байт
Примечание: работает только в Firefox из-за использования
uneval
.Образцы прогонов:
источник
gtraoan
что почти стон, я думаю ..."
вероятность появления?Python 3,
134132 байтаЯ использую каждый символ в моем исходном коде в строке правильное количество раз, затем умножаю строку на два, чтобы включить себя. Программа печатает случайный символ из этой строки для каждого символа в коде (длина жестко задана).
Попробуйте онлайн
Я избегал обратных ударов, как чума. Как только код содержит
\n
или\"
, у вас возникает проблема, потому что строка еще не содержит обратные слэши, поэтому вы должны добавить их также, но в отдельной строке, умноженной на большее число, потому что для представления одного требуется два обратных слеша. (\\
).Пример вывода:
Должен сказать, это напоминает мне о FlogScript.
источник
PowerShell v2 +, 175 байт
Quines в PowerShell сосет, потому что замены строк разделители
{}
также обозначают петлю и этажерки, так что вам нужно использовать связку изchar
й в-f
операторе, который раздувает код.Похоже на мой ответ Quine on Every Line . По сути, мы выполняем цикл от
0
до174
и каждая итерация пересчитывает квинну, преобразует$d
ее какchar
-array и извлекаетRandom
элемент, выбранный равномерно из входных данных. По определению, это дает вероятность по(occurrences in source) / (length of source)
мере необходимости. Эти символы заключены в скобки и-join
объединены обратно в строку.пример
(Да, это
char
новая строка в выходных данных - когда строка, содержащая новую строку, является -array'd,`n
она обрабатывается как символ, так какchar
-array - это просто массив байтовых кодов, поэтому он также имеет 1/175. шанс быть выбранным.)источник
Dyalog APL , 20 байтов
f←{
...}
определить f как(,⎕CR'f')
listified (,
) С haracter (таблица) R epresentation (⎕CR
) из F ('f'
)[?⍴⍨20]
индексируется с помощью ([
...]
) random-up-to (?
) repeat -self-times (⍴⍨
) из двадцатиДавайте запустим его (с фиктивным аргументом) несколько раз:
Хорошо, но правильное ли распределение? Давайте запустим его на 10000 фиктивных аргументов и посмотрим, сколько раз встречается каждый символ:
Ясно
f
и'
встречаются в два раза чаще других символов, как в оригинальном исходном коде.Как мы это сделали?
⍳1E4
генерирует первые 10000 целыхf¨
работает е на каждом из этих чисел∊
сплющивает все псевдохинусы в одну строку из 200 000 символов⌸
является функцией высшего порядка, которая для каждого уникального символа в данных правой части передает функции левой стороны уникальный элемент в качестве левого аргумента и индексы, где этот символ встречается в качестве правого аргумента. Функция левой стороны⍺
левый аргумент, то есть уникальный символ,
с последующим1E¯4×
1 × 10⁻⁴ раз⍴⍵
форма правого аргумента (индексы появления), т.е. сколько раз это происходитНаконец,
⌸
все это складывается в таблицу.источник
C #
277280268 байт.Ungolfed:
Уверен, это работает правильно.
Пример вывода:
источник
(new Random()).Next(0,134)]
? Это сэкономило бы пару байтов.C 136 байтов
Пример вывода:
Эта программа выводит 136 символов случайным образом.
Весь исходный код (без «кавычек») содержится в строке. Программа определяет вероятность вывода кавычки как 2/136, в противном случае один из остальных 67 символов выводится случайным образом.
Есть два вхождения каждого символа в строке в программе. Вероятность вывода символа из строки составляет 134/136. Вероятность выбора конкретного символа в строке составляет 1/67. Таким образом, вероятность вывода символа в строке составляет 134/136 * 1/67 = 2/136. Есть два вхождения каждого строкового символа в программе, поэтому существует вероятность 1/136 вывода символа для каждого вхождения в программе.
Порядок символов внутри строки не имеет значения.
источник