Соревнование
Напишите полную программу, которая записывает вдвое больше байтов в стандартный вывод, чем длина программы.
правила
Программа должна записывать символы ASCII в стандартный вывод.
Содержание вывода не имеет значения.
Выход, измеренный в байтах, должен быть точно в два раза продолжительность программы, также измеряется в байтах, если не выполнить бонус.
Любой завершающий символ новой строки включается в число байтов вывода.
бонус
Ваша программа может при желании принять число n
, в качестве ввода. Если это так, выходные данные должны быть точно n * program length
байтами. Вы можете предположить, что n всегда будет положительным целым числом. Если вход не указан, по n
умолчанию необходимо 2.
Если вы сделаете это, вы можете вычесть 25 байтов из вашего результата.
Кратчайшая программа выигрывает.
ограничения
Нет стандартных лазеек.
Программа должна быть длиной не менее 1 байта.
Нет необходимости добавлять ненужные пробелы в исходный код, чтобы изменить его длину. Точно так же комментарии не учитываются.
Если вы не выполнили бонус, программа не должна принимать никаких данных. Если вы выполнили бонус, целое число должно быть единственным вводом.
Наименьший счет (длина программы в байтах - бонус) выигрывает.
Самый короткий ответ для каждого языка выигрывает для этого языка .
Leaderboards
Вот фрагмент стека, который генерирует как регулярную таблицу лидеров, так и обзор победителей по языкам.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
# Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш результат равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
# Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать название языка ссылкой, которая затем будет отображаться во фрагменте списка лидеров:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
источник
n * program length
байтов или это минимум?Ответы:
HQ9 + , 2 байта
выходы
Я думаю, что это не запрещено здесь.
источник
QQ
в переводчике.Шекспира, 768
Да, Шекспир не очень похож на язык игры в гольф. Выходы 1536 пробелов.
Изменить: 256
Хорошо, я на самом деле буду играть в гольф. Обратите внимание, что вышеприведенное не компилируется ни в одной из существующих реализаций Шекспира, потому что я тщательно написал его вручную (но готов защищать его правильность).
Ниже приведено преобразование в C с одним предупреждением в spl-1.2.1 и выводом 512 пробелов:
источник
Напомним, 17 байтов
16 НООПов. Затем
!
вызывается отладчик и сбрасывает память на консоль. Память пуста, но заголовок имеет длину 34 байта:Попробуй это здесь .
источник
Mathematica REPL, 1 байт
Печать
#1
.источник
CJam, -17 байт
Исходный код имеет длину 8 байтов и соответствует бонусу -25 байтов .
Попробуйте онлайн в интерпретаторе CJam .
Как это устроено
источник
Python 2.6, 10
Принты
-0.10000000000000001
, что составляет 20 символов.Обратите внимание, что строка repr показывает большую точность.
print-.1
только дает-.1
, иprint.1/3
дает0.0333333333333
только 13 цифр точности.источник
print`+.1`
?Семя , 10 байт
Это компилируется в программу Befunge (найдена грубой силой)
который при запуске выдает следующие 20 байтов (протестировано в CCBI, обратите внимание на конечный пробел):
Будучи незнакомым с Befunge 98, мне пришлось несколько раз перепроверить технические характеристики:
k
мне кажется, что он довольно сломан, выполнение выполняется больше, чем предполагалось из-за перехода IP в повторяющуюся инструкцию.
выводится как число, за которым следует пробелисточник
R,
32 байтаКод
Выходы
Вау, наконец, R, наконец.
Кажется, что
{}
работа тоже, это выводитNULL
Бонус
3316 байтов:Код
Выходы
источник
Matlab,
75 байтНа 2 байта меньше благодаря @flawr!
Выход:
Выход содержит 10 байтов.
newline
ans =
newline
newline
3
newline
источник
format compact
что по умолчанию никто не имеет :)format loose
это предпочтение по умолчанию123;4
? На три байта короче =)JavaScript, 2 байта!
Даже короче, чем 3-байтовое решение:
Возвращается
true
после запуска.источник
Python 2, 11
Выведите строковое представление встроенного
id
, которое составляет 22 символа:*1
, Чтобы получить код 11 символов. Вы могли бы также сделатьprint id;00
.Более скучные альтернативы 11:
источник
print.8/-9j
него не хватает одного символаprint id,;1
достаточно изменить, чтобы подавить завершающий перевод строки. Это также не добавляет завершающий пробел.print 9**21
не работает. Это 21 персонаж.print 9**23
хотя работаетпостоянный ток 10 - 25 = -15
Принимает пустую строку для «без ввода».
Вычисляет 10 ^ (10 * n) - 1, где n - это ввод, или 2, если ввод - пустой. Печатает строку
9
s необходимой длины.2
нажмите 2 в стек, если ввод пуст?
толкать ввод в стекA
нажмите 10 в стек (у DC есть ярлыкиA
-F
для 10 - 15)*
поп дважды и умножить (умножить ввод на 10)A
толкнуть 10 в стекr
перевернуть два верхних элемента стека^
возведение в степень 10 ^ (10 * вход)1-
вычесть 1 из вершины стекаn
печатать без новой строки.источник
n
вместоp
.TI-Basic, 3 байта
Печать
100000
.источник
0
для 1 байта.ᴇ3
? И @lirtosiast, поскольку в TI-Basic нет новых строк, я скептически отношусь к этому.Brainfuck, 14 байтов
Это небольшое математическое упражнение. Обозначим количество
+
символов в коде какa
, а количество.
символов -b
.Код выводит
a*b
байты со значениями отa
вниз до1
(это не байты ASCII, но, согласно спецификации, все в порядке). Длина кода равнаa+b+3
. Итак, мы имеемПробуя разные значения для
a
иb
, мы видим, что минимум дляa+b+3
достигаетсяисточник
+[[>....]-<<+]
возможность.GS2 , -18 байт
CP437 :
W↕0!↨.2
Шестнадцатеричный дамп:
57 12 30 21 17 2e 32
W
читает числа из STDIN в список.↕0
добавляет 2 к списку и!
извлекает первый элемент. Затем↨.
(список[0,1,2,3,4,5,6]
) повторяется (2
) это много раз.Это очень похоже на CJam ответ Дениса - GS2 просто сочетает в себе
r
иi
в один байт.Примечание : мне пришлось исправить ошибку в
gs2
реализации, чтобы это работало: раньше каждая программа имела скрытый символ новой строки, добавляемый к ее выводу, который был совершенно непреднамеренным. Он появился только после того, как я попытался решить эту программу (язык был разработан для анархии в гольфе, которая игнорирует завершающие символы новой строки во всех задачах), и я только сейчас предложил исправление, чтобы освоить, так что не стесняйтесь принять этот ответ с частичкой поваренная соль.источник
Perl 5, 16 байтов - 25 = -9
Это странный подход к проблеме.
Запустите с
-p
аргументом командной строки.Ниже я увидел ответ Perl, который использовал специальную переменную для печати большего количества текста - и таким образом сократил их количество байтов. Поэтому я использовал гораздо более подробную специальную переменную. Он печатает 8 символов с именем переменной из 2 символов. Таким образом, с количеством байтов 16 (дополненным одним пробельным символом, чтобы сделать его 16), он печатает
2 * $]
, где печатается$]
версия Perl5.xxxxxx
, в зависимости от вашей версии Perl. Без ввода он печатает его четыре раза, равный8*4
или32
, что в два раза превышает число байтов кода.Я люблю Perl.
источник
pop
иshift
работать над ними@ARGV
(так, какsub
они работают@_
), чтобы вы могли сделать что-то вроде$n=pop||2
сброса первого блока кода, и у вас есть;}
в конце , что почти всегда можно просто}
спасти другого. Что-то, что может помочь вам сохранить больше символов, - это оператор повторения строкx
,print 1x20
или что-то в этом роде ... :) Надеюсь, это поможет!print"n"x(21*pop||42)
. Запустите в командной строке сperl -e'print"n"x(21*pop||42)' 3 | wc -c
Пиф ,
109 - 25 = -16-1 Деннисом
Печатает [input] * 9 кавычек или 2 * 9, если ввод пустой.
Исаак имеет более короткий ответ здесь
Pyth , 1 байт
Печать
10
. Это встроенная переменная, которая инициализируется до 10.источник
Q
Pyth оценивает ввод перед выполнением фактического кода.**N9.xvz2
работает как положено, но не короче**N9?zvz2
.T
выходы10
и перевод строки. Используйd
, это пробел, к которому добавляетсяМакароны 0.0.2 , 23 символа
Печатает 32 9 в двоичном формате, который, как оказалось, имеет длину 46 символов
1000000000000000000000000000000000000000000000
, без завершающей строки.источник
JavaScript, 4 байта
Я думаю, что это самое короткое решение JS без ES6: P
источник
v0.10.40
вообще ничего не печатает, потому что нет команды печати. У вас есть другая версия Node.js или это работает только в оболочке, которая печатает оценку строки? (в этом случае я не думаю, что этот ответ будет действительным).С
2725• Спасибо @Titus за удаление 2 байта
И для моего неконкурентного 16-байтового решения в C, перейдите сюда: https://codegolf.stackexchange.com/a/111330/16513
^ Я говорю не конкурирующий, потому что код ошибки может зависеть от вашего компилятора. Также обратите внимание, что я использую GCC в этом решении. Кроме того, я не уверен, нарушает ли это правило 1 или нет, я думаю, что, вероятно, так оно и есть, поэтому я назвал его неконкурентным
источник
main(){printf("%0.XXf",0);}
работает.#include
. Компилятор выдаст предупреждение, и он иногда будет падать, но обычно он будет работать .V , 2 байта
Это выводы
Попробуйте онлайн!
объяснение
Это действительно хакерский ответ, и он работает, злоупотребляя внутренними компонентами V. По сути, это то, как это работает,
ÿ
это команда в V, которая сигнализирует о завершении программы, и все ожидающие команды должны завершиться. В противном случае некоторые неявные окончания не будут работать, и интерпретация будет зависать чаще. Эта команда автоматически отправляется несколько раз в конце программы, и большую часть времени не влияет на вывод.é
это команда, которая вставляет один символ Тем не менее, он делает это путем захвата необработанного байта, поэтому он не интерпретируетсяÿ
как «конец», он интерпретирует его как «это символ, который вам нужно вставить».4é
заставляет вставлять этот символ 4 раза вместо одного.источник
Баш, 11 байт
Вот приятно ироничное использование инструмента сжатия данных :) ...
gzip -f<<<2
Вот шестнадцатеричный дамп вывода (22 байта) ...
источник
постоянный ток, 19 - 25 = -6
Принимает число (2 помещается в стек в качестве резервной копии) и умножает его на 19. Печатает
1
(без новой строки) и уменьшает число. Циклы, пока число больше 0.источник
C ++, 80 байт
обратите внимание, что символ новой строки состоит из двух символов. (если вы не хотите, чтобы это было, измените i <20 на i <= 19, чтобы вернуться к тому же числу байтов.)
Пример вывода (будет меняться каждый раз)
один и тот же 8-значный адрес памяти 20 раз.
источник
for
петля корочеwhile
петли и позволяет снимать скобки, она немного дешевле в использованииcstdio
и простоprintf
веревка, и вам не нужно ничего возвращать.#include<iostream> int main(){for(int i=10;--i;)std::cout<<&i;}
но уже есть более короткий ответ с немного другим подходом.CJam, -9
объяснение
q_,
Читает весь ввод и толкает его, затем увеличивает длину.
{i}{;2}?
Если длина ввода больше нуля, преобразуйте его в целое число. В противном случае, нажмите на ввод и нажмите 2.
G*
Нажимает 16 (длина программы), затем умножает ее на 2, если нет ввода, или вводит.
'X*
Толкает X и умножает его на вершину стека.
источник
q2e|i
даст вамr_{i}2?SB**
.> <> , 19 + 2 (-v флаг) - 25 = -4 байта
проверить это здесь!
Спасибо Коул и Sp3000
Сначала проверяется длина стека, если она равна 0, положить 2 в стек. Умножает его на 21 (длина кода), затем выводит представление в Юникоде этого числа и уменьшает его на 1, повторяет до 0. (Вам нужно будет проверить вывод, чтобы увидеть символы, так как браузер их не отобразит)
источник
l0=?2f6+*v
как первая строка, так и1-::0=?;o>
вторая должна сделать все правильно.?!
обычно лучше чем0=?
JavaScript (ES5), 68 байт - 25 бонусов = 43
(если ваш браузер не разрешит запуск сниппета по соображениям безопасности, попробуйте эту скрипту http://jsfiddle.net/thePivottt/c3v20c9g/ )
Этот скрипт работает только в браузере, следуя как минимум DOM3 (с
Node.textContent
) и ECMAScript 5 (или, возможно, более старой версии). Я попытался сделать так, чтобы стандарт соответствовал и был совместим насколько возможно. Также предполагается, что скрипт находится в первомscript
элементе документа.На самом деле он объединяет несколько копий самого скрипта, что довольно здорово . Обратите внимание, что инструмент фрагмента в SE добавляет лишние пробелы вокруг сценария. Мы могли бы игнорировать этот пробел с,
.trim()
но я не считаю это необходимым, учитывая, что программа идеальна без вмешательства SE. Просто сохраните этот файл HTML5, если хотите, чтобы он работал идеально.Этот скрипт использует
prompt
иalert
потому, чтоconsole.log
не является частью какого-либо стандарта, даже если его использует большинство современных браузеров. Если число пропущенных повторений не является допустимым или пустым, по умолчанию используется значение 2. Если входное значение является десятичным числом, программа завершается сбоем из-за неверной длины массива.Код использует несколько интересных функций JavaScript:
Array(1+(+prompt()||2))
Array(INT)
создает массив ячеек INT.+prompt()
берет вход и превращает его в число. Если мы передадим входные данные в виде строки,Array
функция просто поместит их в массив из одного элемента.+prompt()||2
возвращает ввод, если он правдивый , иначе он возвращает 2.Весь этот код создает массив из N пустых элементов, где N на единицу больше, чем количество запрошенных повторений.
.join(document.scripts[0].textContent)
Метод массива
join(STRING)
создает строку, объединяя все ячейки, помещая предоставленную строку между значениями. В этой программе в массиве N + 1 пустых элементов или ровно N промежуточных точек. Результатом будет строка, содержащая N раз предоставленной строки.document.scripts[o]
это первый<script>
элемент документа.textContent
ВNode
случаях возвращает весь найденный текст внутри них и их дочерних узлов, включая скрипты.источник
str.repeat
и по-прежнему выводите сам код, это снижает счет до 26, но это немного скучно: PJavaScript ES6, 33 - 25 = 8
Попробуйте онлайн!
источник
33
- это фактически длина кода. Он создает новый массив с длиной,33*a
гдеa
входной параметр имеет значение по умолчанию 2 согласно OP, заполняет его и возвращает объединенную строку.Arrary(1+a*<length>)
иjoin`0`
Юля, 42 байта - 25 = 17
Это читает строку из STDIN, используя
readline()
. Если оно пустое, т. Е. Входные данные не были предоставлены, то n определяется как входное значение, преобразованное в целое число. В противном случае п = 2. Тогда распечатайте 42 л@
с до STDOUT.источник
Perl, 18 - 25 = -7
Специальная переменная
$=
, aka$FORMAT_LINES_PER_PAGE
, начинает свою жизнь как60
, и поэтому ее нужно дублировать только вдвое больше, чем необходимо для вывода байтов.источник
print$=x9x(pop||2)
приятно!