Tantangan:
Pertimbangkan fungsi di F(N) = 2^N + 1
mana N
bilangan bulat positif kurang dari 31
. Urutan yang didefinisikan oleh fungsi ini adalah:
3, 5, 9, 17, 33, 65, 129, 257, 513, 1025, 2049, 4097, 8193, 16385, 32769, 65537, 131073, 262145, 524289, 1048577, 2097153, 4194305, 8388609, 16777217, 33554433, 67108865, 134217729, 268435457, 536870913, 1073741825
Input akan dihasilkan sebagai berikut:
- Ambil 5 bilangan bulat yang berdekatan dari urutan di atas.
- Ganti salah satunya dengan bilangan bulat positif yang berbeda (yang mungkin atau mungkin bukan bagian dari urutan di atas).
- Atur ulang secara opsional 5 angka yang dihasilkan.
Diberikan daftar 5 bilangan bulat seperti itu, temukan salah satu yang ditukar dan karenanya bukan bagian dari 5 bilangan bulat yang berdekatan yang asli.
Contoh:
- Sublist asli:
5, 9, 17, 33, 65
. - Mengganti satu:
5, 7, 17, 33, 65
. - Reorder:
33, 17, 5, 7, 65
.
Output yang diharapkan adalah 7
.
5 nilai dalam input akan selalu berbeda dan selalu ada solusi unik. (Misalnya, Anda tidak perlu berurusan dengan input seperti di 3, 9, 17, 33, 129
mana salah satu 3
atau 129
mungkin telah bertukar.)
Kasus uji:
5,9,17,33,829
o/p: 829
9,5,17,829,33
o/p: 829
33, 17, 5, 7, 65
o/p: 7
5,9,177,33,65
o/p: 177
65,129,259,513,1025
o/p: 259
129,259,513,1025,65
o/p: 259
63,129,257,513,1025
o/p: 63
65,129,257,513,4097
o/p: 4097
5, 9, 2, 17, 33
o/p: 2
536870913, 67108865, 1073741825, 1, 268435457
o/p: 1
536870913,67108865,134217729,1,268435457
N = 30
sebagai salah satu nilai input.Jawaban:
Jelly, 15 byte
TryItOnline
Semua test case juga ada di TryItOnline
Mengembalikan daftar yang berisi satu daftar yang berisi daftar aneh.
Bagaimana?
sumber
JavaScript (ES6), 62 byte
Algoritma yang sama sekali baru, karena seperti @ edc65 tunjukkan yang sebelumnya rusak. Penjelasan: Kami pertama-tama menangani kasing yang mudah dengan mencari 2 atau angka yang tidak satu lebih besar dari kekuatan 2. Jika tidak ada yang ditemukan, maka ada dua kasing yang mungkin, tergantung pada apakah nilai ekstra di bawah atau di atas run asli dari lima, jadi kami memeriksa apakah nilai terkecil dan terbesar kedua milik menjalankan yang sama dari lima dan jika demikian menyalahkan nilai terbesar sebaliknya nilai terkecil.
sumber
n-1&n-2
dengan nilai2
[3, 17, 33, 65, 257]
.--n&--n|!n
terlihat bagus untuk kasing2
?Python, 84 byte
Semua test case ada di ideone
Untuk input yang valid mengembalikan satu set yang hanya berisi yang ganjil.
Untuk input yang tidak valid, batas rekursi akan tercapai dan kesalahan akan terjadi.
sumber
Mathematica, 65 byte
Ini mendefinisikan fungsi
f
yang harus dipanggil dengan 5 argumen, misalnyaPada prinsipnya fungsi dapat dipanggil dengan sejumlah argumen (bukan nol), tetapi Anda mungkin mendapatkan hasil yang tidak diharapkan ...
Saya pikir ini adalah pertama kalinya, bahwa saya berhasil menempatkan seluruh solusi untuk tantangan non-sepele ke sisi kiri a
=
.Penjelasan
Solusi ini benar-benar menempatkan kemampuan pencocokan pola Mathematica untuk kita. Fitur dasar yang kami gunakan adalah bahwa Mathematica tidak bisa hanya mendefinisikan fungsi-fungsi sederhana seperti
f[x_] := (* some expression in x *)
tetapi kita dapat menggunakan pola kompleks yang sewenang-wenang di sisi kiri, misalnyaf[{a_, b_}, x_?OddQ] := ...
akan menambahkan definisif
yang hanya digunakan ketika dipanggil dengan dua elemen daftar dan bilangan bulat ganjil. Mudahnya, kita sudah dapat memberikan nama ke elemen secara sewenang-wenang jauh di bawah ungkapan sisi kiri (misalnya dalam contoh terakhir, kita dapat langsung merujuk ke dua elemen daftar sebagaia
danb
).Pola yang kami gunakan dalam tantangan ini adalah
f[a___,x_,b___]
. Berikuta___
danb___
merupakan urutan nol atau lebih argumen danx
argumen tunggal. Karena sisi kanan definisi adalah sederhanax
, apa yang kita inginkan adalah sihir yang memastikan yangx
digunakan untuk input yang kita cari dana___
danb___
hanya wildcard yang menutupi elemen yang tersisa.Ini dilakukan dengan melampirkan kondisi ke pola dengan
/;
. Sisi kanan/;
(semuanya hingga=
) perlu kembaliTrue
agar pola ini cocok. Keindahannya adalah bahwa pencocokan pola Mathematica akan mencoba setiap penugasan tunggala
,x
danb
untuk masukan bagi kita, sehingga pencarian elemen yang tepat dilakukan untuk kita. Ini pada dasarnya adalah solusi deklaratif untuk masalah tersebut.Adapun kondisinya sendiri:
Perhatikan bahwa ini tidak bergantung
x
sama sekali. Sebaliknya, kondisi ini hanya tergantung pada empat elemen yang tersisa. Ini adalah fitur nyaman lain dari solusi pencocokan pola: karena pola urutan,a
danb
bersama - sama berisi semua input lainnya.Jadi kondisi ini perlu memeriksa apakah empat elemen yang tersisa adalah elemen yang berdekatan dari urutan kami dengan paling banyak satu celah. Ide dasar untuk memeriksa ini adalah bahwa kita menghasilkan empat elemen berikutnya dari minimum (via ) dan memeriksa apakah keempat elemen tersebut adalah bagian dari ini. Satu-satunya input yang dapat menimbulkan masalah adalah input yang mengandung a , karena ini juga menghasilkan elemen urutan yang valid, jadi kita perlu menanganinya secara terpisah.
xi+1 = 2xi - 1
2
Bagian terakhir: mari kita lihat ekspresi yang sebenarnya, karena ada beberapa gula sintaksis yang lucu di sini.
Notasi infiks ini adalah kependekan dari
Min[a,b]
. Tapi ingat itua
danb
merupakan urutan, jadi ini sebenarnya diperluas ke empat elemenMin[i1, i2, i3, i4]
dan memberi kita elemen terkecil yang tersisa dalam input.Jika ini menghasilkan 2, kami menggantinya dengan 0 (yang akan menghasilkan nilai yang tidak ada dalam urutan). Ruang diperlukan karena jika tidak, Mathematica mem-parsing float literal
.2
.Kami menerapkan fungsi tanpa nama di sebelah kiri 4 kali untuk nilai ini dan mengumpulkan hasilnya dalam daftar.
Ini hanya mengalikan inputnya dengan 2 dan menurunkannya.
Dan akhirnya, kami memeriksa bahwa daftar berisi semua elemen dari
a
danb
merupakan bagian dari ini.sumber
Racket 198 byte
Versi tidak disatukan:
Pengujian:
Keluaran:
sumber
05AB1E ,
3230262420 bytePenjelasan
Cobalah online!
sumber
R, 97 byte
Ini ternyata lebih sulit dari yang saya kira. Saya yakin ini bisa bermain golf secara signifikan.
Tidak diikat dan dijelaskan
The
match()
fungsi akan kembaliNA
jika setiap elemen dari vektor input tidak dalam urutan dan akibatnya kita hanya dapat menemukan indeks di manaNA
ada di masukan dan kembali ini:x[is.na(m)]
Itu menjadi sedikit lebih rumit jika input adalah bagian dari urutan tetapi salah tempat. Karena input telah diurutkan, jarak antara masing-masing pasangan indeks harus
1
. Karena itu kami dapat menemukan elemen yang salah tempat dengan menyelidiki1st
perbedaan dari indeks yang cocokl=diff(m)
dan memilih indeks yang manal>1
. Ini hanya cukup jika bukan karena fakta yangl
mengandung4
elemen daripada5
. Ini hanya masalah jika elemen terakhir dalam input yang disortir adalah anggota dari urutan NAMUN bukan bagian dari urutan berikutnya (seperti dalam kasus tes akhir). Akibatnya, jika4th
elemen>1
mengambil5th
entri dalam input yang disortir lagi mencari indeks dalam4
vektor-panjang:x[ifelse(l[4]>1,5,l>1)]
sumber
anyNA
yang setara denganany(is.na(x))
Haskell,
6664 byteContoh penggunaan:
g [65,129,257,513,4097]
->4097
.Putaran melalui semua daftar yang berdekatan dengan panjang 5 dari
F(N)
, membuat elemen yang tidak ada dalam daftar inputx
dan pola cocok dengan panjang 1 (->[s]
).Sunting: @xnatau menyimpan dua byte dengan menghapus batas atas loop luar. Karena sebuah solusi dijamin ada, kemalasan Haskell berhenti pada nomor pertama yang ditemukan.
sumber
Perl,
6459 byteTermasuk +2 untuk
-an
Berikan daftar masukan pada STDIN:
oddout.pl
:Jika Anda tidak keberatan dengan jumlah ruang variabel di sekitar hasil, verson 58 byte ini berfungsi:
Kedua versi berulang selamanya jika input tidak memiliki solusi.
Ini kode yang sangat sakit, tapi saya tidak bisa memikirkan sesuatu yang elegan ...
Cara saya (ab) menggunakan
%a
trik perlgolf baru sejauh yang saya tahu.sumber
Python 2, 73 byte
Iterasi melalui set
d
lima elemen urutan berurutan hingga menemukan satu yang berisi semua kecuali satu elemen input, dan kemudian mencetak perbedaan, yang merupakan output dalam set singleton.Rangkaian
d
lima elemen berturut-turut dibangun dari ketiadaan dengan menambahkan elemen baru berulang kalii+1
dan menghapus elemen lama apa puni/32+1
yang muncul sebelum jendela 5. Saat ini, terlihat seperti apa progresnya.Ada yang tersesat 1 di awal dari inisialisasi, tetapi tidak berbahaya karena segera dihapus. Set yang lebih kecil karena membangun hingga 5 elemen juga tidak berbahaya.
sumber
PHP,
877675 bytejalankan bersama
php -r '<code>' <value1> <value2> <value3> <value4> <value5>
sumber
array_diff
. Tapi saya bisa menyimpan satu byte di sana.end
alih-alihmax
dan catatan Anda tidak lebih pentingC #, 69 byte
int M(int[]a)=>a.Except(new int[30].Select((_,i)=>(1<<i+1)+1)).Sum();
sumber
Java 7,85 byte
Tidak disatukan
sumber
l
31? Dalam pertanyaan saya hanya melihat int-array sebagai input, tetapi bukan int tambahan? : SPHP, 76 Bytes
menerapkan ide Titus dengan mod 5
126 Bytes sebelumnya
sumber
array_map(function($z){return 2**$z+1;},range($i,$i+4))
.$x[key($x)]
->end($x)
1-count($x=...)
kondisi tersebut akan membuat Anda terbebas dari istirahat:for(;1-count($x=...););echo end($x);
(-13)Pyth, 18 byte
Bentuk urutan, ambil sublists dengan panjang 5, Hapus setiap sublist dari Q, ambil hasil terpendek, output satu-satunya elemen.
sumber
[5, 9, 2, 17, 33]
Kotlin, 55 byte
fun f(a:IntArray)=a.find{it-1 !in(1..30).map{1 shl it}}
sumber