Pegue uma string como entrada e execute a adição / subtração de todos os dígitos da string e produza a soma dessas operações como resultado.
Regras
- Os dígitos da sequência são lidos da esquerda para a direita
- Se um dígito (n) for ímpar, faça a adição com o próximo dígito (n + n1)
- Se um dígito (n) for par, execute a subtração com o próximo dígito (n - n1)
- Se você atingiu o último dígito na sequência, execute a operação com o primeiro dígito na sequência
- A saída será a soma de todos os valores resultantes
- Se houver apenas um dígito na string, execute a operação sozinha (n + n ou nn)
- Se não houver dígitos na sequência, a saída será 0
Exemplo
Input: r5e6o9mm!/3708dvc
Process: (5+6) + (6-9) + (9+3) + (3+7) + (7+0) + (0-8) + (8-5)
Output: 32
Notas
- A função ou o programa completo é aceito
- O comprimento máximo de entrada dependeria do limite do seu idioma para uma entrada de string
- Sem restrições na entrada de caracteres, mas apenas dígitos de meia largura contam para a saída
- Menos bytes ganhos
""
,"0"
,"1"
Respostas:
Geléia ,
17 1512 bytesExperimente online!
Tente casos de teste.
O programa mantém apenas os dígitos que seguem um dígito ímpar e calcula o dobro da soma.
fonte
K (oK) ,
47434031 bytesSolução:
Experimente online!
Explicação:
Remova tudo da string que não é um número (enquanto também converte), módulo 2, multiplique por 2, multiplique com x girado por 1 e resuma.
Solução ingênua:
Remova tudo da string que não é um número (enquanto também está convertendo), pegue a janela deslizante de dois itens, descubra se são ímpares ou pares, aplique adicionar / subtrair conforme apropriado e, em seguida, resuma.
Experimente online!
Notas:
fonte
x:48!x@&x in,/$!10
->x^:(x-:48)^!10
':
como "janela deslizante" - interessante.Python 2 , 86 bytes
Experimente online!
fonte
Perl 6 , 41 bytes
Experimente online!
Usa a mesma lógica que a resposta Jelly de dylnan . Isso soma apenas dígitos que seguem um número ímpar e depois multiplica por 2.
fonte
Powershell,
807876 bytes-2 bytes graças a Neil com solução Retina
-2 bytes obrigado AdmBorkBork
Script de teste:
Explicação
Primeiro de tudo: ele deve adicionar 2 * n se o dígito anterior for ímpar e 0 se o dígito anterior for par.
Extra, 99 bytes
Inspirado por @Neil. Somente dígitos de correspondência de expressão regular com 'dígito anterior são ímpares'.
Matches
é uma variável automática .fonte
|?{$_}
por-ne''
outro movendo-o$d="$args"-split'\D*'-ne''
para parênteses($d="$args"-split'\D*'-ne'')+$d[0]
.MATL ,
1817 bytesExperimente online!
(-1 byte graças a Luis Mendo / Giuseppe / ambos!)
Explicação:
A idéia básica é que os números que seguem números pares podem ser ignorados, enquanto os que seguem números ímpares são duplicados - e o resultado final é a soma desses valores duplicados.
Eu não pensei que
f
após a verificação de paridadeo
seria necessário, mas por algum motivo o MATL não vê a matriz de 0 e 1 resultante dao
matriz lógica, em vez disso, leva-os como índices e índices numéricos para as posições1
eend
.fonte
!U
vez de48-
. A transposição não parece causar nenhum dano aqui.o
paradouble
entrada é apenasmod(...,2)
, então a saída édouble
. BomNaN
truque de entrada! Se isso é feito para resolver a saída estranha em STDOUT, Dennis tinha uma idéia e provavelmente irá corrigir isso em breve!U
em vez de48-
o
fornece uma saída de matriz lógica - ou não? (Devo confessar que nunca realmente examinei o sistema de tipos numéricos do MATLAB.) E sim, penseiNaN
em criar uma sentinela agradável, já que é improvável que seja uma entrada real em qualquer lugar, mas é bom saber que não será necessário por muito mais tempo !K (ngn / k) , 33 bytes
Experimente online!
{
}
é uma função com argumentox
!10
é a lista0 1 ... 9
$
converter em strings,/
concatenarx^
significax
sem o que está à direitax^x^
significax
interseção com o que está à direita, ou seja, mantenha apenas os dígitosx
-48+
subtrair48
, que é o código ASCII de"0"
x:
atribuir ax
2!
mod 22*
multiplicado por 21_x,*x
é uma gota de:x
seguido pelo primeiro dex
; ou seja,x
girado para a esquerda em um passo+/
somafonte
Japt (v2.0a0),
2519 bytes-6 bytes graças a Shaggy .
Experimente aqui .
Desta vez, funciona sem dígitos! Entrada é uma lista de caracteres.
fonte
x
Porém, não estou satisfeito com a matriz na função. Ping me no chat, se você tiver alguma dúvida.05AB1E ,
129 bytesEconomiza 1 byte sobre o método ingênuo, utilizando o truque de paridade de dylnan
Economizou 3 bytes graças ao Sr. Xcoder
Experimente online!
Explicação
fonte
þÀIþ€ÉÏSO·
,þÀDÁ€ÉÏSO·
,þÀ¹þ€ÉÏSO·
ouþÀsþ€ÉÏSO·
passar todos os casos de teste para -2 bytes?þDÁ€ÉÏSO·
para -3 :)Retina , 37 bytes
Experimente online! Explicação:
Anexe uma duplicata do primeiro dígito.
Corresponde a qualquer coisa cujo primeiro dígito anterior seja ímpar.
Converta todas as correspondências em unárias e duplique-as. (Os dígitos não são tratados como zero.)
Pegue a soma. Se não houver correspondências, isso produzirá zero, conforme necessário.
O melhor que pude fazer no Retina 0.8.2 foi de 44 bytes:
Experimente online! Explicação:
Exclua sem dígitos.
Anexe uma cópia do primeiro dígito.
Exclua os dígitos que não seguem um dígito ímpar.
Converta para unário.
Dobre-os.
Pegue a soma.
fonte
Gelatina , 15 bytes
Experimente online!
fonte
1ịṭƊ
JavaScript (ES6), 56 bytes
Recebe a entrada como uma matriz de caracteres.
Experimente online!
Comentado
fonte
JavaScript (Node.js) ,
85848382 bytes-1 bytes graças a ovs
Experimente online!
Pega a entrada da string, localiza os dígitos como uma matriz de caracteres ou retorna uma matriz vazia, se nenhuma for encontrada, e usa coerção de tipo para garantir que os valores sejam adicionados / subtraídos corretamente. A pesquisa direta pré-incrementa o índice e usa uma verificação nula por questões de concisão, e a parte final verifica se o número é ímpar ou uniforme para forçar a adição ou subtração (+ e - é -, etc)
fonte
n-0
pode ser+n
R , 58 bytes
Experimente online!
fonte
array
saída.xxx
portanto, são 68 bytes usando a alteração na indexaçãoa
para gerary
.strtoi
vez deas.double
, mas sim, tudo bem.Perl 5 , 48 bytes
Experimente online!
Eu gosto bastante de como isso parece enigmático, mas é um loop bastante direto em torno de todos os números na string.
fonte
Julia 0.6 ,
7769 bytesExperimente online!
fonte
C Sharp 180 bytes
Isso não é muito bom golfe, lol.
Ungolfed:
fonte
Stax , 14 bytes
Execute e depure
Descompactado, não jogado e comentado, é assim.
Execute este
fonte
JavaScript (ES6), 52 bytes
Espera entrada como uma matriz de caracteres. Advertência: Devido ao uso de deslocamento de bits, a saída tem um limite superior de
2^31-1
Experimente online!
Explicação
Dobra essencialmente a soma dos dígitos após valores ímpares.
fonte