Desafio
Dado um número inteiro, Q
no intervalo -(2^100) ≤ Q ≤ 2^100
, imprima o número de dígitos nesse número (na base 10).
Regras
Sim, você pode pegar o número como uma string e encontrar seu comprimento.
Todas as funções matemáticas são permitidas.
Você pode receber entrada em qualquer base, mas a saída deve ser o comprimento do número na base 10.
Não conte o sinal de menos para números negativos. O número nunca terá um ponto decimal.
Zero pode ter um ou zero dígitos.
Suponha que a entrada sempre será um número inteiro válido.
Exemplos
Input > Output
-45 > 2
12548026 > 8
33107638153846291829 > 20
-20000 > 5
0 > 1 or 0
Ganhando
O menor código em bytes vence.
Táxi , 1118 bytes
Experimente online!
Ungolfed:
Explicação:
fonte
Zoom Zoom
em cada loop deplan "r"
. Eu apenas testei até 100.000 dígitos e nunca ficou sem gás. Não calculei, mas suponho que receba uma tarifa mais do que suficiente para pagar o gás que está usando, de modo que encha o tanque a cada ciclo.Mathematica, 13 bytes
Há um built-in ... retorna
0
para0
.fonte
There's a built-in
: Quando não está lá?dc, 3
Observe que normalmente
dc
exige que números negativos sejam dados em_
vez dos mais comuns-
. No entanto, neste caso, qualquer um pode ser usado. Se-
for dado,dc
trata-o como uma subtração em uma pilha vazia, lançadc: stack empty
e depois continua com o restante do número; Assim, o resultado não é diferente.Experimente online .
fonte
Z
uma apresentação de função?dc
Como uma linguagem concatenativa com operadores quote + dup + eval, pode, portanto, reutilizar cadeias arbitrárias de código.Retina , 2 bytes
Experimente online!
O Retina realmente não sabe o que são números; portanto, a entrada é tratada como uma string e simplesmente contamos os dígitos.
fonte
05AB1E , 2 bytes
Experimente online! ou Experimente todos os testes!
fonte
Ä
, Hã? Nãoþ
? Justo.Ä
primeiro, mas lidariaþ
com um ponto decimal, então é um pouco melhor, eu acho.Alice , 16 bytes
Experimente online!
Explicação
Encontrar um layout meio decente para isso foi bastante complicado. Ainda não estou super feliz com isso por causa dos espaços, do
<
e do;
, mas é o melhor que posso fazer por enquanto.O comprimento da string é um daqueles embutidos muito comuns que não existem em Alice, porque sua entrada é uma string e sua saída é um número inteiro (e todos os comandos de Alice são estritamente números inteiros para número inteiro ou cadeias de caracteres para cadeias). Podemos medir o comprimento de uma string gravando-a na fita no modo Ordinal e, em seguida, encontrando seu fim no modo Cardinal.
Eu também tentei cuidar do sinal de menos no modo Cardinal com
H
(valor absoluto), mas a opção de modo adicional sempre acabava sendo mais cara em minhas tentativas.fonte
PHP, 23 bytes
Experimente online!
log da base 10 do valor absoluto mais uma conversão para int
para zero como log10 de entrada devolve o
INF
que é interpretado como falsoA melhor maneira é substituí-lo
$argn
por$argn?:1
+3 bytesPHP, 27 bytes
comprimento da string menos booleano é menor que zero
+2 bytes para comparação de cadeias
$argn<"0"
Experimente online!
PHP, 32 bytes
Experimente online!
Regex conta todos os dígitos
35 bytes
Experimente online!
comprimento da sequência menos contagem
-
strspn
fonte
10
, porque^
possui prioridade mais baixa. Você pode consertar isso-~
.<?=strlen(abs($argn));
?$argn?:1
? Seria 26 bytes comlog10()
eabs()
.-~$x
é equivalente a((int)$x)+1
.<?=-~log10(abs($argn?:1));
parece funcionar.Fortran 95 (gfortran),
1219695 bytesExplicação:
Subtrai o índice do sinal '-' do comprimento do argumento.
As matrizes começam em 1 no Fortran e index () retorna 0 se o símbolo não for encontrado.
Editar: alternado para o número inteiro implícito "i", também obturador de argumentos consolidado.
Edit: -1 byte graças a @Tsathoggua
fonte
PowerShell, 24 bytes
lança o valor "absoluto" dos argumentos de entrada em uma string e obtém a propriedade 'length' dela.
1 byte menor que
"".Length
até que alguém encontre uma maneira melhor de obter o abs de um número no PS, isso é provavelmente o mais curto possível.
fonte
"$args".trim('-')|% Le*
? :)05AB1E , 2 bytes
Experimente online!
fonte
brainfuck , 37 bytes
A saída é por valor de bytes.
Experimente online!
Explicação
fonte
Ruby,
1511 + 1 =1612 bytesUsa a
-n
bandeira.Experimente online!
Explicação
fonte
Geléia , 2 bytes
Experimente online!
Isso faz literalmente o que foi perguntado:
fonte
D
recurso interno , funciona com decimais? Será que-1.2
a saída[-1,-0.2]
? Tentei eu mesmo, não.654.321D
renderia[6,5,4.321]
(bem, na verdade[6.0,5.0,4.321000000000026]
)[-6.0, -5.0, -4.321000000000026]
, na verdade, aparentemente.CJam , 5 bytes
Baseado em string.
Experimente online!
9 bytes para uma solução puramente baseada em matemática:
Ou outros 5 com conversão base:
fonte
rizs,
.Japt , 5 bytes
Experimente online!
Explicação
fonte
RProgN 2 , 2 bytes
Experimente online!
Simplesmente obtém o valor absoluto da entrada e conta os dígitos.
fonte
JavaScript (ES6),
27262524 bytesRecebe a entrada como uma sequência.
fonte
s=>`${s>0?s:-s}`.length
!JavaScript (ES6), 23 bytes
Abordagem diferente à resposta de Shaggy .
fonte
s=>s.length-(s<0)
salva 6 bytesJava,
3024 bytesSupõe que
i
é umBigInteger
. Além disso, o tipo é contextualizado, portanto, nenhuma importação é necessária, conforme mostrado no código de teste.Teste
Salva
fonte
+""
em vez de.toString()
?i
sua resposta. Acho que mais respostas lambda devem fazer isso.Python 2 ,
3122 bytes-9 bytes graças a Rod.
Experimente online!
fonte
len(`abs(s)`)
com o número de entrada é mais curtolen∘repr∘abs
.Flacidez Cerebral , 63 bytes
Experimente online!
São 62 bytes de código e +1 byte para o
-a
sinalizador.Tentei duas outras abordagens, mas infelizmente as duas eram mais longas:
Esta deve ser uma resposta muito curta. De fato, se não precisássemos suportar números negativos, poderíamos simplesmente:
Mas temos que comparar a primeira entrada com 45 (ASCII
-
) primeiro, que é a maior parte da contagem de bytes desta resposta.Uma solução aritmética pode ser mais curta.
fonte
([{}]((((()()()()())){}{})){}{})({(<()>)}{}[]<>)
Ruby, 20 bytes
fonte
->a{a.abs.to_s.size}[-95]
->a{a.abs.to_s.size}.call(-92)
Pitão, 4 bytes
Experimente online!
Todos os casos de teste
fonte
R, 18 bytes
fonte
Alice , 10 bytes (não concorrente)
Experimente online!
Esta é uma solução não concorrente, porque no momento em que esse desafio foi lançado, o comando
c
estava com erros no intérprete oficial (e apenas: D). Martin Ender o consertou enquanto isso, agora isso funciona.Explicação
O ponteiro de instruções passa pelos dois espelhos (
/
) várias vezes, por isso pode ser um pouco difícil de seguir. Vou tentar explicá-lo da maneira mais clara possível, usando instruções cardinais (por exemplo, N está para cima, SW está para baixo à esquerda ...). Vou ligar para/1
o espelho da esquerda e/2
o da direita.fonte
Marca GNU , 78 bytes
Estilo imperativo:
Estilo funcional, 113 bytes:
Marca pura, 83 bytes:
fonte
C ++,
80bytes 76Imprime o comprimento do argumento, menos 1 se o primeiro caractere for um menos porque
bool
garante a conversão para1
setrue
ou0
sefalse
<46
vez de=='-'
e para deferir a matriz em vez de[]
fonte
c[1][0]=='-'
por,*c[1]<46
pois podemos assumir que a entrada sempre será um número inteiro válido. (A menos que prefixos diferentes de '-' sejam permitidos ...)TI-Basic (TI-84 Plus CE, OS 5.2+), 6 bytes
TI-Basic é uma linguagem tokenizada;
length(
etoString(
são dois bytes cada.Ans
é usado como entrada implícita; o valor da última (apenas) linha é implicitamente retornado.Muito simples, pega o valor absoluto para se livrar de um sinal de menos, converte em string, retorna o comprimento da string.
Uma abordagem matemática de 6 bytes que não funciona para 0:
fonte
toString(
?Pari / GP , 13 bytes
Experimente online!
fonte