Мы все слышали о тестировании компиляторов с использованием случайно сгенерированных входных данных. Ваша задача - написать программу для создания допустимой программы (в том числе без неопределенного поведения) на вашем любимом языке. Язык генерирующей программы не обязательно должен совпадать с языком генерируемой программы.
Ваша программа получит целое число в качестве аргумента, который вы можете использовать в качестве начального числа для генератора случайных чисел. Сгенерированные программы должны быть структурно различными (учитывая разные начальные значения), а не просто разными именами или константами.
Примеры:
$ ./generate 1
int main() { return 0; }
$ ./generate 2
#include <math.h>
int main() { return (int) pow(4, 3); }
Пожалуйста, включите несколько выходов в ваши ответы.
Самое короткое решение побеждает. Я дам небольшой бонус в зависимости от количества голосов, поэтому, пожалуйста, голосуйте за самые креативные решения.
источник
main(seed) { return 4; // Chosen by dice roll - Guaranteed to be random }
СправкаОтветы:
Python → Brainf * ck (185
223233255285287303символов)Код
math.ceil
(это не обязательно).Примеры
Фактическое выяснение того, что делают полученные BF-программы , оставлено читателю в качестве упражнения.
источник
if o: s+=0(NL)else: s+='['+b()+']'
Питон -> Пит,
385345 символовС этим можно создать любую программу Piet. Я мог бы просто остановиться на случайных пикселях, но я хотел делать «интересные» программы. Функция
m
закрашивает пиксель цветом и рекурсивно входит в каждый из соседних пикселей. Есть лучшие способы рисовать случайные капли, но они настроены так, чтобы заканчиваться за разумное количество шагов, так что этого достаточно для игры в гольф. ФункцияR(w,h,n)
рисует n случайных объектов на белом ( w x h ) изображении и печатает результат в формате PPM.Я особенно горжусь тем, как я генерирую цвета - для случайного выбора
0 <= c < 20
,является десятичным кодом для допустимого цвета в палитре Пита с помощью однотрекового кода Грея . То есть каждый цвет представлен 3 смежными битами, а каждый срез
'0003...0'[c:c+3]
представляет свой цвет. Поскольку это не полный список из 27 слов на 3 буквы, мне очень повезло с поиском кода Грея.Пример вывода, сгенерированный командой
R(30,40,500)
Без импорта я могу написать его как правильный (без точки с запятой) 1-строчный:
но это смехотворно медленно (и почти на 100 символов длиннее) ... хотя я не совсем уверен, почему (и не очень склонен это выяснить).
источник
Питон -> Питон, 135 символов
Создает небольшие оценки случайных выражений, например:
источник
Python -> HQ9 +: 108 символов
источник
PHP, 352 символа
Генерирует код PHP на PHP.
Я решил, что мне не важна длина, но вместо этого хотел интересный и разнообразный набор решений. Это мой ответ на это.
Код
Ungolfed
пример
источник
scala: 1543 (scala => scala)
У меня есть переменные (x, y, z), функции (mul, add, neg, abs), значения и сбалансированные скобки.
Как видите, это не очень гольф. Потому что это не приблизит меня к другим решениям, но проблема в том, что больше вариантов стоит дороже. Например, 3 переменные, 4 функции можно легко сократить до двух.
Генерация некоторых образцов:
Тестирование самого длинного:
res6: Int = -5425
источник
Perl -> оболочка: 66 символов
Возможно, немного не по теме, но, возможно, так.
источник
Ruby → Brainfuck (
110107 символов)использование
Производит исполняемую программу Brainfuck.
Что-то вроде бесстыдного грабежа Эсултаника, поэтому я воздаю ему должное за эту идею.
источник
Javascript -> Brainf * ck: 119 символов
Пример ввода / вывода:
Код определенно может быть короче, но некоторые вещи, IMHO, сделают его менее интересным. Но если кто-то придумает более короткую программу, я урежу больше.
источник
Питон -> Питон, 148 символов
Дольше, чем другие записи Python за счет того, что (субъективно) немного интереснее.
Это печатает глубоко вложенный атрибут встроенного объекта.
источник
PowerShell, генерирующий PowerShell - 43
В духе решения Кейта:
генерирует случайные выражения сложений и вычитаний:
источник
gcm|random -c @args|% na*
:)Питон -> Фрактран (117)
источник
Game Maker Language -> Arduino или Ti84-Basic, 6 3 символа
Объяснение:
a=argument0
Помещает ввод в переменнуюa
if a mod 2
По сути, половина шансов программы будет Arduino, половина Ti-Basic 84Программа Arduino выводит случайные вещи через случайные интервалы, случайным образом пропуская случайные вещи.
Программа Ti-Basic рисует горизонтальные линии как сумасшедшие.
Также есть бонус - созданные программы уже в гольфе! Не уверен, что это будет полезно ...
источник
Perl -> HQ9 + (42 символа)
Пример ввода
Выход
источник
JavaScript -> Javascript (44 символа)
И с 43 символами, он может выполнить сгенерированную программу вместо отображения ее источника:
Примеры:
Семя: 5
Выполнено 3 раза:
источник