Создать вывод в два раза длиннее кода


85

Соревнование

Напишите полную программу, которая записывает вдвое больше байтов в стандартный вывод, чем длина программы.

правила

  • Программа должна записывать символы 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


1
Для бонуса вывод должен быть ровно n * program lengthбайтов или это минимум?
xnor

2
Это должно быть точно
Даниэль М.

3
Похоже, фрагмент кода должен быть изменен для обработки отрицательных оценок.
El'endia Starman

40
Бонус -25 в основном является обязательным для некоторых языков, поскольку позволяет им получить отрицательный балл. В будущем я бы предложил использовать процентный бонус или просто сделать бонус вопросом, если вы действительно хотите, чтобы ответы на него шли. Или просто нет бонуса.
xnor

4
Для "нет ввода" мы предполагаем, что пустая строка передается в? Я не понимаю, как можно поступить с пользователем, никогда не вводящим ввод, а с программой, которая просто ждет.
xnor

Ответы:


138

HQ9 + , 2 байта

QQ

выходы

QQQQ

Я думаю, что это не запрещено здесь.


14
Это не может быть запрещено, но это не очень интересно ... подождите, как он получил восемь голосов?
Джон Дворак

58
@JanDvorak Как мне не нравится HQ9 +, это для меня творческое использование. Такое использование, скорее всего, не предполагалось при создании HQ9 +, что больше, чем можно сказать о большинстве других программ Hq9 +. +1 от меня.
Цифровая травма

13
Я даже не знал, что Q печатает «исходный код программы». Я думал, что это просто напечатало Q. Хорошо сделано для того, чтобы заметить решающую разницу!
Тимви

7
@ LegionMammal978 Технически это постоянная проблема вывода, что означает, что не-языки программирования разрешены.
спагетто

3
Это имеет 120 голосов. 1200 повторений при наборе текста QQв переводчике.
Стэн Струм

95

Шекспира, 768

Да, Шекспир не очень похож на язык игры в гольф. Выходы 1536 пробелов.

Rosencrantz and Guildenstern: A Series of Tedious Events.

Rosencrantz, a count of extraordinary determination.
Guildenstern, a spacy character.

Act I: The Long Conversation

Scene I: A Tortured Friendship

[Enter Rosencrantz and Guildenstern]

Rosencrantz:
 You are a gentle, noble, valiant, loyal, loving companion.

Guildenstern:
 You are nothing!

Scene II: Asking the Hard Questions

Rosencrantz:
 Speak your mind.

Guildenstern:
 You are as fair as the sum of yourself and a daisy. Are you as
 daring as the sum of a big, bold, fiery, feisty, rough, rowdy,
 ham-fisted, hawk-eyed, broad-shouldered, bright-eyed lad and a
 large, yellow, vicious, hairy, wild, scary, long-tailed,
 sharp-clawed, small-eared lion?

Rosencrantz:
 If not, let us return to scene II.

Изменить: 256

Хорошо, я на самом деле буду играть в гольф. Обратите внимание, что вышеприведенное не компилируется ни в одной из существующих реализаций Шекспира, потому что я тщательно написал его вручную (но готов защищать его правильность).

Ниже приведено преобразование в C с одним предупреждением в spl-1.2.1 и выводом 512 пробелов:

Ummm.Ajax,1.Puck,2.Act I:I.Scene I:A.[Enter Ajax and Puck]Ajax:You old old old old old cow.Puck:You are zero!Scene II:B.Ajax:Speak thy mind.Puck:You are the sum of you and a red cat.Are you as big as the square of me?Ajax:If not, let us return to scene II.

15
Я буду +1, если вы на самом деле играете в гольф.
lirtosiast

1
Что это за колдовство? Я даже не знал, что такая вещь существовала ...
Малавос

10
Вау, ты играл в гольф. Святые гавани.
Малавос

2
@Malavos Я просто пошутил о том, как ты колдовал с ошибкой, извини - и то, и что, вероятно, хорошо
кошка

2
Нет, я прошу у вас прощения, если я звучал оскорбительно или оборонительно. Я просто делал ссылку на Футураму! :) Если серьезно, я все еще удивлен этим ответом. Нам нужно больше таких на сайте.
Малавос

69

Напомним, 17 байтов

................!

16 НООПов. Затем !вызывается отладчик и сбрасывает память на консоль. Память пуста, но заголовок имеет длину 34 байта:

-- STATE DUMP --
----------------

Попробуй это здесь .


13
Это один из круче ответов ИМО.
кот

67

Mathematica REPL, 1 байт

#

Печать #1.


14
Вопрос говорит «написать полную программу»; это просто фрагмент REPL.
LegionMammal978

60

CJam, -17 байт

r2e|i8,*

Исходный код имеет длину 8 байтов и соответствует бонусу -25 байтов .

Попробуйте онлайн в интерпретаторе CJam .

Как это устроено

r         e# Read a token from STDIN.
 2        e# Push 2.
  e|      e# Logical OR; keep the token if it's not empty, 2 otherwise.
    i     e# Cast to integer.
     8,   e# Push [0 1 2 3 4 5 6 7].
       *  e# Repeat the array the corresponding number of times.

4
Дерьмо. Отлично сработано.
The_Basset_Hound

1
Как это отрицательные байты?
Ник Т

3
@NickT 8 байт (исходный код) - 25 байт (бонус).
Деннис

16
Вы можете сохранить несколько миллионов копий, если вам не хватает места на диске.
Роберт Фрейзер

Нет, я думаю, что метаданные сделали бы это положительным
CalculatorFeline

47

Python 2.6, 10

print`-.1`

Принты -0.10000000000000001, что составляет 20 символов.

Обратите внимание, что строка repr показывает большую точность. print-.1только дает -.1, и print.1/3дает 0.0333333333333только 13 цифр точности.



@AndersKaseorg Значит, repl.it не так?
mbomb007

2
@ mbomb007 Видимо. GitHub предполагает, что это едва ли не единственная вещь, в которой он ошибается. Ideone согласен с CPython.
Андерс Касеорг

Тот же комментарий, что и для вашего другого ответа: разве это не печатает завершающий символ новой строки, дающий 21 байт вывода?
Мартин Эндер

1
Вы имеете в виду print`+.1`?
mbomb007

46

Семя , 10 байт

4 56111240

Это компилируется в программу Befunge (найдена грубой силой)

9k.@

который при запуске выдает следующие 20 байтов (протестировано в CCBI, обратите внимание на конечный пробел):

0 0 0 0 0 0 0 0 0 0 

Будучи незнакомым с Befunge 98, мне пришлось несколько раз перепроверить технические характеристики:

  • k мне кажется, что он довольно сломан, выполнение выполняется больше, чем предполагалось из-за перехода IP в повторяющуюся инструкцию
  • Стеки Befunge 98 имеют бесконечные нули в нижней части
  • . выводится как число, за которым следует пробел

18
.... я .... просто .... не могу.
Даниэль М.

44

R, 3 2 байта

Код

!0           # NOT FALSE

Выходы

TRUE

Вау, наконец, R, наконец.

Кажется, что {}работа тоже, это выводитNULL

Бонус 33 16 байтов:

Код

rep(1,number*16)

Выходы

# if number is not defined
> rep(1,number*16)                     
> Error: object 'number' not found     # output is 32 (or 2*16) bytes long error

# if number is defined
> number = 3                            
> rep(1,number*16)                     # output is 16*number bytes long
> 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

2
Я надеюсь, что использование имени «число» для переменной не эквивалентно «добавлению ненужных пробелов в исходный код»
Mutador

26

Matlab, 7 5 байт

На 2 байта меньше благодаря @flawr!

123;3

Выход:

введите описание изображения здесь

Выход содержит 10 байтов.newline ans = newline newline 3 newline


1
Будем надеяться, format compactчто по умолчанию никто не имеет :)
Sanchises

2
@sanchises :-) Да, это зависит от того, как были установлены настройки Matlab. Но format looseэто предпочтение по умолчанию
Луис Мендо

2
Как насчет 123;4? На три байта короче =)
flawr

@flawr Хорошая идея! Отправь это сам!
Луис Мендо

Нет, слишком сильно вдохновлен вашим ответом =)
flawr

25

JavaScript, 2 байта!

Даже короче, чем 3-байтовое решение:

!0

Возвращается trueпосле запуска.


2
Следует отметить, что это работает только в среде REPL
Cyoce

21

Python 2, 11

print`id`*1

Выведите строковое представление встроенного id, которое составляет 22 символа:

<built-in function id>

*1, Чтобы получить код 11 символов. Вы могли бы также сделать print id;00.

Более скучные альтернативы 11:

print'1'*22
print 9**21

Я играл со сложными числами, но, к сожалению, у print.8/-9jнего не хватает одного символа
Sp3000

Разве они не выводят завершающий символ новой строки, доводя счетчик выходных байтов до 23?
Мартин Эндер,

1
@ MartinBüttner Это правило было отредактировано позже, но его print id,;1достаточно изменить, чтобы подавить завершающий перевод строки. Это также не добавляет завершающий пробел.
xnor

@xnor print 9**21не работает. Это 21 персонаж. print 9**23хотя работает
Koishore Roy

18

постоянный ток 10 - 25 = -15

2?A*Ar^1-n

Принимает пустую строку для «без ввода».

Вычисляет 10 ^ (10 * n) - 1, где n - это ввод, или 2, если ввод - пустой. Печатает строку 9s необходимой длины.

  • 2 нажмите 2 в стек, если ввод пуст
  • ? толкать ввод в стек
  • Aнажмите 10 в стек (у DC есть ярлыки A- Fдля 10 - 15)
  • * поп дважды и умножить (умножить ввод на 10)
  • A толкнуть 10 в стек
  • r перевернуть два верхних элемента стека
  • ^ возведение в степень 10 ^ (10 * вход)
  • 1- вычесть 1 из вершины стека
  • n печатать без новой строки.

черт, это так умно. И повезло с длиной кода там :) Но, возможно, вы должны добавить небольшое объяснение для непосвященных. И я думаю, что новая строка имеет значение, поэтому вы, вероятно, должны использовать nвместо p.
Даниеро

17

TI-Basic, 3 байта

1ᴇ5

Печать 100000.


На самом деле, я думаю, что новая строка будет рассчитывать, так что вы можете просто сделать 0для 1 байта.
lirtosiast

1
Как насчет ᴇ3? И @lirtosiast, поскольку в TI-Basic нет новых строк, я скептически отношусь к этому.
Якоб

16

Brainfuck, 14 байтов

+++++++[....-]

Это небольшое математическое упражнение. Обозначим количество +символов в коде как a, а количество .символов - b.

Код выводит a*bбайты со значениями от aвниз до 1(это не байты ASCII, но, согласно спецификации, все в порядке). Длина кода равна a+b+3. Итак, мы имеем

a*b = 2 * (a+b+3)

Пробуя разные значения для aи b, мы видим, что минимум для a+b+3достигается

a = 4       or       a = 7
b = 7                b = 4

Ветеран программиста мозгового промысла определит эту +[[>....]-<<+]возможность.
ортоплекс

@orthoplex Когда я читаю ваш комментарий, я сразу же вспоминаю и программиста: brainfucker
Poke

15

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реализации, чтобы это работало: раньше каждая программа имела скрытый символ новой строки, добавляемый к ее выводу, который был совершенно непреднамеренным. Он появился только после того, как я попытался решить эту программу (язык был разработан для анархии в гольфе, которая игнорирует завершающие символы новой строки во всех задачах), и я только сейчас предложил исправление, чтобы освоить, так что не стесняйтесь принять этот ответ с частичкой поваренная соль.


1
Первый ответ GS2, который я видел, в котором нет символов масти карт!
Cyoce

14

Perl 5, 16 байтов - 25 = -9

$_ =$]x($_*2||4)

Это странный подход к проблеме.

Запустите с -pаргументом командной строки.

Ниже я увидел ответ Perl, который использовал специальную переменную для печати большего количества текста - и таким образом сократил их количество байтов. Поэтому я использовал гораздо более подробную специальную переменную. Он печатает 8 символов с именем переменной из 2 символов. Таким образом, с количеством байтов 16 (дополненным одним пробельным символом, чтобы сделать его 16), он печатает 2 * $], где печатается $]версия Perl 5.xxxxxx, в зависимости от вашей версии Perl. Без ввода он печатает его четыре раза, равный 8*4или 32, что в два раза превышает число байтов кода.

Я люблю Perl.


Я думаю, что это не для пустого ввода. Согласно правилам, если ввод не предоставлен, значение по умолчанию должно быть равно 2.
Алекс А.

@AlexA. Блин, я пропустил это. Новый код гольф. Отредактируйте входящие, но в моем ответе много символов, потому что я не представляю, как сделать это более творчески в Perl :(
Codefun64

2
Привет, еще несколько советов, которые могут помочь вам здесь, по умолчанию в программном скрипте, popи shiftработать над ними @ARGV(так, как subони работают @_), чтобы вы могли сделать что-то вроде $n=pop||2сброса первого блока кода, и у вас есть ;}в конце , что почти всегда можно просто }спасти другого. Что-то, что может помочь вам сохранить больше символов, - это оператор повторения строк x, print 1x20или что-то в этом роде ... :) Надеюсь, это поможет!
Дом Гастингс

@DomHastings Человек, спасибо! Я получил его до 2 байтов из-за вашей помощи :) Большое спасибо за ваши предложения.
Codefun64

1
Я думаю, что вы можете сократить это до этого print"n"x(21*pop||42). Запустите в командной строке сperl -e'print"n"x(21*pop||42)' 3 | wc -c
hmatt1

14

Пиф , 10 9 - 25 = -16

-1 Деннисом

**N9?zvz2

Печатает [input] * 9 кавычек или 2 * 9, если ввод пустой.

Исаак имеет более короткий ответ здесь

Pyth , 1 байт

T

Печать 10. Это встроенная переменная, которая инициализируется до 10.


Было бы полезно, если бы .x работал с ошибками. Есть ли оправдание тому, почему это не так?
lirtosiast

2
Мое лучшее предположение состоит в том, что QPyth оценивает ввод перед выполнением фактического кода. **N9.xvz2работает как положено, но не короче **N9?zvz2.
Деннис

2
Любой завершающий символ новой строки включается в число байтов вывода. Tвыходы 10и перевод строки. Используй d, это пробел, к которому добавляется
Стэн Струм


9

JavaScript, 4 байта

~$ cat main.js
+1/0
~$ nodejs main.js
Infinity

Я думаю, что это самое короткое решение JS без ES6: P


Какая версия NodeJS у вас есть? Это не работает с моим.
Деннис

1
Это также работает на консоли Firefox.
n15h ata̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

1
Конечный символ новой строки должен быть включен в длину вывода.
lirtosiast

Node.js v0.10.40вообще ничего не печатает, потому что нет команды печати. У вас есть другая версия Node.js или это работает только в оболочке, которая печатает оценку строки? (в этом случае я не думаю, что этот ответ будет действительным).
Nateowami

4 байта? Пожалуйста, сделайте это на самом деле как, правильный размер.
Star OS

9

С 27 25

main(){printf("%50f",0);}

Спасибо @Titus за удаление 2 байта


И для моего неконкурентного 16-байтового решения в C, перейдите сюда: https://codegolf.stackexchange.com/a/111330/16513

^ Я говорю не конкурирующий, потому что код ошибки может зависеть от вашего компилятора. Также обратите внимание, что я использую GCC в этом решении. Кроме того, я не уверен, нарушает ли это правило 1 или нет, я думаю, что, вероятно, так оно и есть, поэтому я назвал его неконкурентным


1
Я не думаю, что это считается действительной C-программой, но main(){printf("%0.XXf",0);}работает.
wefwefa3

2
@Zereges Нет, C имеет правило «неявного объявления», которое обычно позволяет вам использовать вещи без должного #include. Компилятор выдаст предупреждение, и он иногда будет падать, но обычно он будет работать .
Анатолий

1
@AlbertRenshaw Кроме того, я не думаю, что это работает здесь .
Зерегес

1
Обратите внимание, что 27 * 2! = 38.
mbomb007

1
@Zereges. Этот код не проявляет неопределенного поведения. Функции «неявного объявления» и «неявного возвращаемого типа» в последних стандартах устарели, но их использование все еще разрешено, и результаты хорошо определены. Существуют обстоятельства, при которых использование таких функций приводит к неопределенному поведению, но этот код не включает их.
Питер

7

V , 2 байта

Это выводы

ÿÿÿÿ

Попробуйте онлайн!

объяснение

Это действительно хакерский ответ, и он работает, злоупотребляя внутренними компонентами V. По сути, это то, как это работает, ÿэто команда в V, которая сигнализирует о завершении программы, и все ожидающие команды должны завершиться. В противном случае некоторые неявные окончания не будут работать, и интерпретация будет зависать чаще. Эта команда автоматически отправляется несколько раз в конце программы, и большую часть времени не влияет на вывод.

éэто команда, которая вставляет один символ Тем не менее, он делает это путем захвата необработанного байта, поэтому он не интерпретируется ÿкак «конец», он интерпретирует его как «это символ, который вам нужно вставить». заставляет вставлять этот символ 4 раза вместо одного.


7

Баш, 11 байт

Вот приятно ироничное использование инструмента сжатия данных :) ...

gzip -f<<<2

Вот шестнадцатеричный дамп вывода (22 байта) ...

0000000: 1f 8b 08 00 e3 ce 32 59 00 03 33 e2 02 00 90 af  ......2Y..3.....
0000010: 7c 4c 02 00 00 00                                |L....

Это выдает 22 байта «расширенного ASCII» (например, 8 бит на символ). Похоже, что это соответствует определению OP ASCII, если вы читаете комментарии к сообщению с вопросом.
Wossname

На TIO у меня было 16, но на моей машине с Linux я получил 34
Стэн Струм

@StanStrum, я не знаю, что такое TIO, но эти 34 в Linux странные. Возможно, у вас есть gzip с псевдонимом для использования различных переключателей в нормальном режиме?
Wossname

Я не знаю, так ли это, но это кажется странным. Я попробую это на некоторых LiveCD, чтобы увидеть, не испортил ли я одну из моих программ @Wossname
Stan Strum,

1
Я не тот парень, и я не воспользуюсь своим недавно заработанным 129 репутацией tyvm. Я посмотрю, смогу ли я сделать версию, которая работает на моей установке Linux
Stan Strum

6

постоянный ток, 19 - 25 = -6

2?19*[1n1-d0<l]dslx

Принимает число (2 помещается в стек в качестве резервной копии) и умножает его на 19. Печатает 1(без новой строки) и уменьшает число. Циклы, пока число больше 0.


6

C ++, 80 байт

#include<iostream>
int main(){int i=0;while(i<20){std::cout<<&i;i++;}return 0;}

обратите внимание, что символ новой строки состоит из двух символов. (если вы не хотите, чтобы это было, измените i <20 на i <= 19, чтобы вернуться к тому же числу байтов.)

Пример вывода (будет меняться каждый раз)

0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C

один и тот же 8-значный адрес памяти 20 раз.


Некоторые подсказки для игры в гольф: forпетля короче whileпетли и позволяет снимать скобки, она немного дешевле в использовании cstdioи просто printfверевка, и вам не нужно ничего возвращать.
Люк

Вы можете ограничить свой подход до 63 байтов: #include<iostream> int main(){for(int i=10;--i;)std::cout<<&i;}но уже есть более короткий ответ с немного другим подходом.
моватика

6

CJam, -9

q_,{i}{;2}?G*'X*

объяснение

  • q_,

Читает весь ввод и толкает его, затем увеличивает длину.

  • {i}{;2}?

Если длина ввода больше нуля, преобразуйте его в целое число. В противном случае, нажмите на ввод и нажмите 2.

  • G*

Нажимает 16 (длина программы), затем умножает ее на 2, если нет ввода, или вводит.

  • 'X*

Толкает X и умножает его на вершину стека.


@ThomasKwa Ой. Обновление в сек.
The_Basset_Hound

Запятая не обязательна, однако вы можете вообще избежать «если», если вы делаете логическое «или»: q2e|iдаст вам
желаемое

Также вы можете использовать S вместо 'X, единственная проблема в том, что вывод не будет виден до тех пор, пока вы его не выберете (хорошо, если вы запускаете его в автономном режиме и перенаправляете в файл, это не проблема)
aditsu

Э-э ... неважно, я только что увидел ответ Денниса: p
aditsu

Даже с условным, вы можете сократить это. Вам не нужно вычислять длину, так как пустая строка уже ложная. Вам также не нужно выталкивать пустую строку из стека, поскольку она не влияет на вывод. Что также позволяет вам избегать скобок для ветви else. Я придумал это , прежде чем я смотрел на любом из ответов: r_{i}2?SB**.
Рето Коради

6

> <> , 19 + 2 (-v флаг) - 25 = -4 байта

l?!2f4+*v
-1o;!?::<

проверить это здесь!

Спасибо Коул и Sp3000

Сначала проверяется длина стека, если она равна 0, положить 2 в стек. Умножает его на 21 (длина кода), затем выводит представление в Юникоде этого числа и уменьшает его на 1, повторяет до 0. (Вам нужно будет проверить вывод, чтобы увидеть символы, так как браузер их не отобразит)


1
Да, извините, что испортил ваш ответ (но он короче, чем мой, если это заставляет вас чувствовать себя лучше). Редактировать: к сожалению, вводится слишком рано, ваша запись в том виде, в каком она есть сейчас, недопустима в соответствии с правилом: «Вы можете предположить, что n всегда будет положительным целым числом. Если входные данные не предоставлены, по умолчанию n должно быть равно 2». Я также думаю, что он может напечатать слишком много символов (по моим подсчетам это число от 14 до 0, что составляет 15 символов, а не 14). Если я прав, то l0=?2f6+*vкак первая строка, так и 1-::0=?;o>вторая должна сделать все правильно.
Коул

Хм, не уверен, что ты имеешь в виду. Он не должен печатать 0 в любом случае. Помещение 2 в качестве начального вывода стека (EDIT: вещи, которые я не могу вставить), которые, по крайней мере, с использованием этого счетчика символов , составляют 28 символов.
торкадо

Теперь я понимаю, что вы говорите. Я интерпретировал «Ваша программа может принять число, n, в качестве ввода», означающее, что если ввод будет 2. Я отредактирую ответ, спасибо! (также я могу сохранить некоторые, используя строку вместо цифр)
torcado

Рад помочь, особенно если это> <>.
Коул

2
?!обычно лучше чем0=?
Sp3000

6

JavaScript (ES5), 68 байт - 25 бонусов = 43

alert(Array(1+(+prompt()||2)).join(document.scripts[0].textContent))

(если ваш браузер не разрешит запуск сниппета по соображениям безопасности, попробуйте эту скрипту http://jsfiddle.net/thePivottt/c3v20c9g/ )

Этот скрипт работает только в браузере, следуя как минимум DOM3 (с Node.textContent) и ECMAScript 5 (или, возможно, более старой версии). Я попытался сделать так, чтобы стандарт соответствовал и был совместим насколько возможно. Также предполагается, что скрипт находится в первом scriptэлементе документа.

На самом деле он объединяет несколько копий самого скрипта, что довольно здорово . Обратите внимание, что инструмент фрагмента в SE добавляет лишние пробелы вокруг сценария. Мы могли бы игнорировать этот пробел с, .trim()но я не считаю это необходимым, учитывая, что программа идеальна без вмешательства SE. Просто сохраните этот файл HTML5, если хотите, чтобы он работал идеально.

<!DOCTYPE html>
<html>
  <head>
    <title>Minimalist HTML5 page</title>
    <script>alert(Array(1+(+prompt()||2)).join(document.scripts[0].textContent))</script>
  </head>
</html>

Этот скрипт использует 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случаях возвращает весь найденный текст внутри них и их дочерних узлов, включая скрипты.


Обратите внимание, что если вы используете ES6 str.repeatи по-прежнему выводите сам код, это снижает счет до 26, но это немного скучно: P
Domino

Хм, я не знаю, откуда взялись эти 26, теперь мне 33. Наверное, мне стоит немного поспать.
Домино

Обратите внимание, что некоторые настройки браузера могут препятствовать использованию подсказки во фрагменте. Возможно, вам придется сохранить его, чтобы запустить его.
Домино

6

JavaScript ES6, 33 - 25 = 8

(a=2)=>Array(a*33).fill(0).join``

Попробуйте онлайн!


Я не могу заставить этот код работать на консоли. Это правильно? «Uncaught SyntaxError: Неожиданный токен =>»
Malavos

@ Malavos вам нужен браузер, совместимый с es6, такой как последняя версия Firefox. Chrome не поддерживает стандартные аргументы afaik
DankMemes

Я использую UCBrowser, но это правильно! В любом случае он основан на хроме и гекконе. Пробовал на ночной, получил "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000". Приятно! Не могли бы вы объяснить свой код для меня? Я новичок.
Малавос

2
@Malavos Хардкод 33- это фактически длина кода. Он создает новый массив с длиной, 33*aгде aвходной параметр имеет значение по умолчанию 2 согласно OP, заполняет его и возвращает объединенную строку.
DankMemes

2
Создав свой массив с одним дополнительным элементом, вы можете заполнить его объединением Arrary(1+a*<length>)иjoin`0`
Shaun H

5

Юля, 42 байта - 25 = 17

print("@"^42((r=readline())>""?int(r):2))

Это читает строку из STDIN, используя readline(). Если оно пустое, т. Е. Входные данные не были предоставлены, то n определяется как входное значение, преобразованное в целое число. В противном случае п = 2. Тогда распечатайте 42 л @ с до STDOUT.


5

Perl, 18 - 25 = -7

print$=x(<>*9||18)

Специальная переменная $=, aka $FORMAT_LINES_PER_PAGE, начинает свою жизнь как 60, и поэтому ее нужно дублировать только вдвое больше, чем необходимо для вывода байтов.


1
У меня был очень похожий ответ: print$=x9x(pop||2)приятно!
Дом Гастингс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.