Katakanlah substring adalah bagian berkelanjutan dari string asli. Misalnya cat
adalah substring dari concatenate
. Kami akan mengatakan bahwa substring yang tepat adalah substring yang tidak sama dengan string asli. Misalnya concatenate
adalah substring concatenate
tetapi bukan substring yang tepat. (string karakter tunggal tidak memiliki substring yang tepat)
Kami sekarang akan menentukan urutan menggunakan istilah-istilah ini. The n th istilah dalam urutan ini akan menjadi nomor terkecil sehingga ada substring yang tepat dari representasi biner yang bukan merupakan substring dari setiap istilah sebelumnya dalam urutan. Istilah pertama adalah 10
.
Sebagai latihan mari kita menghasilkan 5 istilah pertama. Saya akan bekerja dalam biner untuk mempermudah.
Istilah pertama adalah 10
. Karena 11
, angka terkecil berikutnya, hanya memiliki satu substring yang tepat, 1
yang juga merupakan substring 10
, 11
tidak ada dalam urutan. 100
Namun memang mengandung substring 00
yang tepat yang bukan substring 10
sehingga 100
adalah istilah kita selanjutnya. Berikutnya adalah101
yang berisi substring unik yang tepat 01
menambahkannya ke urutan, lalu 110
berisi substring 11
yang tepat yang baru menambahkannya ke urutan.
Sekarang kita punya
10, 100, 101, 110
111
berikutnya, tetapi hanya berisi substring 1
dan 11
membuatnya bukan istilah. 1000
Namun berisi 000
menambahkannya ke urutan.
Berikut adalah istilah pasangan pertama dalam desimal
2, 4, 5, 6, 8, 9, 10, 11, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50, 54, 56, 58
Tugas
Antara
Ambil n sebagai input dan hasilkan istilah ke- n dalam urutan ini (0 atau 1 diindeks)
Secara kontinu menampilkan persyaratan urutan
Ini adalah jawaban kode-golf diberi skor dalam byte dengan lebih sedikit byte menjadi lebih baik.
n
)?a(36)
adalah 47 (1 diindeks).Jawaban:
Python 3 ,
88807875 byte-6 bytes berkat Wheat Wizard
-2 bytes berkat RootTwo
-3 bytes berkat notjagan
Cobalah online!
sumber
bin(n)[2:]
denganf"{n:b}"
.Jelly , 22 byte
Cobalah online!
sumber
Mathematica,
116110 byteSecara tak terbatas menampilkan ketentuan urutan.
Penjelasan
x
adalah daftar syarat urutan sejauh ini.f
adalahFunction
yang mengambil integer dan mengembalikan semua representasiSubsequences
basisnya2
(termasuk daftar kosong{}
dan daftar lengkapnyaIntegerDigits
sendiri).Mengevaluasi
...
nilai darin
dari2
hingga∞
.Jika
...
adalahFalse
, maka argumen keduaAnd
(&&
) tidak pernah dievaluasi. Jika...
iniTrue
, makaEcho@n
mencetak dan kembalin
, yang kemudian kitaAppendTo
daftarx
.Kami ingin memeriksa bahwa beberapa substring yang tepat
n
bukan merupakan substring dari istilah sebelumnya dalam urutan.Most@f@n
adalah daftar substring yang tepatn
, kami kemudian memeriksa apakah ada substrings_
yang merupakanMemberQ
daftar yang seperti bahwa daftarf/@x
dari daftar substring istilah sebelumnya urutannya adalahFreeQ
daris
pada tingkat2
.sumber
Mathematica,
10994 byteSecara kontinu menampilkan persyaratan urutan
Thanx khusus untuk @ngenisis untuk -15 byte
Mathematica, 123 byte
Ambil n sebagai input dan hasilkan istilah ke-n dalam urutan ini (1 diindeks)
memasukkan
keluaran
sumber
15
byte yang dapat pergi:SubsetQ
lebih pendek dari dan setara denganContainsAll
, Anda dapat menggunakanAnd
bukanIf
,Union
tidak perlu, danDo
hampir selalu lebih pendek dariFor
:s={};Do[!SubsetQ[s,(t=Subsequences@IntegerDigits[i,2])[[2;;-2]]]&&(s=s~Join~t;Echo@i),{i,∞}]
3
lebih banyak byte dengan menggunakanMost
:s={};Do[!SubsetQ[s,Most[t=Subsequences@IntegerDigits[i,2]]]&&(s=s~Join~t;Echo@i),{i,2,∞}]
Pyth , 20 byte
Ini mencetak urutan tanpa batas. Itu hanya dapat digunakan secara offline sebagai konsekuensinya.
Penjelasan (Spasi adalah baris baru):
sumber
Pyth , 20 byte
Cobalah online!
sumber
Haskell,
172 byteCobalah online.
Penjelasan
Kode menghasilkan urutan secara terus menerus.
b
mengembalikan representasi biner dariInt
sebagaiString
s
mengembalikan semua substring dari sebuah stringp
mengembalikan semua substring yang tepat dari sebuah stringn
adalah fungsi yang diterapkan secara iteratif dan mengembalikan tuple yang berisi:scanl
digunakan untuk memanggiln
berulang-ulang dan hasilnya disaring hanya mengandung elemen lebih besar dari 1Berikut versi yang sedikit lebih mudah dibaca, sebelum bermain golf:
sumber
JavaScript, 57 byte
Tampilkan cuplikan kode
Mari kita menulis angka yang diberikan n dalam bentuk biner, lalu:
10
, n harus dalam urutan:1
di dalamnya, string biner yang tersisa tidak boleh dilihat, karena n adalah angka terkecil yang mungkin mengandung string tersebut11
:1
di dalamnya, string biner yang tersisa (mari kita sumbangkan seperti yang1x
harus dilihat sejak:1x
ada dalam urutan, atau1x0
dalam urutan, karena mengandung sub string unik1x
Kesimpulan:
bentuk biner dari angka dimulai dengan
10
atau diakhiri dengan1
diikuti oleh angka ganjil0
. Atau jelaskan dalam regex: x cocok/^10|10(00)*$/
.sumber