Гольфскрипт - 13 байт, 1315 вихід
991,{`.$2>>},
Сказане вибирає ті числа з 0-990 , перша цифра яких є найбільшою цифрою числа, тобто остання цифра відсортованого представлення рядків лексикографічно менша, ніж сама рядок. Логіка така:
Для 3-значного числа abc , якщо a - не найбільша цифра числа, число, яке я пропускаю, оскільки воно буде охоплено одним із двох випадків пізніше:
b <c (наприклад, 123 )
Оскільки c є найбільшою цифрою, номер кабіни не буде пропущений. У цьому прикладі 312 не буде пропущено, а також наступне значення 313 , яке при з'єднанні ( 312 313 ) містить 123 .
b ≥ c (наприклад, 132 )
Оскільки b є найбільшою цифрою, число bca не буде пропущено. У цьому прикладі 321 не буде пропущено, а також наступне значення 322 , яке при з'єднанні ( 321 322 ) містить 132 . Якщо b = c (наприклад, 122 ), цей випадок також застосовується. Значення bca не буде пропущено, як і раніше, і оскільки a обов'язково менше b , bc <a + 1> також не буде пропущено. У цьому прикладі 221 222 міститься 122 .
Оскільки вищевказаний код перевіряє третю цифру, а не строго останню, всі результати від 0 до 99 включаються в результат. Значення від 1-99 можуть бути пропущені, тому що якщо кожна трицифрова послідовність присутня, то кожна 1-цифрова та двозначна послідовність також повинні бути присутніми.
Значення 991-999 також можуть бути пропущені, оскільки породжуються ( 909 910 , 919 920 , ... 989 990 ).
При 1315 байтах виходу, це зручно за специфікацією проблеми менше 1500.
Вихід:
0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
Варіація №1
14 байт, 1233 вихід
991,{`.$-1>>},
Вибираючи строго останню цифру для порівняння, а не третю, багато непотрібних значень менше 100 усуваються, скорочуючи отриманий рядок.
101120212230313233404142434450515253545560616263646566707172737475767780818283848586878890919293949596979899100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
Варіація №2
16 байт, вихід 1127
991,99>{`.$2>>},
Заздалегідь вивівши всі значення, менші за 99 , отриманий рядок можна скоротити ще більше.
99100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
Гольфскрипт - 19 байт, 1016 вихід
910,99>{`.2$\?)>+}/
Вищезазначене нараховує від 99 до 909 , додаючи будь-яке значення, яке ще не з’явилося ( 909 , як правило, є останньою доданою величиною таким чином). Переміщення 99 вперед - це оптимізація, щоб уникнути необхідності 910 ззаду.
Вихід:
99100101102103104105106107108109111112113114115116117118119120122123124125126127128129130132133134135136137138139140142143144145146147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188189190192193194195196197198199200202203204205206207208209222223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333334335336337338339340344345346347348349350354355356357358359360364365366367368369370374375376377378379380384385386387388389390394395396397398399400404405406407408409444445446447448449450455456457458459460465466467468469470475476477478479480485486487488489490495496497498499500505506507508509555556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666667668669670677678679680687688689690697698699700707708709777778779780788789790798799800808809888889890899900909
Голфскрипт 26 байт, вихід 999
909.,99>{`..$.2><3$@?+>+}/
Зауважте, що рядок символів 1016, створений попереднім рішенням, є майже оптимальним, за винятком того, що має дві додаткові цифри для кожного кратного 111 (тобто 11111замість 111, 22222а не 222тощо). Рішення можна зробити оптимальним, видаливши ці додаткові цифри (лише вставляючи одну цифру на кожне з цих значень, а не три), і обертаючи 909вперед, усуваючи 9(це відрізняється від попередніх версій, які 9100замість цього перемістилися на задню частину ).
Розгорнуто та прокоментовано:
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
Логіка вибору, які символи додаються, складається з трьох випадків:
- 111 ∤ n , n ⊄ s
Значення з першої перевірки дорівнює 1 , а з другого -1 .
Фрагмент почнеться починаючи з індексу 0 ; це поверне цілу рядок.
- 111 ∤ n , n ⊂ s
Значення з першої перевірки дорівнює 1 , а з другого щось ≥ 2 .
Фрагмент почне починати з індексу ≥ 3 ; він поверне порожню рядок.
- 111 ∣ n , n ⊄ s
Значення з першої перевірки дорівнює 0 , а з другого -1 .
Фрагмент почнеться починаючи з індексу -1 ; він поверне лише останній символ.
Сума логіки полягає в тому, що будь-яке значення, яке ще не з’явилося, буде додане в цілому - якщо тільки воно не кратне 111 , то в цьому випадку буде доданий лише один символ. Усі інші значення будуть ігноровані.
Зауважте, що створена рядок відрізняється від оптимальної, отриманої відповіддю Пітера Тейлора .
Історія:
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
Вихід:
909910010110210310410510610710810911121131141151161171181191201221231241251261271281291301321331341351361371381391401421431441451461471481491501521531541551561571581591601621631641651661671681691701721731741751761771781791801821831841851861871881891901921931941951961971981992002022032042052062072082092223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333433533633733833934034434534634734834935035435535635735835936036436536636736836937037437537637737837938038438538638738838939039439539639739839940040440540640740840944454464474484494504554564574584594604654664674684694704754764774784794804854864874884894904954964974984995005055065075085095556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666766866967067767867968068768868969069769869970070770870977787797807887897907987998008088098889890899900