Olá, bem-vindo ao PPCG. Os desafios para um único idioma geralmente são desaprovados aqui no PPCG. Talvez você poderia alterá-lo para um desafio geral: dada uma cadeia, a saída da soma de todos os números na seqüência, ignorando tudo o resto (ou seja, "the 5is 108 seCONd4 a"irá resultar em 117causa 5+108+4=117). Além disso, todas as 'perguntas' aqui devem ter uma etiqueta de condição vencedora . Neste caso, suponho que seja [code-golf] (sendo a solução mais curta possível)?
Kevin Cruijssen 7/03/19
4
Parece que você postou uma pergunta semelhante no SO, o que tende a confirmar que ele não foi projetado para ser um desafio do PPCG e você está procurando um código 'utilizável' em vez de código de golfe. Eu recomendo melhorar sua pergunta original no SO, para que ela se encaixe melhor nas regras do site.
Arnauld
4
Substituímos sua postagem para atender aos nossos padrões. Sinta-se livre para editar se o resultado não combina com você.
Eu acho que usar string.length no console para contar caracteres não é uma boa idéia quando ele contém caracteres de escape ... Opa, foi corrigido. Thx novamente
Bassdrop Cumberwubwubwub 07/03/19
Uma opção um pouco melhor seria console.log(f.toString().length), mas também não é 100% confiável.
þм# Only leave the non-digits of the (implicit) input-string# i.e. "the 5is 108 seCONd4 a" → "the is seCONd a"
S # Split it into a list of characters# → ["t","h","e"," ","i","s"," "," ","s","e","C","O","N","d"," ","a"]¡# Split the (implicit) input-string by each of these characters# → ["","","","","5","","","108","","","","","","","4","",""]þ# Remove the empty strings by only leaving the digits# → ["5","108","4"]
O # And sum these numbers (which is output implicitly)# → 117
Experimente online! Link é a versão detalhada do código. Explicação: O Sumoperador do Charcoal extrai automaticamente os números de uma sequência, no entanto, se a sequência não contém caracteres que não sejam dígitos, ela recebe a soma digital, então concatenarei um byte nulo para evitar isso. O resultado é então convertido de volta na string para saída implícita.
Por que não. Resposta obrigatória regex. Provavelmente poderia atracar 6 usando Python 2, mas tanto faz. Não se aplica mais, pois estou usando uma abordagem de avaliação em vez de usar o mapa.
import re;# Import regex module
x=lambda y: eval()# Run as Python code'+'.join()# Joined by '+'
re.findall('\d+',y)# A list of all matches of regex \d+ in string y
Agradável! No seu TIO, você deve usar em z == l[1]vez disso z is l[1]. O código atual pode dar falsos negativos se os números ficarem altos o suficiente.
Um bastante simples. Ino cubix pegará o primeiro número inteiro na entrada e o empurrará para a pilha. Isso tem o efeito de pular todos os caracteres. O restante está lidando com o adicional e detectando o final da entrada.
I! Insira um número inteiro e teste-o para 0
s+q;;Se não for zero, troque TOS (forças e 0 inicial) e adicione. Empurre o resultado para o fundo da pilha e limpe a parte superior. Retorne ao começo.
/i? Se zero, redirecione e insira um caractere para verificar
|?;/Se positivo (caractere) virar à direita em um reflexo, ele o empurra de volta pelo verificador ?e vira à direita na pilha pop, deixando 0 no TOS. O IP é redirecionado novamente para o loop principal.
I>p.O@ se negativo (final da entrada) virar à esquerda, faça a entrada inteira, traga a parte inferior da pilha para cima, a saída e a parada.
Uma resposta mais interessante, mas indireta (37 bytes): {Sum!Reap[ReplaceF[_,/"\\d+",Sow@N]]}
Explicação
Sum##N=>MatchAll&"\\d+"
Isto tem a forma:
f##g=>h&x
que, quando expandido e entre parênteses, se torna:
f ## (g => (h&x))
##compõe duas funções juntas, =>cria uma função que mapeia a função esquerda sobre o resultado da função direita e &vincula um argumento ao lado de uma função. Para entrada _, isso é equivalente a:
{ f[Map[g, h[_, x]]] }
Primeiro, então, MatchAllexecutamos caracteres digitados ( \\d+). Depois, convertemos cada execução em um número inteiro real usando a Nfunção Finalmente, tomamos a soma desses números usando Sum.
s->{// Lambda functionlong c=0;// Sum is zerofor(Matcher m=Pattern.compile("\\d+").matcher(s);// Prepare regex matcher
m.find();// While the string contains unused matches...
c+=newLong(m.group()));// Add those matches to the outputreturn c;// Return the output}
Eu não acho que isso esteja correto: o (único) exemplo do OP sugere que dígitos consecutivos devem formar um único número inteiro; portanto, "123" deve produzir 123, e não 6, como o seu código.
-4 bytesusando em Long::newvez de Long::valueOf. -1 byteencurtando a regex - se já removermos seqüências de caracteres vazias mais tarde, fazer alguns extras quando a divisão for boa.
Explicado
s->// Lambda (target type is ToLongFunction<String>)
java.util.Arrays.stream(// Stream the result of
s.split("\\D")// splitting on non-digits).filter(t->!t.isEmpty())// Discard any empty strings.mapToLong(Long::new)// Convert to long.sum()// Add up the stream's values.
"the 5is 108 seCONd4 a"
irá resultar em117
causa5+108+4=117
). Além disso, todas as 'perguntas' aqui devem ter uma etiqueta de condição vencedora . Neste caso, suponho que seja [code-golf] (sendo a solução mais curta possível)?string x='-12hello3';
você está contando números inteiros negativos (ou seja, -12 + 3 === -9)?Respostas:
Javascript,
3432 bytess=>eval(s.match(/\d+/g).join`+`)
Combine todos os dígitos e junte-os,
+
transformando-os em 5 + 108 + 4, avaliando o resultado.Funciona apenas em números inteiros positivos.
Economizou 2 bytes graças a Arnauld
fonte
console.log(f.toString().length)
, mas também não é 100% confiável.Perl 6 , 14 bytes
Experimente online!
Bloco de código anônimo que retorna a soma de todas as séries de dígitos
fonte
05AB1E ,
116 bytesExperimente online.
Explicação:
fonte
¡
!R ,
644845 bytesDepois de ver a entrada do PowerShell, consegui jogar golfe ainda mais.
Experimente online!
fonte
t=
é suficiente aqui em vez detext
APL (Dyalog Unicode) , 11 bytes
Função de prefixo tácito anônimo
Experimente online!
⊢
o argumento⊆
particionado (execuções de True tornam-se partes, execuções de False são separadores) por∊
associação do conjunto de dígitos∘
⎕D
#⍎¨
avalie cada um no espaço para nome raiz+/
somafonte
Retina 0.8.2 , 8 bytes
Experimente online!
fonte
PowerShell , 29 bytes
Experimente online!
fonte
Carvão , 5 bytes
Experimente online! Link é a versão detalhada do código. Explicação: O
Sum
operador do Charcoal extrai automaticamente os números de uma sequência, no entanto, se a sequência não contém caracteres que não sejam dígitos, ela recebe a soma digital, então concatenarei um byte nulo para evitar isso. O resultado é então convertido de volta na string para saída implícita.fonte
Haskell , 50 bytes
Experimente online!
Provavelmente existe uma maneira melhor, mas essa é a mais óbvia.
fonte
Zsh , 21 bytes
Experimente online!
Infelizmente, o bash reclama porque interpreta
0108
como octal. Zsh não (a menos quesetopt octalzeroes
)fonte
Bash, 43 bytes
Substitui todos os não números por um espaço e os soma juntos.
-5 bytes graças ao GammaFunction
fonte
{
}
vez dedo
done
.Python 3 ,
635956 bytesPor que não. Resposta obrigatória regex.
Provavelmente poderia atracar 6 usando Python 2, mas tanto faz.Não se aplica mais, pois estou usando uma abordagem de avaliação em vez de usar o mapa.Explicação:
Experimente online!
fonte
z == l[1]
vez dissoz is l[1]
. O código atual pode dar falsos negativos se os números ficarem altos o suficiente.Java 10, 66 bytes
Este é um lambda de
String
paraint
.Inteiros negativos não são suportados. Presumivelmente, tudo bem.
Experimente Online
Agradecimentos
fonte
[^0-9]
para\D
por alguns bytes, você também pode mudarlong
eString
paravar
(embora você vai ter que mudar o tipo de retorno paraint
Ruby,
3227 caracteresAgradecimentos
fonte
*?+
vez de.join ?+
-7 bytes. Veja ary * strCubix , 17 bytes
Experimente online!
Assista correr
Um bastante simples.
I
no cubix pegará o primeiro número inteiro na entrada e o empurrará para a pilha. Isso tem o efeito de pular todos os caracteres. O restante está lidando com o adicional e detectando o final da entrada.I!
Insira um número inteiro e teste-o para 0s+q;;
Se não for zero, troque TOS (forças e 0 inicial) e adicione. Empurre o resultado para o fundo da pilha e limpe a parte superior. Retorne ao começo./i?
Se zero, redirecione e insira um caractere para verificar|?;/
Se positivo (caractere) virar à direita em um reflexo, ele o empurra de volta pelo verificador?
e vira à direita na pilha pop, deixando 0 no TOS. O IP é redirecionado novamente para o loop principal.I>p.O@
se negativo (final da entrada) virar à esquerda, faça a entrada inteira, traga a parte inferior da pilha para cima, a saída e a parada.fonte
PHP ,
40.39 bytesExperimente online!
Executar com
php -nF
entrada é de STDIN. Exemplo:fonte
Haskell , 43 bytes
Experimente online!
Faz uso de
reads
.fonte
Adiante , 13 bytes
Isso funciona porque
I
simplesmente verifica o fluxo de entrada para o próximo token que se parece com um número, ignorando qualquer outra coisa.Experimente online!
fonte
QuadR , 9 bytes
Experimente online!
+/
soma de⍎
avaliação como APL de⍵
o resultado de\D
substituindo cada não dígito porfonte
Japonês
-x
, 5 bytesExperimente online!
fonte
Anexo , 23 bytes
Experimente online!
Uma resposta mais interessante, mas indireta (37 bytes):
{Sum!Reap[ReplaceF[_,/"\\d+",Sow@N]]}
Explicação
Isto tem a forma:
que, quando expandido e entre parênteses, se torna:
##
compõe duas funções juntas,=>
cria uma função que mapeia a função esquerda sobre o resultado da função direita e&
vincula um argumento ao lado de uma função. Para entrada_
, isso é equivalente a:Primeiro, então,
MatchAll
executamos caracteres digitados (\\d+
). Depois, convertemos cada execução em um número inteiro real usando aN
função Finalmente, tomamos a soma desses números usandoSum
.fonte
APL (NARS), caracteres 13, bytes 26
teste:
fonte
C # (Compilador interativo do Visual C #),
117111 bytesExperimente online.
fonte
Perl 5
-p
, 17 bytesExperimente online!
fonte
Japt v2.0a0
-x
, 3 bytesOutro test drive para meu intérprete (muito WIP).
Tente
fonte
Java 8,
53130 bytes105 bytes + 25 bytes para importação de regex
Experimente online!
Explicação
fonte
SNOBOL4 (CSNOBOL4) , 81 bytes
Experimente online!
fonte
Rápido, 109 bytes
Experimente online!
fonte
Pip , 6 bytes
Trata
-123
como um número inteiro negativo. Experimente online!Se os hífens devem ser ignorados em vez de tratados como sinais de menos, o seguinte funciona com 7 bytes :
XD
é uma variável predefinida para`\d`
;+XD
adiciona o+
modificador regex a ele, correspondendo a 1 ou mais dígitos.fonte
Java (JDK) ,
989493 bytesExperimente online!
-4 bytes
usando emLong::new
vez deLong::valueOf
.-1 byte
encurtando a regex - se já removermos seqüências de caracteres vazias mais tarde, fazer alguns extras quando a divisão for boa.Explicado
fonte