그들 모두를 지배하는 하나의 반지. 모두를 포함하는 하나의 문자열


43

목표 : 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;
    }
}

최단 코드 승리, 최단 문자열 보너스 포인트!


11
최적의 문자열 길이는 1002 자입니다.
피터 테일러

8
기본적으로 de Bruijn 시퀀스를 요구 B(10, 3)하지만 순환 랩핑을 허용하지 않기 때문에 처음 두 문자를 반복해야합니다.
피터 테일러

3
그러나 문자열에 1, 2 또는 56이 포함되기를 원하지만 반드시 001 002 및 056은 아닙니다.
Fabinout

6
정수가 아니라 숫자 를 말했기 때문에 문제를 해결할 없습니다 . 문자열은 1000보다 작은 모든 양수를 수용하기 위해 길이가 무한해야합니다.
Ramchandra Apte

11
@RamchandraApte 그리고 여전히 무한 길이의 문자열은 대부분의 숫자가 누락됩니다 ;-)
Howard

답변:


19

골프 스크립트-13 바이트, 1315 출력

991,{`.$2>>},

위의 숫자는 첫 번째 숫자가 숫자의 가장 큰 숫자 인 0-990 에서 숫자를 선택합니다 . 즉, 정렬 된 문자열 표현의 마지막 숫자는 사전 식으로 문자열 자체보다 작습니다. 논리는 다음과 같습니다.

3 자리 숫자 abc 의 경우 a 가 숫자의 가장 큰 숫자가 아닌 경우 나중에 두 경우 중 하나에 해당하므로 숫자를 건너 뜁니다.

  1. B <C (예를 들어, 123 )
    이기 때문에 C가 가장 자리이며, 숫자 운전실 스킵 없습니다. 이 예 (312)는 생략되지 않으며 것 다음 값 313 연접 ( 312 313 )를 포함 123 .

  2. 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

추가 할 문자를 선택하는 논리는 다음 세 가지 경우입니다.

  1. 111n , ns
    첫 번째 검사의 값은 1 이고 두번째 검사의 값은 -1 입니다.
    슬라이스는 인덱스 0 부터 시작합니다. 전체 문자열을 반환합니다.
  2. 111n , ns
    첫 번째 검사의 값은 1 이고 두번째 검사의 값은 ≥ 2 입니다.
    슬라이스는 인덱스 ≥ 3 부터 시작합니다. 빈 문자열을 반환합니다.
  3. 111n , ns
    첫 번째 검사의 값은 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

45

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 자 수 xy10 가장자리가 하나의 숫자로 표시된 각 zxyyz.

우리는 시퀀스 시작이 필요하지 않으므로 0de Bruijn 시퀀스가 ​​주어지면 000끝까지 회전 할 수 있습니다 . 그런 다음 시작으로 반올림하는 시퀀스 중 하나가 필요하지 않지만 0before 숫자로 시작하는 시퀀스를 완료 하려면 두 개의 s 가 필요 000하므로 999 문자 문자열을 얻기 위해 그 중 하나를 삭제할 수 있습니다. 나머지 0는 모두로 시작하지 않는 숫자로 사용됩니다 0.


8
정말 인상적입니다!
Fabinout

필터링 또는 생성 방식을 사용하고 싶습니다. pseudo-Lyndon 접근법의 경우 32 자로 생성 접근법 10,:^{:x^>{x.@:&<+^>{x&@}/}/}/0.이 있습니다. 실제 Lyndon 단어의 10,:^{:x^>{x.@:&<+^>{.x>{x&@}*}/}/}%3>0.경우 최적의 문자열에 40자를 제공한다는 것을 변경 하십시오.
피터 테일러

100 미만의 숫자에 선행 0을 사용하지 않으면 최적 문자열을 더 짧게 얻을 수 있습니까?
Random832

1
@ Random832 당신이 할 수 없다고 확신합니다. 숫자 100, 200, ... 900을 포함해야하므로 최소 문자열은 확실히 8 배의 00X를 발생합니다 (위와 같이 맨 오른쪽에있을 수 있음). 주어진 최적 문자열은 "001"을 포함하지 않습니다.
tttppp 2013

2
일반적으로 이해할 수없는 코드를 공표하지 않지만이 경우 이해하지 못하기 때문에 공표합니다 . 브라보.
벤 잭슨

29

GolfScript, 17 자

999,{`1$1$?0<*+}/

문자열에 아직없는 경우 각 숫자를 추가하는 일반적인 접근 방식 (주 : 999는 확인 또는 추가되지 않지만 출력에 이미 포함되어 있음)

출력은 1133 자입니다.

01234567891011131415161718192021222425262728293032333536373839404344464748495054555758596065666869707677798087889099100102103104105106107108109110112114115116117118119120124125126127128129130132133134135136137138139140142143144145146147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188189190193194195196197198199200203204205206207208209219220221223225226227228229230231235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290294295296297298299300304305306307308309311329330332334336337338339340342346347348349350354355356357358359360364365366367368369370374375376377378379380384385386387388389390395396397398399400405406407408409422439440443445447448449450453457458459460465466467468469470475476477478479480485486487488489490496497498499500506507508509533549550554556558559560564568569570576577578579580586587588589590597598599600607608609644659660665667669670675679680687688689690698699700708709755769770776778780786790797799800809866877879880887888897898899900908932943954965976979987989

20

코드가 없지만 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 문자의 하한을 제공합니다.

이것이 주제가 아닌 것으로 여겨지지만 사과하기에는 너무 길었습니다.


1
고마워요! 999보다 작은 모든 정수를 포함하는 문자열의 길이가 999자인 것은 좀 재미 있습니다.
Fabinout

1
en.wikipedia.org/wiki/De_Bruijn_sequence 도 참조하십시오 .
liori

1
문자열에 최대 999 개의 모든 숫자를 저장하면 길이가 999 자임을 알 수 있습니다. 내가 틀렸다면 수정하십시오. 최대 99 자마다 저장하면 100 자 길이가된다고 생각합니다.
Fabinout

2
같은 주장에 의해 하한은 2 + 89 + 9-1 = 99이지만 99가 가능하다는 것을 증명하지는 못하지만 98은 불가능합니다.
Alistair Buxton

17

펄, 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의 훌륭한 제안! 감사합니다


2
1000을 1e3으로 쓰는 좋은 트릭이지만 무의미하다고 생각합니다. 이 질문은“엄격히 1000 이하”라고 말하며 999까지 포함됩니다. (샘플 코드도 0..999를 처리합니다.)
manatwork

훌륭한 지적입니다! 나는 다른 루프를 시작했고, 이에 따라 이것을 수정했습니다! 감사!
돔 헤이스팅스

3
변수에 알파벳이 아닌 문자를 사용하면 공백을 제거 할 수 있습니까?
피터 테일러

아 네, 할 수 있어요! 감사!
Dom Hastings

2
몇 가지 사소한 개선 사항 : 대신 $_.=$@if!/$@/문자열 반복을 사용할 수 있습니다 $_.=$@x!/$@/. 은 fora로 교체 할 수 있습니다 while모듈로를 사용하여 성명 수정으로 :...while$@=--$@%1e3
프리모

10

APL (20, 출력 : 1020)

{∨/⍺⍷⍵:⍵⋄⍵,⍺}/⍕¨⍳999

설명:

  • {∨/⍺⍷⍵:⍵⋄⍵,⍺}: 의 하위 문자열 인 경우 return , 그렇지 않으면 return⍵,⍺
  • /: 축소
  • ⍕¨: 각각의 문자열 표현
  • ⍳999:의 정수 1999.

산출:

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

8

루비 : 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]}'
[]

반대 방향이 아닌 999에서 0으로 이동하는 것이 좋습니다. 이를 통해 Java 메소드는 1200 대신 1048 문자 문자열을 출력합니다.
Fabinout

1
출력 길이가 아닌 코드 길이가 걱정된다면 문자열 범위를 사용하여 첫 번째 코드 길이를 향상시킬 수 있습니다. (?0..?9*3).map{|i|$/[i]||($><<i;$/+=i)}어쩌면 뭔가 ?
Paul Prestidge

5

자바 스크립트, 39

for(k=i="999";~k.indexOf(--i)?i:k+=i;);

1020 자 출력 :

999998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888887886885884883882881880877876875874873872871870867866865864863862861860857856855854853852851850847846845844843842841840837836835834833832831830827826825824823822821820817816815814813812811810807806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555554553552551550544543542541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411410403402401400333332331330322321320312311310302301300222221220211210201200111110101100


확인: for(i=0;i<1000;i++)console.assert(k.indexOf(i)>=0)


5

Mathematica ( 62 64 자, 1002 출력)

이것은 기본 기능을 사용하기 때문에 처음부터 더 짧은 솔루션의 아름다움을 더 높이 평가합니다. 출력 길이는 1002 자입니다.

<< Combinatorica`
"79" <> DeBruijnSequence["0"~CharacterRange~"9", 3]

"799798787770760750740730720710980970960950940930920910108908708608508408308208889998988081009909008007006005004003002000190180170160150140130120119118117116115114113112912812712612512412312213913813713613513413313214914814714614514414314215915815715615515415315216916816716616516416316217917817717617517417317218918818718618518418318219919819719619519419319212111029028027026025024023022922822722622522422392382372362352342332492482472462452442432592582572562552542532692682672662652642632792782772762752742732892882872862852842832992982972962952942932322202103903803703603503403393383373363353349348347346345344359358357356355354369368367366365364379378377376375374389388387386385384399398397396395394343330320310490480470460450449448447446445945845745645546946846746646547947847747647548948848748648549949849749649545444043042041059058057056055955855755695685675665795785775765895885875865995985975965655505405305205106906806706696686679678677689688687699698697676660650640630620610790780779778978879"

1
799 및 997이 누락 된 것 같습니다. ideone.com/d07bG2 참조 (또는 직접 확인)
Justin

잘 잡았습니다. 기본적으로 DeBruijnSequence순환 랩핑을 가정합니다. 마지막 두 자리 인 "79"를 앞에 붙여 문제를 해결하십시오.
DavidC

4

매스 매 티카, 51 문자

""<>Table[ToString/@({i,j,k}-1),{i,10},{j,i},{k,i}]

출력 (1155 자) :

000100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999

무엇을합니까?
Fabinout

1
이는 폼의리스트 목록 구축 0-9로부터 인을 , 보다 작다 . 그런 다음 목록을 문자열로 변환합니다. {i, j, k}ijki
alephalpha

4

파이썬-53 63, 1134 출력

이것은 매우 무차별 적이지만 유효합니다. 예, 앞에 0이 있지만를 사용하지 않으면 두 문자가 저장됩니다 range(1,1000).

s=''
for i in range(1e3):s+=`i`*(not`i`in s)
print s

위의 DeprecationWarning경우 range()호출 에서 1e3의 사용을 초과 했지만 1000을 사용하여 문자를 저장합니다.

문자열을 반대로하여 약간 더 최적의 길이 출력 버전도 있습니다. 65 자 (고해상도 및 촬영 감사합니다) :

Python-58, 1021 출력

s=''
for i in range(999,9,-1):s+=`i`*(not`i`in s)
print s

1
첫 번째 프로그램의 출력 길이는 1132가 아니라 1133입니다. Python 2 (Python 3 아님)에서는 백틱을 사용하여 코드를 54 자로 줄일 수 있습니다 .for i in range(999):s+=`i`*(not`i`in s)
res

와우? 그들은 백틱을 꺼냈다? 귀도는 내가 싫어하는 펄과 그 무엇을 유지해야 할지를 결정할 때 그날처럼 보였을 것입니다.
워렌 P

1
range(999,99,-1)대신을 사용하여 한 문자 씩 줄일 수 있습니다 range(1000)[::-1].
17 분 46 초

그리고 여전히 도움으로 팁 str(i)*(str(i)not in s)i=str(i);s+=[i,''][i in s];) 보다 조금 짧습니다 .
Filmor

@filmor 1e3대신 사용하여 더 작게, 더 작게1000

2

K, 33

{$[#ss[x]@y;x;,/x,y]}/["";$!1000]

기본적으로 Howards 솔루션과 동일-1133 자

01234567891011131415161718192021222425262728293032333536373839404344464748495054555758596065666869707677798087889099100102103104105106107108109110112114115116117118119120124125126127128129130132133134135136137138139140142143144145146147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188189190193194195196197198199200203204205206207208209219220221223225226227228229230231235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290294295296297298299300304305306307308309311329330332334336337338339340342346347348349350354355356357358359360364365366367368369370374375376377378379380384385386387388389390395396397398399400405406407408409422439440443445447448449450453457458459460465466467468469470475476477478479480485486487488489490496497498499500506507508509533549550554556558559560564568569570576577578579580586587588589590597598599600607608609644659660665667669670675679680687688689690698699700708709755769770776778780786790797799800809866877879880887888897898899900908932943954965976979987989

2

Java- 126 98 자 (Java 6)

class b{static{String s="";for(int a=999;a>0;a--)s=s.contains(""+a)?s:s+a;System.out.println(s);}}

출력 (1020 자) :

999998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888887886885884883882881880877876875874873872871870867866865864863862861860857856855854853852851850847846845844843842841840837836835834833832831830827826825824823822821820817816815814813812811810807806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555554553552551550544543542541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411410403402401400333332331330322321320312311310302301300222221220211210201200111110101100

좋은 도달 (에 따라 수 피터 테일러 몇 문자 (에 대한 20 개 문자 추가하여 문자열 길이를, 그러나 나중에 그는 999 최적의했다) 147 118)

class b{static{String s="";for(int a=999;a>0;a--)s=s.contains(""+a)?s:(a+1)%111==0?s+a%10:s+a;System.out.println(s);}}

출력 (1002 자) :

999899799699599499399299199098898798698598498398298198097897797697597497397297197096896796696596496396296196095895795695595495395295195094894794694594494394294194093893793693593493393293193092892792692592492392292192091891791691591491391291191090890790690590490390290190088878868858848838828818808778768758748738728718708678668658648638628618608578568558548538528518508478468458448438428418408378368358348338328318308278268258248238228218208178168158148138128118108078068058048038028018007776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666566466366266166065565465365265165064564464364264164063563463363263163062562462362262162061561461361261161060560460360260160055545535525515505445435425415405345335325315305245235225215205145135125115105045035025015004443442441440433432431430423422421420413412411410403402401400333233133032232132031231131030230130022212202112102012001110101100

편집 : Java 6이 28자를 저장할 수 있음을 지적한 Fabinout에게 감사합니다.


원하는 경우 java 6으로 컴파일하고 System.out.println () 대신 정적 블록을 사용할 수 있습니다 !!
Fabinout

@Fabinout 대신에 public static void main(String[]a)? (내 코드가 ...public static void main(String[]c){...에서 (으 ...static{...)로 변경됨 )
Justin Justin

네 저도 그렇습니다. Java 6을 사용해 볼 수 있습니다.
Fabinout

Btw, 프로그램이 충돌하지 않게하려면 정적 블록 끝에 exit ()를 사용해야합니다. 골프에서 충돌하지 않아도되는 것은 아니지만.
Fabinout

2

Windows PowerShell-40, 1020 출력

999..0|%{$s+=if(!($s-match$_)){"$_"}};$s

산출:

999998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888887886885884883882881880877876875874873872871870867866865864863862861860857856855854853852851850847846845844843842841840837836835834833832831830827826825824823822821820817816815814813812811810807806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555554553552551550544543542541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411410403402401400333332331330322321320312311310302301300222221220211210201200111110101100

2

Haskell, 75 바이트-1002 출력

최소 솔루션을 반환하는 체 접근 방식.

(\n->head.filter(\s->and[show k`isInfixOf`s|k<-[1..n]]).map show$[1..])1000

이 솔루션은 비실용적으로 느립니다.


당신의 수입 포함 할 필요 Data.List를 들어 isInfixOf그러나 당신은 여전히 2 바이트 저장하여 그것을 골프를 할 수 있습니다, 좀 더 : 1) 하드 코딩 n = 10002) 사용 all을 통해 and술어 3) 사용의 pointfree 버전 (!!0)이상 head4)의 조합을 통해 사용 목록 - 이해 mapfilter5) (<$>)이상 사용 map:[s|s<-show<$>[1..],all((`isInfixOf`s).show)[1..1000]]!!0
ბიმო

2

Powershell, 36 바이트, 1020 출력

999..9|%{$s+=(,"$_")[$s-match$_]};$s

산출:

999998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888887886885884883882881880877876875874873872871870867866865864863862861860857856855854853852851850847846845844843842841840837836835834833832831830827826825824823822821820817816815814813812811810807806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555554553552551550544543542541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411410403402401400333332331330322321320312311310302301300222221220211210201200111110101100

대안, 69 바이트, 1000 출력

999..9|%{$s+=("$_",($x="$_"[-1]))[2*($s-match$_)+($s+$x-match$_)]};$s

산출:

9998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888788688588488388288188087787687587487387287187086786686586486386286186085785685585485385285185084784684584484384284184083783683583483383283183082782682582482382282182081781681581481381281181080780680580480380280180077767757747737727717707667657647637627617607567557547537527517507467457447437427417407367357347337327317307267257247237227217207167157147137127117107067057047037027017006665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555455355255155054454354254154053453353253153052452352252152051451351251151050450350250150044434424414404334324314304234224214204134124114104034024014003332331330322321320312311310302301300222122021121020120011101100

대안, 82 73 바이트, 999 출력 (최소)

for(;$z=9..0|?{"000$x"-notmatch-join"$x$_"[-3..-1]}|%{"$_"}){$x+=$z[0]}$x

이것은 상수에 적합한 가장 짧은 De Bruijn 생성의 간단한 알고리즘입니다 : alphabet = 9876543210및 length =3

산출:

999899799699599499399299199098898798698598498398298198097897797697597497397297197096896796696596496396296196095895795695595495395295195094894794694594494394294194093893793693593493393293193092892792692592492392292192091891791691591491391291191090890790690590490390290190088878868858848838828818808778768758748738728718708678668658648638628618608578568558548538528518508478468458448438428418408378368358348338328318308278268258248238228218208178168158148138128118108078068058048038028018007776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666566466366266166065565465365265165064564464364264164063563463363263163062562462362262162061561461361261161060560460360260160055545535525515505445435425415405345335325315305245235225215205145135125115105045035025015004443442441440433432431430423422421420413412411410403402401400333233133032232132031231131030230130022212202112102012001110100

테스트 스크립트 :

$f= {

#999..0|%{$s+=if(!($s-match$_)){"$_"}};$s

#999..9|%{$s+=("$_",($x="$_"[-1]))[2*($s-match$_)+($s+$x-match$_)]};$s-replace'1100','100'
#999..9|%{$s+=("$_",($x="$_"[-1]))[2*($s-match$_)+($s+$x-match$_)]};$s
#999..9|%{$s+=(,"$_")[$s-match$_]};$s-replace'(.)\1{3,}','$1$1$1'
#999..9|%{$s+=(,"$_")[$s-match$_]};$s-replace'(.)\1{3,}','$1$1$1'-replace'1100','0'
 for(;$z=9..0|?{"000$x"-notmatch-join"$x$_"[-3..-1]}|%{"$_"}){$x+=$z[0]}$x
#999..9|%{$s+=(,"$_")[$s-match$_]};$s

}

$s=&$f

$s
"Length:"
$s.Length
"count(###)!=1:"
$x=@{}
0..($s.Length-3)|%{$s.Substring($_,3)}|Group|%{
    $x[+$_.Name]=$_.Count
}
100..999|?{$x.$_-ne1}|%{,($_,+$x.$_)}|%{"$_"}
"count(##)!=10:"
$x=@{}
0..($s.Length-2)|%{$s.Substring($_,2)}|Group|%{
    $x[+$_.Name]=$_.Count
}
10..99|?{$x.$_-ne10}|%{,($_,+$x.$_)}|%{"$_"}
"count(#)!=100:"
$x=@{}
0..($s.Length-1)|%{$s.Substring($_,1)}|Group|%{
    $x[+$_.Name]=$_.Count
}
0..9|?{$x.$_-ne100}|%{,($_,+$x.$_)}|%{"$_"}
"All numbers:"
999-eq(1..999|?{$s-match$_}).Count

2

05AB1E , 9 바이트1109 자

₄FDNå_iNì

출력 :

90990190089989088981980980880079979879078978878077977870970870770069969869769068968868768067967867767066966866760960860760660059959859759659058958858758658057957857757657056956856756656055955855755650950850750650550049949849749649549048948848748648548047947847747647547046946846746646546045945845745645545044944844744644540940840740640540440039939839739639539439038938838738638538438037937837737637537437036936836736636536436035935835735635535435034934834734634534434033933833733633533430930830730630530430330029929829729629529429329028928828728628528428328027927827727627527427327026926826726626526426326025925825725625525425325024924824724624524424324023923823723623523423323022922822722622522422320920820720620520420320220019919719619519419319219118918818718618518418318218017917817717617517417317217016916816716616516416316216015915815715615515415315215014914814714614514414314214013913813713613513413313213012912812712612512412312212011811711611511411311211110910810710610510410310210110099919089888079787770696867666059585756555049484746454440393837363534333029282726252423222018171615141312119876543210

온라인으로 시도 하거나 1000 미만의 모든 숫자가 포함되어 있는지 확인하십시오 .

설명:

            # Push 1000
 F           # Loop N in the range [0,1000):
  D          #  Duplicate the top value on the stack
   Nå_i      #  If it does not contain N as substring yet:
       Nì    #   Prepend N to it
             # (Output implicitly after the loop)

1

파이크, 13 바이트 (비경쟁), 문자열 길이 1133

파이크는 도전보다 새로운 것이며 따라서 비 경쟁적이다.

k~mV~oi{!o`*+

여기 사용해보십시오!

              - o = 0
k~mV          - repeat 1000 times, i = ""
    ~oi{      -     str(o) in i
        !     -    not ^
         o`*  -   str(o++) * ^
            + -  i += ^

출력은 얼마나 걸립니까?
Kritixi Lithos

1

PHP, 48 44 바이트

나에게 상기시켜 준 @primo에게 감사한다 ereg.

for($i=1e3;--$i;ereg($i,$s)?:$s.=$i);echo$s;

또는

for($i=1e3;ereg(--$i,$s)?$i:$s.=$i;);echo$s;

출력 : 1020 자 PHP <7 필요

PHP 7, 48 바이트 :

ereg PHP 7에서 제거되었습니다

for($i=1e3;--$i;strstr($s,"$i")?:$s.=$i);echo$s;

에 대한 두 번째 인수 strstr( strpos및 기타 문자열 검색 함수)가 문자열이 아닌 경우 ASCII 코드로 사용되므로 $i문자열로 캐스트해야합니다.


1
ereg($i,$s)4 ( <?바이트 수 에도 포함 ).
primo

@primo 방금이 도전이 PHP 7보다 오래되었다는 것을 알았습니다. 이중 감사합니다. :)
Titus

ereg함수 이름이 너무 짧거나 밑줄이 충분하지 않아 제거되었을 수 있습니다. 그것은 split또한 제거되었습니다 특히 훌륭합니다.
primo

eregPOSIX에는 PCRE 가능성의 일부만 포함되어 있기 때문에 제거되었습니다. 그리고 아마도 두 개의 다른 라이브러리를 유지하고 싶지 않았을 것입니다. 다시 Rasmus Lerdorf를 만나면 물어 볼게요. split가 제거되었지만 join남아 있습니다 (아마 "별명"이므로). pedantry 죄송합니다; 그러나 나는 아이러니를 인식 할 수없는 사람들을 알고 있습니다.
Titus

1

그루비, 49 문자 / 바이트

문자열 변수를 반환하는 함수로 이것을 수행할지, 결과를 인쇄할지 확실하지 않으므로 stdout에 인쇄합니다. 정규식 매처를 사용하면 "if"대신 삼항 연산자를 사용하여 2 바이트를 절약하고 다른 바이트를 저장했습니다. 출력 문자열은 1133 자입니다.

a='';1000.times{a+=(a==~/.*$it.*/)?'':it};print a

산출:

01234567891011131415161718192021222425262728293032333536373839404344464748495054555758596065666869707677798087889099100102103104105106107108109110112114115116117118119120124125126127128129130132133134135136137138139140142143144145146147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188189190193194195196197198199200203204205206207208209219220221223225226227228229230231235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290294295296297298299300304305306307308309311329330332334336337338339340342346347348349350354355356357358359360364365366367368369370374375376377378379380384385386387388389390395396397398399400405406407408409422439440443445447448449450453457458459460465466467468469470475476477478479480485486487488489490496497498499500506507508509533549550554556558559560564568569570576577578579580586587588589590597598599600607608609644659660665667669670675679680687688689690698699700708709755769770776778780786790797799800809866877879880887888897898899900908932943954965976979987989

-1

게임 메이커 언어, 1014-문자열 1000

show_message(909910010110210310410510610710810911121131141151161171181191201221231241251261271281291301321331341351361371381391401421431441451461471481491501521531541551561571581591601621631641651661671681691701721731741751761771781791801821831841851861871881891901921931941951961971981992002022032042052062072082092223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333433533633733833934034434534634734834935035435535635735835936036436536636736836937037437537637737837938038438538638738838939039439539639739839940040440540640740840944454464474484494504554564574584594604654664674684694704754764774784794804854864874884894904954964974984995005055065075085095556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666766866967067767867968068768868969069769869970070770870977787797807887897907987998008088098889890899900)

또한:

루비, 1003-문자열 1000

p'909910010110210310410510610710810911121131141151161171181191201221231241251261271281291301321331341351361371381391401421431441451461471481491501521531541551561571581591601621631641651661671681691701721731741751761771781791801821831841851861871881891901921931941951961971981992002022032042052062072082092223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333433533633733833934034434534634734834935035435535635735835936036436536636736836937037437537637737837938038438538638738838939039439539639739839940040440540640740840944454464474484494504554564574584594604654664674684694704754764774784794804854864874884894904954964974984995005055065075085095556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666766866967067767867968068768868969069769869970070770870977787797807887897907987998008088098889890899900'


3
1) 첫 번째 해결책은 "문자열의 길이는 1500 자 미만이어야합니다"규칙을 위반하는 것입니다. 2) 출력에서 ​​909를 찾을 수 없습니다. ( primo의 답변 에서 복사하여 붙여 넣을 때 첫 번째 숫자를 놓쳤 습니까?) 3) ruby코드는 숫자 매개 변수 pputs전달 하는 대신 사용할 수 있습니다 .
manatwork
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.