แหวนเดียวที่จะปกครองพวกเขาทั้งหมด หนึ่งสตริงที่จะรวมพวกเขาทั้งหมด


43

วัตถุประสงค์: ส่งออกสตริงซึ่งมีจำนวนเต็มบวกทุกค่าต่ำกว่า 1,000 อย่างเคร่งครัด

คำตอบที่ชัดเจนคือการเชื่อมต่อทุก ๆ คำและสร้างสตริงของ 2890 ตัวอักษร (ขอบคุณ manatwork) เพื่อหลีกเลี่ยงคำตอบง่ายๆเช่นนี้ความยาวของสตริงต้องน้อยกว่า 1500 ตัวอักษร นี่คือโค้ด Java ที่ตรงไปตรงมาซึ่งแสดงผลเป็น 1,200 chars String

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 อักขระ
Peter Taylor

8
โดยทั่วไปคุณกำลังขอลำดับ de Bruijn B(10, 3)แต่เนื่องจากคุณไม่อนุญาตให้มีการห่อแบบวนรอบจึงจำเป็นต้องทำซ้ำอักขระสองตัวแรก
ปีเตอร์เทย์เลอร์

3
แต่ฉันต้องการให้สตริงมี 1, 2 หรือ 56 ไม่จำเป็นต้องเป็น 001 002 และ 056
Fabinout

6
ปัญหาของคุณเป็นไปไม่ได้ที่จะแก้เพราะคุณกล่าวว่าจำนวนไม่จำนวนเต็ม สตริงจะต้องมีความยาวไม่ จำกัด เพื่อรองรับจำนวนบวกทั้งหมดต่ำกว่า 1,000
Ramchandra Apte

11
@RamchandraApte และยังคงสตริงใด ๆ แม้จะมีความยาวไม่มีที่สิ้นสุดจะหายไปจำนวนมากที่สุด ;-)
ฮาวเวิร์ด

คำตอบ:


19

Golfscript - 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จะไม่ถูกข้ามไปหรือค่าต่อไปจะ 322ซึ่งเมื่อตัดแบ่ง ( 321 322 ) มี132 หาก b = c (เช่น 122 ) กรณีนี้จะใช้เช่นกัน ค่า bcaจะไม่ถูกข้ามเหมือนก่อนหน้านี้และเนื่องจาก aจำเป็นต้องน้อยกว่า b , bc <a + 1>จะไม่ถูกข้ามเช่นกัน ในตัวอย่างนี้ 221 222มี122

เนื่องจากรหัสด้านบนทดสอบตัวเลขที่สามแทนที่จะเป็นค่าสุดท้ายอย่างเคร่งครัดค่าทั้งหมดจาก0-99จึงรวมอยู่ในผลลัพธ์ ค่าจาก1-99อาจถูกข้ามไปได้เพราะถ้าหากทุกลำดับ 3 หลักปรากฏขึ้นจะต้องมีลำดับ 1 หลักและ 2 หลักทุกตัว

ค่าจาก991-999อาจถูกข้ามไปเนื่องจากสร้างโดย ( 909 910 , 919 920 , ... 989 990 )

ที่เอาต์พุต 1,315 ไบต์นี่คือความสะดวกสบายภายใต้ข้อกำหนดของปัญหาที่น้อยกว่า 1500

เอาท์พุท:

0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990

รูปแบบ # 1

14 ไบต์, เอาต์พุต 1233

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

โดยการเลือกตัวเลขสุดท้ายสำหรับการเปรียบเทียบอย่างชัดเจนแทนที่จะเป็นสามค่าที่ไม่จำเป็นจำนวนน้อยกว่า100จะถูกตัดออกทำให้สตริงที่เกิดขึ้นสั้นลง

101120212230313233404142434450515253545560616263646566707172737475767780818283848586878890919293949596979899100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990

รูปแบบที่ 2

16 ไบต์, เอาต์พุต 1127

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

โดยการแอบปิดค่าทั้งหมดน้อยกว่า99ล่วงหน้าสตริงผลลัพธ์อาจสั้นลงได้มากขึ้น

99100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990

Golfscript - 19 ไบต์, เอาต์พุต 1,016 รายการ

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

ด้านบนนับจาก99ถึง909เพิ่มค่าใด ๆ ที่ยังไม่ปรากฏ ( 909จะเป็นค่าสุดท้ายที่เพิ่มด้วยวิธีนี้) การย้าย99ไปที่ด้านหน้าเป็นการเพิ่มประสิทธิภาพเพื่อหลีกเลี่ยงความต้องการ910ที่ด้านหลัง

เอาท์พุท:

99100101102103104105106107108109111112113114115116117118119120122123124125126127128129130132133134135136137138139140142143144145146147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188189190192193194195196197198199200202203204205206207208209222223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333334335336337338339340344345346347348349350354355356357358359360364365366367368369370374375376377378379380384385386387388389390394395396397398399400404405406407408409444445446447448449450455456457458459460465466467468469470475476477478479480485486487488489490495496497498499500505506507508509555556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666667668669670677678679680687688689690697698699700707708709777778779780788789790798799800808809888889890899900909

Golfscript 26 ไบต์, 999 เอาต์พุต

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

หมายเหตุว่า1,016ตัวอักษรที่ผลิตโดยวิธีการแก้ปัญหาก่อนหน้านี้ที่ดีที่สุดเกือบยกเว้นมีตัวเลขสองหลักพิเศษสำหรับหลายของแต่ละ111 (เช่น11111แทน111, 22222แทน222ฯลฯ ) วิธีการแก้ปัญหาสามารถทำให้ดีที่สุดโดยการลบตัวเลขพิเศษเหล่านี้ (เพียงแทรกหนึ่งหลักที่แต่ละค่าเหล่านี้แทนสาม) และโดยการหมุน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. 111 | n , ns
    ค่าจากการตรวจสอบครั้งแรกเป็น 0และจากสอง-1
    ชิ้นจะเริ่มต้นจากดัชนี -1 ; มันจะกลับอักขระสุดท้ายเท่านั้น

ผลรวมของลอจิกคือค่าใด ๆ ที่ยังไม่ปรากฏจะถูกผนวกเข้าด้วยกันทั้งหมดเว้นแต่ว่าจะเป็นผลคูณของ111ซึ่งในกรณีนี้จะมีเพียงหนึ่งอักขระเท่านั้นที่ต่อท้าย ค่าอื่น ๆ ทั้งหมดจะถูกละเว้น

โปรดทราบว่าสายการผลิตที่แตกต่างกันมากกว่าหนึ่งที่ดีที่สุดที่ผลิตโดยคำตอบที่ปีเตอร์เทย์เลอร์

ประวัติความเป็นมา:

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

(1,020 ตัวอักษร) นี่คือตัวแปรในวิธีการเรียงต่อกันของคำ Lyndon: แทนที่จะใช้คำ 1-char ดั้งเดิมมันใช้ทวีคูณของ 111 สำหรับรหัสสั้นลง แต่เกิดขึ้นซ้ำของตัวเลขเหล่านั้น; และแทนที่จะใช้องค์ประกอบที่น้อยที่สุดของกลุ่มคอนจูเกตนั้นจะใช้องค์ประกอบสูงสุดเพราะนั่นจะทำให้ลูปสั้นลง


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

ที่ 40 ตัวอักษร (อาจปรับปรุงได้) สร้างสตริงที่ดีที่สุดซึ่งมีความยาว 999 ตัวอักษร:

100200300400500600700800901101201301401501601701801902102202302402502602702802903103203303403503603703803904104204304404504604704804905105205305405505605705805906106206306406506606706806907107207307407507607707807908108208308408508608708808909109209309409509609709809911121131141151161171181191221231241251261271281291321331341351361371381391421431441451461471481491521531541551561571581591621631641651661671681691721731741751761771781791821831841851861871881891921931941951961971981992223224225226227228229233234235236237238239243244245246247248249253254255256257258259263264265266267268269273274275276277278279283284285286287288289293294295296297298299333433533633733833934434534634734834935435535635735835936436536636736836937437537637737837938438538638738838939439539639739839944454464474484494554564574584594654664674684694754764774784794854864874884894954964974984995556557558559566567568569576577578579586587588589596597598599666766866967767867968768868969769869977787797887897987998889899900

พยายามที่จะทำให้สิ่งนี้ทำสตริงย้อนกลับทำงานเป็นปัญหากับการละเว้นทวีคูณของ 111

หากต้องการดูว่า 999 เป็นความยาวที่เหมาะสมที่สุด (เนื่องจากความคิดเห็นสั้น ๆ ของฉันด้านบนไม่ได้โน้มน้าวทุกคน) ให้เริ่มจากลำดับเต็ม de Bruijn ซึ่ง (เป็นสตริง cyclic) ซึ่งประกอบด้วยอักขระ 3 ตัวทุกตัวตั้งแต่ 0 ถึง 9 ตั้งแต่ มี 1,000 รายการต้องมีความยาวอย่างน้อย 1,000 อักขระ ที่จะสามารถได้อย่างแม่นยำ 1000 ตัวอักษรยาวมักจะได้รับการพิสูจน์โดยใช้เวลาเดินเพียง Eulerian บนกราฟที่มีโหนดลำดับสองหลักxyที่มี 10 ขอบแต่ละกำกับด้วยหลักzซึ่งใช้เวลาในการxyyz

เราไม่ต้องการลำดับการเริ่มต้น0ดังนั้นเมื่อได้รับลำดับ de Bruijn เราสามารถหมุนเพื่อวาง000ตอนท้าย จากนั้นเราไม่จำเป็นต้องมีลำดับใด ๆ ที่ล้อมรอบไปยังจุดเริ่มต้น แต่เราต้องการสองของ0ลำดับที่จะเสร็จสิ้นเริ่มต้นด้วยตัวเลขก่อน000ดังนั้นเราสามารถลบหนึ่งในนั้นเพื่อรับสตริง 999 ตัวอักษร ทุกคนที่เหลือจะใช้ในจำนวนที่ไม่ได้เริ่มต้นด้วย00


8
มันน่าประทับใจจริงๆ !!
Fabinout

ฉันต้องการใช้วิธีการกรองหรือกำเนิด สำหรับวิธีหลอก - Lyndon ฉันมีวิธีสร้างแบบทั่วไปจนถึง 32 ตัวอักษร: 10,:^{:x^>{x.@:&<+^>{x&@}/}/}/0.การเปลี่ยนแปลงที่สำหรับคำ Lyndon จริงให้10,:^{:x^>{x.@:&<+^>{.x>{x&@}*}/}/}%3>0.(40 ตัวอักษร) สำหรับสตริงที่ดีที่สุด
ปีเตอร์เทย์เลอร์

คุณสามารถทำให้สตริงที่สั้นที่สุดโดยไม่ใช้เลขศูนย์นำหน้าสำหรับตัวเลขที่ต่ำกว่า 100 ได้หรือไม่
Random832

1
@ Random832 ฉันค่อนข้างแน่ใจว่าคุณไม่สามารถ คุณต้องรวมตัวเลข 100, 200, ... 900 ดังนั้นสตริงขั้นต่ำจะต้องมีการเกิดขึ้นแปดครั้งของ 00X (หนึ่งสามารถอยู่ที่ด้านขวาสุดดังที่กล่าวข้างต้น) โปรดทราบว่าสตริงที่ดีที่สุดที่ระบุไม่มี "001"
tttppp

2
ปกติฉันไม่ได้รหัส upvote ฉันไม่เข้าใจ แต่ในกรณีนี้ฉัน upvoting เพราะฉันไม่เข้าใจ ไชโย
เบ็คแจ็คสัน

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 ตัวอักษรเป็นขอบเขตล่าง

อย่างไรก็ตามเมื่อมีศูนย์เราไม่สามารถใช้เพื่อเริ่มหมายเลข 3 หลักใหม่ได้ เราสามารถนำกลับมาใช้ใหม่ได้โดยใช้ตัวเลข 3 หลักอีกตราบเท่าที่ไม่ได้ตามด้วยศูนย์อื่น:

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

แต่:

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

ดังนั้นแต่ละศูนย์ที่ปรากฏในเอาท์พุทจะขยายเอาท์พุทด้วย 1 ตัวอักษร - ยกเว้นอักขระสองตัวสุดท้ายซึ่งอาจเป็นศูนย์เนื่องจากพวกเขาไม่ทับซ้อนหมายเลขเพิ่มเติมใด ๆ :

???
 ??0
  ?00

มีตัวเลข 81 ตัวที่ตรงกลางอย่างใดอย่างหนึ่งศูนย์ (? 0?), 81 กับอย่างเคร่งครัดหนึ่งศูนย์ในตอนท้าย (?? 0) และ 9 กับสองศูนย์ (? 00)

ทุกหมายเลข 0 สามารถแบ่งปันศูนย์กับทั้ง 0? หมายเลขหรือหมายเลข? 00 แต่ไม่ใช่ทั้งสอง ? 0? และ? 00 ไม่สามารถแชร์ศูนย์ได้ดังนั้นจะต้องมีอย่างน้อย 81 + 9 * 2 ศูนย์ในผลลัพธ์

สิ่งนี้จะให้ขอบเขตล่างของ 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

สำหรับ $ @ (1..999) {$ _. = $ @ ถ้า! / $ @ /} พิมพ์

สำหรับ $ i (1..999) {$ _. = $ i ถ้าพิมพ์! / $ i /}

สำหรับ (1..1e3) {$ s. = $ _ ถ้า $ s! ~ / $ _ /} พิมพ์ $ s

ขาออก:

12345678910111314151617181920212224252627282930323335363738394043444647484950545557585960656668697076777980878890991001021031041051061071081091101121141151161171181191201241251261271281291301321331341351361371381391401421431441451461471481491501521531541551561571581591601621631641651661671681691701721731741751761771781791801821831841851861871881891901931941951961971981992002032042052062072082092192202212232252262272282292302312352362372382392402432442452462472482492502532542552562572582592602632642652662672682692702732742752762772782792802832842852862872882892902942952962972982993003043053063073083093113293303323343363373383393403423463473483493503543553563573583593603643653663673683693703743753763773783793803843853863873883893903953963973983994004054064074084094224394404434454474484494504534574584594604654664674684694704754764774784794804854864874884894904964974984995005065075085095335495505545565585595605645685695705765775785795805865875885895905975985996006076086096446596606656676696706756796806876886896906986997007087097557697707767787807867907977998008098668778798808878888978988999009089329439549659769799879891000

สตริงที่สั้นกว่า: 38 37 34 (1,020 ตัวอักษร):

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

สำหรับ ($ @ = 1e3; $ @ -;) {$ _ = $ @ หาก / $ @ /.!} พิมพ์

สำหรับ ($ i = 1e3; $ i -;)) {$ _. = $ i ถ้าพิมพ์! / $ i /}

ขาออก:

999998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888887886885884883882881880877876875874873872871870867866865864863862861860857856855854853852851850847846845844843842841840837836835834833832831830827826825824823822821820817816815814813812811810807806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555554553552551550544543542541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411410403402401400333332331330322321320312311310302301300222221220211210201200111110101100

ยังไม่พอใจกับการทำซ้ำโดยเฉพาะอย่างยิ่ง 99999 ที่จุดเริ่มต้น! ฉันคิดว่าการตรวจสอบอื่น ๆ อีกมากมายจะสร้างรหัสมากขึ้นแม้ว่า ...

แก้ไข: เพิ่มคำแนะนำจาก @Peter Taylor

แก้ไข 2: คำแนะนำดีๆจาก @primo! ขอขอบคุณ


2
เคล็ดลับที่ดีในการเขียน 1,000 เป็น 1e3 แต่ฉันคิดว่ามันไร้ประโยชน์ คำถามกล่าวว่า "ต่ำกว่า 1,000 อย่างเคร่งครัด" ซึ่งอาจมีความหมายถึงและรวมถึง 999 (รหัสตัวอย่างยังดำเนินการ 0..999 ด้วย)
จัดการเอกสาร

เป็นจุดที่ยอดเยี่ยม! ฉันมีวงที่แตกต่างกันเริ่มต้นฉันได้แก้ไขสิ่งนี้ตามนั้น! ขอบคุณ!
Dom Hastings

3
หากคุณใช้อักขระที่ไม่ใช่ตัวอักษรสำหรับตัวแปรของคุณคุณสามารถลบช่องว่างได้หรือไม่?
ปีเตอร์เทย์เลอร์

อ่าใช่ฉันทำได้! ขอบคุณ!
Dom Hastings

2
ไม่กี่ปรับปรุงเพิ่มเติมเล็กน้อย: แทนของคุณสามารถใช้สตริงซ้ำ$_.=$@if!/$@/ สามารถถูกแทนที่ด้วยเป็นตัวปรับแต่งคำสั่งโดยใช้แบบโมดูโล A:$_.=$@x!/$@/forwhile...while$@=--$@%1e3
พรีโม่

10

APL (20, เอาต์พุต: 1020)

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

คำอธิบาย:

  • {∨/⍺⍷⍵:⍵⋄⍵,⍺}: ถ้าเป็นสตริงย่อยของ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=⍴∪⍺): 1ถ้ามีเพียงตัวอักษรตัวเดียวไม่เช่นนั้น0
  • : ตัวหารร่วมมากของสองค่าก่อนหน้านี้ดังนั้น: 1ถ้าไม่อยู่ในและมีเพียงตัวละครตัวหนึ่งที่ไม่ซ้ำกัน3ถ้าไม่อยู่ในแต่มีมากกว่าหนึ่งตัวละครที่ไม่ซ้ำกัน0เป็นอย่างอื่น
  • '0',⍨: เพิ่มศูนย์ถึงท้ายผลลัพธ์

เอาท์พุท:

10110210310410510610710810911121131141151161171181191201221231241251261271281291301321331341351361371381391401421431441451
      46147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188
      18919019219319419519619719819920020220320420520620720820922232242252262272282292302332342352362372382392402432442452
      46247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294
      29529629729829930030330430530630730830933343353363373383393403443453463473483493503543553563573583593603643653663673
      68369370374375376377378379380384385386387388389390394395396397398399400404405406407408409444544644744844945045545645
      74584594604654664674684694704754764774784794804854864874884894904954964974984995005055065075085095556557558559560566
      56756856957057657757857958058658758858959059659759859960060660760860966676686696706776786796806876886896906976986997
      00707708709777877978078878979079879980080880988898908999009099100

8

Ruby: 50 46 ตัวอักษร (ส่งออก 1,020 ตัวอักษร)

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

Ruby: 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 ของฉันส่งออกสตริง 1048 ตัวอักษร (แทน 1200)
Fabinout

1
หากคุณกังวลเกี่ยวกับความยาวโค้ดและไม่ใช่ความยาวเอาต์พุตคุณสามารถปรับปรุงอันแรกได้โดยใช้ช่วงสตริง บางอย่างเช่น(?0..?9*3).map{|i|$/[i]||($><<i;$/+=i)}อาจจะ?
Paul Prestidge

5

JavaScript, 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

Mathematica, 51 ตัวอักษร

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

เอาท์พุท (1155 ตัวอักษร):

000100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999

มันทำอะไร?
Fabinout

1
มันสร้างรายชื่อของรายการของรูปแบบ{i, j, k}ที่iเป็น 0-9 และj, มีขนาดเล็กกว่าk iจากนั้นมันจะแปลงรายการเป็นสตริง
alephalpha

4

Python - 53 63เอาต์พุต 1134

นี่เป็นสัตว์เดียรัจฉาน แต่มันก็ใช้ได้จริง ใช่มันมีศูนย์นำ range(1,1000)แต่มันจะช่วยประหยัดตัวละครทั้งสองโดยไม่ต้อง

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

ด้านบนโยนDeprecationWarningการใช้เกิน 1e3 ในการrange()โทร แต่จะบันทึกอักขระโดยใช้ 1,000

มีเวอร์ชันเอาต์พุตความยาวที่เหมาะสมที่สุดเล็กน้อยเช่นกันโดยการย้อนกลับสตริงด้วยราคา 65 ตัวอักษร(ขอบคุณ res และ filmor สำหรับคำแนะนำ) :

Python - เอาต์พุต 58, 1,021

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

1
ฉันพบว่าโปรแกรมแรกของคุณมีความยาวเอาต์พุต 1133 ไม่ใช่ 1132 ใน Python 2 (แต่ไม่ใช่ Python 3) คุณสามารถย่อโค้ดให้เหลือ54อักขระโดยใช้ backticks:for i in range(999):s+=`i`*(not`i`in s)
res

Wot? พวกเขานำ backticks ออกมา? กุยโด้ต้องมี I Hate Perl และทุกอย่างที่ดูเหมือนว่าจะเป็นวันเมื่อตัดสินใจว่าจะเก็บ
วอร์เรน P

1
คุณสามารถร่นว่าโดยตัวละครตัวหนึ่งโดยใช้แทนrange(999,99,-1) range(1000)[::-1]
กำกับภาพยนตร์

และเคล็ดลับโดย res ยังช่วย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);}}

เอาท์พุท (1,020 ตัวอักษร):

999998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888887886885884883882881880877876875874873872871870867866865864863862861860857856855854853852851850847846845844843842841840837836835834833832831830827826825824823822821820817816815814813812811810807806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555554553552551550544543542541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411410403402401400333332331330322321320312311310302301300222221220211210201200111110101100

สามารถเข้าถึงได้ดี (ตามปีเตอร์เทย์เลอร์แต่ต่อมาเขาบอกว่า 999 ดีที่สุด) ความยาวสตริงโดยการเพิ่มตัวอักษรสองสามตัว (+20 ตัวอักษรสำหรับ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

แก้ไข : ขอบคุณ Fabinout ที่ชี้ให้เห็นว่า Java 6 สามารถบันทึกได้ 28 ตัวอักษร


หากคุณต้องการคุณสามารถรวบรวมด้วย java 6 และใช้บล็อกแบบคงที่แทน System.out.println () !!
Fabinout

@Fabinout คุณหมายถึงแทนที่จะเป็นpublic static void main(String[]a)? (นั่นจะเปลี่ยนรหัสของฉันจาก...public static void main(String[]c){...เป็น...static{...)
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) Hardcode n = 10002) ใช้allเกินandและรุ่นที่ไม่มีจุดหมายของภาคแสดง 3) ใช้(!!0)มากกว่าhead4) ใช้ list-comprehension เหนือชุดค่าผสมของmap& filter5) ใช้(<$>)มากกว่า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 ที่สั้นที่สุดที่ปรับสำหรับค่าคงที่: ตัวอักษร = 9876543210และความยาว =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

Pyke, 13 ไบต์ (ไม่ใช่การแข่งขัน), ความยาวสตริง 1133

Pyke ใหม่กว่าความท้าทายและทำให้ไม่สามารถแข่งขันได้

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;

ผลลัพธ์: 1,020 ตัวอักษร ต้องการ PHP <7

PHP 7, 48 ไบต์:

ereg ถูกลบใน PHP 7 แล้ว

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

หากอาร์กิวเมนต์ที่สองของstrstr(หรือstrposฟังก์ชันการค้นหาสตริงอื่น ๆ ) ไม่ใช่สตริงมันจะถูกใช้เป็นรหัส ascii ดังนั้นจึง$iต้องใช้ cast to string


1
ereg($i,$s)สำหรับ 4 (ฉันจะรวม<?จำนวนไบต์ด้วย)
โม่

@primo ฉันเพิ่งสังเกตว่าความท้าทายนี้เก่ากว่า PHP 7 ขอบคุณมาก :)
ติตัส

eregถูกลบออกน่าจะเป็นเพราะชื่อฟังก์ชันสั้นเกินไปและ / หรือมีขีดล่างไม่เพียงพอ ที่splitถูกลบออกก็ยอดเยี่ยมโดยเฉพาะอย่างยิ่ง
โม่

eregถูกลบเนื่องจาก POSIX มีเพียงส่วนย่อยของความเป็นไปได้ของ PCRE และพวกเขาอาจไม่ต้องการบำรุงรักษาห้องสมุดที่แตกต่างกันสองแห่ง ฉันจะถามฉันว่าฉันควรจะได้พบกับราสมุส Lerdorf อีกครั้งหรือไม่ splitถูกลบออกแล้ว แต่joinยังคงอยู่ (อาจเป็นเพราะนามแฝง "เท่านั้น" ขอโทษที่อวดรู้ แต่ฉันรู้ว่าคนที่ไม่รู้จักการประชด
ติตัส

1

Groovy, 49 ตัวอักษร / ไบต์

ฉันไม่แน่ใจว่าจะทำเช่นนี้เป็นฟังก์ชันส่งคืนตัวแปรสตริงหรือพิมพ์ผลลัพธ์ดังนั้นนี่จึงพิมพ์ไปที่ stdout การใช้ regex matcher บันทึก 2 ไบต์โดยใช้โอเปอเรเตอร์แทน "ถ้า" บันทึกไบต์อื่น สตริงเอาต์พุตคือ 1133 ตัวอักษร

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

เอาท์พุท:

01234567891011131415161718192021222425262728293032333536373839404344464748495054555758596065666869707677798087889099100102103104105106107108109110112114115116117118119120124125126127128129130132133134135136137138139140142143144145146147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188189190193194195196197198199200203204205206207208209219220221223225226227228229230231235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290294295296297298299300304305306307308309311329330332334336337338339340342346347348349350354355356357358359360364365366367368369370374375376377378379380384385386387388389390395396397398399400405406407408409422439440443445447448449450453457458459460465466467468469470475476477478479480485486487488489490496497498499500506507508509533549550554556558559560564568569570576577578579580586587588589590597598599600607608609644659660665667669670675679680687688689690698699700708709755769770776778780786790797799800809866877879880887888897898899900908932943954965976979987989

-1

Game Maker Language, 1014 - String 1000

show_message(909910010110210310410510610710810911121131141151161171181191201221231241251261271281291301321331341351361371381391401421431441451461471481491501521531541551561571581591601621631641651661671681691701721731741751761771781791801821831841851861871881891901921931941951961971981992002022032042052062072082092223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333433533633733833934034434534634734834935035435535635735835936036436536636736836937037437537637737837938038438538638738838939039439539639739839940040440540640740840944454464474484494504554564574584594604654664674684694704754764774784794804854864874884894904954964974984995005055065075085095556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666766866967067767867968068768868969069769869970070770870977787797807887897907987998008088098889890899900)

นอกจากนี้:

Ruby, 1003 - สตริง 1000

p'909910010110210310410510610710810911121131141151161171181191201221231241251261271281291301321331341351361371381391401421431441451461471481491501521531541551561571581591601621631641651661671681691701721731741751761771781791801821831841851861871881891901921931941951961971981992002022032042052062072082092223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333433533633733833934034434534634734834935035435535635735835936036436536636736836937037437537637737837938038438538638738838939039439539639739839940040440540640740840944454464474484494504554564574584594604654664674684694704754764774784794804854864874884894904954964974984995005055065075085095556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666766866967067767867968068768868969069769869970070770870977787797807887897907987998008088098889890899900'


3
1) วิธีแก้ปัญหาแรกของคุณละเมิดกฎ“ ความยาวของสตริงต้องไม่เกิน 1,500 อักขระ” 2) ฉันไม่พบหมายเลข 909 ในผลลัพธ์ของคุณ (คุณพลาดตัวเลขแรกเมื่อคัดลอกจากคำตอบของ primo ?) 3) rubyรหัสสามารถใช้pแทนการputsส่งผ่านพารามิเตอร์ตัวเลข
จัดการ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.