É bastante simples, dado um número n
, criar um intervalo de 0
até n-1
. De fato, muitos idiomas fornecem essa operação como incorporada.
O seguinte programa CJam lê um número inteiro e imprime esse intervalo ( Experimente online! ):
ri,
Observe que ele imprime números sem um separador.
O desafio
Sua tarefa é reverter esse processo. Você deve escrever um programa que, dada uma sequência que represente um intervalo, retorne o número usado para produzir esse intervalo.
Especificações
- Os números são fornecidos sem nenhum separador.
- Você pode assumir que a string forma um intervalo válido.
- Você pode usar a indexação com base em 0 ou 1 em seu intervalo.
- Você pode assumir que uma saída correta nunca excederá 32.767 (portanto, uma entrada válida nunca terá um comprimento maior que 152.725).
- Você pode assumir que uma saída correta sempre será positiva (portanto, você não precisa lidar com 0 ou negativo).
Isso é código-golfe , então a resposta mais curta da concorrência (medida em bytes) vence.
Casos de teste
Indexado em 0:
0123 -> 4
0 -> 1
0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 -> 101
1 indexado:
1234 -> 4
1 -> 1
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 -> 100
Respostas:
Prolog (SWI) ,
9180 bytesIndexado a 0.
Novas linhas adicionadas para facilitar a leitura.
Experimente online!
fonte
Casca , 5 bytes
Experimente online!
Apenas letras!
Recebe a entrada como uma sequência, o resultado é 1 indexado.
Explicação
fonte
05AB1E ,
76 bytes1 indexado.
Experimente online! ou como um conjunto de testes
Explicação
fonte
0
independentemente da entrada: tio.run/##MzBNTDJM/f8/3efcdi/PbLv//5UMjYxNTM3MLSwNDZQA[NÝJQ#]N
foi minha ideia, mas é melhor porque funciona""
.Java 8,
6659 bytesIndexado a 0
-7 bytes graças a @ PunPun1000 .
Tenho a sensação de que isso pode ser reduzido, verificando apenas o comprimento da entrada de alguma forma, pois podemos assumir que a entrada é sempre válida. Ainda estou descobrindo isso.Não foi possível descobrir isso, e provavelmente custará muitos bytes em Java para ser útil de qualquer maneira (o mesmo se aplica ao retorno de uma substring no final de uma entrada indexada em 1).Explicação:
Experimente aqui.
fonte
Braquilog ,
97 bytesExperimente online!
Indexado a 0.
Explicação
Aqui passamos a entrada pela variável Output e acessamos o resultado pela variável Input.
fonte
Ly , 29 bytes
Experimente online!
Não posso acreditar que isso funcionou tão bem quanto ...
fonte
Japonês , 8 bytes
Começando a entender os métodos de função no Japt.
Indexado a 0. Pode receber a entrada como uma string, um número inteiro ou uma matriz contendo 0 ou 1 elementos.
Teste-o
Explicação
Entrada implícita da sequência
U
.Obtenha o primeiro número inteiro
>=0
que retorna true quando passado por uma função que ...Gera uma matriz de números inteiros de
0
1 a menos que o número inteiro atual ...Une-o a uma string ...
Verifica essa cadeia quanto à igualdade com
U
.Saída implícita do número inteiro resultante.
Alternativa, 8 bytes
Teste-o
fonte
Carvão vegetal , 13 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
fonte
Haskell,
4037 bytesFunção que inverte intervalos com base em zero.
Obrigado a Laikoni por economizar 3 bytes!
Experimente online.
fonte
f s=[n|n<-[0..],(show=<<[0..n])>s]!!0
.|m<-n+1=s!m
.Retina , 30 bytes
Adiciona recursivamente um ponto e vírgula após cada número e conta o número de ponto e vírgula
Experimente online!
fonte
JavaScript (ES6),
3231 bytesGuardado 1 byte graças a Challenger5
Casos de teste
Mostrar snippet de código
fonte
f(payload_param)()
ou mesmof(payload_param)(some_constant)
. (Aliás, eu não tenho certeza de que iria funcionar, neste caso particular, porque eu preciso tantor
en
ser inicializado.)Mathematica, 46 bytes
Indexado 1
entrada
fonte
Ruby ,
515046 bytes(Este é o meu primeiro programa Ruby, por isso deve ser fácil jogar ainda mais)
-4 bytes graças a @Nnnes
fonte
.index(gets)
=>.index gets
. Você pode usar em4e4
vez de8**5
, embora isso o torne mais lento. Geralmente, tudo bem, e geralmente economiza alguns bytes, para usar lambdas anônimas nas respostas do Ruby: Experimente online! (I mudou o limite para 100 para que ele não expirar.)Python 2 , 43 bytes
Experimente online!
Python 2 , 43 bytes
Experimente online!
Python , 46 bytes
Experimente online!
Uma estratégia diferente. Pega um número de caracteres no final igual ao comprimento da maior sequência de
0
s em s.Python , 46 bytes
Experimente online!
Versão recursiva do acima.
fonte
... i*'0'in s[1:] for ...
algo assim?R , 47 bytes
Experimente online!
Indexado 1
fonte
"if"
vez deifelse
nchar
funciona como você pode esperar dos números. No entanto, você precisa lidar com a impressão de sua saída, pois isso não aconteceria quando executado como um programa completo.n=nchar(scan());cat(which(cumsum(nchar(1:n))==n))
APL (Dyalog) ,
1711 bytes-6 bytes graças a ngn .
Experimente online!
⍳⊂
encontre o índice de todo o argumento em{
…}
O resultado desta função anônima:≢
comprimento do argumento⍳
Ɩ ntegers até que⍕¨
formato (stringify) cada,\
concatenação cumulativa daquelesfonte
{,\⍕¨⍳≢⍵}⍳⊂
(11 caracteres)Perl 5 , 19 bytes
Código de 18 bytes + 1 para
-p
.Usa indexação baseada em 1. -7 bytes, graças ao @ nwellnhof é muito melhor abordagem!
Experimente online!
Explicação
$\
é uma variável especial que éprint
editada automaticamente após cada instrução, portanto, usando isso para armazenar nosso número, não precisamos atualizar$_
(que é impresso automaticamente como parte da funcionalidade do-p
sinalizador) para conter a saída desejada. Em seguida, enquanto a entrada começa$\
, remova-a eredo
o programa, que novamente a incrementa$\
e a substitui. Quando ele não encontrar mais o número no início da string, estamos prontos! Finalmente, diminua$\
para que tenhamos o último número no intervalo.fonte
$i++while s/$i\B//
(18 + 1 bytes)?Python 2 , 46 bytes
Indexado a 0
Experimente online!
fonte
CJam , 16 bytes
Experimente online!
Alternativa 16 bytes
Experimente online!
fonte
CJam , 13 bytes
Tantas vírgulas ...
Experimente online!
Explicação
fonte
Perl 6 ,
30 2827 bytesTeste-o
Teste-o
Teste-o
Expandido:
'',0...*
produz uma sequência infinita de valores''
,0
,1
,2
,3
...[\~] '',0...*
produz uma sequência infinita de todas as entradas possíveisObserve que esse código nunca será interrompido se você fornecer uma entrada inválida.
fonte
Pitão ,
1110 bytes1 indexado.
Experimente aqui
Se a cadeia vazia puder ser ignorada, isso poderá ser reduzido para 6 bytes :
-1 byte graças a @Mnemonic
fonte
?QfqQjkUT)1
também posso fazer isso em 11, mas sinto que algumas reordenações podem dar um byte em um byte. Alguma ideia?jk
vez de s`m.CJam,
141211 bytesExperimente Online
fonte
Dyvil ,
4238 bytesO mesmo algoritmo que esta resposta Java , exceto que (ab) usa algumas das especialidades sintáticas de Dyvil.
Explicação:
4
Bytes salvos usando uma expressão de acesso entre chaves em vez de uma variável para o acumuladorfonte
MATL , 14 bytes
1 indexado.
Experimente online!
Explicação
fonte
C # , 72 bytes
Dados
String
i
A matriz int a ser decifradaInt32
O número usado para criar a matrizGolfe
Ungolfed
Ungolfed legible
Código completo
Lançamentos
72 bytes
- Solução inicial.Notas
fonte
i=>{int c,p=c=0;for(;p<i.Length;)p+=(c+++"").Length;return c;}
62 bytesSOGL V0.12 ,
11109 bytes1 indexado.
Experimente aqui!
Explicação:
..ou 7 bytes sem a caixa vazia
Experimente aqui!
fonte
Aceto ,
2725 bytesÍndice baseado em 1.
Nós
r
lemos a entrada e aM
emorizamos ( e a repetimos diretamenteL
), depois a negamos (!
; levando a um valor verdadeiro apenas para uma string vazia). Se esse valor for verdade (`
), pularemos para o final (;
), ondep
calcularemos o zero implícito.Caso contrário, incrementamos o valor atual da pilha (inicialmente um zero), duplicamos e colocamos uma cópia na pilha à direita, enquanto também movemos para lá (
Id]
). Em seguida, construímos um intervalo decrescente (z
), juntamos a pilha como uma string (¥
) e movemos o valor (e nós) na pilha original novamente ([
). NósL
OAD o valor que memorizou mais cedo (a entrada) e compará-lo com este string. Se igual, saltamos para o final novamente, onde imprimimos o valor atual do "contador" (=`;
).Caso contrário, muito espaço vazio será percorrido até que a curva de Hilbert atinja o
<
que coloca o IP no topoI
novamente, incrementando o contador e testando novamente.fonte
Empilhados , 23 bytes
Experimente online!
Basicamente, incrementa
0
até o intervalo de0
até o número parecer com a entrada, verificando primeiro a igualdade.fonte
Geléia , 8 bytes
Experimente online!
fonte