Tantangannya adalah untuk mengidentifikasi nomor yang hilang dalam serangkaian bilangan bulat yang tidak direvisi.
Anda diberi serangkaian digit (input yang valid akan cocok dengan ekspresi reguler ^[1-9][0-9]+$
). String mewakili urutan bilangan bulat. Sebagai contoh 1234567891011
,. Semua angka dalam urutan berada dalam kisaran dari 1
dan 2147483647
inklusif.
Urutan adalah serangkaian angka di mana setiap angka satu lebih besar dari pendahulunya. Namun, urutan ini dapat berisi satu dan hanya satu nomor yang hilang dari urutan tersebut. Ada kemungkinan bahwa string yang diberikan juga tidak mengandung angka yang hilang dari urutan. String akan selalu mengandung setidaknya dua angka dari urutan.
Kode harus menampilkan atau mengembalikan nilai yang hilang, atau 0
(ini 0
- bukan nilai yang salah) jika tidak ditemukan nilai yang hilang.
Berikut ini adalah input yang valid dan output / pengembaliannya:
input output actual sequence (for refrence)
123467 5 1 2 3 4 _ 6 7
911 10 9 __ 11
123125126 124 123 ___ 125 126
8632456863245786324598632460 8632458 8632456 8632457 _______ 8632459 8632460
123 0 1 2 3
8632456863245786324588632459 0 8632456 8632457 8632458 8632459
Sementara semua ini digambarkan sebagai 'string' sebagai input, jika bahasa tersebut mampu menangani angka besar yang sewenang-wenang ( dc
dan mathematica
, saya melihat kalian berdua) input mungkin berupa angka besar yang sewenang-wenang alih-alih string jika itu membuat kode lebih mudah.
Untuk referensi, ini terinspirasi oleh pertanyaan Programmers.SE: Cari nomor yang hilang secara berurutan dalam string
Jawaban:
Haskell,
115112 byteBaris pertama adalah definisi fungsi pembantu, yang kedua adalah fungsi anonim utama. Verifikasi kasus uji (saya harus menjalankan tes lebih pendek karena batasan waktu).
Penjelasan
Ini adalah solusi brute force: pisahkan string menjadi kata-kata dengan semua cara yang mungkin, parsing kata-kata menjadi bilangan bulat, lihat apakah itu rentang dengan satu elemen yang hilang (mengembalikan elemen itu, dan
0
sebaliknya), dan ambil maksimum dari semua belahan. Pemeriksaan range-with-missing-element dilakukan dalam fungsi helperg
, yang mengambil daftarb
dan mengembalikan elemen tunggal dalam rentang[head of b..last of b]
yang tidak adab
, atau0
jika tidak ada.sumber
JavaScript (ES6), 117 byte
Penjelasan
Pendekatan yang cukup efisien. Selesai instan untuk semua kasus uji.
Mendapat masing-masing substring dari awal string input sebagai angka
n
dan initialises jumlah yang hilangm
untuk0
. Ini kemudian berulang kali menghapusn
dari awal string, menambahn
dan mencari string untuknya. Jikaindex of n != 0
, itu memeriksam
. Jikam == 0
, setelm = n
dan lanjutkan, jika tidak, ada beberapa nomor yang hilang, jadi berhentilah memeriksa dari substring ini. Proses ini berlanjut sampai seluruh string telah dihapus.sumber
JavaScript (ES6) 114
Kurang bermain golf dan menjelaskan
Uji
sumber
C,
183168166163 byteTidak disatukan
sumber
891112
mana angka memiliki panjang yang berbeda?sprintf
panggilan mengembalikan panjang jumlah hilang, terlepas apakah itu lebih panjang dari sebelumnya atau tidak.