Saya berbicara tentang pertanyaan ini , lihatlah jika Anda agak bingung.
Tugas utama
Tugas Anda adalah untuk menghasilkan bilangan bulat bersambung, dalam urutan menurun, tetapi meningkatkan bilangan bulat maksimum setiap kali Anda menekan 1
(untuk pertanyaan ini, 1 akan dianggap sebagai bilangan prima) . Meskipun ini tidak terdengar berbeda dari pertanyaan pertama, inilah bagian yang sulit: Semua angka yang dihasilkan mungkin hanya bilangan prima . Ini akan dirangkai menjadi satu string tanpa spasi atau baris baru. Masukan Anda juga akan menjadi bilangan prima .
Contoh:
1
21
321
5321
75321
1175321
Valid output:
1213215321753211175321
Memasukkan
Kode Anda hanya dapat mengambil satu input: perdana tertinggi untuk dicetak. Input ini dapat berasal dari mana saja (grafis, STDIN). Anda yakin bahwa inputnya adalah bilangan prima.
Keluaran
Anda harus menampilkan nomor yang dihasilkan. Anda bisa mendapatkan nomor ini dengan terus menghitung mundur, hanya menghitung nomor jika itu prima, lalu hubungkan semua hasil bersama ke satu nomor. "Baris" nomor terakhir (mis. 7, 5, 3, 2, 1
) Harus dicetak sepenuhnya. Outputnya bisa berupa apa saja (angka, string, grafik), asalkan bisa dibaca. Pola Regex yang sama untuk memeriksa kasus pengujian Anda berlaku:
^(\D*(\d)+\D*|)$
Jika output Anda tidak cocok dengan pola ini, kode Anda tidak valid.
Aturan
- Input dijamin prima, tidak termasuk penanganan kesalahan, kecuali jika Anda ingin / perlu.
- Outputnya mungkin hanya angka yang terhubung penuh, oleh karena itu tidak terpecah oleh apa pun, bahkan baris baru.
- Algoritme Anda seharusnya tidak memeriksa instance pertama yang
N
muncul (misalnya,17
in1175321
), melainkan untuk instance pertamaN
sebagai angka aktual. - Masukan Anda dijamin positif, jangan tambahkan penanganan kecuali Anda mau / perlu.
Uji kasus
Input: -2, 0
Output: Any, or none (number isn't positive)
Input: 9
Output: Any, or none (number isn't prime)
Input: 1
Output: 1
Input: 7
Output: 121321532175321
Input: 23
Output: 1213215321753211175321131175321171311753211917131175321231917131175321
Pemenang
Ini adalah kode-golf , jadi pembuat kode dengan panjang byte paling sedikit menang!
1
adalah prima menurut definisi.1
secara langsung bertentangan dengan spec, yang " meyakinkan " bahwa nomor input akan menjadi prima. 2. Spesifikasi output tampaknya mengandung banyak kontradiksi dan ambiguitas. " Angka" baris "terakhir (mis. 7, 5, 3, 2, 1) harus dicetak sepenuhnya " - jadi yang lain tidak? " Pola Regex yang sama untuk memeriksa kasus pengujian Anda berlaku ", tetapi " Output mungkin hanya angka yang terhubung penuh, oleh karena itu tidak terpecah oleh apa pun " bertentangan dengan regex itu. Tetapi regex jelas-jelas cerdik karena memungkinkan string kosong, dan tidak ada input yang bisa memberikan itu.Jawaban:
Jelly , 9 byte
Cobalah online!
Bagaimana itu bekerja
sumber
V
pada daftar.)Memproses, 161 byte
Satu fungsi melakukan pengecekan primality, yang lainnya melakukan pencetakan. Sebut saja
t(7)
Tidak disatukan
Fungsi pertama melakukan pengecekan primality. Ini mengembalikan
int
bukanboolean
karena cara ini lebih banyak byte disimpan. (int
bukannyaboolean
,0
bukannyafalse
,1
bukannyatrue
)Fungsi kedua mencetak string. Itu iterates melalui setiap nomor, jika itu bukan prima, lewati ke iterasi berikutnya. Jika prime, terus ke pencetakan di dalam
for
-lingkaran lain . Sekali lagi, jika angkanya prima, maka kami mencetaknya, kalau tidak, tidak.sumber
Jelly , 12 byte
Cobalah online!
Jika bukan karena
1
s sama sekali, kode saya hanya akanÆRÆRUVV
selama 7 byte.Penjelasan yang ditingkatkan:
Orang Irlandia (disebut Dennis?) Entah bagaimana mengungguli saya lol
sumber
05AB1E , 19 byte
Cobalah online!
Penjelasan
sumber
DpÏ
pernyataan itu. Kerja bagus!Brachylog , 17 byte
Cobalah online!
Sepertinya tidak bisa menjadi lebih pendek dari itu ...
Penjelasan
sumber
Bahasa GameMaker, 169 byte
Fungsi utama (68 byte)
Fungsi p (46 byte)
Fungsi q (55 byte)
sumber
MATL , 15 byte
Cobalah online!
sumber
Perl 6 , 41 byte
( Coba online. )
Penjelasan:
1, |grep(*.is-prime, 2..$_)
: Urutan 1 dan bilangan prima ...(1 2 3 5)
[,] ...
: Kurangi ("lipat") melalui operator koma ...(1 2 3 5)
[\,] ...
: Dengan hasil antara ( pengurangan segitiga ) ...((1) (1 2) (1 2 3) (1 2 3 5))
[\R,] ...
: Terapkan pembalikan meta-operator ke koma ...((1) (2 1) (3 2 1) (5 3 2 1))
[~] flat ...
: Hapus daftar sarang, dan lipat operator string concat ...1213215321
(Ini berdasarkan jawaban saya untuk tantangan sebelumnya .)
sumber
Mathematica, 61 byte
Fungsi tanpa nama mengambil argumen integer dan mengembalikan string. (Jika input bukan prima, ia hanya "membulatkannya" ke prime terdekat; jika inputnya tidak positif, ia berpura-pura sebagai 1.)
Implementasi ini menggunakan trik jahat dari jawaban Martin Ender untuk tantangan serupa sebelumnya (siapa bilang anjing tua ini tidak bisa mempelajari trik baru?): Menyalahgunakan
<>
untuk meratakan daftar bilangan bulat yang bersarang.Daftar bersarang dalam pertanyaan dimulai dengan membuat daftar bertingkat yang sama seperti pada jawaban itu, dengan panjang yang sesuai (diberikan oleh
PrimePi@#
, jumlah bilangan prima hingga dan termasuk input); kemudianPrime
diterapkan ke setiap elemen. Misalnya, untuk input5
yang merupakan prima ke-3, kodeRange[Range@PrimePi@#,0,-1]
menghasilkan{{1,0},{2,1,0},{3,2,1,0}}
, dan menerapkanPrime
ke setiap elemen menghasilkan{{2,Prime[0]},{3,2,Prime[0]},{5,3,2,Prime[0]}}
sejak primer 1, 2, dan 3 masing-masing 2, 3, dan 5. Saya merasa bangga bahwa saya berhasil menambahkan lebih banyak kesalahan pada pendekatan Martin Ender — Mathematica mengeluh setiap kali ia menulisPrime[0]
.Prime[0]
bukanlah sesuatu, tapi tidak apa-apa:/.Prime@0->1
mengubah semuanya menjadi1
s. Dan kami juga menginginkan sebuah1
di bagian depan, jadi kami mengganti jawaban""
dari Martin Ender dengan sederhana1
, yang sebenarnya menghemat satu byte.sumber
PHP, 72 byte
Jalankan kecerdasan
-r
kerusakan
sumber
Pyth - 12 byte
Test Suite .
sumber