Diberikan daftar bilangan bulat yang dipisahkan oleh ruang, tugas Anda adalah menemukan bilangan bulat berikutnya dalam urutan. Setiap bilangan bulat dalam urutan adalah hasil dari menerapkan operasi matematika tunggal ( +
, -
, *
atau /
) ke integer sebelumnya, dan setiap urutan terdiri dari sejumlah variabel dari operasi tersebut (tetapi tidak lebih dari 10). Tidak ada urutan yang akan lebih panjang dari setengah panjang urutan bilangan bulat, sehingga Anda akan memiliki setiap urutan operasi yang muncul setidaknya dua kali untuk konfirmasi.
Masukan akan melalui stdin (atau prompt
untuk solusi JavaScript).
Berikut ini beberapa contoh penjelasan.
Memasukkan:
1 3 5 7 9 11
Keluaran:
13
Cukup mudah, yang ini. Semua nilai adalah nilai sebelumnya +2
.
Memasukkan:
1 3 2 4 3 5 4 6 5 7 6
Ouput:
8
Dua langkah dalam urutan ini, +2
lalu -1
.
Memasukkan:
2 6 7 3 9 10 6 18 19 15 45 46
Keluaran:
42
Tiga langkah - *3
, +1
, -4
.
Uji kasus
Berikut beberapa kasus uji lagi:
Memasukkan:
1024 512 256 128 64 32 16
Keluaran:
8
Memasukkan:
1 3 9 8 24 72 71 213 639
Keluaran:
638
Memasukkan:
1 2 3 4 5 2 3 4 5 6 3 4 5 6 7
Keluaran:
4
Memasukkan:
1 2 4 1 3 9 5 8 32 27 28 56 53 55 165 161 164 656 651 652 1304
Keluaran:
1301
Saya memiliki solusi Scala yang tidak dikoleksi (42 baris) yang akan saya posting dalam beberapa hari.
Ini adalah kode-golf - jawaban terpendek menang.
Jawaban:
Golfscript,
203138 karakterIni menggunakan jauh lebih banyak
if
daripada program Golfscript standar, dan operasinya cukup samar, jadi inilah versi yang berkomentar (tetapi tidak ungolfed selain dengan penambahan spasi dan komentar):Kiriman asli saya adalah sebagai berikut di 88 karakter:
Namun, ini mencoba untuk menghitung operasi dari kejadian pertama masing-masing, jadi jika operasi adalah perkalian atau pembagian dan argumen putaran pertama kali adalah 0 itu rusak.
sumber
Haskell,
276261259257243 karakterInilah solusi saya yang tidak efisien. Ia bekerja pada bilangan bulat tanpa batas (dan terbatas). Solusi ini bekerja dengan benar dengan pembagian yang tidak tepat (misalnya:
5 / 2 = 2
.:).Cara kerjanya: Saya membuat setiap urutan operasi yang mungkin (mungkin). Kemudian saya menguji terhadap urutan input angka untuk melihat apakah urutan yang dihasilkan akan membuat input. Jika ya, kembalikan nomor berikutnya dalam urutan. Kode akan selalu mengembalikan jawaban yang berasal dari urutan operasi terpendek. Ini terjadi karena daftar urutan operasi dihasilkan dalam urutan itu. Ini sewenang-wenang (tapi konsisten) dalam memutuskan antar ikatan. Misalnya kode kembali
6
atau8
untuk urutan2 4
.Tidak Disatukan:
sumber
Control.Monad -> Monad
mungkin? Dan bagaimanainteract$show.n.q read.words
Python,
333366...315303278269261246 karakterMembuat operasi dengan pasangan angka pertama dan memeriksanya pada pasangan lain. Menyimpan semua operasi, dan jika semuanya berhasil maka berlaku operasi yang sesuai pada daftar elemen terakhir.
Diedit: lulus uji kejahatan :-) Sekarang cari operasi di semua posisi.
sumber
0 0 1 2 3 6 7 14
0 0 0 0 1 0 0 0 0 1
tidak menghasilkan0
.lambda x:x+b-a
->(b-a).__add__
. Sayang sekali itu hanya satu karakter, saya belajar banyak tentang python dengan melakukan ini.l
global, membuat banyak menghemat simpananPython,
309305295279 karakterMenangani semua kasus uji asli, serta kasus degil Peter Taylor
0 0 1 2 3 6 7 14
:Tidak dikumpulkan, dengan output debugging (sangat membantu dalam memverifikasi kebenaran):
Pemakaian:
sumber
v<1
berfungsi sebagai penjaga.Ruby 1.9
(437)(521)(447)(477)Berfungsi untuk semua kasus uji, termasuk yang "jahat". Saya akan golf lagi nanti.
EDIT: Saya menyadari ada kasus lain yang tidak saya tangani dengan benar - ketika kelanjutan perlu menggunakan operasi "misteri". Urutannya
2 0 0 -2 -4 -6
awalnya mengembalikan 0 bukannya -12. Saya sekarang sudah memperbaikinya.EDIT: Memperbaiki beberapa kasus tepi lebih banyak dan mengurangi kode menjadi 447.
EDIT: Ugh. Harus menambahkan beberapa kode untuk menangani urutan "jahat" lainnya seperti
0 0 0 6 18 6 12
sumber
Scala
Ini adalah solusi yang saya buat:
Tidak Disatukan:
sumber
echo "0 0 1 2 3 6 7 14" | scala Sequence
membuat layar hitam.scala Sequence
dan kemudian masukkan urutan dan tekan enter.Scala 936
ungolfed:
Gagal pada Peter Taylor's
h
, tapi saya tidak melihat kemungkinan untuk menyembuhkan program dalam jumlah waktu yang wajar.sumber
-
sebagai kasus khusus+
dan/
sebagai kasus khusus*
? Cara saya menyampaikan masukan Peter Taylor (dan sejenisnya) adalah dengan memotong nomor pertama dalam urutan dan coba lagi. Saya belum punya waktu untuk melihat bagaimana program Anda bekerja belum tahu apakah itu akan membantu Anda.-1, 0, 0, 1, 2, 3, 6, 7, 14
akan membutuhkan penyembuhan yang berbeda.