Su tarea es analizar la entrada y la salida de la fórmula para el enésimo término si es una secuencia aritmética, de lo contrario debería imprimir "NAAP".
Entrada
La entrada (de STDIN) consistirá en pocos números, entre 4 y 10 números, donde cada número estará en el rango entre -1000 y 1000 inclusive, separados por un delimitador (un espacio o una coma o un punto y coma [lo que sea tu preferencia]). Aquí hay algunos ejemplos de entradas.
12,14,16,18 //valid
-3 4 5 1 -2 -4 //valid
45;35;-35 //invalid (only three numbers are present instead of the minimum of 4 numbers)
2,32;21,321 //invalid (it uses two different delimiters: `,` and `;`)
Salida
El programa primero debe verificar si la entrada es una progresión aritmética o no.
En resumen, las progresiones aritméticas (AP): cada AP tendrá una diferencia común. Esta es la diferencia entre los términos $ n $ y $ {n-1} $ th (básicamente $ a (n + 1) - a (n) $ donde a
es la función para la secuencia). Esta diferencia se mantiene igual para cualquier valor de $ n $ en un AP. Si no hay una diferencia común, entonces es no una progresión aritmética. Para calcular el valor del enésimo término, use esta fórmula $ a (n) = a (1) + (n-1) d $ donde $ a (1) $ es el primer término y $ d $ es el común diferencia.
Si no es una progresión aritmética, entonces el programa debe imprimir el mensaje de error "NAAP" (abreviatura de "No es una progresión aritmética").
Si se trata de una progresión aritmética, el programa debe imprimir el enésimo término simplificado de la secuencia en STDOUT.
Ejemplo:
> 1,3,5,7,9
2n-1
Explicación: Este es un AP porque hay una diferencia común ($ 3 - 1 = 2 $). Luego usas la fórmula $ a (n) = a (1) + (n-1) d $
Por lo tanto, la salida es 2n-1
(observe la ausencia de espacios)
Las lagunas estándar no están permitidas por defecto.
Se le permite crear una función si lo desea (con la matriz de números como su parámetro). De lo contrario, debe crear un programa completo que tome la entrada como una cadena o una matriz y las salidas en consecuencia.
Casos de prueba:
1)
1,3,5,7,9
2n-1
2)
1 3 12312 7 9
NAAP
3)
-6;8;22;36;50
14n-20
4)
5,1,-3,-7,-11,-15
-4n+9
5)
-5,-7,-9,-11,-13,-15
-2n-3
6)
3,3,3,3,3,3,3,3,3
0n+3
7)
-4,-5,-6,-7
-1n-3
Este es el código de golf, por lo que gana el código más corto en bytes. (Perdón por las malas matemáticas-jax)
Cualquier sugerencia es bienvenida!
fuente
0,0,0,0
y3,1,-1,-3,-5
progresiones aritméticas? Si es así, creo que serían buenos casos de prueba, ya que rompieron un método que estaba intentando.Respuestas:
Pyth, 30 bytes
Banco de pruebas
Para verificar si se trata de una procesión aritmética, se utiliza una resta vectorizada entre cada elemento y el anterior
-VtQQ
. Un ternario comprueba si hay varios valores en el resultado (?tJ{
) e imprimeNAAP
si es así. Entonces, para obtener el+
o-
la derecha, el mod-formateo%+d
se utiliza.fuente
Haskell, 103 bytes
Ejemplo de uso:
Como siempre en Haskell, el formato de salida elegante (por ejemplo, mezclar números con cadenas) consume muchos bytes (alrededor de 40). La lógica del programa es bastante compacta:
fuente
TI-BASIC, 70 bytes
Para remediar la falta de conversión de número a cadena de TI-BASIC, esto utiliza la salida en la pantalla de gráficos (
Text(
) si la progresión es aritmética, lo que concatena automáticamente los argumentos.Esto supone que los números negativos se ingresan utilizando el carácter de menos alto de TI-BASIC (que se parece un poco
⁻
), no el signo menos binario. Sin embargo, la salida usa el signo binario menos.fuente
Japt ,
605251 bytesPruébalo en línea!
La entrada se puede proporcionar con el separador que desee, ya que así es como está diseñado el intérprete;)
Sin golfos y explicación
fuente
Matlab, 103 bytes
fuente
CJam, 38 bytes
Esta es una función anónima que toma una matriz en la pila como entrada y deja una cadena en la pila como salida. Pruébelo en línea con código de E / S adicional para realizar pruebas.
Explicación:
fuente
JavaScript (ES6), 91 bytes
Explicación
Prueba
fuente
Perl 6,
123102101 bytesEDITAR: no niegues la diferencia
EDITAR: utilice sub anónimos, operadores lógicos e interpolación de cadenas. Gracias Brad Gilbert b2gills
Programa de prueba (lecturas de stdin):
Explicación:
fuente
sub f
. Además, si usara en@_
lugar de@a
ahorraría varios bytes.{my@b=@_.rotor...
. También usted no debe poner parens en torno a la condición de unif
comunicado, este no es Perl 5. Si ha cambiado de queif
al@b.end&&"NAAP"||$_=...
que podría ahorrar unos cuantos bytes. También puede eliminar esa últimaif
declaración si utilizó en su"@b[0]n{'+'x($_>=0)}$_"
lugar, ahorrando 4 bytes.sub
al principio, sin eso se convierte en un bloque anónimo. También para que lo sepas, no habría pensado en usarlo.map({[-] $_})
, probablemente lo hubiera usado, lo».map(*-*).flat
cual es más largo, ahora tengo que revisar mis propias entradas para ver si puedo acortarlo con tu truco.Ruby,
957876 bytes78 bytes
95 bytes
Sin golf:
Uso:
fuente
Python 3, 92 bytes
Basado en mi respuesta de Find the Sequence
def m(t):s=str;a=t[0];b=t[1];q=b-a;return((s(q)+'n'+'+'*(0<a-q)+s(a-q)),'NAAP')[t[2]/b==b/a]
fuente