Este é um problema do NCPC 2005 . Roy tem um apartamento com apenas uma única tomada elétrica, mas ele tem várias tomadas de força. Calcule o número máximo de tomadas que ele pode ter usando as réguas de energia que possui. O número de tomadas por filtro de linha é fornecido como entrada.
Acontece que se o número de saídas das tiras, respectivamente, for
então o número de pontos de venda é ,
ou
.
A entrada para o programa ou função é uma série não vazia de números inteiros positivos.
Exemplos
2 3 4
> 7
2 4 6
> 10
1 1 1 1 1 1 1 1
> 1
100 1000 10000
> 11098
code-golf
number
arithmetic
Pål GD
fonte
fonte
Respostas:
Gelatina, 3 bytes
Decremento (todos), soma, incremento. Experimente aqui.
fonte
Retina , 3 bytes
O avanço de linha à direita é significativo.
Entrada é uma lista separada por espaços de números unários .
Experimente online!
Explicação
O código simplesmente remove todos os espaços, bem como o
1
depois deles, da string. Aqui está o porquê disso funcionar:A adição em unário é simples: basta concatenar os números, o mesmo que remover os delimitadores. Decrementar por 1 também é simples: basta remover a
1
de cada número. Porém, queremos 1 a mais do que a soma das entradas decrementadas, portanto, apenas removemos os1
s que encontramos após os espaços, diminuindo assim tudo, exceto a primeira entrada.fonte
Hexagonia ,
1814 bytesDesdobrado:
Experimente online!
Não acho que o comprimento do lado 2 seja possível, mas
devehaver uma solução mais eficiente do lado do comprimento 3 do que isso.Essa é a abordagem usual "decrementar tudo, somar, incrementar", mas terei que adicionar diagramas mais tarde para mostrar como exatamente funciona no Hexagony.
fonte
Python, 24 bytes
Experimente online
fonte
Mathematica, 9 bytes
fonte
Haskell,
1715 bytesExemplo de uso:
( foldl1$(+).pred ) [2,4,6]
->10
.Versão antiga, abordagem diferente, 17 bytes:
succ.sum.map pred
.fonte
J, 6 bytes
Soma mais um comprimento negativo. Entre parênteses e aplique-o, da seguinte maneira:
fonte
Labirinto , 9 bytes
Experimente online!
A cartilha usual:
Aqui começamos no canto superior esquerdo
"
, no-op, indo para a direita. A seguir?
, leia um int de STDIN (jogando fora caracteres que ele não pode analisar como um número inteiro, por exemplo, espaços). Agora temos dois casos:Se a entrada for positiva, viramos à direita, executando:
Se a entrada for zero (o que ocorre no EOF), seguimos em frente, executando:
fonte
Pitão, 5 bytes
incremento (soma (mapa (decremento, entrada))))
fonte
ES6, 25 bytes
fonte
l=>l.reduce((a,b)=>a+b-1)
.(,b)
é caro, mas eu também gosto dessa versão.MATL, 3 bytes
Experimente online.
Explicação
fonte
05AB1E , 4 bytes
Código:
Explicação:
Recebe entrada como uma matriz (por exemplo
[3, 4, 5]
).fonte
Estrelado ,
2624 bytesEspera números inteiros separados por nova linha. Experimente online!
Obrigado a @ MartinBüttner por -2 bytes.
O loop é desenrolado para que o primeiro número não seja diminuído, negando a necessidade de incrementar. Empurrar números é caro em Starry ...
fonte
Utilitários Bash + GNU, 16
Se houver
N
réguas de energia, deve haverN-1
separadores na lista de entradas separadas por vírgula. Tudo o que precisamos fazer é substituir os separadores- 1 +
e avaliar aritmeticamente:Ou usando o mesmo truque:
Pure Bash (sem utilitários externos), 19
fonte
APL (NARS 2000),
1310 bytes{1+(+/⍵)-⍴∊⍵}
Editar: até 10 com a abordagem (melhor) de Lynn.
{1++/1-⍨⍵}
fonte
gs2, 5 bytes
(Codificado em CP437.)
É isso
read-nums dec m1 sum inc
.fonte
CJam, 7 bytes
Teste aqui.
Mesma abordagem que a de Lynn (decrementa tudo, soma, incremento). Isso também funciona para 8 bytes (e talvez seja um pouco mais interessante):
Isso dobra "decremento, adicione" sobre a lista. Ao fazer isso, o decréscimo é aplicado apenas a todos os elementos, exceto o primeiro, de modo que não precisamos cuidar do incremento separadamente.
fonte
C,
605955 bytesfonte
Perl 6, 14 bytes
uso
fonte
{.sum-$_+1}
Sério, 7 bytes
Experimente online!
Explicação:
fonte
Perl 6 , 20 bytes
(Você pode usar em
<<
vez de«
)Uso:
fonte
@arraya »+« @arrayb
++«@array
@array».method
@array»++
« a 'space separated' list of words »
Vários deles são conhecidos como operadores Meta, na medida em que combinam com outros operadores. (Perl 5 não tem os operadores atualmente.)Perl 5 23 + 2 = 25 ou 19 + 2 = 21
Requer
-ap
sinalizadores:Salvo em um arquivo e executado como
EDIT: Outra resposta, menor (19 + 2), mas basicamente copiada da resposta dev-null:
fonte
F #, 25 bytes
Esta é uma função que recebe uma matriz / lista / sequência de números inteiros e retorna o resultado necessário.
Como funciona:
Seq.fold
permite que você aplique uma função a todos os elementos de uma sequência enquanto carrega algum estado enquanto o faz. O resultado da função aplicada ao primeiro elemento fornecerá o estado que será colocado na função para o segundo elemento e assim por diante. Por exemplo, para resumir a lista[1; 3; 4; 10]
, escreva-a assim:O que seria aplicado assim:
Com o último estado sendo o valor de retorno de
Seq.fold
.fonte
, 5 caracteres / 7 bytes
Try it here (Firefox only).
Usa uma codificação personalizada com caracteres de 10 bits (thx @Dennis!). Execute
encode('ï⒭+‡_')
no console JS para obter o formulário codificado edecode(/*ENCODED TEXT HERE*/)
decodificar o formulário codificado.Explicação
Traduz para Javascript ES6 como:
fonte
Mornington Crescent ,
1909 18731839 bytesExperimente online!
fonte
Python 3, 79 bytes
fonte
Ruby, 30 bytes
Simples o suficiente - a partir de 1, some os números fornecidos, cada -1 (os argumentos da linha de comando estão dentro
$*
). Vergonhainject
é uma palavra tão longa.fonte
PowerShell, 19 bytes
Note que
1 + p1-1 + p2-1 + ... + pn-1
é equivalente ap1-1 + p2-1 + ... + pn
.Recebe entrada como argumentos separados da linha de comando com
$args
. Nós,-join
junto com um-1+
delimitador, criamos uma string, como2-1+3-1+4
. A sequência é então canalizada paraInvoke-Expression
(semelhante aeval
) e gera o resultado.fonte
Perl, 21 + 2 = 23 bytes
Requer
-a
e-E
:fonte
-a
bandeira para obter@F
variável com elementos já divididos, e substituir -n com -p para que dont'needsay
, reduzindo-a a 21 + 2:$a+=$_-1for@F;$_=++$a
-p
vez desay
é o mesmo, porque eu preciso usá-lo de$_=
qualquer maneira.-a
é uma boa ideia!Brainfuck, 15 bytes
Suposição: O operador, retorna 0 quando todas as entradas estiverem esgotadas e não há cabos de extensão com 0 plugues. Além disso, o IO precisa estar em valores de bytes, em vez de códigos de caracteres ASCII.
Explicação: Utiliza 2 registros. Um registro acumulador "Value", representando o número de dispositivos que podem ser conectados, e um registro "cord atual" que rastreia o valor do cabo atual. Ele começa incrementando o valor em 1 para a tomada existente. Em seguida, para cada cabo de extensão, subtrai um do valor desde que um plugue está sendo retirado e depois incrementa o valor pelo número de plugues.
A maioria dos intérpretes online não opera no modo de entrada de bytes brutos. Para testá-lo online, use este código:
fonte