Crie um programa que soma todos os números inteiros encontrados em uma string que é definida como uma variável no programa (assim, o programa não precisa manipular nenhuma entrada). Os números inteiros são separados por não numéricos (qualquer coisa, exceto 0, 1, 2, 3 ... 9).
Exemplos:
e7rde f ,fe 43 jfj 54f4sD
= 7 + 43 + 54 + 4 = 1085
= 564 545,5445-32JIFk0ddk
= 64 + 545 + 5445 + 32 + 0 = 60860ab0
= 0 + 0 = 0
Notas extras:
- O suporte a Unicode não é necessário, mas é permitido
-n
(onden
é um número inteiro) não é contado como negativon
, mas como um hífen seguido porn
.
A resposta pode ser impressa na tela (mas não é necessária).
A resposta mais curta (em caracteres) vence.
5a-3
(meu código pularia-
se seguir um número imediatamente, mas não se houvesse um número não antes dele).Respostas:
Perl, 15
Entrada
$_
, soma em$c
:fonte
Ruby 1.9, 21 caracteres
Para imprimir a solução no stdout, são necessários 2 caracteres adicionais:
E para ler do stdin em vez de usar uma variável predefinida, outros 3 caracteres devem ser usados:
No Ruby 1.8, substitua
?+
por"+"
para obter uma solução funcional em 22 caracteres.fonte
scan
é mais curto quesplit
. Portanto, sua solução se tornaeval s.scan(/\d+/)*?+
- 21 caracteres.scan
, obrigado!eval
e* '+'
Python (60)
fonte
Ruby -
3634 caracteres36 caracteres, se você desejar que o resultado seja impresso.
Assume que a entrada está presente como uma sequência em s.
fonte
JavaScript (ES6), 30
Versão anotada:
fonte
Windows PowerShell, 23
252931Com saída.
De fato, sem a saída é exatamente a mesma, você a direcionaria para outro lugar onde for necessário.
fonte
J -
4038 caracteresVersão preguiçosa. Requer a biblioteca de cadeias.
fonte
Java
fora do concurso;)
fonte
JavaScript [30 bytes]
fonte
Labirinto ,
2921 bytes(Aviso: Labirinto é mais novo que esse desafio.)
Além disso, o Labyrinth não possui variáveis, então fui com um programa normal de entrada / saída.
Isso foi bastante simples devido à maneira como os comandos de entrada do Labyrinth funcionam.
?
tenta ler um número inteiro assinado de STDIN e para no primeiro não dígito. Se ele não conseguir ler um número inteiro (porque o próximo caractere-
não é seguido por um dígito, ou qualquer outro não dígito, ou chegamos ao EOF), ele retornará0
.,
por outro lado, lê qualquer byte subseqüente e pressiona o valor do byte. Se este for chamado no EOF, ele retornará-1
.Então, aqui estão alguns pseudocódigo para a solução:
Lidar com números negativos complica corretamente essa solução. Se não fosse por esses, eu teria essa solução de 8 bytes:
fonte
PHP - 37
Sem impressão;
Com impressão (38):
fonte
Perl, 16 caracteres
Recebe entrada
$_
, a saída continua$r
. O último ponto e vírgula é supérfluo, mas provavelmente será necessário quando o programa fizer mais coisas. Adicionarsay$r
para saída.fonte
wc -c
.J - 23 char
Não é um vencedor, mas podemos ver um primitivo bastante raro em ação.
Explicado:
_"."0 y
- Para cada caractere na sequência de entraday
, tente lê-lo como um número. Se não puder, use o valor padrão_
(infinito).,_=
- Verifique cada resultado quanto à igualdade e_
, em seguida, execute a matriz final de 0s e 1s em um vetor. ("."0
sempre adiciona muitas dimensões ao resultado, portanto, corrigimos isso aqui.)y,:' '
- Adicione uma linha de espaços abaixo da sequência de entrada.}
- Usado como está aqui,}
é chamado de Alteração de item e usa a lista de 0s e 1s à esquerda como índices para selecionar a linha da qual extrair o argumento correto. Então, o que acontece é que, para cada coluna no lado direito, pegamos o caractere original, se puder ser lido como um número, e, do contrário, ocupamos o espaço abaixo dele. Portanto, encobrimos caracteres não numéricos com espaços.+/".
- Agora converta toda essa string em uma lista de números e some-os.fonte
gs2, 4 bytes
Codificado no CP437 ; o terceiro byte é
E9
.W
lê todos os números/-?\d+/
de uma string,#Θ
mapeia o valor absoluto,d
somas.(gs2 também é mais novo que esse desafio, mas seu
read-nums
comando é uma total coincidência.)fonte
Smalltalk (Smalltalk / X) (51 caracteres)
usando o pacote regex:
wo regex:
entrada em s
fonte
R, 30
Aqui,
x
é o nome da variável.Exemplo:
fonte
Javascript - 43 caracteres
Eu sei que é longo, mas não havia solução JS, então :)
a
é a string.c
contém resposta.fonte
Tcl, 30
Ele assume que a entrada está na variável
$a
(formalmente, ema
) e armazena a resposta no resultado do intérprete. E / S é deixada como um exercício.fonte
C99 (com avisos) 85
Para realmente usar o programa, você precisa atribuir a variável da seguinte maneira:
Se você estiver usando o gcc, precisará compilá-lo como C99 da seguinte forma:
fonte
APL, 16 bytes
⎕d
é um built-in contendo os dígitos (0-9).b
é atribuído a um vetor 0/1, em que 1 é atribuído aos caracteres que são dígitos.b
é usado para compactar a matriz de caracteres fornecida e, em seguida, reutilizado para expandi-la, que insere espaços em branco.⍎
é da APL eval que converte uma string em um vetor de números inteiros, neste caso.+/
calcula a soma.fonte
+/2⊃⍞⎕VFI⍨⎕AV~⎕D
Swift 3, 78
onde
s
está a cordafonte
Perl - 24 caracteres
A entrada está em $ _
fonte
Na verdade, 14 bytes (não concorrentes)
Experimente online!
Este envio não é concorrente porque, na verdade, é um pouco mais novo que esse desafio.
Este programa suporta a página de códigos do CP437 para entrada.
Explicação:
fonte