Você deseja criar uma cadeia de caracteres onde esteja o caractere ( indexado 1 ) no índice . Quando é inferior a 10, isso é fácil: . Quando 12, por exemplo, torna-se impossível, pois números maiores que 9 (na base 10) ocupam mais de um caractere. Podemos comprometer dividindo a string em substrings de dois caracteres: . Agora, o índice do final de cada substring é .n
n
n
"123456789"
n
"020406081012"
n
n
Isso pode ser generalizado para qualquer d
número de dígitos. Aqui está uma explicação para a parte "0991021" da sequência de caracteres para um número de três dígitos:
Index: ... * 97 98 99*100 101 102*103 ...
* * *
*---+---+---*---+---+---*---+
Character: ... * 0 | 9 | 9 * 1 | 0 | 2 * 1 | ...
*---+---+---*---+---+---*---+
Se você ainda não descobriu, você deve escrever um programa / função que pega uma string ou um número inteiro e gera sua string autorreferencial, conforme especificado acima. Você também pode gerar uma matriz de números de um dígito, caracteres ou cadeias de caracteres únicos.
O número inteiro sempre será positivo e divisível por seu comprimento (por exemplo, 126 é divisível por 3; 4928 é divisível por 4). Teoricamente, seu programa deve funcionar para uma entrada arbitrariamente grande, mas você pode assumir que é menor que o número inteiro máximo do seu idioma e / ou o comprimento da string.
Algumas observações, se você ainda não entendeu: O comprimento da saída sempre será a própria entrada e os números que aparecerem na saída serão divisíveis pelo número de dígitos na entrada.
Isso é código-golfe , então a resposta mais curta em bytes vence.
Casos de teste
1 => 1
9 => 123456789
10 => 0204060810
105 => 003006009012015018021024027030033036039042045048051054057060063066069072075078081084087090093096099102105
1004 => 00040008001200160020002400280032003600400044004800520056006000640068007200760080008400880092009601000104010801120116012001240128013201360140014401480152015601600164016801720176018001840188019201960200020402080212021602200224022802320236024002440248025202560260026402680272027602800284028802920296030003040308031203160320032403280332033603400344034803520356036003640368037203760380038403880392039604000404040804120416042004240428043204360440044404480452045604600464046804720476048004840488049204960500050405080512051605200524052805320536054005440548055205560560056405680572057605800584058805920596060006040608061206160620062406280632063606400644064806520656066006640668067206760680068406880692069607000704070807120716072007240728073207360740074407480752075607600764076807720776078007840788079207960800080408080812081608200824082808320836084008440848085208560860086408680872087608800884088808920896090009040908091209160920092409280932093609400944094809520956096009640968097209760980098409880992099610001004
C, 64 bytes
Pega um único inteiro como entrada no stdin.
fonte
JavaScript (ES6), 83 bytes
Sim, essa é uma sequência de modelos aninhada. 79 bytes no ES7:
fonte
MATL ,
1514 bytesExperimente online!
fonte
05AB1E , 15 bytes
Código:
Explicação:
A fusão é feita assim:
A partir destes:
Isso resulta em:
Usa a codificação CP-1252 . Experimente online! .
fonte
ñ
funcionava assim.Python 2,
7870686463 bytesBasicamente, basear-se na idéia de melancia destrutível torna-o ainda menor (o uso
input
é ainda melhor) (o preenchimento da sequência para trás salva 4 bytes) (não()
emwhile
):Aqui está a antiga abordagem de 70 bytes (economizando 8 bytes usando aspas em vez de
str
e colocando os colchetes ao redor do gerador, graças a Dennis):fonte
`x`
vez destr(x)
. Além disso, você não precisa[]
do gerador.while(n)
.Python 2, 63 bytes
Teste em Ideone .
fonte
JavaScript (ES6), 66
Recursiva, entrada
n
como uma string (não um número) e limitando o tamanho da string de saída para 2 GB (acima do limite da string da maioria dos mecanismos javascript)Teste
fonte
R,
666462 byteseditar:
x=nchar(n<-scan());paste0(str_pad(1:(n/x)*x,x,,0),collapse="")
primeira tentativa de golfe ...
fonte
2sable , 13 bytes
Código:
Usa a codificação CP-1252 .
fonte
15AB1E
Braquilog ,
5345423728 bytesExperimente online!
fonte
Bash,
3122 bytesTeste em Ideone .
Obrigado a @izabera por jogar fora 6 bytes!
fonte
Ruby,
5248 +n
sinalizador = 49 bytesfonte
chop
se presumir que a entrada é passada sem uma nova linha à direita? Não tenho certeza se isso funcionaria. Ou que tal supor que sempre exista um e escreverl=~-size
?size
assim não funciona para mim. Bem, lembrei-me de um truque que havia usado em uma resposta anterior que é mais curta de qualquer maneiraPython
32,797469656867 bytesGraças à dennis!
aumento da contagem de bytes devido ao método de saída incorreto
fonte
len(x)
vez def
e depois salvar bytes atribuindo-o a uma variável?/
realiza argumentos de divisão inteira foe.integer.zsh, 28 bytes
zsh + seq,
2120 bytesEssa é praticamente a mesma resposta que Dennis, mas em 20 bytes porque o zsh
fonte
Haskell, 51 bytes
fonte
Perl, 40 bytes
Código de 39 bytes + 1 para
-n
.Uso
fonte
k4, 27
Não é realmente um jogo de golfe, apenas uma implementação direta das especificações.
fonte
Javascript - 76
ou 71 se permitir argumentos de sequência:
Graças a @ user81655!
Ungolfed:
muito lugar para melhorias, mas estou cansado agora
fonte
n=>eval('c="";for(a=b=(""+n).length;a<=n;a+=b)c+=`${+`1e${b}`+a}`.slice(1)')
. Os principais bits estão usando umfor
loop e o1e${b}
truque de Neil .Uncaught SyntaxError: Invalid or unexpected token
. Ainda nãoR,
149142138 bytesDeixar
nchar
o código fornece um programa com o mesmo número de bytes que o substituib
, mas ter letras aleatórias vagando no código o torna mais ... misteriosoUngolfed:
Cada um
nchar(strtoi(something))
permite calcular o número de numerais em um determinado número.A
strsplit
função gera uma lista de vetores contendo os elementos divididos. É por isso que você precisa alcançar o1
elemento st da lista e, em seguida, oi
elemento th do vetor, escrevendostrsplit[[1]][i]
fonte
SQF - 164
Usando o formato de função como um arquivo:
Ligar como
INTEGER call NAME_OF_COMPILED_FUNCTION
fonte
PowerShell, 77 bytes
Usa interpolação de string para encurtar as conversões de string. As partes anteriores ao segundo ponto e vírgula abreviam os nomes das coisas reutilizadas. Então, todo número inteiro até a entrada - e somente aqueles que são múltiplos do comprimento da entrada - é preenchido para ter o comprimento da string de entrada e, finalmente, unidos em uma.
fonte
Na verdade, 30 bytes
Experimente online!
Não estou satisfeito com o comprimento desse código, mas não tenho certeza de que ele possa ser reduzido muito mais (se houver).
Explicação:
fonte
CJam, 19 bytes
Experimente online . Ninguém postou no CJam ainda, então esse é o script que eu usei para os casos de teste.
Explicação
fonte
PHP,
8378 bytesDicas são mais do que bem-vindas. Consiga jogar sozinho um byte, alterando-o de um loop for para um while.
Este código assume que isso está sendo executado a partir da linha de comando e que $ argv [1] é o int.
Graças a:
@AlexGittemeier Sua sugestão (ver comentários) aumentou isso de 5 a 78 bytes.
fonte
echo sprintf(...)
->printf(...)
Perl 6,
695946 bytesfonte
fmt
na lista em vez demap
,sprintf
e[~]
. 42 bytes