Задание
В этой задаче ваша задача - написать некоторый код, который выводит одну из анаграмм, выбранных случайным образом, с равномерным распределением, но он никогда не должен выводить сам.
разработка
При отсутствии ввода ваша программа должна вывести любую из анаграмм своего исходного кода. Ваша программа никогда не должна выводить свой собственный источник как есть, то есть она никогда не должна быть квинной.
вход
Ваша программа не должна принимать никаких данных. Однако, если ваш язык требует ввода как необходимости, вы можете предположить, что он будет представлен строчными буквами a
. Вы не должны использовать вход каким-либо образом.
Выход
Ваша программа может выводить любым способом, кроме записи в переменную. Запись в файл, консоль, экран и т. Д. Разрешена. Функция также return
разрешена.
Дополнительные правила
Исходный код вашей программы должен содержать не менее 3 символов (не 3 байта).
Исходный код вашей программы должен содержать как минимум 3 возможных анаграммы (исключая саму себя). Например,
aab
не считается действительным представлением, посколькуaab
имеет только две анаграммы, отличные отaab
(baa
иaba
).Ваша программа не должна выдавать никаких ошибок.
Ваша программа должна выводить свои анаграммы точно .
Применяются стандартные правила лазеек и стандартные правила .
пример
Предположим, исходный код вашей программы abc
. Он должен случайным образом вывести любое из следующего (с равномерным распределением):
acb
bca
bac
cba
cab
И это никогда не должно выводиться abc
.
Критерий победы
Это код-гольф , поэтому выигрывает самый короткий код в байтах! В случае ничьей решение, опубликованное ранее, выигрывает!
источник
Ответы:
Желе , 15 байт
Просто чтобы все началось; это почти наверняка можно победить. В основном это просто комбинация универсального конструктора quine и функции «выбрать случайную перестановку, отличную от входной»; последнее может быть улучшенным, первое почти наверняка есть.
объяснение
Универсальный конструктор Quine
Это может быть видно, как quine, если запустить сам по себе. Это также правильный quine по большинству определений, о которых я знаю; он не читает свой собственный источник (скорее, он содержит литерал «eval» ed, и ему предоставляется копия самого себя в качестве аргумента), он может нести полезную нагрузку (как показано здесь!) и
v
внешнюю строку литерал закодированv
изнутри.Выберите случайную анаграмму
Это действительно неэффективно для такой длинной строки, поэтому я не смог протестировать программу в целом, но я протестировал ее на более коротких строках, и, похоже, она работает правильно.
источник
Q
. Однако я думаю , что вы можете изменить этот метод «все перестановки» с в «перетасовать» один , используяẊ⁼¿
, сохраняя байт в то же время позволяя ему работать на TIO.CJam , 17 байт
Это не закончится в ближайшее время, поэтому на этот раз не будет ссылки TIO.
Как утешение, вот 20-байтовое решение, которое очень быстро завершается:
Попробуйте онлайн!
объяснение
Вместо этого 20-байтовое решение перетасовывает исходный код, пока он не будет отличаться от исходного.
источник
Python 2, 117 байт
Удивительно, но это решение короче, чем я ожидал. Перемешивает исходный код, пока он не отличается от оригинала.
-2 байта, благодаря @ mbomb007
-3 байта, благодаря @Wondercricket
Попробуйте онлайн
Это один из основных квинов в Python, который я изменил
Генерация анаграммы осуществляется случайным модулем
Где R содержит исходный код
Тройные кавычки были необходимы, так как я был вынужден сохранять фактические разделители строк в коде. В любом случае анаграммы будут иметь 3 строки.
источник
exec s
вместоexec(s)
str
является неизменным, вы можете сохранить байты, выполнивL=R
и используяsample
onL
вместо использованияshuffle
onlist
. repl.it . Идея взята из этого StackoverflowJava 7,
376428426428 байт+52 и +2 байта для двух исправлений ошибок. Я не проверял (правильно), была ли случайно генерируемая строка равной исходному исходному коду. Шансы на это астрономически малы, учитывая количество задействованных персонажей, но я должен проверить это независимо от соответствия правилам испытания.
Мой первый ответ на Quine на Java ..
Попробуйте здесь.
Вы можете удалить оба
Collections.shuffle(l)
и добавить!
перед обоими,x.equals(s)
чтобы убедиться, что вывод действительно равен программе:попробуйте здесь.
Объяснение:
String s
Содержит исходный код отформатирован.%s
используется для ввода этой строки в себя сs.format(...)
.%c
,%1$c
И34
используются для форматирования двойных кавычек.s.format(s,34,s)
складывает все вместеИ эта часть кода отвечает за вывод случайной анаграммы:
источник
05AB1E , 22 байта
Это создает список, который слишком велик для TIO, поэтому ссылка использует меньшую строку, но идея та же.
Попробуйте онлайн!
источник
Javascript (ES6), 128 байт
Использует sort (), возвращая случайное значение -1,0 или 1, чтобы перемешать вывод.
источник
Баш,
2796 байтfold
делит код на строки,shuf
перетасовывает строки иtr
объединяет кодисправлена проблема выдачи себя, теперь она никогда не выдаст себя
Попробуйте онлайн!
источник
$0
выглядит как нарушение «Ваша программа не должна принимать никаких данных».