Masalah
Mari kita tentukan Cantor umum yang ditetapkan dengan secara iteratif menghapus beberapa segmen panjang rasional dari tengah semua interval yang belum dihapus, mulai dari interval kontinu tunggal.
Mengingat panjang relatif segmen yang akan dihapus atau tidak, dan jumlah iterasi yang harus dilakukan, masalahnya adalah menulis program atau fungsi yang menampilkan panjang relatif segmen yang telah atau belum dihapus setelah n
iterasi.
Contoh: Secara permanen menghapus urutan ke-4 dan ke-6
Memasukkan:
n
- jumlah iterasi, diindeks mulai dari 0 atau 1
l
- daftar panjang segmen sebagai bilangan bulat positif dengan gcd(l)=1
dan panjang ganjil, mewakili panjang relatif dari bagian-bagian yang tetap seperti itu atau dihapus, mulai dari segmen yang tidak bisa dihapus. Karena panjang daftar aneh, segmen pertama dan terakhir tidak pernah dihapus. Misalnya untuk set Cantor reguler ini akan menjadi [1,1,1] untuk sepertiga yang tetap, sepertiga yang akan dihapus dan sepertiga yang tidak.
Keluaran:
Daftar bilangan bulat o
, gcd(o)=1
, dari panjang segmen relatif dalam n
iterasi th ketika segmen yang tidak dihapus dalam iterasi sebelumnya digantikan oleh salinan diperkecil dari daftar l
. Iterasi pertama adalah adil [1]
. Anda dapat menggunakan metode output yang tidak ambigu , bahkan unary.
Contohnya
n=0, l=[3,1,1,1,2] → [1]
n=1, l=[3,1,1,1,2] → [3, 1, 1, 1, 2]
n=2, l=[3,1,1,1,2] → [9,3,3,3,6,8,3,1,1,1,2,8,6,2,2,2,4]
n=3, l=[5,2,3] → [125,50,75,100,75,30,45,200,75,30,45,60,45,18,27]
n=3, l=[1,1,1] → [1,1,1,3,1,1,1,9,1,1,1,3,1,1,1]
Anda dapat menganggap input tersebut valid. Ini adalah kode-golf , sehingga program terpendek yang diukur dalam byte menang.
[0, 1, 2, 4, 6, 7]
bukan[3, 1, 1, 1, 2]
?Jawaban:
Jelly ,
15 1312 byte-2 terima kasih kepada Dennis (menggunakan Tautan daripada rantai memungkinkan hak untuk digunakan secara implisit oleh
¡
; Tidak perlu membungkus1
dalam daftar karena fakta bahwa Jelly mencetak daftar satu item sama dengan item)-1 terima kasih kepada Erik the Outgolfer (gunakan
Ɗ
untuk menyimpan baris baru dari menggunakanÇ
)Program lengkap mencetak daftar dalam format Jelly (jadi
[1]
dicetak sebagai1
)Cobalah online!
Bagaimana?
sumber
Python 2 ,
1201071041031009989 byteCobalah online!
Diselamatkan
sumber
R , 94 byte
Cobalah online!
sumber
Haskell ,
7658 byteCobalah online!
Fungsi
(%)
mengambil daftar panjang garisl
sebagai argumen pertama dan jumlah iterasin
sebagai input kedua.Terima kasih kepada Angs dan Ørjan Johansen untuk -18 byte!
sumber
n
dan menjatuhkan#
semuanya%
dapat disingkat menjadil%a=do(x,m)<-zip a$a>>[l,[sum l]];(*x)<$>m
.JavaScript (Firefox 42-57), 80 byte
Membutuhkan versi-versi spesifik tersebut karena menggunakan baik pemahaman array dan eksponensial.
sumber
JavaScript (Node.js) , 71 byte
Cobalah online!
sumber
Java 10, 261 byte
Memodifikasi daftar input daripada mengembalikan yang baru untuk menghemat byte.
Cobalah online.
sumber
Jelly , 13 byte
Cobalah online!
Program lengkap. Output
1
bukan[1]
. Mengganggu,ḋ
tidak bekerja seperti×S¥
dalam konteks ini, danƭ
tidak bekerja dengan baik dengan nilad. > _ <sumber
APL (Dyalog Classic) , 20 byte
Cobalah online!
sumber
K (ngn / k) , 27 byte
Cobalah online!
{
}
adalah fungsi dengan argumenx
dany
(y;+/y)
sepasangy
dan jumlahnya{
}[(y;+/y)]
proyeksi (alias aplikasi currying atau parsial) dari fungsi diad dengan satu argumen.x
akan(y;+/y)
dany
akan menjadi argumen saat diterapkan.,1
daftar tunggal yang mengandung 1x{
}[
]/
terapkan proyeksix
kali(#y)#x
membentuk kembali dengan panjang hasil saat ini, yaitu bergantian antara bagian luary
dan jumlahnyay*
kalikan setiap elemen di atas dengan elemen yang sesuai dari hasil saat ini,/
menggabungkansumber
Ruby , 73 byte
Cobalah online!
sumber
Pyth , 20 byte
Input adalah array segmen
l
, lalu iterasin
. Coba online di sini , atau verifikasi semua uji sekaligus di sini .sumber