Задача проста: печатать, The quick brown fox jumps over the lazy dog
используя как можно меньше различных символов в исходном коде.
print "The quick brown fox jumps over the lazy dog"
имеет оценку 29 символов, так как все 26 строчных букв появляются по крайней мере один раз, а также заглавные буквы T, пробелы и символы кавычек. Я уверен, что вы можете стать более креативным, чем это, хотя!
Brainfuck, Whitespace и подобные языки (на мое усмотрение) запрещены. Разрывы строки считаются одним символом. Код может быть настолько длинным, насколько это необходимо. Я приму решение 21 апреля в 23:59 EST. В случае ничьей, более короткий ответ будет принят.
code-challenge
Fraxtil
источник
источник
least-characters
официальный критерий и пометить, какcode-golf
Ответы:
DC: 4 отдельных символа (всего
384375363361360350 символов)Короткий ответ (но отнюдь не самый короткий, я все еще работаю над ним), используя всего 4 отдельных символа и всего
384375363361360350 символов, надеюсь, вы найдете его совершенно самоочевидным:Более ранний ответ, который немного более многословен (он содержит 13916 единиц):
Ах, ты просто любишь верный настольный калькулятор!
источник
64-битный машинный код Intel для Linux в двоичном виде: 2 разных символа
Я отказываюсь переписать его в одинарный.
источник
Lua, 8 разных персонажей
Все символы новой строки должны быть удалены из этого кода, чтобы получить одну строку длиной 1998.
Требуется Lua 5.2
Как можно написать произвольную программу Lua, используя всего 8 символов
load"\05
Имея символы
05\
, можно написать строковый литерал для любой строки, состоящей из символов0257\
. Действительно,"\\"
означает обратную косую черту"2" == "\50"
и"7" == "\55"
("\ddd"
в Lua означает char с десятичным кодомddd
).Имея символы
0257\
, можно написать строковый литерал для любой строки, состоящей из символов024579\
(как"4" == "\52"
и"9" == "\57"
).На следующем шаге символы
01245679\
станут доступны.Еще один шаг необходим для получения всех десятичных цифр.
Lua имеет функцию,
load
которая обрабатывает строку как код Lua и преобразует ее в функцию.Например,
load("print\"Hello\"")()
отпечаткиHello
.Он может быть записан без скобок:
load"print\"Hello\""""
(последние две кавычки означают пустую строку, которая передается в качестве необязательного параметра в функцию).Любая программа Lua может быть преобразована в уменьшенный алфавит не более чем за 5 шагов.
Пример: если наша программа состоит из одной цифры
9
, то требуется только два шага:шаг 0:
9
шаг 1:
load"\57"""
шаг 2:
load"load\"\\5\55\"\"\""""
источник
Питон, 9
Используя эту идею . (Разрывы строк предназначены для удобства чтения и могут быть удалены.)
Это создает строку
'print"The quick brown fox jumps over the lazy dog"'
и выполняет ее.источник
exec
, скажем, вы запускаете его на оболочке Python и требовать 7 символов.dc - 5 различных символов (2, i, 1,0, P)
источник
Tcl 10 разных символов.
Символы , используемые в :
,
0
,1
,2
,3
,4
,5
,6
,7
,\
Это просто каждая часть команды, закодированная как последовательность \ ooo. Для Tcl не имеет значения, делаете ли вы такие забавные вещи в имени команды или в его аргументах, на самом деле
$object configure
это очень часто встречается в Tcl / Tk.С помощью этой техники
eval
вы даже можете написать каждую программу на Tcl с 10 различными байтами :)Тестовая программа:
источник
\uXXXX
для 18 различных байтов.GolfScript (4 отдельных символа, всего 441 символ)
Используемые символы:
]1(+
Объяснение: в GolfScript добавление строки в массив целых чисел преобразует массив в строку с целыми числами в качестве кодовых точек, а затем объединяет две строки. Если ничего не указано в stdin, стек начинается с пустой строки. Таким образом, мы можем построить массив целых чисел с правильными кодовыми точками и затем объединить с этой пустой строкой.
Нам понадобится
+
для объединения,]
как минимум, для создания массива (и либо[
для предотвращения включения в него пустой строки, либо для какого-либо способа ее извлечения впоследствии), и для некоторого способа разделения целых чисел. Поэтому я использую оператор декремента(
для разделения целых чисел, что требует некоторых дополнительных дополнений для компенсации в некоторых случаях, но дает быстрый способ получить, например, 110; и этот оператор также является оператором для извлечения первого элемента из массива, поэтому он служит для извлечения пустой строки для объединения.источник
Рубин: 7 разных персонажей
(Благодарю Рандера за его комментарий .)
Образец прогона:
Подсчеты:
источник
Java: 18 различных символов
Java-программа может быть написана в формате UNC ... Но она остается многословной!
источник
J, 6 различных символов
6 различных версий char (
u:10 +
), использующих идею flornquake . Метод складывает векторы0
1
11
и111
вместе складывает до нужного84 104 101 32 113 117 ...
вектора:Edit :
1+:1
это0
так , может быть , есть 5 гольца решение здесь ... (Кроме того,+:
как двойные может использоваться для сокращения раствора) .13 различных символов:
Улучшение анонимного пользователя (DirkL): возможно более короткое решение, но с использованием 6 символов (
u:23 |
). Использование в|
качестве оператора вычета для десятичных дробей, например223 | 2333333 = 84
.источник
Befunge-98, 3 разных персонажа
Используя этот интерпретатор Befunge-98. Сначала я присоединился к 4-символьному соревнованию с
@
окончанием в конце. Эта программа многократно выводитThe quick brown fox jumps over the lazy dog\r
, где завершающий\r
удаляет предыдущее предложение. Поэтому предложение пишется один раз.Befunge-98, 4 разных персонажа (всего 1047 персонажей)
Менее обманчивая версия. Этот заканчивается нормально.
источник
JavaScript (в консоли Chrome) 17
У меня была та же идея, что и у Флорнквейка, но он меня тоже обыграл. Так что я пошел по уродливому способу сделать это!
источник
constructor+[]
отличается от того, что я получаю. Различные версии хрома я предполагаю. Сказал вам, что это было некрасивоC, 15 различных символов
Некоторое вдохновение от ответа Форса (который я избил персонажем) и комментарий Экатмура к этому ответу.
Пробелы и новые строки даны только для ясности и не учитываются.
Как это работает?
1. Каждая группа из 3 символов представлена числом. Указатель на это число, рассматриваемый как символьный указатель, является указателем на строку из этих 3 символов плюс завершающий ноль. Предполагает, что в порядке байтов.
2. Функция
a
помогает получить адрес буквального числа, не определяя переменную.источник
{}
в одной из строк, что делало его чувствительным кa
возвращаемому значению.VBA (
168 различных символов)(используя идеи из matatwork и AutomatedChaos)
обратите внимание, что если вы хотите вставить это, вам придется разбить строку на 2, так как это слишком долго для редактора VBA
источник
Chr()
? Кажется, работает отлично без:?Chr(&0124);Chr(&0150);Chr(&0145);…
.?chr(1+)
это будет что-то вроде?chr(11+11+11+11+11+11+11+1+1+1+1+1+1+1)+chr(11+11+11+11+11+11+11+11+11+1+1+1+1+1)+ .... etc.
?Chr(&0124)Chr(&0150)Chr(&0145)…
.C: 16 различных символов
источник
if(putchar(...)+putchar(...)){}
удаляет,;
но добавляетf
(но использует неопределенный порядок оценки).if(putchar(...)){}if(putchar(...)){}
etcif(putchar(...))if(putchar(...)){}
илиif(putchar(putchar(...)+...){}
, но все же этот подход не спасает персонажа.Постскриптум (19 символов)
Используются шестнадцатеричные цифры 0-9, af, разделители шестнадцатеричных строк <> и = для печати.
(13 разных персонажей)
Двоичные радикальные числа получают данные в 4 символа (0,1,2, #), но для вставки двоичного числа требуется пустая строка () и несколько букв (put, dup (-up), print (-pt)) там.
источник
APL 8
Следующая команда преобразует строку символов в ее двоичный эквивалент:
Если мы назначим результирующий двоичный файл вектору s, чтобы избежать отображения всех нулей и единиц, то мы можем напечатать результат, изменив процесс, применив:
Таким образом, 8 уникальных символов: 8,2, ⎕, d, r, пробел и 0 и 1 в двоичном векторе s.
источник
К
12 разных персонажей
Персонажи
10h$2/:'(b;)
источник
PHP. 10 разных персонажей.
e, c, h, o, r, (, 1, +, ), ;
(Разрывы строк могут быть удалены.)источник
echo(chr(1+1+1+...));
, так что вы вернетесь к 10 символам снова.Bash:
1816 различных персонажейОбразец прогона:
Подсчеты:
источник
cat
это всего лишь трехсимвольное решение. Подвох в том, что вам нужно"The quick brown fox jumps over the lazy dog"
в него попасть .К, 9
1 @ 0 h $ (+;)
источник
Perl, 10 символов
По сути, это плагиат решения Python от flornquake.
Использование замены с
ee
является более дешевым способом полученияeval
. К сожалению, Perl использует.
для конкатенации, которая добавляет символ.Я надеялся исключить скобки (которые являются необязательными для функций в Perl), используя такой синтаксис:
(Да,
s
это действительный разделитель регулярных выражений). Тем не менее, я не мог заставить это работать, потому что приоритет.
слишком велик, пытаясь объединить, прежде чем он вызовет функцию.источник
Эрланг 8 разных персонажей
Используемые символы:
012#<>:.
источник
C (23 разных символа)
Примечание. Я не включал переводы строк в подсчет отдельных символов, но при необходимости их можно легко удалить за счет читабельности.
источник