Urutan
Anda diberi empat urutan nomor, dinomori 1
melalui 4
.
OEIS Lokasi
0
ketika bilangan asli terdaftar dalam biner. Berikut ini contoh cara menghitung urutan:0,1,10,11,100,101,110,111 ^ ^ ^^ ^ ^ 0 3 78 10 14
Awal urutannya seperti ini:
0, 3, 7, 8, 10, 14, 19, 20, 21, 23, 24, 27, 29, 31, 36, 37, 40, 45, 51, ...
OEIS Urutan ini termasuk bilangan asli pertama, lewati dua berikutnya, kemudian sertakan tiga berikutnya, kemudian lewati empat berikutnya, dan lanjutkan.
0, 3, 4, 5, 10, 11, 12, 13, 14, 21, 22, 23, 24, 25, 26, 27, 36, ...
OEIS Bilangan bulat positif di mana baik jumlah
0
's dan jumlah1
' s dalam representasi angka biner adalah kekuatan2
.2, 4, 5, 6, 9, 10, 12, 16, 23, 27, 29, 30, 33, 34, 36, 39,
-
a (1) = a (2) = 1;
a (n) = a (na (n-1)) + a (na (n-2)) untuk n> 2.1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 6, 8, 8, 8, 10, 9, 10, 11, 11, 12, 12, 12, 12, 16, 14, ...
Sedikit yang dibuktikan secara ketat tentang urutan ini, tetapi banyak hasil empiris ada. Satu sangat penting, dan Anda dapat menganggap itu valid untuk seluruh seri:
Makalah ini mengamati bahwa unsur-unsur dari seri dapat dikelompokkan menjadi beberapa generasi. Jika kita beri nomor mulai dari 1, maka generasi k mengandung tepat 2 elemen k . Properti yang relevan adalah bahwa semua angka dalam generasi k diperoleh dengan menjumlahkan dua angka dari generasi k-1 dan / atau k-2 , tetapi tidak pernah dari generasi sebelumnya. Anda dapat menggunakan pengamatan ini (dan hanya ini) untuk menempatkan batas bawah pada elemen yang tersisa dalam urutan.
Tantangan
Tantangan Anda adalah mencetak x
angka pertama di persimpangan urutan input yang diberikan.
Input: Dua angka dipisahkan oleh spasi STDIN
. Angka pertama adalah bilangan bulat dari 1
hingga 15
inklusif di mana setiap bit sesuai dengan urutan. Bit terendah sesuai dengan urutan 1
, dan tertinggi berhubungan dengan urutan 4
. Yang kedua adalah jumlah angka x
,, untuk output aktif STDIN
.
Output: Angka pertama x
yang bersinggungan dengan urutan input yang diberikan. Cetak angka-angka STDOUT
dengan spasi kosong atau tanda baca yang jelas sebagai pembatas (spasi, tab, baris baru, koma, titik dua, titik, dll).
Contohnya
1. Cetak 3
angka pertama yang ada di setiap urutan.
Memasukkan: 15 3
Keluaran: 10,23,40
2. Cetak 12
angka pertama dalam urutan nomor 1
dan 4
.
Memasukkan: 9 12
Keluaran: 3,8,10,14,19,20,21,23,24,31,37,40
3. Cetak 10
angka pertama secara berurutan 2
.
Memasukkan: 2 10
Keluaran: 0,3,4,5,10,11,12,13,14,21
4. Cetak 6
angka pertama secara berurutan 3
dan 4
.
Memasukkan: 12 6
Keluaran: 2,4,5,6,9,10
Detail
- Anda dapat mencetak output saat Anda pergi atau sekaligus di akhir.
Terima kasih banyak untuk semua orang yang membantu dengan ini dalam obrolan! Pertanyaan ini sangat diuntungkan dari berada di kotak pasir .
sumber
12 5
contoh hingga indeks yang sama, maka10
apakah memang datang sebelumnya9
di persimpangan ... seperti, bagaimana Anda, saat akan melalui urutan, memutuskan apakah akan melewatkan9
di # 3 sebagai persimpangan mungkin? Seperti jika # 3 ada7
di dalamnya maka Anda akan diminta untuk melewatinya karena itu tidak muncul di # 4x
?Jawaban:
Haskell,
495442402Berkinerja cukup baik. Berikut adalah beberapa contoh OP:
sumber
Python 3,
590639 karakterIni adalah solusi lurus ke depan: gunakan generator untuk menentukan masing-masing urutan tak terhingga, dan selama persimpangan tidak cukup besar, tambahkan langkah ke setiap urutan.
Untuk menjelaskan urutan Hofstadter yang tidak meningkat secara monoton: pada setiap langkah saya menghasilkan dua kali lebih banyak untuk urutan itu, misalnya 1, kemudian 2, 4, 8, 16, 32, dll. Saya pikir itu memenuhi batas yang dinyatakan dalam pertanyaan , dan itu masih cukup cepat untuk semua kasus uji yang disajikan di sana.
sumber
from itertools import count as C
->from itertools import*
C=count
,def s(i):return D(i)==1
->s=lambda i:D(i)==1
(Saya bahkan tidak berpikir fungsi ini membuatnya lebih pendek ...),"{0:04b}".format(int(L)))if U>'0'
->"{0:04b}".format(int(L)))if'0'<U
C #, 1923
Mungkin tidak akan menjadi program terpendek tetapi saya menemukan tantangan yang menarik, jadi inilah solusi saya.
Menjalankan semua 4 dengan 35 Angka (15 35) membutuhkan waktu sekitar 5 detik.
Anda dapat mengujinya di sini , tetapi perhatikan bahwa jika Anda ingin OEIS4 jumlah digit yang Anda inginkan harus kecil atau netfiddle kehabisan memori.
Golf
Dapat dibaca
Penjelasan
Ini menggunakan evaluasi malas malas yang membuatnya cepat cepat saya percaya. Juga saya malas melakukan "bitlogic" apa pun dengan menggunakan kerangka kerja Convert.ToString (angka, 2) metode. Ini mengubah angka apa pun menjadi representasi binray sebagai string.
Saya harus menulis metode saya sendiri untuk memotong seuqences karena metode Linq memotong persimpangan dari urutan penuh, dan itu benar-benar mustahil.
sumber