Вы хотите , чтобы сделать строку , в которой ( 1-индексированный ) символ по индексу n
является n
. Когда n
меньше 10, это легко "123456789"
. n
Например, когда 12, это становится невозможным, поскольку числа больше 9 (в базе 10) занимают более одного символа. Мы можем поставить под угрозу путем деления строки на два символьных подстроки: "020406081012"
. Теперь индекс конца каждой подстроки n
равен n
.
Это может быть обобщено для любого d
числа. Вот объяснение части «0991021» строки для трехзначного числа:
Index: ... * 97 98 99*100 101 102*103 ...
* * *
*---+---+---*---+---+---*---+
Character: ... * 0 | 9 | 9 * 1 | 0 | 2 * 1 | ...
*---+---+---*---+---+---*---+
Если вы еще не выяснили это, вы должны написать программу / функцию, которая принимает строку или целое число и выводит строку со ссылками на себя, как указано выше. Вы также можете вывести массив из однозначных чисел, символов или односимвольных строк.
Данное целое число всегда будет положительным и делимым на его длину (например, 126 делится на 3; 4928 делится на 4). Ваша программа теоретически должна работать для произвольно большого ввода, но вы можете предположить, что он меньше, чем максимальное целое число и / или длина строки вашего языка.
Некоторые наблюдения, если вы все еще не получили его: длина вывода всегда будет самим вводом, а числа, которые появляются в выводе, будут делиться на количество цифр на входе.
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Контрольные примеры
1 => 1
9 => 123456789
10 => 0204060810
105 => 003006009012015018021024027030033036039042045048051054057060063066069072075078081084087090093096099102105
1004 => 00040008001200160020002400280032003600400044004800520056006000640068007200760080008400880092009601000104010801120116012001240128013201360140014401480152015601600164016801720176018001840188019201960200020402080212021602200224022802320236024002440248025202560260026402680272027602800284028802920296030003040308031203160320032403280332033603400344034803520356036003640368037203760380038403880392039604000404040804120416042004240428043204360440044404480452045604600464046804720476048004840488049204960500050405080512051605200524052805320536054005440548055205560560056405680572057605800584058805920596060006040608061206160620062406280632063606400644064806520656066006640668067206760680068406880692069607000704070807120716072007240728073207360740074407480752075607600764076807720776078007840788079207960800080408080812081608200824082808320836084008440848085208560860086408680872087608800884088808920896090009040908091209160920092409280932093609400944094809520956096009640968097209760980098409880992099610001004
C, 64 байта
Принимает одно целое число в качестве входных данных на стандартный ввод.
источник
JavaScript (ES6), 83 байта
Да, это вложенная строка шаблона. 79 байтов в ES7:
источник
MATL ,
1514 байтовПопробуйте онлайн!
источник
05AB1E , 15 байтов
Код:
Объяснение:
Слияние сделано так:
От них:
Это приводит к этому:
Использует кодировку CP-1252 . Попробуйте онлайн! ,
источник
ñ
работает.Python 2,
7870686463 байтаФактически, основываясь на идее «Разрушаемый арбуз», он становится еще меньше (использование
input
еще лучше) (заполнение строки назад экономит 4 байта) (нет()
приwhile
):Вот старый 70-байтовый подход (экономия 8 байтов с использованием обратных кавычек вместо
str
использования квадратных скобок вокруг генератора благодаря Деннису):источник
`x`
вместоstr(x)
. Кроме того, вам не нужно[]
вокруг генератора.while(n)
.Python 2, 63 байта
Проверьте это на Ideone .
источник
JavaScript (ES6), 66
Рекурсивный, ввод
n
в виде строки (не числа) и ограничение размера выходной строки до 2 ГБ (что превышает предел строки в большинстве движков JavaScript)Тест
источник
R,
666462 байтаредактировать:
x=nchar(n<-scan());paste0(str_pad(1:(n/x)*x,x,,0),collapse="")
первая попытка игры в гольф ...
источник
2sable , 13 байт
Код:
Использует кодировку CP-1252 .
источник
15AB1E
Brachylog ,
5345423728 байтПопробуйте онлайн!
источник
Баш,
3122 байтаПроверьте это на Ideone .
Спасибо @izabera за отыгрывание 6 байтов!
источник
Рубин,
5248 +n
флаг = 49 байтовисточник
chop
если вы предполагаете, что ввод передается без завершающего перевода строки? Я не уверен, что это сработает. Или как насчет предположения, что всегда есть один, и письмаl=~-size
?size
так, не работает для меня. О, хорошо, я вспомнил трюк, который я использовал в более раннем ответе, который все равно корочеPython
32,797469656867 байтСпасибо Деннис!
увеличение количества байтов из-за неправильного метода вывода
источник
len(x)
вместо ,f
а затем сохранить байт, назначив его переменной?/
выполняет целочисленное деление аргументов foe.integer.зш, 28 байт
zsh + seq,
2120 байтЭто почти тот же ответ, что и у Денниса, но в 20 байтах, потому что zsh
источник
Haskell, 51 байт
источник
Perl, 40 байт
39 байт код + 1 для
-n
.использование
источник
к4, 27
Не совсем игра в гольф, просто прямая реализация спецификации.
источник
Javascript - 76
или 71, если разрешены строковые аргументы:
Спасибо @ user81655!
Ungolfed:
много места для улучшения, но я устала прямо сейчас
источник
n=>eval('c="";for(a=b=(""+n).length;a<=n;a+=b)c+=`${+`1e${b}`+a}`.slice(1)')
. Главные биты используютfor
петлю и1e${b}
трюк Нейла .Uncaught SyntaxError: Invalid or unexpected token
. Еще не отлажен, так как я только что проснулся: DR
149142138 байтОставление
nchar
в коде дает программе с тем же числом байтов, что и ее заменуb
, но наличие случайных букв, блуждающих в коде, делает ее более ... загадочнойUngolfed:
каждый
nchar(strtoi(something))
позволяет вычислить количество чисел в данном числе.strsplit
Функция выводит список векторов , содержащих splitten элементов. Вот почему вы должны добраться до1
элемента st списка, а затем доi
элемента th вектора:strsplit[[1]][i]
источник
SQF - 164
Использование формата «функция как файл»:
Позвонить как
INTEGER call NAME_OF_COMPILED_FUNCTION
источник
PowerShell, 77 байт
Использует интерполяцию строк для сокращения приведения строк. Части перед второй точкой с запятой сокращают названия повторно используемых вещей. Затем каждое целое число до входного значения - и только те, которые кратны длине входного значения - дополняются до длины входной строки и, наконец, объединяются в одно.
источник
На самом деле, 30 байтов
Попробуйте онлайн!
Меня не устраивает длина этого кода, но я не уверен, что его можно сделать намного короче (если вообще).
Объяснение:
источник
CJam, 19 байтов
Попробуйте онлайн . Никто еще не публиковал в CJam, так что это сценарий, который я использовал для тестовых случаев.
объяснение
источник
PHP,
8378 байтСоветы более чем приветствуются. Управляйте игрой в гольф одним байтом, меняя цикл с цикла на цикл.
Этот код предполагает, что это выполняется из командной строки и что $ argv [1] является int.
Благодаря:
@AlexGittemeier Его предложение (см. Комментарии) увеличило это значение на 5 байт до 78 байт.
источник
echo sprintf(...)
->printf(...)
Perl 6,
695946 байтисточник
fmt
в списке вместоmap
,sprintf
и[~]
. 42 байта