Một chiếc nhẫn thống trị tất cả. Một chuỗi để chứa tất cả


43

Mục tiêu: Xuất ra một chuỗi chứa mọi số nguyên dương dưới 1000.

Câu trả lời rõ ràng là ghép nối từng người trong số họ và điều đó sẽ tạo ra Chuỗi 2890 ký tự (nhờ thao tác), để tránh loại câu trả lời dễ dàng này, độ dài của chuỗi phải dưới 1500 ký tự. Đây là một mã Java đơn giản tạo ra Chuỗi ký tự 1200.

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;
    }
}

Mã ngắn nhất giành chiến thắng, điểm thưởng cho Chuỗi ngắn nhất!


11
Chuỗi tối ưu dài 1002 ký tự.
Peter Taylor

8
Về cơ bản, bạn đang yêu cầu một chuỗi de Bruijn B(10, 3) , nhưng vì bạn không cho phép gói theo chu kỳ nên cần lặp lại hai ký tự đầu tiên.
Peter Taylor

3
Nhưng tôi muốn chuỗi chứa 1, 2 hoặc 56, không nhất thiết là 001 002 và 056.
Fabinout

6
Vấn đề của bạn là không thể giải quyết vì bạn nói số không phải là số nguyên . Chuỗi sẽ phải có độ dài vô hạn để chứa tất cả các số dương dưới 1000.
Ramowderra Apte

11
@RamframraApte Và vẫn còn bất kỳ chuỗi nào ngay cả với độ dài vô hạn sẽ bị thiếu hầu hết các số ;-)
Howard

Câu trả lời:


19

Golfscript - 13 byte, đầu ra 1315

991,{`.$2>>},

Ở trên chọn các số đó từ 0-990 có chữ số đầu tiên là chữ số lớn nhất của số đó, tức là chữ số cuối cùng của biểu diễn chuỗi được sắp xếp ít hơn về mặt từ vựng so với chính chuỗi. Logic là như sau:

Đối với số có 3 chữ số abc , nếu a không phải là chữ số lớn nhất của số, số tôi sẽ bị bỏ qua, vì nó sẽ được bao phủ bởi một trong hai trường hợp sau:

  1. b <c (ví dụ 123 )
    c là chữ số lớn nhất, nên số cab sẽ không bị bỏ qua. Trong ví dụ này, 312 sẽ không bị bỏ qua, cũng không có giá trị tiếp theo 313 , mà khi nối ( 312 313 ) sẽ chứa 123 .

  2. b ≥ c (ví dụ 132 )
    b là chữ số lớn nhất, số bca sẽ không bị bỏ qua. Trong ví dụ này, 321 sẽ không bị bỏ qua, cũng như giá trị tiếp theo 322 , khi được nối ( 321 322 ) sẽ chứa 132 . Nếu b = c (ví dụ 122 ), trường hợp này cũng được áp dụng. Giá trị bca sẽ không bị bỏ qua, như trước đây và vì a nhất thiết phải nhỏ hơn b , bc <a + 1> cũng sẽ không bị bỏ qua. Trong ví dụ này, 221 222 chứa 122 .

Bởi vì đoạn mã trên kiểm tra chữ số thứ ba, thay vì nghiêm ngặt cuối cùng, tất cả các giá trị từ 0-99 đều được đưa vào kết quả. Tuy nhiên, các giá trị từ 1-99 có thể bị bỏ qua, bởi vì nếu mỗi chuỗi 3 chữ số có mặt, thì mỗi chuỗi 1 chữ số và 2 chữ số cũng phải có mặt.

Các giá trị từ 991-999 cũng có thể bị bỏ qua, vì giá trị được tạo bởi ( 909 910 , 919 920 , ... 989 990 ).

Với 1315 byte đầu ra, điều này thoải mái theo thông số kỹ thuật của vấn đề dưới 1500.

Đầu ra:

0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990

Biến thể số 1

14 byte, đầu ra 1233

991,{`.$-1>>},

Bằng cách chọn đúng chữ số cuối cùng để so sánh, thay vì chữ số thứ ba, nhiều giá trị không cần thiết dưới 100 được loại bỏ, rút ​​ngắn chuỗi kết quả.

101120212230313233404142434450515253545560616263646566707172737475767780818283848586878890919293949596979899100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990

Biến thể số 2

16 byte, đầu ra 1127

991,99>{`.$2>>},

Bằng cách loại bỏ tất cả các giá trị nhỏ hơn 99 trước đó, chuỗi kết quả có thể được rút ngắn hơn nữa.

99100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990

Golfscript - 19 byte, đầu ra 1016

910,99>{`.2$\?)>+}/

Các giá trị trên từ 99 đến 909 , thêm bất kỳ giá trị nào chưa xuất hiện ( 909 thường sẽ là giá trị cuối cùng được thêm theo cách này). Di chuyển 99 ra phía trước là một tối ưu hóa để tránh cần 910 ở phía sau.

Đầu ra:

99100101102103104105106107108109111112113114115116117118119120122123124125126127128129130132133134135136137138139140142143144145146147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188189190192193194195196197198199200202203204205206207208209222223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333334335336337338339340344345346347348349350354355356357358359360364365366367368369370374375376377378379380384385386387388389390394395396397398399400404405406407408409444445446447448449450455456457458459460465466467468469470475476477478479480485486487488489490495496497498499500505506507508509555556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666667668669670677678679680687688689690697698699700707708709777778779780788789790798799800808809888889890899900909

Golfscript 26 byte, đầu ra 999

909.,99>{`..$.2><3$@?+>+}/

Lưu ý rằng chuỗi ký tự 1016 được tạo bởi giải pháp trước đó là gần như tối ưu, ngoại trừ việc có thêm hai chữ số cho mỗi bội số của 111 (tức là 11111thay vì 111, 22222thay vì 222, v.v.). Giải pháp có thể được thực hiện tối ưu bằng cách loại bỏ các chữ số phụ này (chỉ chèn một chữ số vào mỗi giá trị này, thay vì ba chữ số) và bằng cách xoay 909về phía trước, loại bỏ một 9(điều này khác với các phiên bản trước, 9100thay vào đó ).

Không được kiểm soát và nhận xét:

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

Logic để chọn các ký tự được nối sau ba trường hợp:

  1. 111n , n
    giá trị từ việc kiểm tra đầu tiên là 1 , và từ thứ hai -1 .
    Các lát cắt sẽ bắt đầu bắt đầu từ chỉ số 0 ; nó sẽ trả về toàn bộ chuỗi.
  2. 111n , n
    giá trị từ việc kiểm tra đầu tiên là 1 , và từ một cái gì đó thứ hai ≥ 2 .
    Các lát cắt sẽ bắt đầu nhìn chằm chằm từ chỉ số ≥ 3 ; nó sẽ trả về một chuỗi rỗng.
  3. 111 | n , n
    giá trị từ việc kiểm tra đầu tiên là 0 , và từ thứ hai -1 .
    Các lát cắt sẽ bắt đầu bắt đầu từ chỉ số -1 ; nó sẽ chỉ trả lại ký tự cuối cùng

Tổng logic là bất kỳ giá trị nào chưa xuất hiện sẽ được thêm vào toàn bộ - trừ khi nó là bội số của 111 , trong trường hợp đó chỉ có một ký tự sẽ được thêm vào. Tất cả các giá trị khác sẽ bị bỏ qua.

Lưu ý rằng chuỗi được tạo ra khác với chuỗi tối ưu được tạo bởi câu trả lời của Peter Taylor .

Lịch sử:

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

Đầu ra:

909910010110210310410510610710810911121131141151161171181191201221231241251261271281291301321331341351361371381391401421431441451461471481491501521531541551561571581591601621631641651661671681691701721731741751761771781791801821831841851861871881891901921931941951961971981992002022032042052062072082092223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333433533633733833934034434534634734834935035435535635735835936036436536636736836937037437537637737837938038438538638738838939039439539639739839940040440540640740840944454464474484494504554564574584594604654664674684694704754764774784794804854864874884894904954964974984995005055065075085095556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666766866967067767867968068768868969069769869970070770870977787797807887897907987998008088098889890899900

45

GolfScript ( 35 31 26 ký tự)

10,{:x),{:&x=x+,{x&@}/}/}/

Đầu ra là

000100110111200201210211220221222300301302310311312320321322330331332333400401402403410411412413420421422423430431432433440441442443444500501502503504510511512513514520521522523524530531532533534540541542543544550551552553554555600601602603604605610611612613614615620621622623624625630631632633634635640641642643644645650651652653654655660661662663664665666700701702703704705706710711712713714715716720721722723724725726730731732733734735736740741742743744745746750751752753754755756760761762763764765766770771772773774775776777800801802803804805806807810811812813814815816817820821822823824825826827830831832833834835836837840841842843844845846847850851852853854855856857860861862863864865866867870871872873874875876877880881882883884885886887888900901902903904905906907908910911912913914915916917918920921922923924925926927928930931932933934935936937938940941942943944945946947948950951952953954955956957958960961962963964965966967968970971972973974975976977978980981982983984985986987988990991992993994995996997998999

(1020 ký tự) Đây là một biến thể của cách tiếp cận ghép từ Lyndon: thay vì sử dụng các từ 1-char nguyên thủy, nó sử dụng bội số 111 cho mã ngắn hơn nhưng lặp lại các số đó; và thay vì sử dụng các phần tử tối thiểu của các nhóm liên hợp, nó sử dụng các phần tử tối đa, bởi vì điều đó rút ngắn các vòng lặp.


10,:^{:x^>{x.@:&<+^>{.x>{x&@}*}/}/}%3>0.

ở 40 ký tự (có thể vẫn có thể được cải thiện) tạo ra một chuỗi tối ưu, có độ dài 999 ký tự:

100200300400500600700800901101201301401501601701801902102202302402502602702802903103203303403503603703803904104204304404504604704804905105205305405505605705805906106206306406506606706806907107207307407507607707807908108208308408508608708808909109209309409509609709809911121131141151161171181191221231241251261271281291321331341351361371381391421431441451461471481491521531541551561571581591621631641651661671681691721731741751761771781791821831841851861871881891921931941951961971981992223224225226227228229233234235236237238239243244245246247248249253254255256257258259263264265266267268269273274275276277278279283284285286287288289293294295296297298299333433533633733833934434534634734834935435535635735835936436536636736836937437537637737837938438538638738838939439539639739839944454464474484494554564574584594654664674684694754764774784794854864874884894954964974984995556557558559566567568569576577578579586587588589596597598599666766866967767867968768868969769869977787797887897987998889899900

Cố gắng làm điều này làm các chuỗi đảo ngược gặp vấn đề với việc bỏ qua bội số của 111.

Để thấy 999 là độ dài tối ưu (vì các nhận xét ngắn gọn của tôi ở trên không thuyết phục được tất cả mọi người), hãy bắt đầu từ chuỗi de Bruijn đầy đủ (được lấy dưới dạng chuỗi tuần hoàn) chứa mỗi chuỗi ký tự gồm 3 chữ số từ 0 đến 9. Có 1000 trong số chúng, nó phải dài ít nhất 1000 ký tự; nó có thể là một cách chính xác 1000 ký tự dài thường được chứng minh bằng một bước đi Euler trên một đồ thị có các nút là chuỗi hai chữ số xyvới 10 cạnh, mỗi dán nhãn với một chữ số z, trong đó có xyđến yz.

Chúng ta không cần trình tự bắt đầu 0, vì vậy với trình tự de Bruijn, chúng ta có thể xoay để đặt 000ở cuối. Sau đó, chúng ta không cần một trong hai chuỗi bao quanh đầu, nhưng chúng ta cần hai trong số 0đó để hoàn thành chuỗi bắt đầu bằng chữ số trước đó 000, vì vậy chúng ta có thể xóa một trong số chúng để có chuỗi 999 ký tự. Mỗi số còn lại 0được sử dụng trong một số không bắt đầu bằng 0.


8
Điều đó thực sự ấn tượng !!
Fabinout

Tôi muốn sử dụng một cách tiếp cận lọc hoặc khái quát. Đối với cách tiếp cận giả Lyndon, tôi đã có cách tiếp cận tổng quát xuống còn 32 ký tự: 10,:^{:x^>{x.@:&<+^>{x&@}/}/}/0.Thay đổi cho các từ Lyndon thực sự mang lại 10,:^{:x^>{x.@:&<+^>{.x>{x&@}*}/}/}%3>0.(40 ký tự) cho chuỗi tối ưu.
Peter Taylor

Bạn có thể có được chuỗi tối ưu ngắn hơn bằng cách không sử dụng các số 0 đứng đầu cho các số dưới 100 không?
Random832

1
@ Random832 Tôi khá chắc chắn rằng bạn không thể. Bạn phải bao gồm các số 100, 200, ... 900, do đó, chuỗi tối thiểu chắc chắn sẽ có tám lần xuất hiện 00X (một có thể ở phía bên phải, như trên). Lưu ý rằng chuỗi tối ưu được cung cấp không chứa "001".
tttppp

2
Thông thường tôi không upvote mã tôi không hiểu, nhưng trong trường hợp này tôi nâng cao mã tôi không hiểu. Bravo.
Ben Jackson

29

GolfScript, 17 ký tự

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

Cách tiếp cận đơn giản để thêm từng số nếu chưa có trong chuỗi (lưu ý: 999 không được kiểm tra hoặc thêm, nhưng đã có trong đầu ra).

Đầu ra là 1133 ký tự:

01234567891011131415161718192021222425262728293032333536373839404344464748495054555758596065666869707677798087889099100102103104105106107108109110112114115116117118119120124125126127128129130132133134135136137138139140142143144145146147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188189190193194195196197198199200203204205206207208209219220221223225226227228229230231235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290294295296297298299300304305306307308309311329330332334336337338339340342346347348349350354355356357358359360364365366367368369370374375376377378379380384385386387388389390395396397398399400405406407408409422439440443445447448449450453457458459460465466467468469470475476477478479480485486487488489490496497498499500506507508509533549550554556558559560564568569570576577578579580586587588589590597598599600607608609644659660665667669670675679680687688689690698699700708709755769770776778780786790797799800809866877879880887888897898899900908932943954965976979987989

20

Tôi không có bất kỳ mã nào, nhưng tôi nghĩ ai đó có thể đánh giá cao bằng chứng trực quan này rằng 999 ký tự bị ràng buộc thấp hơn với độ dài của đầu ra:

Đầu tiên, mỗi số có 1 và 2 chữ số là một phần của số có 3 chữ số, vì vậy hãy bỏ qua mọi thứ nhỏ hơn 100. Bao gồm 100-999 là 900 số có 3 chữ số.

Cách tối ưu nhất để giải quyết vấn đề là nếu mọi nhân vật được sử dụng càng nhiều càng tốt. Điều đó có nghĩa là các số trùng nhau càng nhiều càng tốt, như thế này:

123
 234
  345

Do đó, số đầu tiên sẽ thêm 3 ký tự và mỗi số tiếp theo sẽ thêm 1 ký tự. Điều đó cho 3 + 899 = 902 ký tự là giới hạn dưới.

Tuy nhiên, khi có số 0, chúng ta không thể sử dụng nó để bắt đầu một số có 3 chữ số mới. Tuy nhiên, chúng ta có thể sử dụng lại nó ở giữa một số có 3 chữ số khác, miễn là nó không được theo sau bởi một số 0 khác:

120
 203  <- Ok.
  034 <- not a number 100-999.

Nhưng:

100
 002  <- not a number 100-999.
  023 <- not a number 100-999.

Do đó, mỗi số 0 xuất hiện trong đầu ra sẽ mở rộng đầu ra thêm 1 ký tự - ngoại trừ hai ký tự cuối cùng có thể bằng 0 vì chúng không trùng với bất kỳ số nào nữa:

???
 ??0
  ?00

Có 81 số có đúng một số 0 ở giữa (? 0?), 81 có đúng một số 0 ở cuối (?? 0) và 9 có hai số không (? 00).

Mỗi số 0 có thể chia sẻ một số 0 với a? 0? số hoặc một số? 00, nhưng không phải cả hai. ? 0? và? 00 không bao giờ có thể chia sẻ các số 0, do đó, phải có ít nhất các số không 81 + 9 * 2 trong đầu ra.

Điều này cho giới hạn dưới là 3 + 899 + 81 + 9 * 2 - 2 = 999 ký tự.

Xin lỗi nếu điều này được coi là lạc đề, nhưng nó quá dài để phù hợp với một bình luận.


1
Cảm ơn cho những người đứng đầu lên! Thật là buồn cười khi chuỗi chứa mọi số nguyên thấp hơn 999 dài 999 ký tự.
Fabinout


1
Thật là buồn cười khi nhận thấy rằng việc lưu trữ mọi số lên tới 999 trong một chuỗi làm cho nó dài 999 ký tự. Sửa lỗi cho tôi nếu tôi sai nhưng tôi tin rằng việc lưu trữ mọi số lên tới 99 sẽ khiến nó dài 100 ký tự.
Fabinout

2
Với cùng một lý lẽ, giới hạn dưới là 2 + 89 + 9 - 1 = 99 nhưng điều này không chứng minh 99 là có thể, chỉ có điều 98 là không.
Alistair Buxton

17

Perl, 37 34 33 32 (1136 1132 ký tự)

for$@(1..999){$_.=$@x!/$@/}print

cho $ @ (1..999) {$ _. = $ @ nếu! / $ @ /} in

cho $ i (1..999) {$ _. = $ i nếu! / $ i /} in

cho (1..1e3) {$ s. = $ _ nếu $ s! ~ / $ _ /} in $ s

Đầu ra:

12345678910111314151617181920212224252627282930323335363738394043444647484950545557585960656668697076777980878890991001021031041051061071081091101121141151161171181191201241251261271281291301321331341351361371381391401421431441451461471481491501521531541551561571581591601621631641651661671681691701721731741751761771781791801821831841851861871881891901931941951961971981992002032042052062072082092192202212232252262272282292302312352362372382392402432442452462472482492502532542552562572582592602632642652662672682692702732742752762772782792802832842852862872882892902942952962972982993003043053063073083093113293303323343363373383393403423463473483493503543553563573583593603643653663673683693703743753763773783793803843853863873883893903953963973983994004054064074084094224394404434454474484494504534574584594604654664674684694704754764774784794804854864874884894904964974984995005065075085095335495505545565585595605645685695705765775785795805865875885895905975985996006076086096446596606656676696706756796806876886896906986997007087097557697707767787807867907977998008098668778798808878888978988999009089329439549659769799879891000

Chuỗi ngắn hơn: 38 37 34 (1020 ký tự):

$_.=$@x!/$@/while$@=--$@%1e3;print

cho ($ @ = 1e3; $ @ -;) {$ _. = $ @ nếu! / $ @ /} in

cho ($ i = 1e3; $ i -;) {$ _. = $ i nếu! / $ i /} in

Đầu ra:

999998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888887886885884883882881880877876875874873872871870867866865864863862861860857856855854853852851850847846845844843842841840837836835834833832831830827826825824823822821820817816815814813812811810807806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555554553552551550544543542541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411410403402401400333332331330322321320312311310302301300222221220211210201200111110101100

Vẫn không hài lòng với sự trùng lặp, đặc biệt là 99999 lúc đầu! Tôi nghĩ rằng nhiều kiểm tra sẽ tạo ra nhiều mã hơn mặc dù ...

Chỉnh sửa: Đã thêm đề xuất từ ​​@Peter Taylor

Chỉnh sửa 2: Một số gợi ý tuyệt vời từ @primo! Cảm ơn bạn


2
Thủ thuật hay để viết 1000 là 1e3, nhưng tôi nghĩ nó thật vô nghĩa. Câu hỏi cho biết, khắt khe dưới 1000, có nghĩa là lên đến và bao gồm 999. (Mã mẫu cũng xử lý 0..999.)
manatwork

Một điểm tuyệt vời! Tôi đã có một vòng lặp khác để bắt đầu, tôi đã sửa đổi điều này cho phù hợp! Cảm ơn!
Dom Hastings

3
Nếu bạn sử dụng một ký tự không phải là chữ cái cho biến của mình, bạn có thể xóa khoảng trắng không?
Peter Taylor

À đúng rồi, tôi có thể! Cảm ơn!
Dom Hastings

2
Một vài cải tiến nhỏ khác: thay vì $_.=$@if!/$@/, bạn có thể sử dụng sự lặp lại chuỗi $_.=$@x!/$@/. Có forthể thay thế bằng một công cụ whilesửa đổi câu lệnh, sử dụng một modulo:...while$@=--$@%1e3
primo

10

APL (20, đầu ra: 1020)

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

Giải trình:

  • {∨/⍺⍷⍵:⍵⋄⍵,⍺}: if là chuỗi con của , return , other return⍵,⍺
  • /: giảm hơn
  • ⍕¨: đại diện chuỗi của mỗi
  • ⍳999: các số nguyên từ 1đến 999.

Đầu ra:

9999989979969959949939929919909889879869859849839829819809789779769759749739729719709689679669659649639629619609589579569
      55954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913
      91291191090890790690590490390290190088888788688588488388288188087787687587487387287187086786686586486386286186085785
      68558548538528518508478468458448438428418408378368358348338328318308278268258248238228218208178168158148138128118108
      07806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735
      73473373273173072672572472372272172071671571471371271171070670570470370270170066666566466366266166065565465365265165
      06456446436426416406356346336326316306256246236226216206156146136126116106056046036026016005555545535525515505445435
      42541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411
      410403402401400333332331330322321320312311310302301300222221220211210201200111110101100

APL (41, đầu ra: 999)

'0',⍨⊃{⍵,⍺⍴⍨(1=⍴∪⍺)∨3×~∨/⍺⍷⍵}/⌽⍕¨100+⍳898

Giải trình:

  • ⌽⍕¨100+⍳898: ('999' '998' ... '101')(theo thứ tự ngược lại, vì giảm từ phải sang trái trong APL, nghĩa là F/a b c ≡ a F (b F c))
  • /: giảm
  • ⍵,⍺⍴⍨: đối số bên phải, theo sau là các Nký tự đầu tiên của đối số bên trái, trong đó Nlà:
  • 3×~∨/⍺⍷⍵: 3nếu không phải là một chuỗi con của , nếu không0
  • (1=⍴∪⍺): 1nếu chỉ có một characcter duy nhất, nếu không0
  • : ước số chung lớn nhất của hai giá trị trước, vì vậy: 1nếu chưa có và chỉ có một ký tự duy nhất, 3nếu chưa có nhưng có nhiều hơn một ký tự duy nhất 0.
  • '0',⍨: thêm số 0 vào cuối kết quả

Đầu ra:

10110210310410510610710810911121131141151161171181191201221231241251261271281291301321331341351361371381391401421431441451
      46147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188
      18919019219319419519619719819920020220320420520620720820922232242252262272282292302332342352362372382392402432442452
      46247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294
      29529629729829930030330430530630730830933343353363373383393403443453463473483493503543553563573583593603643653663673
      68369370374375376377378379380384385386387388389390394395396397398399400404405406407408409444544644744844945045545645
      74584594604654664674684694704754764774784794804854864874884894904954964974984995005055065075085095556557558559560566
      56756856957057657757857958058658758858959059659759859960060660760860966676686696706776786796806876886896906976986997
      00707708709777877978078878979079879980080880988898908999009099100

8

Ruby: 50 46 ký tự (đầu ra 1020 ký tự)

s=""
999.downto(0){|i|s[n=i.to_s]||s+=n}
$><<s

Chạy mẫu:

bash-4.1$ ruby -e 's="";999.downto(0){|i|s[n=i.to_s]||s+=n};$><<s'
999998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888887886885884883882881880877876875874873872871870867866865864863862861860857856855854853852851850847846845844843842841840837836835834833832831830827826825824823822821820817816815814813812811810807806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555554553552551550544543542541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411410403402401400333332331330322321320312311310302301300222221220211210201200111110101100

Chạy thử nghiệm:

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

Ruby: 102 97 ký tự (đầu ra 999 ký tự)

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

Chạy mẫu:

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

Chạy thử nghiệm:

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

Ý tưởng hay để đi từ 999 đến 0 và không phải là cách ngược lại. Với điều này, phương thức Java của tôi xuất ra chuỗi 1048 ký tự (thay vì 1200).
Fabinout

1
Nếu bạn chỉ lo lắng về độ dài mã và không phải độ dài đầu ra, bạn có thể cải thiện mã đầu tiên bằng cách sử dụng phạm vi chuỗi. Một cái gì đó như (?0..?9*3).map{|i|$/[i]||($><<i;$/+=i)}có thể?
Paul Prestidge

5

JavaScript, 39

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

Đầu ra 1020 ký tự:

999998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888887886885884883882881880877876875874873872871870867866865864863862861860857856855854853852851850847846845844843842841840837836835834833832831830827826825824823822821820817816815814813812811810807806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555554553552551550544543542541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411410403402401400333332331330322321320312311310302301300222221220211210201200111110101100


Xác minh: for(i=0;i<1000;i++)console.assert(k.indexOf(i)>=0)


5

Toán học ( 62 64 ký tự, đầu ra 1002)

Bởi vì điều này sử dụng một chức năng bản địa, tôi đánh giá cao tất cả vẻ đẹp của các giải pháp ngắn hơn từ đầu. Đầu ra dài 1002 ký tự.

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

"799798787770760750740730720710980970960950940930920910108908708608508408308208889998988081009909008007006005004003002000190180170160150140130120119118117116115114113112912812712612512412312213913813713613513413313214914814714614514414314215915815715615515415315216916816716616516416316217917817717617517417317218918818718618518418318219919819719619519419319212111029028027026025024023022922822722622522422392382372362352342332492482472462452442432592582572562552542532692682672662652642632792782772762752742732892882872862852842832992982972962952942932322202103903803703603503403393383373363353349348347346345344359358357356355354369368367366365364379378377376375374389388387386385384399398397396395394343330320310490480470460450449448447446445945845745645546946846746646547947847747647548948848748648549949849749649545444043042041059058057056055955855755695685675665795785775765895885875865995985975965655505405305205106906806706696686679678677689688687699698697676660650640630620610790780779778978879"

1
bạn dường như bị thiếu 799 và 997. xem ideone.com/d07bG2 (hoặc viết séc của riêng bạn)
Justin

Nắm bắt tốt. Theo mặc định, DeBruijnSequencegiả sử gói tuần hoàn. Chuẩn bị "79", hai chữ số cuối cùng, giải quyết vấn đề.
DavidC

4

Toán học, 51 ký tự

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

Đầu ra (1155 ký tự):

000100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999

Nó làm gì?
Fabinout

1
Nó xây dựng một danh sách liệt kê các hình thức {i, j, k}ilà 0-9 và j, kcó kích thước nhỏ hơn i. Sau đó, nó chuyển đổi danh sách thành một chuỗi.
alephalpha

4

Con trăn - 53 63, 1134 đầu ra

Điều này là khá tàn bạo, nhưng nó là hợp lệ. Vâng, nó có số 0 đứng đầu, nhưng nó cứu hai nhân vật bằng cách không có range(1,1000).

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

Những điều trên ném DeprecationWarningqua việc sử dụng 1e3 trong range()cuộc gọi, nhưng nó tiết kiệm được một ký tự khi sử dụng 1000.

Cũng có một phiên bản đầu ra có độ dài tối ưu hơn một chút, bằng cách đảo ngược chuỗi với chi phí là 65 nhân vật (nhờ res và filmor cho các mẹo) :

Python - đầu ra 58, 1021

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

1
Tôi thấy rằng chương trình đầu tiên của bạn có độ dài đầu ra 1133, không phải 1132. Trong Python 2 (nhưng không phải Python 3), bạn có thể rút ngắn mã xuống còn 54 ký tự bằng cách sử dụng backticks:for i in range(999):s+=`i`*(not`i`in s)
res

Có phải không? Họ lấy ra backticks? Guido chắc hẳn đã có I Hate Perl và mọi thứ trông giống như ngày nào khi quyết định giữ cái gì.
Warren P

1
Bạn có thể rút ngắn điều đó bằng một ký tự bằng cách sử dụng range(999,99,-1)thay vì range(1000)[::-1].
phim

Và mẹo của res vẫn giúp ích, str(i)*(str(i)not in s)ngắn hơn một chút so với i=str(i);s+=[i,''][i in s];)
phim

@filmor Tạo nhỏ hơn và nhỏ hơn một lần nữa bằng cách sử dụng 1e3thay vì1000

2

K, 33

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

Về cơ bản giống như giải pháp Howards - 1133 ký tự.

01234567891011131415161718192021222425262728293032333536373839404344464748495054555758596065666869707677798087889099100102103104105106107108109110112114115116117118119120124125126127128129130132133134135136137138139140142143144145146147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188189190193194195196197198199200203204205206207208209219220221223225226227228229230231235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290294295296297298299300304305306307308309311329330332334336337338339340342346347348349350354355356357358359360364365366367368369370374375376377378379380384385386387388389390395396397398399400405406407408409422439440443445447448449450453457458459460465466467468469470475476477478479480485486487488489490496497498499500506507508509533549550554556558559560564568569570576577578579580586587588589590597598599600607608609644659660665667669670675679680687688689690698699700708709755769770776778780786790797799800809866877879880887888897898899900908932943954965976979987989

2

Java- 126 98 ký tự (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);}}

Đầu ra (1020 ký tự):

999998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888887886885884883882881880877876875874873872871870867866865864863862861860857856855854853852851850847846845844843842841840837836835834833832831830827826825824823822821820817816815814813812811810807806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555554553552551550544543542541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411410403402401400333332331330322321320312311310302301300222221220211210201200111110101100

Có thể đạt đến mức tốt (theo Peter Taylor , nhưng sau đó ông nói 999 là tối ưu) Độ dài chuỗi bằng cách thêm một vài ký tự (+20 ký tự cho 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);}}

Đầu ra (1002 ký tự):

999899799699599499399299199098898798698598498398298198097897797697597497397297197096896796696596496396296196095895795695595495395295195094894794694594494394294194093893793693593493393293193092892792692592492392292192091891791691591491391291191090890790690590490390290190088878868858848838828818808778768758748738728718708678668658648638628618608578568558548538528518508478468458448438428418408378368358348338328318308278268258248238228218208178168158148138128118108078068058048038028018007776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666566466366266166065565465365265165064564464364264164063563463363263163062562462362262162061561461361261161060560460360260160055545535525515505445435425415405345335325315305245235225215205145135125115105045035025015004443442441440433432431430423422421420413412411410403402401400333233133032232132031231131030230130022212202112102012001110101100

Chỉnh sửa : Cảm ơn Fabinout đã chỉ ra rằng Java 6 có thể lưu 28 ký tự.


Nếu bạn muốn, bạn có thể biên dịch với java 6 và sử dụng khối tĩnh thay vì System.out.println () !!
Fabinout

@Fabinout Ý bạn là thay vì a public static void main(String[]a)? (điều đó sẽ thay đổi mã của tôi từ ...public static void main(String[]c){...thành ...static{...)
Justin

Vâng tôi đồng ý. bạn có thể thử với Java 6.
Fabinout

Btw, bạn nên sử dụng exit () ở cuối khối tĩnh nếu bạn không muốn chương trình của mình bị sập. Mặc dù không cần thiết phải chơi gôn để không gặp sự cố.
Fabinout

2

Windows PowerShell - Đầu ra 40, 1020

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

Đầu ra:

999998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888887886885884883882881880877876875874873872871870867866865864863862861860857856855854853852851850847846845844843842841840837836835834833832831830827826825824823822821820817816815814813812811810807806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555554553552551550544543542541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411410403402401400333332331330322321320312311310302301300222221220211210201200111110101100

2

Haskell, 75 byte - đầu ra 1002

Một cách tiếp cận sàng trả về một giải pháp tối thiểu.

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

Lưu ý rằng giải pháp này là chính thức chậm.


Bạn cần phải bao gồm việc nhập khẩu Data.Listcho isInfixOf, tuy nhiên bạn vẫn tiết kiệm 2 byte bởi có thể chơi golf nó một số chi tiết: 1) hardcode n = 10002) Sử dụng allqua andvà một phiên bản pointfree của vị 3) sử dụng (!!0)trên head4) Sử dụng danh sách-hiểu qua sự kết hợp của map& filter5) sử dụng (<$>)hơn map:[s|s<-show<$>[1..],all((`isInfixOf`s).show)[1..1000]]!!0
ბიმო

2

Powershell, 36 byte, đầu ra 1020

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

Đầu ra:

999998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888887886885884883882881880877876875874873872871870867866865864863862861860857856855854853852851850847846845844843842841840837836835834833832831830827826825824823822821820817816815814813812811810807806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555554553552551550544543542541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411410403402401400333332331330322321320312311310302301300222221220211210201200111110101100

Thay thế, 69 byte, 1000 đầu ra

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

Đầu ra:

9998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888788688588488388288188087787687587487387287187086786686586486386286186085785685585485385285185084784684584484384284184083783683583483383283183082782682582482382282182081781681581481381281181080780680580480380280180077767757747737727717707667657647637627617607567557547537527517507467457447437427417407367357347337327317307267257247237227217207167157147137127117107067057047037027017006665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555455355255155054454354254154053453353253153052452352252152051451351251151050450350250150044434424414404334324314304234224214204134124114104034024014003332331330322321320312311310302301300222122021121020120011101100

Thay thế, 82 73 byte, đầu ra 999 (tối thiểu)

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

Đây là thuật toán đơn giản hóa từ Tạo De Bruijn ngắn nhất được điều chỉnh cho các hằng số: alph = 9876543210và length =3

Đầu ra:

999899799699599499399299199098898798698598498398298198097897797697597497397297197096896796696596496396296196095895795695595495395295195094894794694594494394294194093893793693593493393293193092892792692592492392292192091891791691591491391291191090890790690590490390290190088878868858848838828818808778768758748738728718708678668658648638628618608578568558548538528518508478468458448438428418408378368358348338328318308278268258248238228218208178168158148138128118108078068058048038028018007776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666566466366266166065565465365265165064564464364264164063563463363263163062562462362262162061561461361261161060560460360260160055545535525515505445435425415405345335325315305245235225215205145135125115105045035025015004443442441440433432431430423422421420413412411410403402401400333233133032232132031231131030230130022212202112102012001110100

Kịch bản thử nghiệm:

$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 byte1109 ký tự

₄FDNå_iNì

Đầu ra:

90990190089989088981980980880079979879078978878077977870970870770069969869769068968868768067967867767066966866760960860760660059959859759659058958858758658057957857757657056956856756656055955855755650950850750650550049949849749649549048948848748648548047947847747647547046946846746646546045945845745645545044944844744644540940840740640540440039939839739639539439038938838738638538438037937837737637537437036936836736636536436035935835735635535435034934834734634534434033933833733633533430930830730630530430330029929829729629529429329028928828728628528428328027927827727627527427327026926826726626526426326025925825725625525425325024924824724624524424324023923823723623523423323022922822722622522422320920820720620520420320220019919719619519419319219118918818718618518418318218017917817717617517417317217016916816716616516416316216015915815715615515415315215014914814714614514414314214013913813713613513413313213012912812712612512412312212011811711611511411311211110910810710610510410310210110099919089888079787770696867666059585756555049484746454440393837363534333029282726252423222018171615141312119876543210

Hãy thử trực tuyến hoặc xác minh nó chứa tất cả các số dưới 1000 .

Giải trình:

            # 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

PHP, 48 44 byte

Cảm ơn @primo đã nhắc nhở tôi ereg.

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

hoặc là

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

đầu ra: 1020 ký tự. yêu cầu PHP <7

PHP 7, 48 byte:

ereg đã bị xóa trong PHP 7

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

Nếu đối số thứ hai đối với strstr(hoặc strposvà các hàm tìm kiếm chuỗi khác) không phải là một chuỗi, nó sẽ được sử dụng làm mã ascii, do đó $icần truyền vào chuỗi.


1
ereg($i,$s)cho 4 (tôi cũng sẽ bao gồm <?trong số byte).
primo

@primo Tôi chỉ nhận thấy rằng thử thách này cũ hơn PHP 7. cảm ơn gấp đôi. :)
Tít

eregđã bị xóa, có lẽ vì tên hàm quá ngắn và / hoặc không chứa đủ dấu gạch dưới. Điều đó splitcũng đã được loại bỏ là đặc biệt xuất sắc.
Primo

eregđã bị xóa vì POSIX chỉ chứa một tập hợp con các khả năng của PCRE; và có lẽ họ đã không muốn duy trì hai thư viện khác nhau. Tôi sẽ hỏi tôi có nên gặp lại Rasmus Lerdorf không. splitđã bị xóa, nhưng joinvẫn còn (có lẽ vì nó "chỉ" một bí danh). Xin lỗi vì nghề giáo; nhưng tôi biết những người không thể nhận ra sự mỉa mai.
Tít

1

Groovy, 49 ký tự / byte

Tôi không chắc có nên làm điều này như là một hàm trả về một biến chuỗi hay in ra kết quả, vì vậy điều này chỉ in nó ra thiết bị xuất chuẩn. Sử dụng trình so khớp regex đã lưu 2 byte, sử dụng toán tử ternary thay vì "if" đã lưu một byte khác. Chuỗi đầu ra là 1133 ký tự.

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

Đầu ra:

01234567891011131415161718192021222425262728293032333536373839404344464748495054555758596065666869707677798087889099100102103104105106107108109110112114115116117118119120124125126127128129130132133134135136137138139140142143144145146147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188189190193194195196197198199200203204205206207208209219220221223225226227228229230231235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290294295296297298299300304305306307308309311329330332334336337338339340342346347348349350354355356357358359360364365366367368369370374375376377378379380384385386387388389390395396397398399400405406407408409422439440443445447448449450453457458459460465466467468469470475476477478479480485486487488489490496497498499500506507508509533549550554556558559560564568569570576577578579580586587588589590597598599600607608609644659660665667669670675679680687688689690698699700708709755769770776778780786790797799800809866877879880887888897898899900908932943954965976979987989

-1

Ngôn ngữ nhà sản xuất trò chơi, 1014 - Chuỗi 1000

show_message(909910010110210310410510610710810911121131141151161171181191201221231241251261271281291301321331341351361371381391401421431441451461471481491501521531541551561571581591601621631641651661671681691701721731741751761771781791801821831841851861871881891901921931941951961971981992002022032042052062072082092223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333433533633733833934034434534634734834935035435535635735835936036436536636736836937037437537637737837938038438538638738838939039439539639739839940040440540640740840944454464474484494504554564574584594604654664674684694704754764774784794804854864874884894904954964974984995005055065075085095556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666766866967067767867968068768868969069769869970070770870977787797807887897907987998008088098889890899900)

Cũng thế:

Ruby, 1003 - Chuỗi 1000

p'909910010110210310410510610710810911121131141151161171181191201221231241251261271281291301321331341351361371381391401421431441451461471481491501521531541551561571581591601621631641651661671681691701721731741751761771781791801821831841851861871881891901921931941951961971981992002022032042052062072082092223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333433533633733833934034434534634734834935035435535635735835936036436536636736836937037437537637737837938038438538638738838939039439539639739839940040440540640740840944454464474484494504554564574584594604654664674684694704754764774784794804854864874884894904954964974984995005055065075085095556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666766866967067767867968068768868969069769869970070770870977787797807887897907987998008088098889890899900'


3
1) Giải pháp đầu tiên của bạn vi phạm quy tắc, độ dài của chuỗi phải dưới quy tắc 1500 ký tự. 2) Tôi không thể tìm thấy số 909 trong đầu ra của bạn. (Bạn đã bỏ lỡ chữ số đầu tiên khi dán sao chép từ câu trả lời của primo ?) 3) rubyMã có thể sử dụng pthay vì putschuyển tham số số đó.
manatwork
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.