Introdução
Na base 10, a constante Champernowne é definida concatenando representações de números inteiros sucessivos. Na base 10: 0.1234567891011121314151617...
e assim por diante.
Você pode ver que a primeira aparição de 15
começa no 20th
decimal:
Position
0000000001111111111222222222233333333334444444444555555555566666666
1234567890123456789012345678901234567890123456789012345678901234567
^
0.1234567891011121314151617181920212223242526272829303132333435363738...
^^
15 = position 20
A primeira aparição de 45
começa no 4th
decimal:
Position
0000000001111111111222222222233333333334444444444555555555566666666
1234567890123456789012345678901234567890123456789012345678901234567
^
0.1234567891011121314151617181920212223242526272829303132333435363738...
^^
45 = position 4
Então, a tarefa é fácil. Dado um número inteiro não negativo, imprima a posição do número inteiro na constante Champernowne.
Regras
- Você pode fornecer uma função ou um programa
- Isso é código-golfe , então a submissão com a menor quantidade de bytes ganha!
Casos de teste
Input: 20
Output: 30
Input: 333
Output: 56
Input: 0
Output: 11 (note that the 0 before the decimal point is ignored)
Input: 2930
Output: 48
0 <= x <= 99
, mas teoricamente deve funcionar para números inteiros maiores que99
.Respostas:
Pitão, 10
Concatena os primeiros
input + 10
números e encontra o índice baseado em 0 mais um. Os dez extras são necessários apenas para 0.Suíte de teste
fonte
2015-12-17 15:01:23Z
ou algo assim?LabVIEW, 29 primitivas do LabVIEW
Isso usa seqüências de caracteres por enquanto. Ele corresponde à entrada como um padrão e gera o deslocamento - (comprimento da entrada -1).
fonte
Javascript, 57 bytes
Guardado 1 byte graças a Conor O'Brien.
fonte
y=
peça para oy=b=" "
; incrementar um espaço é como incrementar zero. (a=prompt(y=b=" ");...
)Haskell, 62 bytes
Exemplo de uso:
(#(show=<<[1..])).show $ 2930
->48
.Como funciona:
a # b
encontra a posição dea
dentro deb
: sea
é o prefixo deb
retorno1
, caso contrário, adicione1
a uma chamada recursiva coma # tail b
. A função pointfree(#(show=<<[1..])).show
espera um argumento (sem nome)n
e chamashow n # show=<<[1..]
.A função
subIndex
também faria o trabalho de#
, mas o necessárioimport Data.List.Utils
não compensa.fonte
.show
Ruby, 28
Inclui um 0 no início, para que as correspondências sejam indexadas em 1, mas
\B
exige que a correspondência não seja no início da sequência.fonte
Japonês, 11 bytes
Isso foi originalmente superado por Pyth, mas aparentemente não funcionou como entrada
0
.Experimente online!
Como funciona
fonte
q
no código e não o símbolo de negação lógica¬
?¬
é um atalho paraq
(isto é,q
com um espaço a seguir). Isso geralmente parece ser um ponto de confusão, então alinhei a versão mais curta com a versão completa.Lua, 54 bytes
Nota:
Atualmente, este programa imprime a primeira ocorrência do primeiro caractere da sequência e o ponto em que termina. Se isso não for permitido, custará mais alguns bytes.Gostaria de solicitar um bônus, porque meu programa imprime a primeira e a última posição do número de entrada.fonte
MATL , 22 bytes
Pegue a entrada (
i
), faça o vetor 1 para inserir + 10 (10+:
), converta o vetor em uma string (Ys
) e remova os espaços, o que é doloroso, (t' '=~)
). Em seguida, converta a entrada em uma string (Ys
), encontre onde a string de entrada está na string de números (Xf
) e pegue o primeiro local (1)
). Ost
'ew
' estão manipulando a pilha (duplicados e trocados, respectivamente).fonte
PowerShell,
3944 bytes[Editar: minha suposição não se sustenta, a construção de uma matriz de 1-0 não encontra 0 no lugar 11. Em vez disso, construa de 1-x + 10 para lidar com 0 também, agora com 44 bytes]
Você sempre encontrará x ao criar uma sequência da constante Champernowne no ponto mais recente ao adicionar x ao final, portanto, uma matriz de 1-x sempre terá a resposta. A questão passa a ser "ocorre mais cedo do que isso?" . Este código
gera um intervalo de números, converte-o em uma sequência e procura o parâmetro dentro dele. Como o PowerShell é um shell orientado a objetos, o parâmetro é realmente um
[int]
tipo, portanto, tentar salvar dois caracteres.IndexOf($i)
pesquisaria na seqüência um número inteiro e não encontraria nada. É por isso que eu uso a interpolação de strings"$i"
.fonte
.IndexOf()
aparentemente tenha maior preferência operacional do que unário,-join
forçando as parênteses e as cotações. : - /MATL (versão 1.0.1), 22 bytes
Exemplo
Explicação
MATL (versão 20.8.0), 16 bytes (desafio de pós-datas do idioma)
Os nossos agradecimentos a @ Giuseppe por esta versão do programa (ligeiramente modificada)
Experimente online!
Explicação
fonte
G
contém a entrada (e a entrada implícita), acho que essa resposta pode ser bastante reduzida, e toda aYs
necessidade de mudar deV
qualquer maneira; Eu vim com10+:"@Vv]!GVXf1)
16 bytes.Ys
precisava mudarV
para usar na versão mais atualizada do intérprete. Fico sempre impressionado com o quanto a linguagem melhorou!PowerShell,
5450 bytesAgradecemos a TessellatingHeckler pela ideia de trocar o
while
loop por umfor
loop.Executa através de um
for
loop. Como em outros idiomas, a primeira instrução do loop pode construir variáveis e atribuições, portanto, isso começa com$c
igual apenas à string vazia,''
para que tenhamos uma indexação zero da string alinhada com a indexação decimal do desafio. Estamos então em um loop que verifica se$c
há um número inteiro de entrada ($args
) em algum lugar (ou seja, como.IndexOf()
retorna-1
se a string não for encontrada, adicionamos um a that (0
) e não ele ($TRUE
) para continuar o loop). Se não for encontrado, adicionamos nossa$i
variável pré-incrementada e , em seguida, verifique novamente a sequência. Quando a string for encontrada,.IndexOf()
retornará um valor positivo, o qual não será$FALSE
, saindo do circuito. Finalmente, produzimos o índice com$x
.fonte
for
loop clássico ...for($c='.';($x=$c.IndexOf("$args"))-lt0;$c+=++$i){}$x
e salve 1 caractere. Como a maioria das chamadas IndexOf retornará -1, adicione uma e booleana! faça um teste mais curto. Mas você precisa de parênteses para fazer isso. Esvazie $ ce +1 em parênteses existentes, o bônus é mais curto.for($c='';!($x=$c.IndexOf("$args")+1);$c+=++$i){}$x
51 bytes. (mas eu publiquei meu de 39 bytes como resposta própria, porque é uma abordagem completamente diferente: P).$c
concatenação para o circuito para jogar um ponto e vírgula. Agora às 50.JavaScript (ES6), 40 bytes
Usa a função recursiva
f
para evitar loops. O método de pesquisa funciona da mesma formaindexOf
que, exceto que é necessário um RegExp como parâmetro, o que é irrelevante para esse desafio.A adição de a
" "
para on=0
caso (zero é falso em JS) força a+
concatenação de string a executar em vez de adição e corrige a indexação baseada em zero.fonte
Python 3, 54.
fonte
CJam, 11 bytes
Teste aqui.
Estou encontrando a posição de
N
na string01234...N
para explicar a indexação baseada em 1. Finalmente, eu corrijo0
aplicando OR lógico com 11.fonte
Sério, 13 bytes
Recebe a entrada como um número inteiro. Contém não imprimíveis, portanto, hexdump:
Experimente online
Explicação:
fonte
, 13 caracteres / 22 bytes
Try it here (Firefox only).
fonte
k4, 21 bytes
O mesmo que todos os outros - concatenar
[1..10+x]
como strings, pesquisar x como string, converter em indexação baseada em uma, retornar o primeiro hit.Verificando os casos de teste:
fonte
Mathematica, 101 bytes
fonte
Haskell ,
827355 bytesMigrado da duplicata
Experimente online!
Explicação
Primeiro nós definimos
!
.x!b
truncab
para a primeira aparição dex
. Ele faz isso verificando seb
começa comx
(or$zipWith(==)x b
) retornandox
se o fizer e movendo um para baixo na sequência, caso contrário. Então definimos nossa função principal. Nossa função principal é uma função sem ponto que pega a constante (show=<<[1..]
) e a trunca para a primeira aparição dex
. Isso levax
como uma string.fonte
05AB1E , 6 bytes (não concorrente)
Experimente online!
fonte
JavaScript (ES6),
503938 bytesTente
fonte
Gelatina , 5 bytes
Experimente online!
fonte
Stax , 6 bytes
Execute e depure
fonte
Perl 6 , 26 bytes
Experimente online!
Localiza o índice do elemento no intervalo concatenado de 0 a esse elemento ou
11
se o número é zerofonte
Perl 5 , 42 + 1 (-p) = 43 bytes
Experimente online!
Explicação
fonte
Perl 6 / Rakudo 29 bytes
Define uma função com uma entrada ($ ^ a). Ligue assim:
Anexando
$
, uma variável anônima, incrementando$++
até a entrada$^a
ser encontrada e, em seguida, contando o número de caracteres antes dela. Exigir pelo menos 1 caractere antes dele.+
na regex exclui utilmente o caso 0-> 0fonte
J, 30 bytes
Provavelmente poderia ser um pouco mais complicado, especificamente na concatenação dos primeiros n + 10 números inteiros.
Explicação:
Observe que esse índice é 0. Exemplos:
fonte
Casca , 6 bytes
Experimente online!
fonte