Pendahuluan (dapat diabaikan)
Menempatkan semua angka positif dalam urutan regulernya (1, 2, 3, ...) agak membosankan, bukan? Jadi di sini adalah serangkaian tantangan seputar permutasi (perombakan) dari semua bilangan positif. Ini adalah tantangan ketiga dalam seri ini (tautan ke tantangan pertama dan kedua ).
Dalam tantangan ini, kita akan mengatur bilangan asli dalam deretan panjang yang bertambah sedemikian rupa sehingga jumlah setiap baris adalah bilangan prima. Apa yang saya temukan sangat menakjubkan tentang ini, adalah bahwa setiap bilangan alami memiliki tempat dalam pengaturan ini. Tidak ada angka yang terlewati!
Visualisasi pengaturan ini terlihat seperti ini:
row numbers sum
1 1 1
2 2 3 5
3 4 5 8 17
4 6 7 9 15 37
5 10 11 12 13 21 67
6 14 16 17 18 19 23 107
etc.
Kita bisa membaca elemen dari baris dalam segitiga ini. 20 elemen pertama adalah: 1, 2, 3, 4, 5, 8, 6 , 7, 9, 15, 10, 11, 12, 13, 21, 14, 16, 17, 18, 19 ( ya, ada lagu Orde Baru disembunyikan dalam urutan ini ).
Karena ini adalah tantangan "urutan murni", tugasnya adalah mengeluarkan untuk diberikan sebagai input, di mana adalah A162371 .
Tugas
Diberikan input integer , output dalam format integer.
didefinisikan sebagaielemen ke- dari permutasi paling awal secara leksikografis dari bilangan asli sehingga, ketika dilihat sebagai segitiga yang dibaca oleh baris, untuk n> 1 jumlah baris adalah bilangan prima. Karena permutasi leksikografis pertama dari bilangan asli dimulai dengan 1, adalah 1. Perhatikan bahwa dengan definisi ini dan yangtidakdiperlukan untuk menjadi perdana. Ini adalah urutan OEISA162371.
Catatan: pengindeksan berbasis 1 diasumsikan di sini; Anda dapat menggunakan pengindeksan berbasis 0, jadi , dll. Sebutkan ini dalam jawaban Anda jika Anda memilih untuk menggunakan ini.
Uji kasus
Input | Output
---------------
1 | 1
5 | 5
20 | 19
50 | 50
78 | 87
123 | 123
1234 | 1233
3000 | 3000
9999 | 9999
29890 | 29913
Aturan
- Input dan output adalah bilangan bulat (program Anda setidaknya harus mendukung input dan output dalam kisaran 1 hingga 32767)
- Input yang tidak valid (0, float, string, nilai negatif, dll.) Dapat mengakibatkan output yang tidak terduga, kesalahan atau (tidak) perilaku yang didefinisikan.
- Standar I / O aturan berlaku.
- Celah default dilarang.
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang
Jawaban:
Jelly , 32 byte
Cobalah online!- sangat lambat karena membangun n baris pertama, untuk versi yang lebih cepat yang tidak, pada 37 byte, coba ini .
sumber
Perl 6 ,
8077 byteCobalah online!
Penjelasan:
sumber
Haskell ,
122120 byteCobalah online! (memiliki tambahan 2 byte untuk
f=
)EDIT: Sekarang menggunakan pengindeksan berbasis 0 untuk menyimpan 2 byte. Terima kasih @wastl untuk menunjukkan hal itu, saya pasti melewatkannya di OP.
Ini sangat menyenangkan untuk ditulis! Fungsi helper
%
membutuhkan waktu yang lamal
dan daftar nilai yang dapat digunakana
. Ini mengembalikan daftar nilai tak terbatas untuk urutan. Panjangnya kurang dari panjang baris segitiga saat ini dan daftar tidak terbatas dan pra-diurutkan. Pertama kita hanya menghasilkan nilai pertamal
daria
dan kemudian melihat-lihat sisanya sampai kita menemukan nilai pertama (terkecil) yang membuat jumlah prima. Kami memecah daftar di sekitar nilai itu menggunakanspan
dan beberapa pencocokan pola. Sekarang yang harus kita lakukan adalah menghasilkan nilai baru dan berulang dengan panjang baris berikutnyal+1
dan nilai yang tersisa dia
. Untuk hasil akhir, kami menambahkan 1 (kasus khusus untuk n = 0) dan indeks ke dalamnya!!
.sumber
0:
sebagai tantangan menyatakan Anda dapat menggunakan pengindeksan berbasis 0.JavaScript (ES6),
111110 byteCobalah online!
sumber
Jelly , 46 byte
Cobalah online!
Waktu habis untuk n besar pada tio, tetapi bekerja di sana untuk semua kecuali dua contoh terakhir.
sumber
Lua ,
242228226211 byteCobalah online!
sumber