Pertimbangkan urutan alami hingga-6 (abaikan 1) :
2,3,4,5,6
Kami mulai memindai dari kiri (dalam hal ini dari 2), mencari nomor yang dapat dibagi 2 (di sini 4) dan kemudian menghapus kedua angka dari daftar (di sini 2 & 4), sehingga daftar tersebut berkurang menjadi:
3,5,6
Kami melanjutkan proses yang sama, di sini paling kiri adalah 3, jadi kami mencari angka yang dapat dibagi dengan 3. 6 pasti angka itu dan dengan demikian 3 dan 6 dihapus,
5
Sekarang, tidak ada pencarian lebih lanjut yang dapat dilakukan. Jadi, ini menjadi daftar angka ALONED untuk n = 6.
OBJEKTIF
- Diberi angka n lebih besar dari 1, cetak semua angka yang diubah yang sesuai.
MEMASUKKAN
2
6
15
20
22
KELUARAN
2
5
8,9,11,12,13,15
11,12,13,15,17,19,20
12,13,15,17,19,20,21
BELUM CONTOH LAIN YANG BEKERJA
Untuk n = 22
=>2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22
=>3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 (remove 2 & 4)
=>5,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 (remove 3 & 6)
=>7,8,9,11,12,13,14,15,16,17,18,19,20,21,22 (remove 5 & 10)
=>8,9,11,12,13,15,16,17,18,19,20,21,22 (remove 7 & 14)
=>9,11,12,13,15,17,18,19,20,21,22 (remove 8 & 16)
=>11,12,13,15,17,19,20,21,22 (remove 9 & 18)
=>12,13,15,17,19,20,21 (remove 11 & 22) (OUTPUT)
Ini adalah kode-golf , jadi kode terpendek dalam byte menang.
Jawaban:
05AB1E ,
22171514 byteCobalah online!
Penjelasan
sumber
Python 2,
907973 byte-6 byte terima kasih kepada xnor
Mengambil nomor input pada stdin. Ide itu!
Penjelasan
Kami membuat daftar awal dari nomor input dan menyimpannya di
L
. Selanjutnya, ulangi sementara angka terakhir lebih besar dari atau sama dengan 2 kali angka pertama dan hapus 2 kali angka pertama dari daftar. Ini akan selalu menjadi nomor berikutnya yang dapat dibagiL[0]
.L=L[1:]
melepas nomor pertama juga. Ketika kondisinya tidak lagi benar, tidak ada lagi pemindahan yang dapat dilakukan, dan daftar dicetak.sumber
range
sudah memberikan daftar.Python, 61 byte
Ini sedikit lebih mudah untuk memahami kode yang kurang golf ini:
Ini menggunakan karakterisasi langsung dari nomor yang diubah:
Mengapa ini berlaku? Ketika melakukan proses untuk
n
, katakanlah kami menghapus nomor ganjila
di bagian bawah (1
ken/2
). Kemudian,2*a
dihapus di mana pun dalam daftar itu. Jadi,4*a
tetap (jika ada). Tetapi jika itu di bagian bawah, proses penghapusan akan sampai ke sana dan menghapus keduanya4*a
dan8*a
. Jadi, kita melihat bahwa jumlah upper-setengah akan dihapus jika itu bentuk2*a
,8*a
... dengan anehc
, tapi tetap jika memiliki bentuka
,4*a
,8*a
, ...Pengecualian untuk
a=1
, yang tidak dimulai dalam daftar dan tidak dihapus. Akibatnya, rantai pelepasan dimulai dengana=2
, dan aturan untuk kekuatan 2 dibalik.Dalam kode di atas,
(i&-i)**.5%1>0
periksa apakahi
tidak memiliki formuliri = a * 2^b
denganb
aneh, dengan trik-bit untuk mengekstrak faktor kekuatan dua terbesar2^b = i&-i
,, lalu memeriksa apakah hasilnya bukan kuadrat sempurna. Lalu,i&~-i>0
ada sedikit trik lain untuk memeriksa apakahi
bukan kekuatan sempurna 2. Kondisi ini kemudian diperbaiki.Masih ada beberapa peningkatan di sini
Pertama, kami menggeser indeks kisaran 1 ke bawah menjadi
range(n/2,n)
darirange(n/2+1,n+1)
, mengkompensasi dengan mengganti semuai
dengani+1
(atau~-i
).Apakah kekuatan 2 adalah angka adalah kekuatan
4
(2 ^b
denganb
genap) dapat diperiksa oleh dan2**c/3
untuk beberapa besarc
. Ini karena2**c/3
memiliki representasi biner10101...101
dengan yang ada di bit yang diposisikan rata. Menggunakanc=2*n
cukup. Untuk meniadakan hasil ketikai
kekuatan 2, kita membagi dua angka ini adalah kasus itu, menempatkan1
di posisi aneh sebagai gantinya.sumber
Groovy,
6558 BytesIde algoritma dari DSLoc , yang memperhatikan Anda hanya perlu menghapus ganda.
Berikut ini rinciannya:
sumber
Perl,
53494544 byteTermasuk +1 untuk
-n
Berikan nomor input pada STDIN:
aloned.pl
:Secara langsung memeriksa nomor yang mungkin lebih lama:
Ini memeriksa semua angka dalam kisaran setengah atas. Simpan angka yang memiliki angka genap 2 sebagai faktor prima kecuali jika angka tersebut adalah kekuatan 2 maka ganjil (karena 1 ditinggalkan dari seri aslinya). Namun metode ini harus bekerja dengan baik untuk bahasa lain.
sumber
MATL , 18 byte
Pinjam ide "gandakan dengan 2" dari jawaban 05AB1E @ Emigna .
Cobalah online!
Penjelasan
sumber
Haskell,
71696256 byteContoh penggunaan:
q 22
->[12,13,15,17,19,20,21]
.Jika ada kelipatan dari angka pertama
a
, maka itu2*a
. Simpana
jika2*a
tidak ada dalam daftar dan tambahkan panggilan rekursif dengana
dan2*a
dihapus dari daftar.sumber
Pyth - 19 byte
Akan pasti menjadi refactoring.
Test Suite .
sumber
Ruby, 124
Membandingkan skor dengan jawaban lain, ini jelas pendekatan yang salah:
Bit yang agak pintar di sini adalah
a[g[0]]=a[g[1]]=!g[1]
yang menetapkan nilai hash ke true / false yang diperlukan.sumber
PHP, 98 Bytes
8 Bytes simpan oleh @Titus Terima Kasih
Jika koma tertinggal diperbolehkan maka dapat mempersingkat 9 Bytes
(!$a?:print"$a,");
bukan(!$a?:print$x?",$a":$x=$a);
sumber
$a
dan$b
membutuhkan tanda kurung? Jahat!(!$a?:print"$a,")
->print$a?"$a,":""
. -2 byte untuk kedua versi jika Anda menggunakan garis bawah sebagai pemisah.foreach(... as$v)
,$v-2
bukan$k
dan$v*2-2
bukan$k*2+2
.$a=&$r[$k]&&$b=&$r[$k*2+2]
bekerja seperti$a=$r[$k]and$b=$r[$k*2+2]
. Saya menyesal tidak menemukan halaman yang menjelaskan kombinasi dengan referensi dan&&
operator. Tapi saya butuh referensi bukan tugas. Saya tidak yakin apakah koma tertinggal atau pemisah lainnya diizinkan.&
bitwise dan referensi memiliki Precedence yang lebih tinggi daripada&&
operatorJavascript, 149 byte
Ini contoh yang bagus. Semua fungsi HTML dan wrapper () benar-benar interaktif.
Tampilkan cuplikan kode
Cuplikan kode yang tidak dipisahkan ini memiliki beberapa komentar dan memungkinkan Anda melihat langkah-langkah untuk input yang diberikan secara interaktif.
Tampilkan cuplikan kode
sumber
JavaScript (ES6), 92 byte
Saya pikir saya telah memposting ini kemarin, tetapi jelas tidak ...
Ini versi lain:
sumber
Java 7, 210 byte
Pasti bisa bermain golf lagi dengan menggunakan pendekatan yang berbeda, mungkin dengan menggunakan array dengan beberapa trik. Karena para pemain, istirahat, mengetik-daftar dan jika-periksa itu sedikit lebih lama dari yang diharapkan, tetapi berhasil.
Tidak digabungkan & kode uji:
Coba di sini.
Keluaran:
sumber
Racket 191 byte
Tidak digabungkan (komentar setelah ';'):
Pengujian:
Keluaran:
sumber