Saya mendefinisikan metode menggabungkan urutan berarti bahwa setiap angka dalam urutan disatukan sebagai string, maka hasil itu dibuat bilangan bulat.
[1, 2, 3] -> 123
Untuk setiap urutan hingga setidaknya 3 bilangan bulat berturut-turut, kehilangan tepat satu elemen dalam urutan, dan elemen yang hilang ini mungkin bukan elemen pertama atau terakhir dalam urutan, menghasilkan bilangan bulat yang dihasilkan dari urutan gabungan. Saya merujuk ini sebagai "integer lossy tunggal".
[1, 2, 3] -> {1, 3} (missing an element) -> 13
Urutan bilangan bulat lossy tunggal ini adalah penyatuan dari berikut berikut (partisi?):
Urutan pertama {n, n+2}
adalah A032607 .
{n, n+2} -> 13, 24, 35, 46, 57, 68, 79, 810, 911, 1012, ...
{n, n+1, n+3} -> 124, 235, 346, ...
{n, n+2, n+3} -> 134, 245, 356, ...
{n, n+1, n+2, n+4} -> 1235, 2346, 3457, ...
{n, n+1, n+3, n+4} -> 1245, 2356, 3467, ...
{n, n+2, n+3, n+4} -> 1345, 2456, 3567, ...
...
for n ∈ ℕ (integers >= 1)
Bilangan bulat ini harus dicetak dalam urutan menaik. 25 bilangan bulat lossy tunggal pertama adalah di bawah ini :
13, 24, 35, 46, 57, 68, 79, 124, 134, 235, 245, 346, 356, 457, 467, 568, 578, 679, 689, 810, 911, 1012, 1113, 1214, 1235, ...
Implementasi referensi yang tidak digabungkan. Saya membuatnya menjadi lebih cepat, bukan lebih kecil.
Aturan:
- Kode terpendek menang
- Anda dapat (katakan yang mana):
- Cetak bilangan bulat tunggal yang hilang selamanya
- Diberikan bilangan bulat positif n , cetak atau kembalikan elemen n pertama sebagai daftar, atau string yang dibatasi koma atau spasi putih.
- Anda harus mendukung bilangan bulat besar yang sewenang-wenang jika bahasa Anda memungkinkannya, terutama jika Anda mencetak selamanya.
Catatan: Belum ada entri dalam OEIS untuk urutan ini.
Catatan lain: Saya menamai mereka "Integer Kehilangan Singa" sehingga pada gilirannya akan ada "Integer Kehilangan Kerugian", "Integer Kehilangan N-ly", "(N + 1) Integer Kehilangan-saja", dan "Integer Kehilangan "(penyatuan semua ini).
fastest-code
tantangan yang menyenangkan .Jawaban:
Mathematica, 101 byte
Yay! Sekali ini saya punya jawaban yang paling singkat!
Party[Hard]
sumber
Party[_]:=While[True,Print["PARTY!!!"]]
. Argumen ini diabaikan karena semua pihak berpesta.Party[Where]
harus mencetakHere!
, danParty[When]
harus mencetakNow!
, dll. Jangan menganggap enteng pesta.Party[x_]:=Switch[x,Where,"Here!",When,"Now!",How,Pause[1];"...Really?",_,While [True,Print["PARTY!!!"]]]
Haskell,
131,114, 106 byteIni dibatasi oleh ukuran
Int
, tetapi dapat dengan mudah diperluas dengan menggantiInt
denganInteger
.Kurang bermain golf:
8 byte di-golf dengan @nimi.
sumber
n
?Integer
, itu akan berlanjut sampai Anda kehabisan memori (atau kesabaran). Itu akan melanjutkanInt
, tetapi akan mulai memberikan jawaban yang salah begitu meluap (> 2^29-1
).main=print$
GHCi tidak. GHC.io kehabisan memori dan set fitur TryHaskell.org terlalu terbatas.Python 3,
136127126122 bytesolusi brute force, saya bahkan tidak mencoba n = 7000 (sudah butuh 10s untuk n = 100)
Penjelasan
Hasil
Terima kasih kepada @ mbomb007 dan @FricativeMelon atas bantuan mereka
sumber
)
dan karakter berikut, dan Anda dapat menambahkant=range
ke awal program dan mengganti semuarange
panggilan fungsi dengant
panggilan. Itu harus mengurangi jumlah byte.i!=l+k
juga bisa diganti denganl+k-i
, yang menghemat satu byte.str(i)for i in r(1+k,j+k)if l+k-i
dapat diganti denganstr(i+k)for i in r(1,j)if l-i
, menghemat 4 byte.Python 3,
319,270, 251 byteMengambil
h
input as dari STDIN dan mencetak arrayh
bilangan bulat sing-lossy pertama . Ini sangat cepat juga, hanya membutuhkan beberapa detikh=7000
.Penjelasan: Catat bahwa, jika kita memiliki waktu yang tak terbatas, kita dapat dengan mudah mengulangi semua
n,k
dan untuk setiap pasangan menjatuhkan masing-masingn+1,n+2,...,n+k-1
(k-1
kemungkinan), dan mendapatkan semua (tak terhingga banyak) nilai dari itu, maka cukup urutkan urutan dalam urutan naik dan terpotong untukh
elemen. Tentu saja, kita tidak bisa benar-benar melakukan itu, tetapi jika kita dapat mencapai titik di manah
elemen yang diurutkan pertama tidak lagi dapat berubah dengan menambahkan nilai-nilai darin,k
pasangan masa depan , kita bisa memotongnya dan dilakukan, dalam waktu yang terbatas. Untuk setiapn,k
pasangan, ia memiliki setidaknyafloor(log10(n)+1)*k
digit, mungkin lebih banyak. Jadi mari kita kelompokkan pasangan ini berdasarkan nilainyac(n,k)=floor(log10(n)+1)*k
, di mana kami menjamin bahwa jikac(a,b)<c(n,k)
, kami memprosesa,b
sebelumnyan,k
. Jika kita memiliki daftar yang diurutkan, dan elemen terakhirnya memilikid
digit, dand<c(n,k)
untuk selanjutnyan,k
kita akan memproses, kita dapat berhenti, karena kita tidak bisa lagi mendapatkan nomor dengan angka yang lebih banyak atau lebih sedikit, karena dengan jaminan kita, kita seharusnya sudah memprosesnya, dan oleh karena itu tidak peduli nomor mana yang kita akan berakhir komputasi,h
elemen pertama tidak bisa berubah, jadi kita bisa mengembalikannya.Jadi sekarang kita hanya perlu fungsi yang menjamin pesanan yang disebutkan
c(n,k)
. Untuk setiap yangy
dapat diperolehc(n,k)
, kita harus memproses semua(n,k)
ituy=c(n,k)
. KatakanlahL=floor(log10(n)+1)
untuk beberapan
. Karena ituy=L*k
harus tahan. Mulai dengank=2,L=y/2
, lalu lakukank=3,L=y/3;k=4,L=y/4...k=y,L=1
, lewati nilai-nilai non-integer dariL
. Untuk menghasilkan seluruhc(n,k)
fungsi, mulailah(1,2)
dengany=2
, dan tambahy
1 dan mulai lagi kapan pun Anda dapatkanL==1
. Sekarang kami memiliki enumerasi pasangan(L,k)
, dan itu memenuhi kondisi kami. Namun, kita perlu mengambil semua yang mungkinn
dariL
, yang kita lakukan dengan menghitung semua bilangan bulat denganL
digit. Kemudian untuk masing-masing(n,k)
pasangan itu, untuk masing-masing pasangank-1
kemungkinan elemen yang dijatuhkan kita harus menghasilkan angka lossy yang kita dapatkan sebagai hasilnya, dan menambahkannya ke daftar kita, yang mulai kosong. Kemudian kami mengurutkan daftar dan mengulangi pada(L,k)
pasangan berikutnya , berhenti ketika kami memilikid<c(n,k)
seperti yang dinyatakan sebelumnya.Rincian kode (agak ketinggalan jaman):
sumber
len(`q[h]`)
haruslen(str(q[h]))
mendukung bilangan bulat sewenang-wenang? Atau katakan saja jika itu hanya bekerja hingga batas tertentu, karena Anda mengambil parameter, tidak mencetak selamanya.2**63-1
) akan memilikiL
pada akhirnya jika menggunakanrepr
. Perhatikan bahwa entri ini mungkin sangat berurutan.