Golfscript - 13 bytes, salida 1315
991,{`.$2>>},
Lo anterior selecciona aquellos números del 0-990 cuyo primer dígito es el dígito más grande del número, es decir, el último dígito de la representación de cadena ordenada es lexicográficamente menor que la cadena en sí. La lógica es la siguiente:
Para un número de 3 dígitos abc , si a no es el dígito más grande del número, se omitirá el número, porque se cubrirá en uno de los dos casos más adelante:
b <c (por ejemplo, 123 )
Como c es el dígito más grande,no se omitiráel número de cabina . En este ejemplo, 312 no se omitirá, ni el siguiente valor 313 , que cuando se concatena ( 312 313 ) contiene 123 .
b ≥ c (por ejemplo, 132 )
Debido a que b es el dígito más grande, el número bca no se omitirá. En este ejemplo, 321 no se omitirá, ni el siguiente valor 322 , que cuando se concatena ( 321 322 ) contiene 132 . Si b = c (por ejemplo, 122 ), este caso también se aplica. El valor bca no se omitirá, como antes, y dado que a es necesariamente menor que b , bc <a + 1> tampoco se omitirá. En este ejemplo, 221 222 contiene 122 .
Debido a que el código anterior prueba el tercer dígito, en lugar de estrictamente el último, todos los valores de 0-99 se incluyen en el resultado. Sin embargo, se pueden omitir los valores del 1 al 99 , porque si cada secuencia de 3 dígitos está presente, entonces cada secuencia de 1 y 2 dígitos también debe estar presente.
Los valores de 991-999 también se pueden omitir, ya que se generan por ( 909 910 , 919 920 , ... 989 990 ).
Con 1315 bytes de salida, esto está cómodamente bajo la especificación del problema de menos de 1500.
Salida:
0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
Variación # 1
14 bytes, salida 1233
991,{`.$-1>>},
Al seleccionar estrictamente el último dígito para la comparación, en lugar del tercero, se eliminan muchos de los valores innecesarios menores de 100 , acortando la cadena resultante.
101120212230313233404142434450515253545560616263646566707172737475767780818283848586878890919293949596979899100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
Variación # 2
16 bytes, salida 1127
991,99>{`.$2>>},
Al extraer todos los valores inferiores a 99 de antemano, la cadena resultante se puede acortar aún más.
99100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
Golfscript - 19 bytes, salida 1016
910,99>{`.2$\?)>+}/
Lo anterior cuenta de 99 a 909 , agregando cualquier valor que aún no haya aparecido ( 909 normalmente sería el último valor agregado de esta manera). Mover 99 al frente es una optimización para evitar la necesidad de 910 en la parte posterior.
Salida:
99100101102103104105106107108109111112113114115116117118119120122123124125126127128129130132133134135136137138139140142143144145146147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188189190192193194195196197198199200202203204205206207208209222223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333334335336337338339340344345346347348349350354355356357358359360364365366367368369370374375376377378379380384385386387388389390394395396397398399400404405406407408409444445446447448449450455456457458459460465466467468469470475476477478479480485486487488489490495496497498499500505506507508509555556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666667668669670677678679680687688689690697698699700707708709777778779780788789790798799800808809888889890899900909
Golfscript 26 bytes, salida 999
909.,99>{`..$.2><3$@?+>+}/
Tenga en cuenta que la cadena de 1016 caracteres producida por la solución anterior es casi óptima, excepto por tener dos dígitos adicionales para cada múltiplo de 111 (es decir, en 11111
lugar de 111
, en 22222
lugar de 222
, etc.). La solución puede hacerse óptima eliminando estos dígitos adicionales (solo insertando un dígito en cada uno de estos valores, en lugar de tres), y girando 909
hacia el frente, eliminando un 9
(esto difiere de las versiones anteriores, que se movieron 9100
hacia atrás en su lugar) )
Desenrollado y comentado:
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
La lógica para elegir qué caracteres se agregan sigue tres casos:
- 111 ∤ n , n ⊄ s
El valor de la primera verificación es 1 , y de la segunda -1 .
El segmento comenzará a partir del índice 0 ; devolverá toda la cadena.
- 111 ∤ n , n ⊂ s
El valor de la primera verificación es 1 , y de la segunda algo ≥ 2 .
La rebanada comenzará a mirar desde el índice ≥ 3 ; devolverá una cadena vacía.
- 111 ∣ n , n ⊄ s
El valor de la primera verificación es 0 , y de la segunda -1 .
El segmento comenzará a partir del índice -1 ; solo devolverá el último carácter.
La suma de la lógica es que cualquier valor que aún no haya aparecido se agregará en su totalidad, a menos que sea un múltiplo de 111 , en cuyo caso solo se agregará un carácter. Todos los demás valores serán ignorados.
Tenga en cuenta que la cadena producida es diferente a la óptima producida por la respuesta de Peter Taylor .
Historia:
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
Salida:
909910010110210310410510610710810911121131141151161171181191201221231241251261271281291301321331341351361371381391401421431441451461471481491501521531541551561571581591601621631641651661671681691701721731741751761771781791801821831841851861871881891901921931941951961971981992002022032042052062072082092223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333433533633733833934034434534634734834935035435535635735835936036436536636736836937037437537637737837938038438538638738838939039439539639739839940040440540640740840944454464474484494504554564574584594604654664674684694704754764774784794804854864874884894904954964974984995005055065075085095556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666766866967067767867968068768868969069769869970070770870977787797807887897907987998008088098889890899900