Entrada:
Um inteiro
Saída:
Soma da entrada em si + o comprimento da entrada + cada dígito individual da entrada.
nr + nr-length + {sum of digits} = output
Exemplos:
Entrada: 99
Saída: 99
(nr) + 2
(comprimento-nr) + (9 + 9)
(dígitos) →119
Entrada: 123
Saída: 123 + 3 + (1 + 2 + 3)
→132
Regras do desafio:
A entrada também pode conter uma entrada negativa, que é resolvida como especial. O
-
sinal / menos também é+1
para o comprimento e faz parte do primeirodigit
.
Por exemplo:Entrada:
-123
Saída:-123 + 4 + (-1 + 2 + 3)
→-115
- Você pode assumir que a entrada nem a saída estarão fora do intervalo de um número inteiro (32 bits).
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código.
- Além disso, adicione uma explicação, se necessário.
Casos de teste:
87901 → 87931
123 → 132
99 → 119
5 → 11
1 → 3
0 → 1
-3 → -4
-123 → -115
-900 → -905
-87901 → -87886
Semi-relacionado: soma de contagem de todos os dígitos
code-golf
number
arithmetic
integer
Kevin Cruijssen
fonte
fonte
-123
a cadeia de soma deve ser em(-1 + 1 + 2 + 3)
vez de(-1 + 2 + 3)
, certo?-1 + 2 + 3
. Para esse desafio, escolho mesclar o-
sinal de menos / para o primeiro dígito como um dígito negativo para torná-lo um pouco mais interessante.Respostas:
05AB1E,
2820188 bytesExplicação
Experimente online
Guardado 10 bytes graças a @Adnan
fonte
ÐgsS'+ýO
.Python 2, 39 bytes
Suíte de teste
Usando o mesmo truque de avaliação que na minha resposta Pyth .
fonte
eval
ejoin
sabe usar o primeiro dígito negativo para entrada negativa? Eu esperaria-123
para se tornar algo como- + 1 + 2 + 3
escrito, mas aparentemente não é .. (Ou é, e ele automaticamente se fundiram- + 1
para-1
a segunda etapa?)-123
se torna"-+1+2+3"
após a união, o que gera o resultado correto quando você oeval
faz. Experimente,eval("-+1")
por exemplo, quais resultam-1
.- + 1
->- 1
. O operador unary plus existe, portanto- + 1
é essencialmente o mesmo que-(+(1))
.+a
é o mesmo quea
para números.Pitão,
1110 bytesObrigado a @LeakyNun por um byte!
Suíte de teste
Explicação
fonte
CJam, 18
Experimente online
Explicação:
fonte
Braquilog ,
3532 bytesExplicação
fonte
XSLT 1.0 (sem EXSLT), 673 bytes
Pouco inflado:
Execute usando xsltproc:
Sim,
ild.xsl
é passado duas vezes: uma vez como o documento XSLT e depois como o documento XML a ser transformado. Um documento de entrada deve estar presente porque um processador XSLT geralmente requer um para iniciar a execução. (O XSLT foi projetado para definir uma transformação de um documento de entrada em um documento de saída; executar uma transformação apenas com parâmetros de linha de comando, como fiz aqui é atípico.) Para este programa, qualquer documento XML bem formado será suficiente como entrada e, sendo XSLT um aplicativo XML, qualquer transformação XSLT bem formada é, por definição, um documento XML bem formado.fonte
name="i" select="..."
exemplo<with-param name="i"select="substring($i,$s+2)"/>
?<p id=hello>
etc. Eu acho que sexsltproc
preocupa com espaço em branco que não vai deixar unquoted coisas por.MATL, 20 bytes
Experimente Online
Todos os casos de teste
Explicação
fonte
Clojure, 102 bytes
Função anônima que constrói uma string que se parece
(+ -123 4 -1 2 3 )
e a avalia. Tudo bem detalhado, construa string a partir do número, seu comprimento e, em seguida, mapeie cada símbolo da representação de string do número, exceto menos para si mesmo, mais espaço e menos permanece o mesmoVocê pode vê-lo em execução aqui: https://ideone.com/FG4lsB
fonte
Dyalog APL ,
191716 bytesToma string e retorna
≢
avaliação de comprimento+
mais#
no espaço⍎
de nomes raiz dos'\d'⎕R'&+'
dígitos de acréscimo de regex com um mais,
seguido pela⊢
sequência não modificada–3 graças a ngn
fonte
Matlab,
7667 bytes9 bytes salvos graças a @Luis Mendo
Explicação:
fonte
sum(t+1)+n
é mais curto quesum([n numel(t) t])
dc, 57 bytes
Explicado:
Isso foi muito mais complicado do que eu esperava! Bom desafio :)
fonte
10~
por umA~
!Bash + coreutils, 36 bytes
Explicação:
No sed,
\B
também corresponde entre dois caracteres consecutivos que não são palavras, portanto, para um número negativo, corresponde entre '^' e '-'. Observe o0$1
truque necessário para\B
dar0-1+2+3
, por exemplo.Exemplo de execução: 'input.txt' contém todos os casos de teste na declaração da pergunta
Saída:
fonte
$()
. Existem duas maneiras alternativas de fazer isso com backticks, mas ambas fornecem uma solução de 36 bytes no final:sed 's:\B:+:g'<<<0$1
esed s:\\\B:+:g<<<0$1
.PowerShell v4, 48 bytes
Isso deve funcionar na v2 +, mas eu testei apenas na v4.
Recebe entrada
$n
. Cria uma nova matriz com o,
operador consistindo em$n
e.length
quando$n
é convertido em uma sequência. Concatena com isso que a string seja$n
lançada como um array de caracteres. Em seguida, toda essa matriz é-join
editada+
antes de ser canalizada paraiex
(semelhante aeval
). O resultado é deixado no pipeline e a saída está implícita.Por exemplo, para entrada
-123
, a matriz seria semelhante(-123, 4, -, 1, 2, 3)
, ea cadeia após a-join
pareceria-123+4+-+1+2+3
. EntãoInvoke-Expression
, isso acontece e o resultado é-115
o esperado.fonte
Fator com
load-all
, 175 bytesBem, isso não é muito curto. O tratamento especial de menos unário é realmente irritante; Acho que poderia fazer melhor e talvez o faça.
Usando esta regex de substituição:
Podemos transformar os casos de teste do OP em um conjunto de testes do Fator.
fonte
C #, 118 bytes
fonte
1+ ++i
é completamente ridículo, ims[i]<46
para verificar se há menos++i+1
?SpecBAS - 147 bytes
Constrói uma string que é executada. Infelizmente
EXECUTE
não funciona com a?
abreviação dePRINT
, masTEXT
salvou 1 personagem.fonte
C #, 106 bytes
Eu bato java meu byte, minha vida está completa
Ungolfed (meio)
fonte
(n)=>{....
para um lambda anônimon=>n+(n+"").Length+(n+"").Select((k,j)=>int.Parse((n+"")[k<48?1:j]+"")*(k<48?-2:1)).Sum()
embora você precise adicionar +18 pelosusing System.Linq;
quais também se esqueceu na sua resposta atual.Java 8,
1741361221071059378 bytes-14 bytes graças a @LeakyNun .
-15 bytes graças a @cliffroot .
Explicação:
Experimente online.
fonte
int c(int i){char[]c=(i+"").toCharArray();int x=i,l=c.length,s=i+l,j=-1;for(;++j<l;x=1)s+=x>0?c[j]-38:38-c[++j];return s;}
int c(int i){char[]c=(i+"").toCharArray();for(int x=i,j=-1;++j<c.length;i+=1+Integer.parseInt(x<0?"-"+--c[j+=x=1]:c[j]+""));return i;}
finalmente senti como jogar golfe em Java @LeakyNun, sua variante funciona? Ele fornece respostas erradas a princípio e depois trava.0
.38
para48
.int c(int i){byte[]c=(i+"").getBytes();for(int j=-1;++j<c.length;i+=(c[j]<48?50-c[++j]:c[j]-47));return i;}
yayPerl 6 - 30 bytes
Tão literal quanto possível
Use-o como uma função anônima
fonte
JavaScript (ES6), 38 bytes
Usa o antigo truque de junção e avaliação. Salve 4 bytes se eu puder insistir na entrada da string:
fonte
C ++, 255 bytes
fonte
Perl 5 - 37 bytes
A entrada está em $ _
fonte
Javascript (usando biblioteca externa) (45 bytes)
Usando uma biblioteca que escrevi para levar o LINQ ao Javascript, consegui escrever o seguinte:
fonte
C,
13211611380A função
f()
pega a entrada como uma sequência e retorna o resultado como um número inteiro. Versão completa do programa (113 bytes):Requer um argumento.
fonte
Perl, 27 bytes
Código de 22 bytes + 5 para
-paF
.Explicação
Usa a
-a
opção de divisão automática com um delimitador vazio (-F
), criando uma matriz dos dígitos passados. Usa a variável mágica$"
que controla qual caractere é usado para ingressar em uma matriz quando ele é interpolado em uma string (usamos"+"
aqui) e o fato de que uma lista usado no contexto escalar retornará o comprimento da lista (o número de dígitos).Uso
Perl, 27 bytes
Código de 22 bytes + 5 para
-paF
.Solução alternativa, muito mais legível e sem mais bytes. Eu prefiro o outro, pois parece mais enigmático!
fonte
dc, 56 bytes
Não menor que o de Joe acima, mas uma implementação um pouco diferente (e que aceita números negativos como entrada versus um comando de subtração). Provavelmente pode ser jogado mais, mas o almoço dura tanto tempo.
fonte
R, 108 bytes
Um pouco tarde para a festa novamente, mas aqui vai:
Para geralmente dividir os dígitos de qualquer número (por exemplo, somar), R exige que primeiro convertamos em uma sequência e subseqüentemente divida a sequência em um vetor de sequência. Para resumir os elementos, o vetor de string deve ser convertido em numérico ou inteiro. Isso, junto com a exceção da soma dos dígitos de um número negativo, consome muitos bytes.
A exceção pode ser alterada um pouco (até 96 bytes) se forem permitidas mensagens de aviso.
Nesse caso, o vetor string é convertido em número inteiro diretamente usando
as.integer
. No entanto, para números negativos o primeiro elemento no vector será um sinal de menos:"-"
. Isso causa alguns problemas, por exemplo:as.numeric(c("-",1,2,3))
retornaráNA 1 2 3
e uma mensagem de aviso. Para contornar isso, remova o NA e multiplique o primeiro elemento-1
antes de pegar a soma.fonte
RProgN, 30 bytes
Explicação
Experimente Online!
fonte
Perl 5 , 22 + 1 (-p) = 23 bytes
Experimente online!
fonte
AWK ,
64 6361 bytesExperimente online!
O link TIO possui 6 bytes extras
s=j=0;
para permitir a entrada de várias linhas. Este é o método mais curto que eu poderia inventar. Estou curioso para saber se isso pode ser feito mais curtoAWK
.Salvo 2 bytes, obrigado Kevin
fonte
$0=n+s+$0
possível jogar golfe em$0+=n+s
(-2 bytes)?