Golfscript - 13 байт, 1315 вывод
991,{`.$2>>},
Приведенное выше выбирает те числа от 0 до 990 , первая цифра которых является самой большой цифрой числа, то есть последняя цифра в представлении отсортированной строки лексикографически меньше самой строки. Логика следующая:
Для трехзначного числа 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 могут быть пропущены, поскольку, если присутствует каждая трехзначная последовательность, то должны присутствовать также каждая однозначная и двухзначная последовательность.
Значения от 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
Golfscript - 19 байт, 1016 вывод
910,99>{`.2$\?)>+}/
Выше указано от 99 до 909 , добавляя любое значение, которое еще не появилось ( 909 обычно будет последним добавленным значением таким образом). Перемещение 99 вперед - это оптимизация, чтобы избежать необходимости 910 сзади.
Выход:
99100101102103104105106107108109111112113114115116117118119120122123124125126127128129130132133134135136137138139140142143144145146147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188189190192193194195196197198199200202203204205206207208209222223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333334335336337338339340344345346347348349350354355356357358359360364365366367368369370374375376377378379380384385386387388389390394395396397398399400404405406407408409444445446447448449450455456457458459460465466467468469470475476477478479480485486487488489490495496497498499500505506507508509555556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666667668669670677678679680687688689690697698699700707708709777778779780788789790798799800808809888889890899900909
Golfscript 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