Вызов
Напишите кратчайший фрагмент кода из возможных, чтобы при объединении N его копий количество выводимых символов составляло N 2 . N будет положительным целым числом.
Например, если фрагмент был soln();
, то при запуске soln();
будет напечатано ровно 1 символ, а при запуске soln();soln();
будет напечатано ровно 4 символа, а при запуске soln();soln();soln();
будет напечатано ровно 9 символов и т. Д.
Любые символы могут быть в выводе, если общее количество символов является правильным. Чтобы избежать путаницы между операционными системами, \r\n
переводы строки считаются одним символом.
Программы не могут читать свой собственный источник или размер файла или использовать другие подобные лазейки. Относитесь к этому как к строгой проблеме Куайна .
Вывод может идти в стандартный вывод или файл или подобную альтернативу. Там нет ввода.
Комментарии в коде в порядке, как и в середине исполнения.
В программе могут быть любые символы. Самая короткая подача в байтах побеждает.
источник
Ответы:
TECO, 4 байта
V
печатает содержимое текущей строки в текстовом буфере1\
вставляет строковое представление числа 1 в текущей позиции.Таким образом, на N- й итерации программы первая
V
выдаст N - 1 копию символа1
, затем добавит еще одну1
к тексту, а затем выведет N1
s.источник
Brainfuck,
1716 байтовВы можете проверить это здесь . Просто используйте тот факт, что .
n2+2n+1=(n+1)2
источник
Brainfuck, 11
Я увидел первый ответ Brainfuck и подумал, что это слишком долго :)
Вывод может быть легче увидеть, если вы замените плюс на гораздо больше плюсов.
На N-й итерации каждый цикл выводит N - 1 копию символа со значением ASCII 1, а затем еще одну с
+.
.источник
Python 2, 22
Печатает пустую строку, затем два
x
, затемx
четыре и так далее. С новой строки после каждой строки, это выходит наn*n
символы.Один экземпляр:
"\n"
(1 символ)Два экземпляра:
"\nxx\n"
(4 знака)Три экземпляра:
"\nxx\nxxxx\n"
(9 символов)Чтобы предотвратить
a
повторную инициализацию исходной переменной при каждом запуске, я заканчиваю код символом a;a
, который сам по себе доброкачественный, но в сочетании со следующим циклом создает козла отпущения,aa
который будет назначен вместо этого. Этот трюк не мой; Я видел это в предыдущем ответе. Я был бы признателен, если бы кто-то мог указать мне, чтобы я мог отдать должное.источник
,
послеprint a
должно работать.print a
печатает новую строку после каждой печати.CJam, 6 байтов
Использует тот факт, что .
n2 + n + (n+1) = (n+1)2
источник
:L..1+
та же идея в GolfScript...n+
GolfScript, но этот досадный завершающий символ новой строки ... :(:L
потому что он не используется./// , 21 байт
Я уверен, что есть очень короткий и хитрый способ решить эту проблему в ///, но я не смог найти ничего, кроме «простого» способа:
Это основано на подходе печати последовательных нечетных чисел. Фрагмент состоит из
1
напечатанного в начале символа и двух замен, которые добавляют еще две1
буквы к первой части каждой последующей копии фрагмента. Давайте пройдем через это дляN = 3
. Следующее должно быть прочитано группами из 3 или более строк: 1. текущий код, 2. обработанный токен (ы), 3. (и последующий) комментарий, что делает вышеуказанный токен.Интересно, что это работает так же хорошо, если мы переместим
1
до конца:источник
> <> , 14 байт
Использует идею «сумма последовательных нечетных целых чисел, начиная с 1». Он начинается с 1 и умножается на 100 каждый раз, постепенно увеличивая длину вывода с шагом 2.
Например, добавление 5 копий дает
Я проверил, отправив вывод в файл, и не увидел завершающий перевод строки.
Сломать
источник
CJam,
109 байтовЭто печатает N 2 пробелов, где
N
количество копий кода.Расширение кода :
Попробуйте онлайн здесь
источник
Python 2, 20 байт
источник
Java - 91 байт
Это решение эквивалентно другому в Python. Это конечно не победит, но это было весело :)
источник
Perl, 14 байт
Это должно быть запущено с помощью
-l
командного переключателя Perl , который вызываетprint
добавление новых строк.Он печатает переменную по умолчанию
$_
, а затем добавляет два подчеркивания через подстановку.Пример:
источник
say
?-E
вместо этого.Brainfuck, 10 символов
Оба предыдущих решений Brainfuck были waaay слишком долго (16 и 11 символов) , поэтому здесь более короткий:
В
n
-ом блоке он печатает2*n-1
символы (с кодовыми точками от2*n-1
до1
)источник
Прелюдия ,
1812 байтЭто печатает N 2 вкладок. Предполагается, что он соответствует стандартному интерпретатору, который печатает символы вместо цифр, поэтому, если вы используете интерпретатор Python, вам необходимо установить
NUMERIC_OUTPUT
егоFalse
.Идея состоит в том, чтобы просто использовать вершину стека (которая изначально равна 0)
2(N-1)
и распечатать2N-1
вкладки, а затем увеличить вершину стека на 2. Следовательно, каждое повторение печатает следующее нечетное количество вкладок.источник
Java - 59/44 (в зависимости от требований)
По-видимому, мы можем предположить, что код выполняется в классе.
Если это может пойти внутри основного метода:
источник
C 87 байтов
Это использует два магических макроса.
__COUNTER__
это макрос, который раскрывается до0
первого использования,1
второго и т. д. Это расширение компилятора, но доступно по крайней мере как в gcc, clang, так и в Visual Studio.__FILE__
это имя исходного файла. Включение файла в C / C ++ - это то же самое, что вставка его непосредственно в исходный код, поэтому использовать его было немного сложно.Было бы все еще возможно использовать эту технику без
__COUNTER__
. В этом случае стандартная защита от использования кода дважды может использоваться для#if
оператора и__LINE__
может использоваться для подсчета необходимого количества символов.источник
Дьялог АПЛ,
2019 байтРешение на основе матрицы.
Попробуй это здесь . Возвращает строку повторений . Объяснение взрывом для :
N2
a
N = 2
источник
СТАТА 20
Есть завершающая новая строка, чтобы убедиться, что оператор display (di) работает. Сначала отобразите текущее число в $ a новых строк (и еще одно из значений по умолчанию для отображения). Затем добавьте 2 к $ a.
Использует метод четных чисел (то есть нечетные числа приближаются к минус 1) с дополнительной новой строкой каждый раз.
источник
T-SQL 117
Обратите внимание на пробел, чтобы убедиться, что условие if каждый раз проверяется должным образом.
Использует подход нечетных чисел. Не уверен, есть ли новая строка в операторах выбора.
Не уверен, если есть более короткий способ создать таблицу, если она не существует.
источник
PostScript, 35 символов
Каждый проход «пропускает» одну вещь в стек, поэтому
count
каждый раз увеличивается на 1. Тогда он использует трюк суммы нечетных чисел.Все байты выводятся,
\000
потому что это начальное значение строк.источник
Хаскелл, 72
объяснение
Оператор apply
$
действует так, как будто вы помещаете круглые скобки вокруг остальной части строки (есть исключения из этого, но в этом случае это работает).aputStr
является функцией, которая принимает строку в формате «abc ...», где «abc» - квадратный корень длины строки, включая abc. Он проанализирует строку как целое число и вернет строку, начинающуюся с abc + 1 и имеющую эту длину в квадрате. Из-за$
оператора это будет вызываться рекурсивно в «1» N раз.источник
Pyth, 8 байт
Это зависит от того факта, что N 2 равно сумме
N
нечетных чисел. Теперь Pyth автоматически печатает новую строку, так что я должен просто напечататьZ * 2
символы в каждом коде , гдеZ
идет от0
кN - 1
.Расширение кода :
Попробуйте онлайн здесь
источник
Golflua, 23 байта
выводит комбинацию
&
и\n
символов.Эквивалентный код Lua
Каждый раз, когда выполняется фрагмент кода, он выводит на 2 символа больше, чем в прошлый раз, начиная с 1 символа.
print
Функция добавляет символ новой строки, так что я инициализировать X до 0 вместо 1.источник
ActionScript - 27/26 байт
или
Как это работает:
Это просто комментирует первую строку. Примечание:
trace
добавляет новую строку. Или, может быть, все IDE, которые я использую, делают это автоматически.источник
GML, 27
источник