Golfscript - 13 byte, 1315 output
991,{`.$2>>},
Di atas memilih angka-angka dari 0-990 yang digit pertama adalah digit terbesar dari angka, yaitu digit terakhir dari representasi string yang diurutkan secara leksikografis kurang dari string itu sendiri. Logikanya adalah sebagai berikut:
Untuk 3 digit angka abc , jika a bukan digit terbesar dari nomor tersebut, nomor saya akan dilewati, karena akan dicakup oleh salah satu dari dua kasus nanti:
b <c (mis. 123 )
Karena c adalah digit terbesar, jumlah taksi tidak akan dilewati. Dalam contoh ini 312 tidak akan dilewati, juga tidak akan nilai berikutnya 313 , yang ketika digabungkan ( 312 313 ) berisi 123 .
b ≥ c (mis 132 )
Karena b adalah digit terbesar, angka bca tidak akan dilewati. Dalam contoh ini 321 tidak akan dilewati, juga tidak akan nilai berikutnya 322 , yang ketika digabungkan ( 321 322 ) berisi 132 . Jika b = c (mis. 122 ), kasus ini juga berlaku. Nilai bca tidak akan dilewati, seperti sebelumnya, dan karena a harus kurang dari b , bc <a + 1> juga tidak akan dilewati. Dalam contoh ini, 221 222 berisi 122 .
Karena kode di atas menguji angka ketiga, alih-alih yang terakhir, semua nilai dari 0-99 dimasukkan dalam hasil. Nilai-nilai dari 1-99 dapat dilewati, karena jika setiap urutan 3 digit hadir, maka setiap urutan 1 digit dan 2 digit juga harus ada.
Nilai dari 991-999 juga dapat dilewati, karena dihasilkan oleh ( 909 910 , 919 920 , ... 989 990 ).
Pada output 1315 byte, ini nyaman di bawah spesifikasi masalah kurang dari 1500.
Keluaran:
0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
Variasi # 1
14 byte, output 1233
991,{`.$-1>>},
Dengan memilih secara ketat digit terakhir untuk perbandingan, alih-alih yang ketiga, banyak nilai yang tidak perlu kurang dari 100 dihilangkan, memperpendek string yang dihasilkan.
101120212230313233404142434450515253545560616263646566707172737475767780818283848586878890919293949596979899100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
Variasi # 2
16 byte, 1127 keluaran
991,99>{`.$2>>},
Dengan mencabut semua nilai kurang dari 99 sebelumnya, string yang dihasilkan dapat dipersingkat bahkan lebih.
99100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
Golfscript - 19 byte, 1016 output
910,99>{`.2$\?)>+}/
Nilai di atas dihitung dari 99 hingga 909 , menambahkan nilai apa pun yang belum muncul ( 909 biasanya akan menjadi nilai terakhir yang ditambahkan dengan cara ini). Memindahkan 99 ke depan adalah pengoptimalan untuk menghindari keharusan 910 di belakang.
Keluaran:
99100101102103104105106107108109111112113114115116117118119120122123124125126127128129130132133134135136137138139140142143144145146147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188189190192193194195196197198199200202203204205206207208209222223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333334335336337338339340344345346347348349350354355356357358359360364365366367368369370374375376377378379380384385386387388389390394395396397398399400404405406407408409444445446447448449450455456457458459460465466467468469470475476477478479480485486487488489490495496497498499500505506507508509555556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666667668669670677678679680687688689690697698699700707708709777778779780788789790798799800808809888889890899900909
Golfscript 26 byte, 999 output
909.,99>{`..$.2><3$@?+>+}/
Perhatikan bahwa 1016 karakter string yang dihasilkan oleh solusi sebelumnya hampir optimal, kecuali untuk memiliki dua tambahan angka untuk setiap kelipatan 111 (yaitu 11111bukan 111, 22222bukan 222, dll). Solusinya dapat dibuat optimal dengan menghapus digit tambahan ini (hanya memasukkan satu digit pada masing-masing nilai ini, bukan tiga), dan dengan memutar 909ke depan, menghilangkan a 9(ini berbeda dari versi sebelumnya, yang pindah 9100ke belakang sebagai gantinya ).
Belum dibuka dan dikomentari:
909.,99> # add 909 to the stack, and duplicate
# create an array from 0..908, and
# remove the first 99 elements (99..908)
{
`.. # stringify, duplicate twice
$.2>< # non-divisibility by 111 check
# true if the last char of the sorted
# string is greater than the first char
3$@? # first position of this number in
# the total string so far (-1 if not found)
+> # add the two previous results,
# and slice from that point
# (see explanation below)
+ # concat what remains to the total string
}/ # loop over the set
Logika untuk memilih karakter mana yang ditambahkan mengikuti tiga kasus:
- 111 ∤ n , n ⊄ s
Nilai dari cek pertama adalah 1 , dan dari -1 kedua.
Irisan akan mulai mulai dari indeks 0 ; itu akan mengembalikan seluruh string.
- 111 ∤ n , n ⊂ s
Nilai dari cek pertama adalah 1 , dan dari yang kedua ≥ 2 .
Irisan akan mulai menatap dari indeks ≥ 3 ; itu akan mengembalikan string kosong.
- 111 ∣ n , n ⊄ s
Nilai dari cek pertama adalah 0 , dan dari -1 kedua.
Irisan akan mulai dari indeks -1 ; itu akan mengembalikan karakter terakhir saja.
Jumlah dari logika adalah bahwa nilai apa pun yang belum muncul akan ditambahkan secara keseluruhan - kecuali jika merupakan kelipatan dari 111 , dalam hal ini hanya satu karakter yang akan ditambahkan. Semua nilai lain akan diabaikan.
Perhatikan bahwa string yang dihasilkan berbeda dari yang optimal yang dihasilkan oleh jawaban Peter Taylor .
Sejarah:
899,{101+.111%{`.2$\?0<*}{3/9%}if+}/
899,{101+`.2$\?0<\.~111%2*)<*+}/0
899,{101+`.2$\?0<\..2>-!2*>*+}/0
899,{101+`...2>|,1|<2$@?0<*+}/0
999,{`..$.2>>2*>2$@?0<*+}/3>0
899,{101+`..$.2><3$@?+>+}/0
Keluaran:
909910010110210310410510610710810911121131141151161171181191201221231241251261271281291301321331341351361371381391401421431441451461471481491501521531541551561571581591601621631641651661671681691701721731741751761771781791801821831841851861871881891901921931941951961971981992002022032042052062072082092223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333433533633733833934034434534634734834935035435535635735835936036436536636736836937037437537637737837938038438538638738838939039439539639739839940040440540640740840944454464474484494504554564574584594604654664674684694704754764774784794804854864874884894904954964974984995005055065075085095556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666766866967067767867968068768868969069769869970070770870977787797807887897907987998008088098889890899900