Golfscript - 13 byte, 1315 output
991,{`.$2>>},
Quanto sopra seleziona quei numeri da 0 a 99 la cui prima cifra è la cifra più grande del numero, ovvero l'ultima cifra della rappresentazione della stringa ordinata è lessicograficamente inferiore alla stringa stessa. La logica è la seguente:
Per un numero di 3 cifre abc , se a non è la cifra più grande del numero, il numero my verrà ignorato, poiché in seguito verrà coperto da uno dei due casi:
b <c (es. 123 )
Poiché c è la cifra più grande, il numero di cabina non verrà ignorato. In questo esempio 312 non verrà ignorato, né verrà visualizzato il valore successivo 313 , che quando concatenato ( 312 313 ) contiene 123 .
b ≥ c (es. 132 )
Poiché b è la cifra più grande, il numero bca non verrà ignorato. In questo esempio 321 non verrà ignorato, né il prossimo valore 322 , che quando concatenato ( 321 322 ), contiene 132 . Se b = c (ad es. 122 ), vale anche questo caso. Il valore bca non verrà ignorato, come in precedenza, e poiché a è necessariamente inferiore a b ,neppure bc <a + 1> verrà ignorato. In questo esempio, 221 222 contiene 122 .
Poiché il codice sopra testa la terza cifra, piuttosto che l'ultima, tutti i valori compresi tra 0 e 99 sono inclusi nel risultato. I valori da 1 a 99 possono essere ignorati, perché se è presente ogni sequenza di 3 cifre, deve essere presente anche ogni sequenza di 1 cifra e 2 cifre.
I valori da 991-999 possono anche essere saltati, poiché sono generati da ( 909 910 , 919 920 , ... 989 990 ).
A 1315 byte di output, questo è comodamente sotto le specifiche del problema di meno di 1500.
Produzione:
0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
Variazione n. 1
14 byte, uscita 1233
991,{`.$-1>>},
Selezionando rigorosamente l'ultima cifra per il confronto, anziché la terza, vengono eliminati molti dei valori non necessari inferiori a 100 , accorciando la stringa risultante.
101120212230313233404142434450515253545560616263646566707172737475767780818283848586878890919293949596979899100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
Variazione n. 2
16 byte, uscita 1127
991,99>{`.$2>>},
Facendo leva su tutti i valori inferiori a 99 in anticipo, la stringa risultante può essere accorciata ancora di più.
99100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
Golfscript - 19 byte, 1016 output
910,99>{`.2$\?)>+}/
Quanto sopra conta da 99 a 909 , aggiungendo qualsiasi valore che non è già apparso ( 909 sarebbe normalmente l'ultimo valore aggiunto in questo modo). Spostare 99 in avanti è un'ottimizzazione per evitare di aver bisogno di 910 sul retro.
Produzione:
99100101102103104105106107108109111112113114115116117118119120122123124125126127128129130132133134135136137138139140142143144145146147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188189190192193194195196197198199200202203204205206207208209222223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333334335336337338339340344345346347348349350354355356357358359360364365366367368369370374375376377378379380384385386387388389390394395396397398399400404405406407408409444445446447448449450455456457458459460465466467468469470475476477478479480485486487488489490495496497498499500505506507508509555556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666667668669670677678679680687688689690697698699700707708709777778779780788789790798799800808809888889890899900909
Golfscript 26 byte, 999 output
909.,99>{`..$.2><3$@?+>+}/
Si noti che la stringa di caratteri 1016 prodotta dalla soluzione precedente è quasi ottimale, tranne per avere due cifre extra per ogni multiplo di 111 (ovvero 11111anziché 111, 22222anziché 222, ecc.). La soluzione può essere resa ottimale rimuovendo queste cifre extra (inserendo solo una cifra per ciascuno di questi valori, anziché tre), e ruotando 909in avanti, eliminando un 9(questo differisce dalle versioni precedenti, che invece si spostavano 9100sul retro ).
Non srotolato e commentato:
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 logica per scegliere quali caratteri vengono aggiunti segue tre casi:
- 111 ∤ n , n ⊄ s
Il valore del primo controllo è 1 e del secondo -1 .
La sezione inizierà a partire dall'indice 0 ; restituirà l'intera stringa.
- 111 ∤ n , n ⊂ s
Il valore dal primo controllo è 1 e dal secondo qualcosa ≥ 2 .
La sezione inizierà a fissare dall'indice ≥ 3 ; restituirà una stringa vuota.
- 111 ∣ n , n ⊄ s
Il valore dal primo controllo è 0 e dal secondo -1 .
La sezione inizierà a partire dall'indice -1 ; restituirà solo l'ultimo carattere.
La somma della logica è che qualsiasi valore che non è ancora apparso verrà aggiunto per intero - a meno che non sia un multiplo di 111 , nel qual caso verrà aggiunto solo un carattere. Tutti gli altri valori verranno ignorati.
Nota che la stringa prodotta è diversa da quella ottimale prodotta dalla risposta di Peter Taylor .
Storia:
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
Produzione:
909910010110210310410510610710810911121131141151161171181191201221231241251261271281291301321331341351361371381391401421431441451461471481491501521531541551561571581591601621631641651661671681691701721731741751761771781791801821831841851861871881891901921931941951961971981992002022032042052062072082092223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333433533633733833934034434534634734834935035435535635735835936036436536636736836937037437537637737837938038438538638738838939039439539639739839940040440540640740840944454464474484494504554564574584594604654664674684694704754764774784794804854864874884894904954964974984995005055065075085095556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666766866967067767867968068768868969069769869970070770870977787797807887897907987998008088098889890899900