Sua tarefa é analisar a entrada e gerar a fórmula para o n-ésimo termo, se for uma sequência aritmética, caso contrário, deverá imprimir "NAAP".
Entrada
A entrada (do STDIN) consistirá em poucos números, entre 4 e 10 números em que cada número estará no intervalo entre -1000 e 1000, inclusive, separados por um delimitador (um espaço ou vírgula ou ponto e vírgula [o que for sua preferencia]). Aqui estão alguns exemplos 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 `;`)
Resultado
O programa deve primeiro verificar se a entrada é uma progressão aritmética ou não.
Progressões aritméticas (PA) em poucas palavras: todo PA terá uma diferença comum. Essa é a diferença entre os termos $ n $ e $ {n-1} $ th (basicamente $ a (n + 1) - a (n) $, onde a
é a função da sequência). Essa diferença permanece a mesma para qualquer valor de $ n $ em um AP. Se não houver diferença comum, então é não uma sequência de aritmética. Para calcular o valor do n-ésimo termo, use esta fórmula $ a (n) = a (1) + (n-1) d $ em que $ a (1) $ é o primeiro termo e $ d $ é o comum diferença.
Se não for uma progressão aritmética, o programa deverá imprimir a mensagem de erro "NAAP" (abreviação de "Não é uma progressão aritmética").
Se for uma progressão aritmética, o programa deverá imprimir o n-ésimo termo simplificado da sequência em STDOUT.
Exemplo:
> 1,3,5,7,9
2n-1
Explicação: Este é um AP porque existe uma diferença comum ($ 3 - 1 = 2 $). Então você usa a fórmula $ a (n) = a (1) + (n-1) d $
Portanto, a saída é 2n-1
(observe a ausência de espaços)
As brechas padrão não são permitidas por padrão.
Você pode criar uma função se desejar (com a matriz de números como seu parâmetro). Caso contrário, você deve criar um programa completo que aceite a entrada como uma sequência de caracteres ou uma matriz e produza adequadamente.
Casos de teste:
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
Isso é código-golfe, então o código mais curto em bytes vence! (desculpe pelo mau math-jax)
Todas as sugestões são bem-vindas!
fonte
0,0,0,0
e3,1,-1,-3,-5
progressões aritméticas? Nesse caso, acho que seriam bons casos de teste, pois quebraram um método que eu estava tentando.Respostas:
Pitão, 30 bytes
Suíte de teste
Para verificar se é uma procissão aritmética, isso usa uma subtração vetorizada entre cada elemento e o anterior
-VtQQ
. Um ternário verifica se há vários valores no resultado (?tJ{
) e imprimeNAAP
se houver. Então, para acertar+
ou-
acertar, a formatação mod%+d
é usada.fonte
Haskell, 103 bytes
Exemplo de uso:
Como sempre em Haskell, a formatação de saída sofisticada (por exemplo, misturando números com seqüências de caracteres) consome muitos bytes (cerca de 40). A lógica do programa é bastante compacta:
fonte
TI-BASIC, 70 bytes
Para remediar a falta de conversão de número em string do TI-BASIC, ele usa a saída na tela de gráfico (
Text(
) se a progressão for aritmética, que concatena automaticamente os argumentos.Isso pressupõe que os números negativos sejam inseridos usando o caractere de menos-alto do TI-BASIC (que parece um pouco
⁻
), e não o sinal de menos-binário. No entanto, a saída usa o sinal de menos binário.fonte
Japt ,
605251 bytesExperimente online!
A entrada pode ser fornecida com o separador que você quiser, pois é assim que o intérprete é projetado;)
Ungolfed e explicação
fonte
Matlab, 103 bytes
fonte
CJam, 38 bytes
Essa é uma função anônima que pega uma matriz na pilha como entrada e deixa uma string na pilha como saída. Experimente online com código de E / S adicional para teste.
Explicação:
fonte
JavaScript (ES6), 91 bytes
Explicação
Teste
fonte
Perl 6,
123102101 bytesEDIT: Não negue a diferença
EDIT: use sub anônimos, operadores lógicos e interpolação de strings. Obrigado Brad Gilbert b2gills
Programa de teste (leituras de stdin):
Explicação:
fonte
sub f
. Além disso, se você usou em@_
vez de@a
salvar vários bytes.{my@b=@_.rotor...
. Além disso, você não deve colocar parênteses em torno da condição de umaif
instrução, isso não é o Perl 5. Se você alterou issoif
para@b.end&&"NAAP"||$_=...
salvar mais alguns bytes. Você também pode acabar com essa últimaif
instrução se tiver usado"@b[0]n{'+'x($_>=0)}$_"
, salvando 4 bytes.sub
no começo, sem que isso se torne um bloco anônimo. Além disso, só para você saber, eu não teria pensado em usá-.map({[-] $_})
lo. Provavelmente usaria».map(*-*).flat
mais, agora tenho que passar por minhas próprias entradas para ver se consigo reduzi-lo com seu truque.Ruby,
957876 bytes78 bytes
95 bytes
Ungolfed:
Uso:
fonte
Python 3, 92 bytes
Com base na minha resposta 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]
fonte