Каждый член в последовательности возведения в квадрат, x n , создается путем взятия x n-1 , возведения его в квадрат и удаления всех, кроме первых четырех цифр.
Последовательность всегда начинается с x 1 = 1111 . Возведение в квадрат дает 1234321, поэтому x 2 = 1234
Первые несколько терминов:
1111
1234
1522
2316
5363
...
Соревнование
Ваша задача состоит в том, чтобы, учитывая неотрицательное целое число n , вычислить x n . Вы можете отправить полную программу, которая выполняет ввод / вывод, или функцию, которая принимает n в качестве параметра.
Ваше решение может быть нулевым или индексированным, если вы укажете, какое именно.
Поскольку все термины в этой последовательности короче 5 цифр, ваш код также должен быть максимально коротким. Применяются стандартные лазейки для игры в гольф .
Пусть победит лучший гольфист!
Тестовые случаи
Примечание: это 1-индексированный.
1 -> 1111
8 -> 6840
15 -> 7584
20 -> 1425
80 -> 4717
Ответы:
05AB1E ,
87 байтКод:
Объяснение:
Использует кодировку CP-1252 . Попробуйте онлайн!
источник
JavaScript (ES7),
444336 байтЭто отличный пример неправильного приведения типов:
**
оба его аргумента преобразуются в числа и+
оба аргумента преобразуются в строки, если только они не являются числами. Это означает, чтоf(n)**2+f
сначала преобразуетсяf(n)
в число и возводит его в квадрат, а затем объединяет результат со строковым представлениемf
. Затем мы можем использовать.slice
для получения первых 4 символов строки.Вот несколько альтернативных подходов, которые не используют строки:
Тестовый фрагмент
Показать фрагмент кода
Примечание: это используется,
Math.pow
потому что**
поддерживается не во всех браузерах.источник
Haskell, 40 байт
Это основанная на 0 последовательность. Пример использования:
((iterate(read.take 4.show.(^2))1111)!!) 79
->4717
.Как это работает:
источник
Mathematica, 48 байтов
Безымянная функция, принимающая целочисленный аргумент; 0 индексированные. Использует четыре трехбайтовых символа
⌊⌊⌋⌋
: Mathematica использует либо,Floor[x]
либо⌊x⌋
округляет действительное число до целого числа, и последний, как правило, на один байт меньше. Имена команд в Mathematica для преобразования целых чисел в строки слишком длинные, поэтому вместо этого мы выполняем математическое вычисление, чтобы найти первые четыре цифры x ^ 2: мы берем логарифм base-10 для x ^ 2, вычитаем его целую часть, поднимаем 10 обратно к этой силе, умножьте на 1000 и округлите вниз.tl; dr: логарифмы ftw
источник
Python 2,
514644 байтОпять неправильно! Рекурсивная функция возвращает. Это одноиндексное.Я хотел бы избавиться от неуклюжего,Оказывается, на данный момент, чтоif
если это возможно, но я думаю, чтоexec
может быть короче ...exec
короче.Альтернативное 46-байтовое решение с
exec
:Альтернативное 49-байтовое рекурсивное решение:
Спасибо Flp.Tkc за сохранение байта, напомнив мне, что возведение в квадрат не требует возведения в степень :)
источник
f=lambda n:1111if n<2else int(`f(n-1)**2`[:4])
V , 19 байт
Попробуйте онлайн!
При этом используется индексирование на основе 0.
Конечно, так как числа не совсем сильная сторона V , это не очень гольф. Тем не менее, это показывает одно приятное преимущество V над vim. Вы можете запустить макрос 0 раз, что невозможно в vim, так как «0» - это команда, а не счетчик.
Это содержит много непечатаемых символов, поэтому вот hexdump:
И вот читаемая версия:
Объяснение:
источник
Желе ,
129 байт-3 байта благодаря Деннису, использующему индексирование на основе 1 и
ṁ
атом формы / изменения формы. Предложения по игре в гольф приветствуются! Попробуйте онлайн!Ungolfing
источник
1
вместо⁽¡n
.Perl, 37 байт
36 байт кода +
-p
флаг.Чтобы запустить это:
источник
Powershell,
7355 байтОгромное спасибо TimmyD за то, что он сбрил 18 байтов!
Код:
for($A=1111;$args[0]---1;$A=-join"$(+$A*$A)"[0..3]){}$A
$A=1111;1..($n=2)|%{[string]$B=[math]::pow($A,2);$A=$B.substring(0,4)};$A
$n
это п в х п-1Пояснение и взорванный код:
Некоторые заметки:
1..($n=4)|%
установите $ n равным 4, а затем запустите цикл, который выполняется $ n раз.1
может быть изменено на любое целое число, и оно будет циклично $ n- [ваше целое число] +1 раз.[math]::
в Powershell - двойной. В приведенном выше коде мы должны явным образом привести$B
к строке, чтобы мы могли вызвать.substring()
ее, потому что.substring()
в Powershell нет функции для двойников.источник
Python 2,
4441 байт-3 байта благодаря xnor (используйте целочисленное деление, чтобы избежать
and
)repl.it
1-рекурсивная функция.
Когда
n>1
целое деление,1/n
приводит0
, то0*1111=0
что falsey, так что правая изor
оценивается, который принимает первые четыре символа представления квадратаn-1
й результат; это затем приведено кint
.Когда получается
n=1
целочисленное деление, то , что является правдой, и приведение к есть .1/n
1
1*1111=1111
int
1111
int
1111
источник
int
улицу. Если вы 1-индекс, вы можете сделать базовый случай короче сg=lambda n:int(1/n*1111or`g(n-1)**2`[:4])
.
s!Groovy, 49 байтов
источник
Пайк, 10 байт
Попробуй это здесь!
источник
MATL ,
14, 13 байтПопробуйте онлайн!
Объяснение:
источник
U
(квадрат, для числового ввода) вместоt*
R,
58565553 байтаБерет
N
из стандартного 3334 - это практически X_0, что необходимо, потому что цикл for необходимо выполнить хотя бы один раз (пропустить было бы дольше).R на самом деле ужасный язык для взятия первых четырех цифр числа, но, поскольку число падежей ограничено, нам нужно беспокоиться только о квадратах,
x<3163
иx>3162
, первые дают 6-значное число, последние 7-значное число ,Остальное довольно просто,
%/%
делит и игнорирует остаток.x
выводится на стандартный вывод.Сохранено 2 байта благодаря @ETHproductions
источник
3334
(или возможно3333
)?3333^2 = 11108889
так что даст1110
, и .... как я проверяю это, я вижу,3334
будет работать: | , Не уверен, почему я больше не проверял это.Javagony - 153 байта
Javagony - это ограниченная версия Java, которая не допускает какой-либо поток управления, кроме рекурсии и
try-catch
не для циклов, циклов while или if. Кодирование в нем - довольно забавное упражнение, но разочаровывающее. Не то чтобы обычная Java сама по себе не так расстраивала.источник
PHP,
5552 байтаСохранено 3 байта благодаря @ user59178
Запуск из командной строки, с нулевым индексом.
Спасибо, что не заботитесь о том, какого типа мои переменные, PHP! Здесь мы просто возводим в квадрат число и обрезаем все после первых 4 цифр, случайно чередуя число и строку без заботы в мире.
источник
$argv[1]--
в качестве счетчика цикла.Брахилог , 18 байт
Попробуйте онлайн!
Этот ответ 0 проиндексирован.
объяснение
источник
C, 56 байтов
Один индексированные.
источник
Clojure, 76 байт
Первый Clojure Golf (кажется, хороший язык). Это 1-индексированный.
Поясню код позже.
источник
C #,
6460 байтСохраненные 4 байта, следуя Оливье Грегуар «s комментарий на ответ Java!
Предыдущая версия ( 64 байта ):
Полная программа с методикой ungolfed и тестовыми примерами:
источник
n-->1
Рубин, 47 байтов
Первый гольф! Сохраняет байты с
-n
опцией (но все равно считается 1! :)).0 индексированные. Чтобы запустить это:
источник
Pyth,
1312 байтСпасибо @Jakube за -1 байт
Программа, которая принимает ввод 1-индексированного целого числа и печатает результат.
Тестирование
При этом используется аналогичный подход к ответу @ Adnan .
Как это работает
источник
*GG
вместо^G2<space>
CJam , 15 байтов
Использует индексирование на основе 0.
Попробуйте онлайн!
источник
Пакет, 82 байта
Как и в Perl, целые числа являются строками, но в отличие от Perl я могу взять только подстроку переменной, а брать подстроки внутри цикла несколько неудобно.
источник
Perl 6 , 36 байт
Объяснение:
Тест:
источник
Matlab,
79, 78 байтТестовые случаи:
Не удивительное решение. Я уверен, что должен быть лучший способ сократить до 4 цифр, но я не знаю сегодня.
Редактировать: побрил байт, установив 0,5 -> .5
источник
Java 8,
779374716978 байтКаждое повторение делает
n
первые 4 символаn*n
.Попробуйте Java онлайн !
История сообщений:
77 байт: исходный код (неполный)
+16 байт, Оливье Грегуар: завершил код, сделав его лямбда-функцией.
-19 байт: заменить
while
наfor
цикл.-4 байта: используется
long
s вместоint
s-2 байта, автор Roman Gräf: убраны лишние скобки
+9 байт, пропущенное
return
утверждениеСпасибо @ OlivierGrégoire и @ RomanGräf за указание на некоторые проблемы!
Подождите, Java бьет ... (барабанная дробь) Clojure и Matlab здесь! Большие аплодисменты Java, пожалуйста!
источник
x
не объявлено Это должна быть функция или полная программа. Не фрагмент кода.x->{int n=1111;int m=1;while(x>m++){n=Integer.parseInt((n*n+"").substring(0,4));}return n;}
(для общего количества байтов 91). Это потому, что фрагменты запрещены: только функции или полные программы.x->{Long n=1111;for(;--x>0;)n=n.valueOf((n*n+"").substring(0,4));return n;}
с несколькими используемыми методами (раньшеLong
можно было использоватьLong.valueOf
с меньшим количеством байтов, это не рекомендуется при обычном программировании, но полностью в гольфе; удаляется,m
поскольку это не нужно, если мы уменьшаемx
вместо этого удалены ненужные скобки)Perl, 36 байт
Отличный подход от другого решения Perl, приводящий к немного более короткому коду. Не требуются аргументы командной строки (кроме обычного аргумента выбора версии,
-M5.010
который не учитывается в счетчике байтов), что означает, что это тот же объем кода, но с меньшим количеством штрафов, что дает лучший общий результат.Мы создаем цикл в стиле Underload, повторяя и
eval
-ing строку; Я экспериментировал с запуском строки в середине, но запуск с самого начала оказался самым коротким. Мы умножаем$&
(результат последнего совпадения с регулярным выражением) на себя, чтобы возвести в квадрат; если результат равен нулю, мы используем1x4
(т.е.1111
Perl имеет оператор для повторения, включая цифры числа) вместо результата. Затем мы проверяем первые четыре символа. Все это работает в контексте списка из-за нахождения внутриsay
, поэтому конечным результатомeval
будет содержимое круглых скобок финального совпадения.источник
Ява,
79676664 байтаБлагодаря @ Оливер Грегуар.
Благодаря @ETHProduction.
Заменена подстрока и прочее с идеей от @Xanderhall
Хотя есть более короткие решения, я хотел бы опубликовать одно рекурсивное :). И я самая короткая «настоящая» функция :). Редактировать: Похоже, я самый короткий сейчас :)))
источник
for(i*=i;i>1e4;)i/=10;
? Это спасло бы байт.long
s? Вы можете убить два байта, используяint
s.Напористый ,
2620 байтДайте аргументы командной строки:
$ pushy sqseq.pshy 79
.Красиво отформатированный, с объяснением:
источник