Golfscript - 13 bayt, 1315 çıkış
991,{`.$2>>},
Yukarıdakiler , ilk rakamı sayının en büyük hanesi olan 0-990 arasından seçtiği sayıları, yani sıralanan dizgi gösteriminin son basamağı, dizginin kendisinden sözlüksel olarak daha küçüktür. Mantık şudur:
Abc , 3 basamaklı bir sayı için , a , sayının en büyük basamağı değilse, atlanacak numara, çünkü daha sonra iki durumdan biri tarafından ele alınacaktır:
b <c (örneğin 123 )
Çünkü c büyük rakamdır, sayı kabin Atlanan olmayacaktır. Bu örnekte 312 atlanmayacak ve nebirleştirildiğinde ( 312 313 ) 123'ü içerecek bir sonraki 313 değeri olmayacak.
b ≥ c (örneğin 132 )
Çünkü b büyük rakamdır, sayı bca Atlanan olmayacaktır. Bu örnekte 321 atlanmayacak ve nebirleştirildiğinde ( 321 322 ) 132 içeren birsonraki 322 değerini almayacak. Eğer B = C (örneğin, 122 ), bu durumda da uygulanır. Bca değeri önceden olduğu gibi atlanmayacaktır ve a zorunlu olarak b'den küçük olduğu için, bc <a + 1> de atlanmayacaktır . Bu örnekte, 221 222 122 içerir.
Yukarıdaki kod kesinlikle sonuncusu yerine üçüncü basamağı test ettiğinden, 0-99 arasındaki tüm değerler sonuca dahil edilir. Ancak 1-99 arasındaki değerler atlanabilir, çünkü her 3 basamaklı sekans varsa, her 1 basamaklı ve 2 basamaklı sekansta da bulunması gerekir.
991-999 arasındaki değerler de ( 909 910 , 919 920 , ... 989 990 ) tarafından üretildiği gibi atlanabilir .
1315 bayt çıktıda, bu rahatça problemin 1500'den daha az spesifikasyonundadır.
Çıktı:
0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
Varyasyon 1
14 bayt, 1233 çıkış
991,{`.$-1>>},
Karşılaştırma için kesinlikle son rakamı seçerek, üçte bir yerine, 100'den küçük gereksiz değerlerin birçoğu elimine edilir ve sonuçta ortaya çıkan dizgiyi kısaltır.
101120212230313233404142434450515253545560616263646566707172737475767780818283848586878890919293949596979899100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
Varyasyon # 2
16 bayt, 1127 çıkış
991,99>{`.$2>>},
99'dan daha az olan tüm değerleri önceden dikkate alarak, ortaya çıkan dize daha da kısaltılabilir.
99100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
Golfscript - 19 bayt, 1016 çıktı
910,99>{`.2$\?)>+}/
Yukarıdakiler 99 ile 909 arasındadır ve daha önce görünmemiş herhangi bir değer ekler ( 909 normalde bu şekilde eklenen son değer olur). 99'u öne doğru hareket ettirmek , arkada 910'a ihtiyaç duymamak için bir optimizasyondur .
Çıktı:
99100101102103104105106107108109111112113114115116117118119120122123124125126127128129130132133134135136137138139140142143144145146147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188189190192193194195196197198199200202203204205206207208209222223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333334335336337338339340344345346347348349350354355356357358359360364365366367368369370374375376377378379380384385386387388389390394395396397398399400404405406407408409444445446447448449450455456457458459460465466467468469470475476477478479480485486487488489490495496497498499500505506507508509555556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666667668669670677678679680687688689690697698699700707708709777778779780788789790798799800808809888889890899900909
Golf komut dosyası 26 bayt, 999 çıktı
909.,99>{`..$.2><3$@?+>+}/
Not, 1016 , önceki çözelti ile üretilen karakter dizisi, her çoklu için iki ilave rakama sahip olan hariç olmak üzere, hemen hemen optimal 111 (yani 11111yerine 111, 22222yerine 222, vb). Çözüm, bu ekstra sayıları kaldırarak (bu değerlerin her birine üç yerine sadece bir rakam ekleyerek) ve 909öne doğru döndürerek , bir 9( ortadan kaldıran önceki sürümlerden farklı olarak) ortadan kaldırılarak en uygun 9100hale getirilebilir. ).
Kontrolsüz ve yorum yapıldı:
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
Hangi karakterlerin ekleneceğini seçme mantığı üç durumu izler:
- 111 ∤ n , n ⊄ s
İlk kontrolün değeri 1'dir ve ikinci -1 .
Dilim, dizin 0'dan başlayarak başlayacaktır; tüm dizgeyi döndürür.
- 111 ∤ n , n ⊂ s
İlk kontroldeki değer 1 , ikincisi ise ≥ 2'dir .
Dilim ≥ 3 dizininden bakmaya başlayacaktır; boş bir dize döndürür.
- 111 ∣ n , n ⊄ s
İlk kontroldeki değer 0 ve ikinci -1 değerdir.
Dilim, -1 dizininden başlayarak başlayacaktır; sadece son karakteri döndürür.
Mantığın toplamı, henüz ortaya çıkmamış herhangi bir değerin tam olarak ekleneceğidir - 111'in katı olmadığı sürece , bu durumda sadece bir karakter eklenecektir. Diğer tüm değerler göz ardı edilir.
Üretilen dize, Peter Taylor'ın cevabı tarafından üretilen optimal olandan farklı olduğunu unutmayın .
Tarih:
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
Çıktı:
909910010110210310410510610710810911121131141151161171181191201221231241251261271281291301321331341351361371381391401421431441451461471481491501521531541551561571581591601621631641651661671681691701721731741751761771781791801821831841851861871881891901921931941951961971981992002022032042052062072082092223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333433533633733833934034434534634734834935035435535635735835936036436536636736836937037437537637737837938038438538638738838939039439539639739839940040440540640740840944454464474484494504554564574584594604654664674684694704754764774784794804854864874884894904954964974984995005055065075085095556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666766866967067767867968068768868969069769869970070770870977787797807887897907987998008088098889890899900