목표 : 1000 이하의 모든 양의 정수를 포함하는 문자열을 출력합니다.
명백한 대답은 그들 모두를 연결하는 것이며, 2890 자의 문자열을 작성하여 (manatwork 덕분에) 이러한 쉬운 대답을 피하기 위해 문자열의 길이는 1500 자 미만이어야합니다. 다음은 1200 자 문자열을 출력하는 간단한 Java 코드입니다.
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.TreeSet;
import static org.junit.Assert.assertTrue;
/**
* Created with IntelliJ IDEA.
* User: fab
* Date: 05/11/13
* Time: 09:53
* To change this template use File | Settings | File Templates.
*/
public class AStringToContainThemAll {
@Test
public void testsubStrings() throws Exception {
String a = generateNewString();
boolean cool = true;
for (int i = 0; i < 1000; i++) {
assertTrue(a.contains(Integer.toString(i)));
}
}
private String generateNewString() {
List<Integer> myTree = new ArrayList<Integer>();
String finalString = new String("100");
for (int i = 10; i < 1000; i++) {
myTree.add(i);
}
while (myTree.size() > 0) {
if (finalString.contains(Integer.toString(myTree.get(0)))) {
myTree.remove(0);
} else {
String substringLong = finalString.substring(finalString.length() - 2, finalString.length());
boolean found = false;
loop:
for (Integer integer : myTree) {
if (integer.toString().startsWith(substringLong) && !finalString.contains(integer.toString())) {
finalString = finalString.concat(integer.toString().substring(2, 3));
myTree.remove(integer);
found = true;
break loop;
}
}
if(! found){
finalString = finalString.concat(myTree.get(0).toString());
myTree.remove(0);
}
}
}
return finalString;
}
}
최단 코드 승리, 최단 문자열 보너스 포인트!
답변
골프 스크립트-13 바이트, 1315 출력
991,{`.$2>>},
위의 숫자는 첫 번째 숫자가 숫자의 가장 큰 숫자 인 0-990 에서 숫자를 선택합니다 . 즉, 정렬 된 문자열 표현의 마지막 숫자는 사전 식으로 문자열 자체보다 작습니다. 논리는 다음과 같습니다.
3 자리 숫자 abc 의 경우 a 가 숫자의 가장 큰 숫자가 아닌 경우 나중에 두 경우 중 하나에 해당하므로 숫자를 건너 뜁니다.
-
B <C (예를 들어, 123 )
이기 때문에 C가 가장 자리이며, 숫자 운전실 스킵 없습니다. 이 예 (312)는 생략되지 않으며 것 다음 값 313 연접 ( 312 313 )를 포함 123 . -
B ≥ C (예, 132 )
때문에 , B가 가장 자리이며, 숫자 BCA는 생략 될 수 없다. 이 예에서, 321 은 생략되지 않으며, 연결될 때 ( 321 322 )는 132를 포함하는 다음 값 ( 322) 도 생략되지 않을 것이다. 만약 B = C를 (예 : 122 ),이 경우에도 적용된다. 값 BCA는 전처럼, 스킵되지 않고 있기 때문에 , A는 반드시 미만이고 , B , BC <A + 1> 중 스킵되지 않는다. 이 예에서 221222 는 122를 포함합니다.
위 코드는 마지막 세 번째가 아닌 세 번째 숫자를 테스트하기 때문에 0-99의 모든 값 이 결과에 포함됩니다. 1-99 의 값은 건너 뛸 수 있지만, 모든 3 자리 시퀀스가있는 경우 모든 1 자리 및 2 자리 시퀀스도 존재해야하기 때문입니다.
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$@?+>+}/
점을 유의 1,016 이전 용액 제조 문자열이 각각 여러 두 추가 숫자 갖는 제외한 거의 최적 인 (111) (즉, 11111
대신 111
, 22222
대신 222
등). 이 여분의 숫자를 제거하고 (이 값들 각각에 3 개가 아닌 1 개의 숫자 만 삽입), 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 의 배수가 아닌 한 전체에 추가된다는 것 입니다.이 경우 하나의 문자 만 추가됩니다. 다른 모든 값은 무시됩니다.
생성 된 문자열은 Peter Taylor의 답변에서 생성 된 최적의 문자열과 다릅니다 .
역사:
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
답변
GolfScript ( 35 31 26 자)
10,{:x),{:&x=x+,{x&@}/}/}/
출력
000100110111200201210211220221222300301302310311312320321322330331332333400401402403410411412413420421422423430431432433440441442443444500501502503504510511512513514520521522523524530531532533534540541542543544550551552553554555600601602603604605610611612613614615620621622623624625630631632633634635640641642643644645650651652653654655660661662663664665666700701702703704705706710711712713714715716720721722723724725726730731732733734735736740741742743744745746750751752753754755756760761762763764765766770771772773774775776777800801802803804805806807810811812813814815816817820821822823824825826827830831832833834835836837840841842843844845846847850851852853854855856857860861862863864865866867870871872873874875876877880881882883884885886887888900901902903904905906907908910911912913914915916917918920921922923924925926927928930931932933934935936937938940941942943944945946947948950951952953954955956957958960961962963964965966967968970971972973974975976977978980981982983984985986987988990991992993994995996997998999
(1020 문자) 이것은 Lyndon 단어 연결 방식의 변형입니다. 원시적 인 1 문자 단어를 사용하는 대신 짧은 코드에는 111의 배수를 사용하지만 해당 숫자가 반복적으로 발생합니다. 결합 그룹의 최소 요소를 사용하는 대신 루프를 단축시키기 때문에 최대 요소를 사용합니다.
10,:^{:x^>{x.@:&<+^>{.x>{x&@}*}/}/}%3>0.
40 자 (아마도 여전히 향상 될 수 있음)에서 길이는 999자인 최적 문자열을 생성합니다.
100200300400500600700800901101201301401501601701801902102202302402502602702802903103203303403503603703803904104204304404504604704804905105205305405505605705805906106206306406506606706806907107207307407507607707807908108208308408508608708808909109209309409509609709809911121131141151161171181191221231241251261271281291321331341351361371381391421431441451461471481491521531541551561571581591621631641651661671681691721731741751761771781791821831841851861871881891921931941951961971981992223224225226227228229233234235236237238239243244245246247248249253254255256257258259263264265266267268269273274275276277278279283284285286287288289293294295296297298299333433533633733833934434534634734834935435535635735835936436536636736836937437537637737837938438538638738838939439539639739839944454464474484494554564574584594654664674684694754764774784794854864874884894954964974984995556557558559566567568569576577578579586587588589596597598599666766866967767867968768868969769869977787797887897987998889899900
이것을 역 문자열로 만들려고하면 111의 배수를 생략하는 데 문제가 있습니다.
999가 최적의 길이임을 확인하려면 (위의 간단한 설명은 모든 사람을 설득하지 못하기 때문에) 0에서 9 사이의 모든 3 자리 문자 시퀀스를 포함하는 전체 de Bruijn 시퀀스에서 시작합니다 (순환 문자열로 사용됨). 그 중 1000 개가 있으며 길이는 1000 자 이상이어야합니다. 그것은 보통 그 길이 노드 두자리 서열되는 그래프 오일러 도보 검증 정확히 1,000 자 수 xy
10 가장자리가 하나의 숫자로 표시된 각 z
취 xy
로 yz
.
우리는 시퀀스 시작이 필요하지 않으므로 0
de Bruijn 시퀀스가 주어지면 000
끝까지 회전 할 수 있습니다 . 그런 다음 시작으로 반올림하는 시퀀스 중 하나가 필요하지 않지만 0
before 숫자로 시작하는 시퀀스를 완료 하려면 두 개의 s 가 필요 000
하므로 999 문자 문자열을 얻기 위해 그 중 하나를 삭제할 수 있습니다. 나머지 0
는 모두로 시작하지 않는 숫자로 사용됩니다 0
.
답변
GolfScript, 17 자
999,{`1$1$?0<*+}/
문자열에 아직없는 경우 각 숫자를 추가하는 일반적인 접근 방식 (주 : 999는 확인 또는 추가되지 않지만 출력에 이미 포함되어 있음)
출력은 1133 자입니다.
01234567891011131415161718192021222425262728293032333536373839404344464748495054555758596065666869707677798087889099100102103104105106107108109110112114115116117118119120124125126127128129130132133134135136137138139140142143144145146147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188189190193194195196197198199200203204205206207208209219220221223225226227228229230231235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290294295296297298299300304305306307308309311329330332334336337338339340342346347348349350354355356357358359360364365366367368369370374375376377378379380384385386387388389390395396397398399400405406407408409422439440443445447448449450453457458459460465466467468469470475476477478479480485486487488489490496497498499500506507508509533549550554556558559560564568569570576577578579580586587588589590597598599600607608609644659660665667669670675679680687688689690698699700708709755769770776778780786790797799800809866877879880887888897898899900908932943954965976979987989
답변
코드가 없지만 999자가 출력 길이의 하한이라는 직관적 인 증거를 누군가가 이해할 수 있다고 생각했습니다.
첫째, 모든 1 자리 및 2 자리 숫자는 3 자리 숫자의 일부이므로 100보다 작은 것을 무시하십시오. 100-999 (포함)는 900 3 자리 숫자입니다.
문제를 해결하는 가장 최적의 방법은 모든 문자를 가능한 많이 사용하는 것입니다. 이는 숫자가 다음과 같이 가능한 많이 겹치는 것을 의미합니다.
123
234
345
따라서 첫 번째 숫자는 3자를 추가하고 이후의 각 숫자는 1자를 추가합니다. 3 + 899 = 902자를 하한으로 제공합니다.
그러나 0이 있으면 새로운 3 자리 숫자를 시작할 수 없습니다. 그러나 다른 0 자리가 아닌 한 다른 3 자리 숫자의 중간에 재사용 할 수 있습니다.
120
203 <- Ok.
034 <- not a number 100-999.
그러나:
100
002 <- not a number 100-999.
023 <- not a number 100-999.
따라서 출력에 나타나는 각 0은 출력을 1 자로 확장합니다. 마지막 두 문자는 더 이상 숫자와 겹치지 않으므로 0 일 수 있습니다.
???
??0
?00
가운데에는 0이 정확히 81 개의 숫자가 있고 (? 0?), 끝에는 0이 정확히 하나 인 81이 있고 (?? 0) 두 개의 0이있는 9가 있습니다 (? 00).
모든 ?? 0 숫자는? 0? 숫자 또는? 00 숫자이지만 둘다는 아닙니다. ? 0? ? 00은 절대 0을 공유 할 수 없으므로 출력에 최소 81 + 9 * 2의 0이 있어야합니다.
이것은 3 + 899 + 81 + 9 * 2-2 = 999 문자의 하한을 제공합니다.
이것이 주제가 아닌 것으로 여겨지지만 사과하기에는 너무 길었습니다.
답변
펄, 37 34 33 32 (1136 1132 자)
for$@(1..999){$_.=$@x!/$@/}print
for $ @ (1..999) {$ _. = $ @ if! / $ @ /} 인쇄
for $ i (1..999) {$ _. = $ i if! / $ i /} 인쇄
for (1..1e3) {$ s. = $ _ if $ s! ~ / $ _ /} print $ s
출력 :
12345678910111314151617181920212224252627282930323335363738394043444647484950545557585960656668697076777980878890991001021031041051061071081091101121141151161171181191201241251261271281291301321331341351361371381391401421431441451461471481491501521531541551561571581591601621631641651661671681691701721731741751761771781791801821831841851861871881891901931941951961971981992002032042052062072082092192202212232252262272282292302312352362372382392402432442452462472482492502532542552562572582592602632642652662672682692702732742752762772782792802832842852862872882892902942952962972982993003043053063073083093113293303323343363373383393403423463473483493503543553563573583593603643653663673683693703743753763773783793803843853863873883893903953963973983994004054064074084094224394404434454474484494504534574584594604654664674684694704754764774784794804854864874884894904964974984995005065075085095335495505545565585595605645685695705765775785795805865875885895905975985996006076086096446596606656676696706756796806876886896906986997007087097557697707767787807867907977998008098668778798808878888978988999009089329439549659769799879891000
더 짧은 문자열 : 38 37 34 (1020 자) :
$_.=$@x!/$@/while$@=--$@%1e3;print
for ($ @ = 1e3; $ @-;) {$ _. = $ @ if! / $ @ /} 인쇄
for ($ i = 1e3; $ i-;) {$ _. = $ i if! / $ i /} 인쇄
출력 :
999998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888887886885884883882881880877876875874873872871870867866865864863862861860857856855854853852851850847846845844843842841840837836835834833832831830827826825824823822821820817816815814813812811810807806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555554553552551550544543542541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411410403402401400333332331330322321320312311310302301300222221220211210201200111110101100
특히 처음 99999의 복제에 만족하지 않습니다! 더 많은 검사를 통해 더 많은 코드를 만들 수 있다고 생각합니다 …
편집 : @ Peter Taylor의 제안을 추가했습니다.
편집 2 : @primo의 훌륭한 제안! 감사합니다
답변
APL (20, 출력 : 1020)
{∨/⍺⍷⍵:⍵⋄⍵,⍺}/⍕¨⍳999
설명:
{∨/⍺⍷⍵:⍵⋄⍵,⍺}
:⍺
의 하위 문자열 인⍵
경우 return⍵
, 그렇지 않으면 return⍵,⍺
/
: 축소⍕¨
: 각각의 문자열 표현⍳999
:의 정수1
로999
.
산출:
9999989979969959949939929919909889879869859849839829819809789779769759749739729719709689679669659649639629619609589579569
55954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913
91291191090890790690590490390290190088888788688588488388288188087787687587487387287187086786686586486386286186085785
68558548538528518508478468458448438428418408378368358348338328318308278268258248238228218208178168158148138128118108
07806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735
73473373273173072672572472372272172071671571471371271171070670570470370270170066666566466366266166065565465365265165
06456446436426416406356346336326316306256246236226216206156146136126116106056046036026016005555545535525515505445435
42541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411
410403402401400333332331330322321320312311310302301300222221220211210201200111110101100
APL (41, 출력 : 999)
'0',⍨⊃{⍵,⍺⍴⍨(1=⍴∪⍺)∨3×~∨/⍺⍷⍵}/⌽⍕¨100+⍳898
설명:
⌽⍕¨100+⍳898
:('999' '998' ... '101')
(APL에서는 축소가 오른쪽에서 왼쪽으로되므로 반대 순서로F/a b c ≡ a F (b F c)
)/
: 줄이다⍵,⍺⍴⍨
: 오른쪽 인수 다음에N
왼쪽 인수 의 첫 문자가옵니다N
.3×~∨/⍺⍷⍵
:3
경우⍺
의 문자열 아니다⍵
, 그렇지 않으면,0
(1=⍴∪⍺)
: 하나의 고유 한 characcter 만있는1
경우⍺
그렇지 않은 경우0
∨
: 앞의 두 값의 최대 공약수 : 그래서,1
경우⍺
에없는⍵
단 하나 개의 독특한 성격을 가지고3
있는 경우⍺
에없는⍵
,하지만 더 이상의 독특한 성격을 가지고0
그렇지.'0',⍨
: 결과의 끝에 0을 추가하십시오
산출:
10110210310410510610710810911121131141151161171181191201221231241251261271281291301321331341351361371381391401421431441451
46147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188
18919019219319419519619719819920020220320420520620720820922232242252262272282292302332342352362372382392402432442452
46247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294
29529629729829930030330430530630730830933343353363373383393403443453463473483493503543553563573583593603643653663673
68369370374375376377378379380384385386387388389390394395396397398399400404405406407408409444544644744844945045545645
74584594604654664674684694704754764774784794804854864874884894904954964974984995005055065075085095556557558559560566
56756856957057657757857958058658758858959059659759859960060660760860966676686696706776786796806876886896906976986997
00707708709777877978078878979079879980080880988898908999009099100
답변
루비 : 50 46 자 (1020 자 출력)
s=""
999.downto(0){|i|s[n=i.to_s]||s+=n}
$><<s
샘플 실행 :
bash-4.1$ ruby -e 's="";999.downto(0){|i|s[n=i.to_s]||s+=n};$><<s'
999998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888887886885884883882881880877876875874873872871870867866865864863862861860857856855854853852851850847846845844843842841840837836835834833832831830827826825824823822821820817816815814813812811810807806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555554553552551550544543542541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411410403402401400333332331330322321320312311310302301300222221220211210201200111110101100
시운전 :
bash-4.1$ ruby -e 's="";999.downto(0){|i|s[n=i.to_s]||s+=n};$><<s' | ruby -ne 'p (0..999).reject{|i|$_[i.to_s]}'
[]
루비 : 102 97 자 (999 자 출력)
s=""
999.downto(0){|i|s[n=i.to_s]||[2,1].map{|j|n[0,j]==s[-j,j]&&s+=n[j,9]and break}&&s+=n}
$><<s
샘플 실행 :
bash-4.1$ ruby -e 's="";999.downto(0){|i|s[n=i.to_s]||[2,1].map{|j|n[0,j]==s[-j,j]&&s+=n[j,9]and break}&&s+=n};$><<s'
999899799699599499399299199098898798698598498398298198097897797697597497397297197096896796696596496396296196095895795695595495395295195094894794694594494394294194093893793693593493393293193092892792692592492392292192091891791691591491391291191090890790690590490390290190088878868858848838828818808778768758748738728718708678668658648638628618608578568558548538528518508478468458448438428418408378368358348338328318308278268258248238228218208178168158148138128118108078068058048038028018007776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666566466366266166065565465365265165064564464364264164063563463363263163062562462362262162061561461361261161060560460360260160055545535525515505445435425415405345335325315305245235225215205145135125115105045035025015004443442441440433432431430423422421420413412411410403402401400333233133032232132031231131030230130022212202112102012001110100
시운전 :
bash-4.1$ ruby -e 's="";999.downto(0){|i|s[n=i.to_s]||[2,1].map{|j|n[0,j]==s[-j,j]&&s+=n[j,9]and break}&&s+=n};$><<s' | ruby -ne 'p (0..999).reject{|i|$_[i.to_s]}'
[]