Цель состоит в том, чтобы написать программу, которая кодирует другую программу (ввод) с минимально возможным количеством символов.
счет
- Оценка равна разному количеству символов, необходимых для вывода.
- Чем ниже балл, тем лучше.
правила
- Нет целевых языков с ограниченным набором команд. (Без Brainf ** k, пробелов и т. Д.)
Редактировать : я имею в виду, по крайней мере, 26 значащих символов,A
это не меняет способ работы программы brainf ** k, поэтому вы не можете считать этот символ. То же относится и к пробелам. - Целевой язык должен существовать во время написания этого вопроса.
- Вы должны включить небольшое объяснение, как вы архивируете свой счет.
- Программа ввода действительна.
- Закодированная программа должна быть действительной программой на том же языке, что и ввод.
- Закодированная программа должна выполнять ту же работу, что и исходная программа.
- Ваш кодировщик должен работать для каждой действующей программы на этом языке.
- Включите некоторые примеры ввода и вывода.
Примечания
- Кодировщик может быть написан на любом языке, а не только на том языке, на который он нацелен.
- Это не код-гольф , читаемые программы приветствуются.
- Великая цель - увидеть, сколько разных символов необходимо, чтобы написать что-нибудь на этом языке. Я запретил BF и т. Д., Потому что не будет никаких проблем.
- Это было вдохновлено печатью строки, состоящей из как можно меньшего числа различных символов , вы можете использовать ее как метагольф для этого вопроса.
пример
В Java вы можете использовать \uXXXX
вместо других символов. Действительная запись кодирует каждый символ ввода таким образом. Это будет иметь оценку 18. ( \ 0-9a-f
)
Код в Tcl, кодирует программу Java:
set res {}
foreach char [split [read stdin] {}] {
append res [format \\u%04x [scan $char %c]]
}
puts $res
atomic-code-golf
generation
metagolf
Йоханнес Кун
источник
источник
gets
читаю только одну строку ввода? И вы пропустилиu
кодировщик (но, с другой стороны, вам не нужно пространство, и, таким образом, счет остается прежним).Ответы:
GolfScript / GolfScript, оценка 4
Сам кодировщик представляет собой программу GolfScript, которая берет исходный код в STDIN и преобразует его в последовательность символов
',+~
. Этот вывод сам по себе является допустимым кодом GolfScript, который выполняет те же операции, что и оригинальная версия.Основной метод состоит в кодировании кода в виде строки (с использованием символов
',+
, см. Ниже), а затем вычислении этой строки с помощью команды eval~
.Если объединить любую строку вместе с массивом чисел в GolfScript, числа преобразуются в кодовые точки, и в результате получается сама строка. Таким образом, строковое кодирование просто строит список чисел (из точек кода входного кода), а затем объединяет все числа с пустой строкой.
Пример:
Код ввода
переведено на (примечание: разрывы строк и комментарии добавлены для удобства чтения)
источник
Python -> Python, 8 различных символов
Это использует форматирование по модулю для перестройки входной строки. Например,
print 1
результаты в этой программе:Теоретически вы можете закодировать любую программу, подобную этой, но результирующая программа всегда будет иметь более 2 n символов, где n - количество символов на входе, не включая
%
символы.источник
2**n+3*n-1 + 6
символы, включая все входные символы (если вы предполагаете, что каждый символ является байтом NUL). Это взято из OEIS A132074 , плюс 6 дляexec''
. Если вы предполагаете, что символы должны быть напечатаны ASCII, то нижняя граница выше. repl.it/EHENCJam -> CJam, счет: 3
CJam новее, чем вопрос, поэтому он не имеет права на победу.
Это использует
')~
.')
является символом)
, и каждый дополнительный)
увеличивает его на единицу.~
может оценить символ или строку. Полная программа оценивается после объединения всех символов путем оценки+
. И целое число символьного значения и числовой операции оценивается для каждого символа меньше, чем)
.Примеры
переводится на:
и
переводится на:
источник
APL (оценка: 10)
Символы, используемые в кодировке:
⍎⎕AV[(⍴⍬)]
Программа APL для кодирования должна ограничиваться кодировкой APL и не использовать дополнительный Unicode.
Кодировка для программы
42
(которая выводит ответ на Жизнь, Вселенную и все):Как это работает:
⍬
это пустой список,⍬⍬⍬⍬
следовательно, список из четырех пустых списков,⍴⍬⍬⍬⍬
это длина списка из четырех пустых списков, который равен четырем. Dyadic⍴
имеет форму, поэтому инструкции длины списка списков должны быть заключены в круглые скобки, давая окончательное кодирование символа номер четыре как(⍴⍬⍬⍬⍬)
.Затем эти числа ищутся, в
⎕AV
которых находится набор символов, и⍎
выполняют результирующую строку.(На первый взгляд кажется, что счет может быть доведен до 9 с использованием
⎕UCS
вместо⎕AV
и сохранения[]
, но это не работает, потому что(⍴⍬)(⍴⍬)
это список списков скаляров, то есть[[1], [1]]
вместо того[1, 1]
, что требуется, и обходной потребует перестановки закодированных значений запятыми, доведя счет до 10.)источник
RProgN , 7 разных персонажей, неконкурентоспособный
RProgN новее, чем этот вопрос.
' do.Lc
Преобразуйте программу в
'oooo...' L c 'ooooo...' L c 'oo...' L c . . . do
, где каждое «oo ...» представляет код символа в o, окруженный апострифиями, чтобы сделать из них строку. Затем L c превращает их в числовую константу. После того, как все строки помещены в стек, цепочка., Равная количеству символов в кодированной строке, минус один перестраивает кодированную строку и выполняет ее.Энкодер, также написанный в RProgN.
Попробуйте онлайн!
источник
Рубин -> Рубин, 8
Образец:
Реализует решение Ruby, данное в связанной задаче, и заменяет ввод / вывод на eval.
источник