Tugas Anda adalah menganalisis input dan output rumus untuk istilah ke-n jika itu adalah urutan aritmatika, jika tidak maka harus mencetak "NAAP".
Memasukkan
Input (dari STDIN) akan terdiri dari beberapa angka, antara 4 hingga 10 angka di mana setiap angka akan berada dalam kisaran antara -1000 dan 1000 inklusif, dipisahkan oleh pembatas (spasi atau koma atau titik koma) preferensi Anda]). Berikut adalah beberapa contoh input.
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 `;`)
Keluaran
Program pertama-tama harus memeriksa apakah input adalah perkembangan aritmatika atau tidak.
Singkatnya, Kemajuan Aritmatika (AP): Setiap AP akan memiliki perbedaan yang sama. Ini adalah perbedaan antara istilah $ n $ dan $ {n-1} $ th (pada dasarnya $ a (n + 1) - a (n) $ di mana a
fungsi untuk sequnce). Perbedaan ini tetap sama untuk nilai $ n $ dalam suatu AP. Jika tidak ada perbedaan umum, maka itu bukan urutan aritmatika. Untuk menghitung nilai suku ke-n, gunakan rumus ini $ a (n) = a (1) + (n-1) d $ di mana $ a (1) $ adalah suku pertama dan $ d $ adalah umum perbedaan.
Jika itu bukan perkembangan aritmatika, maka program harus mencetak pesan kesalahan "NAAP" (kependekan dari "Bukan An Aritmatika Progresi").
Jika adalah perkembangan aritmatika, maka program harus mencetak term urutan ke-n dari urutan ke STDOUT.
Contoh:
> 1,3,5,7,9
2n-1
Penjelasan: Ini adalah AP karena ada perbedaan umum ($ 3 - 1 = 2 $). Kemudian Anda menggunakan rumus $ a (n) = a (1) + (n-1) d $
Oleh karena itu output 2n-1
(perhatikan tidak adanya spasi)
Celah standar tidak diizinkan secara default.
Anda diizinkan untuk membuat fungsi jika Anda mau (dengan array angka sebagai parameter Anda). Jika tidak, maka Anda harus membuat program lengkap yang mengambil input sebagai string atau array dan menghasilkan output yang sesuai.
Kasus uji:
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
Ini adalah kode-golf sehingga kode terpendek dalam byte menang! (maaf untuk matematika buruk-jax)
Ada saran dipersilahkan!
sumber
0,0,0,0
dan3,1,-1,-3,-5
perkembangan aritmatika? Jika demikian, saya pikir itu akan menjadi kasus uji yang baik, karena mereka melanggar metode yang saya coba.Jawaban:
Pyth, 30 byte
Suite uji
Untuk memeriksa apakah ini prosesi aritmatika, ini menggunakan pengurangan vektor antara setiap elemen dan sebelumnya
-VtQQ
,. Sebuah ternary memeriksa apakah ada beberapa nilai pada hasilnya (?tJ{
) dan mencetakNAAP
jika demikian. Kemudian, untuk mendapatkan+
atau-
benar, mod-formating%+d
digunakan.sumber
Haskell, 103 byte
Contoh penggunaan:
Seperti biasa di Haskell, format output yang bagus (mis. Mencampur angka dengan string) memakan banyak byte (sekitar 40). Logika program cukup kompak:
sumber
TI-BASIC, 70 byte
Untuk memperbaiki kurangnya konversi jumlah-ke-string TI-BASIC, ini menggunakan output pada layar grafik (
Text(
) jika progresnya adalah aritmatika, yang secara otomatis menggabungkan argumen bersama.Ini mengasumsikan bahwa angka negatif dimasukkan menggunakan karakter minus-tinggi TI-BASIC (yang agak mirip
⁻
), bukan tanda minus biner. Namun, output menggunakan tanda minus biner.sumber
Japt ,
605251 byteCobalah online!
Masukan dapat diberikan dengan pemisah mana pun yang Anda suka, karena itulah cara penerjemah dirancang;)
Tanpa penjelasan dan penjelasan
sumber
Matlab, 103 byte
sumber
CJam, 38 byte
Ini adalah fungsi anonim yang mengambil array pada stack sebagai input, dan meninggalkan string pada stack sebagai output. Cobalah online dengan kode I / O tambahan untuk pengujian.
Penjelasan:
sumber
JavaScript (ES6), 91 byte
Penjelasan
Uji
sumber
Perl 6,
123102101 byteEDIT: Jangan meniadakan perbedaan
EDIT: gunakan sub anonim, operator logis dan interpolasi string. Terima kasih Brad Gilbert b2gills
Program tes (dibaca dari stdin):
Penjelasan:
sumber
sub f
. Juga jika Anda digunakan@_
sebagai pengganti@a
Anda akan menyimpan beberapa byte.{my@b=@_.rotor...
. Juga Anda tidak harus meletakkan parens sekitar kondisi sebuahif
pernyataan, ini bukan Perl 5. Jika Anda mengubah bahwaif
untuk@b.end&&"NAAP"||$_=...
Anda akan menghemat beberapa byte. Anda juga dapat menghapusif
pernyataan terakhir itu jika Anda menggunakannya"@b[0]n{'+'x($_>=0)}$_"
sebagai gantinya, menghemat 4 byte.sub
di awal, tanpa itu menjadi blok anonim. Juga supaya Anda tahu, saya tidak akan berpikir untuk menggunakan.map({[-] $_})
saya mungkin akan menggunakan».map(*-*).flat
yang lebih lama, sekarang saya harus melalui entri saya sendiri untuk melihat apakah saya dapat mempersingkat dengan trik Anda.Ruby,
957876 byte78 byte
95 byte
Tidak Disatukan:
Pemakaian:
sumber
Python 3, 92 byte
Berdasarkan jawaban saya dari Temukan Urutannya
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]
sumber