Este es un problema de NCPC 2005 . Roy tiene un departamento con una sola toma de corriente, pero tiene un montón de enchufes. Calcule el número máximo de salidas que puede tener usando las tiras de energía que tiene. El número de salidas por regleta se da como entrada.
Resulta que si el número de salidas de las tiras respectivamente son
entonces el número de salidas es ,
o
.
La entrada al programa o función es una serie no vacía de enteros positivos.
Ejemplos
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
fuente
fuente
Respuestas:
Jalea, 3 bytes
Decremento (todo), suma, incremento. Pruébalo aquí.
fuente
Retina , 3 bytes
El avance de línea final es significativo.
La entrada es una lista separada por espacios de números unarios .
Pruébalo en línea!
Explicación
El código simplemente elimina todos los espacios, así como los
1
siguientes, de la cadena. Aquí es por qué eso funciona:La adición en unario es simple: simplemente concatene los números, lo que equivale a eliminar los delimitadores. Disminuir en 1 también es simple: simplemente elimine a
1
de cada número. Sin embargo, queremos 1 más que la suma de las entradas decrementadas, por lo que simplemente eliminamos los1
s que encontramos después de los espacios, disminuyendo así todos menos la primera entrada.fuente
Hexagonia ,
1814 bytesDesplegado:
Pruébalo en línea!
No creo que la longitud lateral 2 sea posible, pero hay
debehaber una solución de longitud lateral 3 más eficiente que esta.Este es el enfoque habitual de "decrementar todo, suma, incremento", pero tendré que agregar diagramas más adelante para mostrar cómo funciona exactamente en Hexagony.
fuente
Python, 24 bytes
Pruébalo en línea
fuente
Mathematica, 9 bytes
fuente
Haskell,
1715 bytesEjemplo de uso:
( foldl1$(+).pred ) [2,4,6]
->10
.Versión antigua, enfoque diferente, 17 Bytes:
succ.sum.map pred
.fuente
J, 6 bytes
Suma más uno menos longitud. Paréntesis y aplíquelo, así:
fuente
Laberinto , 9 bytes
Pruébalo en línea!
La cartilla habitual:
Aquí comenzamos en la parte superior izquierda
"
, un no-op, hacia la derecha. El siguiente es?
, que lee un int de STDIN (descartando caracteres que no puede analizar como un entero, por ejemplo, espacios). Ahora tenemos dos casos:Si la entrada es positiva, giramos a la derecha, realizando:
Si la entrada es cero (que ocurre en EOF), seguimos adelante, realizando:
fuente
Pyth, 5 bytes
incremento (suma (mapa (decremento, entrada)))
fuente
ES6, 25 bytes
fuente
l=>l.reduce((a,b)=>a+b-1)
.(,b)
es costoso, pero también me gusta esa versión.MATL, 3 bytes
Pruébalo en línea.
Explicación
fuente
05AB1E , 4 bytes
Código:
Explicación:
Toma la entrada como una matriz (por ejemplo
[3, 4, 5]
).fuente
Estrellado ,
2624 bytesEspera enteros separados por nueva línea. Pruébalo en línea!
Gracias a @ MartinBüttner por -2 bytes.
El bucle se desenrolla para que el primer número no disminuya, lo que niega la necesidad de incrementar. Empujar números es caro en Starry ...
fuente
Bash + GNU utilidades, 16
Si hay
N
tiras de alimentación, entonces debería haberN-1
separadores en la lista de entrada separada por comas. Todo lo que necesitamos hacer es reemplazar los separadores con- 1 +
y evaluar aritméticamente:O usando el mismo truco:
Pure Bash (sin utilidades externas), 19
fuente
APL (NARS 2000),
1310 bytes{1+(+/⍵)-⍴∊⍵}
Editar: hasta 10 con el enfoque (mejor) de Lynn.
{1++/1-⍨⍵}
fuente
gs2, 5 bytes
(CP437-codificado)
Eso es
read-nums dec m1 sum inc
.fuente
CJam, 7 bytes
Pruébalo aquí.
El mismo enfoque que el de Lynn (decrementar todo, suma, incremento). Esto también funciona para 8 bytes (y quizás sea un poco más interesante):
Esto pliega "decremento, agregar" sobre la lista. Al hacerlo, la disminución solo se aplica a todos los elementos, excepto al primero, de modo que no necesitamos ocuparnos del incremento por separado.
fuente
C,
605955 bytesfuente
Perl 6, 14 bytes
uso
fuente
{.sum-$_+1}
En serio, 7 bytes
Pruébalo en línea!
Explicación:
fuente
Perl 6 , 20 bytes
(Puedes usar en
<<
lugar de«
)Uso:
fuente
@arraya »+« @arrayb
++«@array
@array».method
@array»++
« a 'space separated' list of words »
Varios de ellos son lo que se conoce como operadores Meta, ya que se combinan con otros operadores. (Perl 5 no tiene esos operadores actualmente.)Perl 5 23 + 2 = 25 o 19 + 2 = 21
Requiere
-ap
banderas:Guardado en un archivo y ejecutado como
EDITAR: Otra respuesta, más pequeña (19 + 2) pero básicamente copiada de la respuesta dev-null:
fuente
F #, 25 bytes
Esta es una función que toma una matriz / lista / secuencia de enteros y devuelve el resultado requerido.
Cómo funciona:
Seq.fold
le permite aplicar una función a cada elemento de una secuencia mientras lleva algún estado mientras lo hace. El resultado de la función aplicada al primer elemento dará el estado que se colocará en la función para el segundo elemento, y así sucesivamente. Por ejemplo, para resumir la lista[1; 3; 4; 10]
, la escribiría así:Que se aplicaría así:
Con el último estado siendo el valor de retorno de
Seq.fold
.fuente
𝔼𝕊𝕄𝕚𝕟, 5 caracteres / 7 bytes
Try it here (Firefox only).
Utiliza una codificación personalizada con caracteres de 10 bits (thx @Dennis!). Ejecute
encode('ï⒭+‡_')
en la consola JS para obtener un formulario codificado ydecode(/*ENCODED TEXT HERE*/)
decodificar el formulario codificado.Explicación
Se traduce a Javascript ES6 como:
fuente
Mornington Crescent ,
1909 18731839 bytesPruébalo en línea!
fuente
Python 3, 79 bytes
fuente
Rubí, 30 bytes.
Suficientemente simple: a partir de 1, sume los números proporcionados, cada -1 (los argumentos de la línea de comando están incluidos
$*
). Vergüenzainject
es una palabra tan larga.fuente
PowerShell, 19 bytes
Tenga en cuenta que
1 + p1-1 + p2-1 + ... + pn-1
es equivalente ap1-1 + p2-1 + ... + pn
.Toma datos como argumentos de línea de comandos separados con
$args
. Nosotros,-join
junto con un-1+
delimitador para crear una cadena, como2-1+3-1+4
. La cadena se canaliza aInvoke-Expression
(similar aeval
) y genera el resultado.fuente
Perl, 21 + 2 = 23 bytes
Requiere
-a
y-E
:fuente
-a
indicador para obtener@F
variables con elementos ya divididos y reemplazar -n con -p para que no lo necesitesay
, reduciéndolo a 21 + 2:$a+=$_-1for@F;$_=++$a
-p
lugar desay
es lo mismo porque necesito usar de$_=
todos modos.-a
es una buena idea!Brainfuck, 15 bytes
Suposición: El operador devuelve 0 una vez que toda la entrada se ha agotado y no hay cables de extensión con enchufes 0. Además, el IO debe estar en valores de bytes en lugar de códigos de caracteres ASCII.
Explicación: Esto utiliza 2 registros. Un registro de acumulador de "Valor", que representa el número de dispositivos que se pueden enchufar, y un registro de "cable actual" que realiza un seguimiento del valor del cable actual. Comienza incrementando el valor en 1, para la salida existente. Luego, para cada cable de extensión, resta uno del valor ya que se está tomando un enchufe, luego incrementa el valor por el número de enchufes.
La mayoría de los intérpretes en línea no funcionan en modo de entrada de bytes sin procesar. Para probarlo en línea, use este código:
fuente