Hepsine hükmedecek bir Yüzük. Hepsini içeren bir Dize


43

Amaçlar: Kesinlikle 1000'in altında her pozitif tamsayı içeren bir Dize çıktısı.

Açıkça cevap, her birini birleştirmek ve bu tür kolay cevaplardan kaçınmak için 2890 karakterli bir String (teşekkürler manatwork) yaratacaktır, dizginin uzunluğu 1500 karakterin altında olmalıdır. İşte 1200 karakterli bir String çıktısı olan basit bir Java kodu.

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

En kısa kod kazanma, en kısa String için bonus puan!


11
En iyi dize 1002 karakter uzunluğundadır.
Peter Taylor

8
Temelde bir de Bruijn dizisi B(10, 3) istiyorsun, fakat döngüsel sarmaya izin vermediğin için ilk iki karakteri tekrarlaman gerekiyor.
Peter Taylor

3
Ancak dizginin 1, 2 veya 56 içermesini istiyorum, mutlaka 001 002 ve 056'yı içermemesini istiyorum.
Fabinout

6
Sorunu çözmek imkansız çünkü sayının tam sayı olmadığını söyledin .
İpin

11
@RamchandraApte Ve sonsuz uzunlukta bile olsa hala herhangi bir dize çoğu sayıyı kaçırırdı ;-)
Howard

Yanıtlar:


19

Golfscript - 13 bayt, 1315 çıkış

991,{`.$2>>},

Yukarıdakiler , ilk rakamı sayının en büyük hanesi olan 0-990 arasından seçtiği sayıları, yani sıralanan dizgi gösteriminin son basamağı, dizginin kendisinden sözlüksel olarak daha küçüktür. Mantık şudur:

Abc , 3 basamaklı bir sayı için , a , sayının en büyük basamağı değilse, atlanacak numara, çünkü daha sonra iki durumdan biri tarafından ele alınacaktır:

  1. b <c (örneğin 123 )
    Çünkü c büyük rakamdır, sayı kabin Atlanan olmayacaktır. Bu örnekte 312 atlanmayacak ve nebirleştirildiğinde ( 312 313 ) 123'ü içerecek bir sonraki 313 değeri olmayacak.

  2. b ≥ c (örneğin 132 )
    Çünkü b büyük rakamdır, sayı bca Atlanan olmayacaktır. Bu örnekte 321 atlanmayacak ve nebirleştirildiğinde ( 321 322 ) 132 içeren birsonraki 322 değerini almayacak. Eğer B = C (örneğin, 122 ), bu durumda da uygulanır. Bca değeri önceden olduğu gibi atlanmayacaktır ve a zorunlu olarak b'den küçük olduğu için, bc <a + 1> de atlanmayacaktır . Bu örnekte, 221 222 122 içerir.

Yukarıdaki kod kesinlikle sonuncusu yerine üçüncü basamağı test ettiğinden, 0-99 arasındaki tüm değerler sonuca dahil edilir. Ancak 1-99 arasındaki değerler atlanabilir, çünkü her 3 basamaklı sekans varsa, her 1 basamaklı ve 2 basamaklı sekansta da bulunması gerekir.

991-999 arasındaki değerler de ( 909 910 , 919 920 , ... 989 990 ) tarafından üretildiği gibi atlanabilir .

1315 bayt çıktıda, bu rahatça problemin 1500'den daha az spesifikasyonundadır.

Çıktı:

0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990

Varyasyon 1

14 bayt, 1233 çıkış

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

Karşılaştırma için kesinlikle son rakamı seçerek, üçte bir yerine, 100'den küçük gereksiz değerlerin birçoğu elimine edilir ve sonuçta ortaya çıkan dizgiyi kısaltır.

101120212230313233404142434450515253545560616263646566707172737475767780818283848586878890919293949596979899100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990

Varyasyon # 2

16 bayt, 1127 çıkış

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

99'dan daha az olan tüm değerleri önceden dikkate alarak, ortaya çıkan dize daha da kısaltılabilir.

99100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990

Golfscript - 19 bayt, 1016 çıktı

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

Yukarıdakiler 99 ile 909 arasındadır ve daha önce görünmemiş herhangi bir değer ekler ( 909 normalde bu şekilde eklenen son değer olur). 99'u öne doğru hareket ettirmek , arkada 910'a ihtiyaç duymamak için bir optimizasyondur .

Çıktı:

99100101102103104105106107108109111112113114115116117118119120122123124125126127128129130132133134135136137138139140142143144145146147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188189190192193194195196197198199200202203204205206207208209222223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333334335336337338339340344345346347348349350354355356357358359360364365366367368369370374375376377378379380384385386387388389390394395396397398399400404405406407408409444445446447448449450455456457458459460465466467468469470475476477478479480485486487488489490495496497498499500505506507508509555556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666667668669670677678679680687688689690697698699700707708709777778779780788789790798799800808809888889890899900909

Golf komut dosyası 26 bayt, 999 çıktı

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

Not, 1016 , önceki çözelti ile üretilen karakter dizisi, her çoklu için iki ilave rakama sahip olan hariç olmak üzere, hemen hemen optimal 111 (yani 11111yerine 111, 22222yerine 222, vb). Çözüm, bu ekstra sayıları kaldırarak (bu değerlerin her birine üç yerine sadece bir rakam ekleyerek) ve 909öne doğru döndürerek , bir 9( ortadan kaldıran önceki sürümlerden farklı olarak) ortadan kaldırılarak en uygun 9100hale getirilebilir. ).

Kontrolsüz ve yorum yapıldı:

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

Hangi karakterlerin ekleneceğini seçme mantığı üç durumu izler:

  1. 111n , ns
    İlk kontrolün değeri 1'dir ve ikinci -1 .
    Dilim, dizin 0'dan başlayarak başlayacaktır; tüm dizgeyi döndürür.
  2. 111n , ns
    İlk kontroldeki değer 1 , ikincisi ise ≥ 2'dir .
    Dilim ≥ 3 dizininden bakmaya başlayacaktır; boş bir dize döndürür.
  3. 111n , ns
    İlk kontroldeki değer 0 ve ikinci -1 değerdir.
    Dilim, -1 dizininden başlayarak başlayacaktır; sadece son karakteri döndürür.

Mantığın toplamı, henüz ortaya çıkmamış herhangi bir değerin tam olarak ekleneceğidir - 111'in katı olmadığı sürece , bu durumda sadece bir karakter eklenecektir. Diğer tüm değerler göz ardı edilir.

Üretilen dize, Peter Taylor'ın cevabı tarafından üretilen optimal olandan farklı olduğunu unutmayın .

Tarih:

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

Çıktı:

909910010110210310410510610710810911121131141151161171181191201221231241251261271281291301321331341351361371381391401421431441451461471481491501521531541551561571581591601621631641651661671681691701721731741751761771781791801821831841851861871881891901921931941951961971981992002022032042052062072082092223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333433533633733833934034434534634734834935035435535635735835936036436536636736836937037437537637737837938038438538638738838939039439539639739839940040440540640740840944454464474484494504554564574584594604654664674684694704754764774784794804854864874884894904954964974984995005055065075085095556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666766866967067767867968068768868969069769869970070770870977787797807887897907987998008088098889890899900

45

GolfScript ( 35 31 26 karakter)

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

Çıktı

000100110111200201210211220221222300301302310311312320321322330331332333400401402403410411412413420421422423430431432433440441442443444500501502503504510511512513514520521522523524530531532533534540541542543544550551552553554555600601602603604605610611612613614615620621622623624625630631632633634635640641642643644645650651652653654655660661662663664665666700701702703704705706710711712713714715716720721722723724725726730731732733734735736740741742743744745746750751752753754755756760761762763764765766770771772773774775776777800801802803804805806807810811812813814815816817820821822823824825826827830831832833834835836837840841842843844845846847850851852853854855856857860861862863864865866867870871872873874875876877880881882883884885886887888900901902903904905906907908910911912913914915916917918920921922923924925926927928930931932933934935936937938940941942943944945946947948950951952953954955956957958960961962963964965966967968970971972973974975976977978980981982983984985986987988990991992993994995996997998999

(1020 karakter) Bu Lyndon kelimesi birleştirme yaklaşımının bir çeşididir: ilkel 1-char kelimeleri kısa kod için kullanmak yerine 111'in katlarını kullanır, fakat bu sayıların tekrarlanan oluşumlarını; ve eşlenik grupların minimal elemanlarını kullanmak yerine, maksimal elemanlar kullanır, çünkü döngüleri kısaltır.


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

40 karakterde (muhtemelen hala geliştirilebilir) uzunluğu 999 karakter olan optimal bir dize oluşturur:

100200300400500600700800901101201301401501601701801902102202302402502602702802903103203303403503603703803904104204304404504604704804905105205305405505605705805906106206306406506606706806907107207307407507607707807908108208308408508608708808909109209309409509609709809911121131141151161171181191221231241251261271281291321331341351361371381391421431441451461471481491521531541551561571581591621631641651661671681691721731741751761771781791821831841851861871881891921931941951961971981992223224225226227228229233234235236237238239243244245246247248249253254255256257258259263264265266267268269273274275276277278279283284285286287288289293294295296297298299333433533633733833934434534634734834935435535635735835936436536636736836937437537637737837938438538638738838939439539639739839944454464474484494554564574584594654664674684694754764774784794854864874884894954964974984995556557558559566567568569576577578579586587588589596597598599666766866967767867968768868969769869977787797887897987998889899900

Bunu yapmaya çalışmak ters dizgilerde 111'in katlarını atlamakla ilgili problemlerle karşılaşır.

999'un en uygun uzunluk olduğunu görmek için (yukarıdaki kısa yorumlarım herkesi ikna etmiyor), 0'dan 9'a kadar her 3 basamaklı karakter dizisini içeren tam bir Bruijn dizisinden başlayabilirsiniz. 1000 tane var, en az 1000 karakter uzunluğunda olmalı; bu da genellikle uzun olan düğümler iki basamaklı dizileridir bir grafik üzerinde bir Euler yürüyüş kanıtlanmış tam 1000 karakter olabilir xy10 kenarlı, bir rakam ile etiketlenen zalmak xyiçin yz.

0Başlayan dizilere ihtiyacımız yok , bu yüzden de de bir Bruijn dizisi verildiğinde 000sonuna koymak için döndürebiliriz . Öyleyse, en başa dolanan dizilerin ikisine de ihtiyacımız yok, ancak 0önce rakam ile başlayan diziyi bitirmek için iki taneye ihtiyacımız var 000, böylece 999 karakterli bir dizge elde etmek için bunlardan birini silebiliriz. Geriye kalan her 0şey, başlamayan bir sayı içinde kullanılır 0.


8
Bu gerçekten etkileyici!
Fabinout

Filtreleme veya üretken bir yaklaşım kullanmayı tercih ederim. Sözde Lyndon yaklaşımı için, 32 karaktere kadar üretici yaklaşıma sahibim: 10,:^{:x^>{x.@:&<+^>{x&@}/}/}/0.Gerçek Lyndon kelimeleri 10,:^{:x^>{x.@:&<+^>{.x>{x&@}*}/}/}%3>0.için en uygun dize için (40 karakter) verdiğine göre değişiyor.
Peter Taylor

100'ün altındaki sayılar için baştaki sıfırları kullanmayarak optimum ipi kısaltabilir misiniz?
Random832

1
@ Random832 Yapamayacağınıza eminim. 100, 200, ... 900 sayılarını eklemeniz gerekir, bu yüzden en az dize kesinlikle 00X değerinde sekiz orana sahip olacaktır (biri yukarıdaki gibi en sağda olabilir). Verilen en uygun dize "001" içermediğini unutmayın.
tttppp

2
Normalde ben anlamıyorum değil upvote kodu, ancak bu durumda ben upvoting ediyorum çünkü ben anlamıyorum. Bravo.
Ben Jackson,

29

GolfScript, 17 karakter

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

Dizgede zaten bulunmuyorsa her numarayı eklemek için düz bir yaklaşım (not: 999 işaretli değil, eklenmiş, ancak çıktıda zaten var).

Çıktı 1133 karakterdir:

01234567891011131415161718192021222425262728293032333536373839404344464748495054555758596065666869707677798087889099100102103104105106107108109110112114115116117118119120124125126127128129130132133134135136137138139140142143144145146147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188189190193194195196197198199200203204205206207208209219220221223225226227228229230231235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290294295296297298299300304305306307308309311329330332334336337338339340342346347348349350354355356357358359360364365366367368369370374375376377378379380384385386387388389390395396397398399400405406407408409422439440443445447448449450453457458459460465466467468469470475476477478479480485486487488489490496497498499500506507508509533549550554556558559560564568569570576577578579580586587588589590597598599600607608609644659660665667669670675679680687688689690698699700708709755769770776778780786790797799800809866877879880887888897898899900908932943954965976979987989

20

Herhangi bir kodum yok, ancak birinin 999 karakterin çıktı uzunluğuna bağlı olduğuna dair bu sezgisel kanıtı takdir edebileceğini düşündüm:

İlk olarak, her 1 ve 2 basamaklı sayı, 3 basamaklı bir sayının parçasıdır, bu yüzden 100'den küçük olan her şeyi yoksay. 100-999 dahil, 900 3 basamaklı sayılardır.

Sorunu çözmenin en uygun yolu, her karakterin mümkün olduğunca kullanılmasıdır. Bu, sayının mümkün olduğu kadar üst üste geldiği anlamına gelir:

123
 234
  345

Bu nedenle ilk sayı 3 karakter ekleyecektir ve sonraki her bir sayı 1 karakter ekleyecektir. Bu, 3 + 899 = 902 karakterleri alt sınır olarak verir.

Ancak, sıfır olduğunda, yeni 3 basamaklı bir sayı başlatmak için kullanamayız. Yine başka bir sıfırın olmadığı sürece, 3 basamaklı bir sayının ortasında tekrar kullanabiliriz:

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

Fakat:

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

Bu nedenle, çıktıda görünen her sıfır, çıktıyı 1 karakter uzatır - başka numaralarla çakışmadığından sıfır olabilen son iki karakter hariç:

???
 ??0
  ?00

Ortada kesinlikle bir sıfır bulunan 81 sayı (? 0?), Sonunda kesinlikle bir sıfır olan (81), iki tane sıfır (? 00) olan 9 rakam vardır.

Her 0 sayı bir sıfırı a? 0? sayı veya a? 00 sayı, ancak ikisi birden değil ? 0? ve? 00 asla sıfırları paylaşamaz, bu nedenle çıktıda en az 81 + 9 * 2 sıfır olmalıdır.

Bu, 3 + 899 + 81 + 9 * 2 - 2 = 999 karakterden daha düşük bir sınır verir.

Bu konu dışı kabul edilirse özür diler, ancak bir yorumda bulunmak için çok uzun sürdü.


1
Söylediğin için teşekkürler! Bu 999'dan küçük her tamsayı içeren dizgenin 999 karakter uzunluğunda olması biraz komik.
Fabinout


1
Her sayıyı 999'a kadar bir dizgede kaydetmenin 999 karakter uzunluğunda olduğunu fark etmek biraz komik. Yanlışsam düzeltin, ancak her sayıyı 99'a kadar kaydetmenin 100 karakter uzunluğunda olduğuna inanıyorum.
Fabinout

2
Aynı argümanla alt sınır 2 + 89 + 9 - 1 = 99'dur, ancak bu 99'un mümkün olduğunu kanıtlamaz, sadece 98'in mümkün olmadığını kanıtlamaz.
Alistair Buxton,

17

Perl, 37 34 33 32 (1136 1132 karakter)

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

$ için @ (1..999) {$ _. = $ @ eğer! / $ @ /} baskı

$ i (1..999) için {$ _. = $ i eğer! / $ i /} yazdır

(1..1e3) için {$ s. = $ _ eğer $ s! ~ / $ _ /} $ s yazdırırsa

Çıktılar:

12345678910111314151617181920212224252627282930323335363738394043444647484950545557585960656668697076777980878890991001021031041051061071081091101121141151161171181191201241251261271281291301321331341351361371381391401421431441451461471481491501521531541551561571581591601621631641651661671681691701721731741751761771781791801821831841851861871881891901931941951961971981992002032042052062072082092192202212232252262272282292302312352362372382392402432442452462472482492502532542552562572582592602632642652662672682692702732742752762772782792802832842852862872882892902942952962972982993003043053063073083093113293303323343363373383393403423463473483493503543553563573583593603643653663673683693703743753763773783793803843853863873883893903953963973983994004054064074084094224394404434454474484494504534574584594604654664674684694704754764774784794804854864874884894904964974984995005065075085095335495505545565585595605645685695705765775785795805865875885895905975985996006076086096446596606656676696706756796806876886896906986997007087097557697707767787807867907977998008098668778798808878888978988999009089329439549659769799879891000

Daha kısa dize: 38 37 34 (1020 karakter):

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

(; $ @ $ @ = 1E3 -;) için {$ _ = $ @ / $ @ / eğer.!} Baskı

($ i = 1e3; $ i -;) {$ _. = $ i eğer! / $ i /} yazdır

Çıktılar:

999998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888887886885884883882881880877876875874873872871870867866865864863862861860857856855854853852851850847846845844843842841840837836835834833832831830827826825824823822821820817816815814813812811810807806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555554553552551550544543542541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411410403402401400333332331330322321320312311310302301300222221220211210201200111110101100

Yine de başta 99999 olan kopyadan memnun değilsiniz! Bence daha birçok kontrol daha çok kod yaratacaktır ...

Düzenleme: @Peter Taylor'dan öneri eklendi

Düzenleme 2: @primo'dan bazı harika öneriler! teşekkür ederim


2
1000'i 1e3 olarak yazmak için güzel bir numara, ama bunun anlamsız olduğunu düşünüyorum. Soru, “kesinlikle 1000'in altında” diyor, bu 999'a kadar olan anlamına geliyor. (Örnek kod ayrıca 0..999'u işliyor.)
Manatwork

Mükemmel bir nokta! Başlamak için farklı bir döngü vardı, buna göre değiştirdim! Teşekkürler!
Dom Hastings

3
Değişkeniniz için alfabetik olmayan bir karakter kullanıyorsanız, boşluğu kaldırabilir misiniz?
Peter Taylor

Ahhh evet, yapabilirim! Teşekkürler!
Dom Hastings

2
Birkaç küçük iyileştirme: bunun yerine, $_.=$@if!/$@/dize tekrarını kullanabilirsiniz $_.=$@x!/$@/. forBir ile değiştirilebilir whilebir modulo kullanarak bir ifade düzenleyici olarak:...while$@=--$@%1e3
primo

10

APL (20, çıkış: 1020)

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

Açıklama:

  • {∨/⍺⍷⍵:⍵⋄⍵,⍺}: eğer bir ifade ise , return , return⍵,⍺
  • /: azaltmak
  • ⍕¨: Her birinin dize gösterimi
  • ⍳999: Den tamsayılar 1için 999.

Çıktı:

9999989979969959949939929919909889879869859849839829819809789779769759749739729719709689679669659649639629619609589579569
      55954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913
      91291191090890790690590490390290190088888788688588488388288188087787687587487387287187086786686586486386286186085785
      68558548538528518508478468458448438428418408378368358348338328318308278268258248238228218208178168158148138128118108
      07806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735
      73473373273173072672572472372272172071671571471371271171070670570470370270170066666566466366266166065565465365265165
      06456446436426416406356346336326316306256246236226216206156146136126116106056046036026016005555545535525515505445435
      42541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411
      410403402401400333332331330322321320312311310302301300222221220211210201200111110101100

APL (41, çıktı: 999)

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

Açıklama:

  • ⌽⍕¨100+⍳898: ('999' '998' ... '101')(tersi sırayla, çünkü APL'de azalma sağdan sola gider, F/a b c ≡ a F (b F c))
  • /: azaltmak
  • ⍵,⍺⍴⍨: right argümanı, ardından Nsol argümanın ilk karakterleri N:
  • 3×~∨/⍺⍷⍵: 3eğer bir alt dize değilse0
  • (1=⍴∪⍺): 1Eğer sadece aksi bir benzersiz characcter vardır0
  • : önceki iki değerin en büyük ortak böleni, yani: 1eğer zaten yok ise ve sadece bir benzersiz karakter 3varsa , eğer zaten yok ise , ancak birden fazla benzersiz karakter varsa 0.
  • '0',⍨: sonucun sonuna sıfır ekleyin

Çıktı:

10110210310410510610710810911121131141151161171181191201221231241251261271281291301321331341351361371381391401421431441451
      46147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188
      18919019219319419519619719819920020220320420520620720820922232242252262272282292302332342352362372382392402432442452
      46247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294
      29529629729829930030330430530630730830933343353363373383393403443453463473483493503543553563573583593603643653663673
      68369370374375376377378379380384385386387388389390394395396397398399400404405406407408409444544644744844945045545645
      74584594604654664674684694704754764774784794804854864874884894904954964974984995005055065075085095556557558559560566
      56756856957057657757857958058658758858959059659759859960060660760860966676686696706776786796806876886896906976986997
      00707708709777877978078878979079879980080880988898908999009099100

8

Yakut: 50 46 karakter (1020 karakter çıkışı)

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

Örnek çalışma:

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

Test sürüşü:

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

Yakut: 102 97 karakter (999 karakter çıktı)

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

Örnek çalışma:

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

Test sürüşü:

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'dan 0'a gitmek güzel bir fikir değil, tam tersi. Bununla birlikte, Java yöntemim 1048 karakterlik bir dizge çıktı (1200 yerine).
Fabinout

1
Kod uzunluğu hakkında endişeleniyorsanız ve çıktı uzunluğu değil, bir dize aralığı kullanarak ilkini geliştirebilirsiniz. Gibi bir şey (?0..?9*3).map{|i|$/[i]||($><<i;$/+=i)}?
Paul Prestidge

5

JavaScript, 39

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

1020 karakter çıkışı:

999998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888887886885884883882881880877876875874873872871870867866865864863862861860857856855854853852851850847846845844843842841840837836835834833832831830827826825824823822821820817816815814813812811810807806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555554553552551550544543542541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411410403402401400333332331330322321320312311310302301300222221220211210201200111110101100


Doğrulama: for(i=0;i<1000;i++)console.assert(k.indexOf(i)>=0)


5

Mathematica ( 62 64 karakter, 1002 çıkış)

Bu, yerel bir işlevi kullandığı için, sıfırdan daha kısa çözümlerin güzelliğini daha fazla takdir ediyorum. Çıktı 1002 karakter uzunluğundadır.

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

"799798787770760750740730720710980970960950940930920910108908708608508408308208889998988081009909008007006005004003002000190180170160150140130120119118117116115114113112912812712612512412312213913813713613513413313214914814714614514414314215915815715615515415315216916816716616516416316217917817717617517417317218918818718618518418318219919819719619519419319212111029028027026025024023022922822722622522422392382372362352342332492482472462452442432592582572562552542532692682672662652642632792782772762752742732892882872862852842832992982972962952942932322202103903803703603503403393383373363353349348347346345344359358357356355354369368367366365364379378377376375374389388387386385384399398397396395394343330320310490480470460450449448447446445945845745645546946846746646547947847747647548948848748648549949849749649545444043042041059058057056055955855755695685675665795785775765895885875865995985975965655505405305205106906806706696686679678677689688687699698697676660650640630620610790780779778978879"

1
799 ve 997 eksik görünüyorsun. bkz. ideone.com/d07bG2 (veya kendi çekini yaz)
Justin

İyi yakalama. Varsayılan olarak, DeBruijnSequencedöngüsel sarmalamayı varsayar. "79" hazırlanırken, son iki hane, problemi çözer.
DavidC

4

Mathematica, 51 karakter

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

Çıktı (1155 karakter):

000100101110111200201202210211212220221222300301302303310311312313320321322323330331332333400401402403404410411412413414420421422423424430431432433434440441442443444500501502503504505510511512513514515520521522523524525530531532533534535540541542543544545550551552553554555600601602603604605606610611612613614615616620621622623624625626630631632633634635636640641642643644645646650651652653654655656660661662663664665666700701702703704705706707710711712713714715716717720721722723724725726727730731732733734735736737740741742743744745746747750751752753754755756757760761762763764765766767770771772773774775776777800801802803804805806807808810811812813814815816817818820821822823824825826827828830831832833834835836837838840841842843844845846847848850851852853854855856857858860861862863864865866867868870871872873874875876877878880881882883884885886887888900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999

Bu ne işe yarıyor?
Fabinout

1
Bu formun listelerinin bir listesi oluşturulur 0 ile 9 arasında olan , daha küçük olan . Sonra listeyi bir dizgeye dönüştürür. {i, j, k}ijki
alephalpha

4

Python - 53 63, 1134 çıktı

Bu oldukça kaba bir forcish, ama geçerlidir. Evet, başındaki sıfıra sahiptir, ancak sahip olmadığından iki karakter kaydeder range(1,1000).

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

Yukarıdakiler çağrıda DeprecationWarning1e3 kullanımı üzerinde bir atar range(), ancak 1000 kullanarak bir karakter kaydeder.

Dize maliyeti pahasına tersine çevirerek, biraz daha optimum uzunluk çıkış sürümü de vardır 65 karakter (ipuçları için res ve filmor sayesinde) :

Python - 58, 1021 çıkış

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

1
İlk programınızın çıkış uzunluğu 1133 olduğunu, 1132 olmadığını görüyorum. Python 2'de (ancak Python 3 değil), backticks kullanarak kodu 54 karaktere kadar kısaltabilirsiniz :for i in range(999):s+=`i`*(not`i`in s)
res

Wot? Geri tepmeyi mi çıkardılar? Guido, ne tutacağınıza karar verirken bir Per Per Nefret ve Her Şeye benzeyen Her Şeye sahip olmalı.
Warren P,

1
Bunu range(999,99,-1)yerine bir karakter kullanarak kısaltabilirsiniz range(1000)[::-1].
Filmor

Ve res tarafından hala ipucu yardım, str(i)*(str(i)not in s)biraz daha kısa i=str(i);s+=[i,''][i in s];)
filmor

@filmor Kullanarak 1e3yerine daha küçük ve daha küçük hale getirildi1000

2

K, 33

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

Temelde Howards solution ile aynı - 1133 karakter.

01234567891011131415161718192021222425262728293032333536373839404344464748495054555758596065666869707677798087889099100102103104105106107108109110112114115116117118119120124125126127128129130132133134135136137138139140142143144145146147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188189190193194195196197198199200203204205206207208209219220221223225226227228229230231235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290294295296297298299300304305306307308309311329330332334336337338339340342346347348349350354355356357358359360364365366367368369370374375376377378379380384385386387388389390395396397398399400405406407408409422439440443445447448449450453457458459460465466467468469470475476477478479480485486487488489490496497498499500506507508509533549550554556558559560564568569570576577578579580586587588589590597598599600607608609644659660665667669670675679680687688689690698699700708709755769770776778780786790797799800809866877879880887888897898899900908932943954965976979987989

2

Java- 126 98 karakter (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);}}

Çıktı (1020 karakter):

999998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888887886885884883882881880877876875874873872871870867866865864863862861860857856855854853852851850847846845844843842841840837836835834833832831830827826825824823822821820817816815814813812811810807806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555554553552551550544543542541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411410403402401400333332331330322321320312311310302301300222221220211210201200111110101100

İyileşebilir ( Peter Taylor'a göre , ancak daha sonra 999'un optimal olduğunu söyledi) Birkaç karakter ekleyerek string uzunluğu ( 147 118 için +20 karakter ):

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

Çıktı (1002 karakter):

999899799699599499399299199098898798698598498398298198097897797697597497397297197096896796696596496396296196095895795695595495395295195094894794694594494394294194093893793693593493393293193092892792692592492392292192091891791691591491391291191090890790690590490390290190088878868858848838828818808778768758748738728718708678668658648638628618608578568558548538528518508478468458448438428418408378368358348338328318308278268258248238228218208178168158148138128118108078068058048038028018007776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666566466366266166065565465365265165064564464364264164063563463363263163062562462362262162061561461361261161060560460360260160055545535525515505445435425415405345335325315305245235225215205145135125115105045035025015004443442441440433432431430423422421420413412411410403402401400333233133032232132031231131030230130022212202112102012001110101100

Düzenleme : Fabinout'a Java 6'nın 28 karakter kaydedebileceğini gösterdiği için teşekkür ederiz.


İsterseniz java 6 ile derleyebilir ve System.out.println () yerine statik bir blok kullanabilirsiniz!
Fabinout

@Fabinout Bir yerine mi demek istiyorsun public static void main(String[]a)? (bu kodumu 'dan' a ...public static void main(String[]c){...değiştirecek ...static{...)
Justin

Evet ediyorum. Java 6 ile deneyebilirsiniz
Fabinout

Ancak, programınızın çökmesini istemiyorsanız, statik bloğunuzun sonunda exit () kullanmanız gerekir. Golf oynamanın çökmemesi gerekmese de.
Fabinout

2

Windows PowerShell - 40, 1020 Çıktı

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

Çıktı:

999998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888887886885884883882881880877876875874873872871870867866865864863862861860857856855854853852851850847846845844843842841840837836835834833832831830827826825824823822821820817816815814813812811810807806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555554553552551550544543542541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411410403402401400333332331330322321320312311310302301300222221220211210201200111110101100

2

Haskell, 75 bayt - 1002 çıkış

Minimum bir çözüm getiren bir elek yaklaşımı.

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

Bu çözümün pratik olarak yavaş olduğuna dikkat edin.


Sen ithalatını eklemeniz gerekir Data.Listiçin isInfixOfancak yine de 2 byte tasarruf tarafından o golf olabilir, biraz daha: 1) Hardcode n = 10002) Kullanım allüzerinde andve yüklem 3) bir kullanım pointfree versiyonu (!!0)üzerinde head4) kombinasyonu üzerinde kullanılması liste anlama map& filter5) kullanmak (<$>)üzerine map:[s|s<-show<$>[1..],all((`isInfixOf`s).show)[1..1000]]!!0
ბიმო

2

Powershell, 36 bayt, 1020 çıkış

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

Çıktı:

999998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888887886885884883882881880877876875874873872871870867866865864863862861860857856855854853852851850847846845844843842841840837836835834833832831830827826825824823822821820817816815814813812811810807806805804803802801800777776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555554553552551550544543542541540534533532531530524523522521520514513512511510504503502501500444443442441440433432431430423422421420413412411410403402401400333332331330322321320312311310302301300222221220211210201200111110101100

Alternatif, 69 bayt, 1000 çıkış

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

Çıktı:

9998997996995994993992991990988987986985984983982981980978977976975974973972971970968967966965964963962961960958957956955954953952951950948947946945944943942941940938937936935934933932931930928927926925924923922921920918917916915914913912911910908907906905904903902901900888788688588488388288188087787687587487387287187086786686586486386286186085785685585485385285185084784684584484384284184083783683583483383283183082782682582482382282182081781681581481381281181080780680580480380280180077767757747737727717707667657647637627617607567557547537527517507467457447437427417407367357347337327317307267257247237227217207167157147137127117107067057047037027017006665664663662661660655654653652651650645644643642641640635634633632631630625624623622621620615614613612611610605604603602601600555455355255155054454354254154053453353253153052452352252152051451351251151050450350250150044434424414404334324314304234224214204134124114104034024014003332331330322321320312311310302301300222122021121020120011101100

Alternatif, 82 73 bayt, 999 çıkış (minimum)

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

Bu basitleştirilmiş bir algoritma sabitleri için uyarlanmış en kısa De Bruijn üret : alfabe = 9876543210ve uzunluk =3

Çıktı:

999899799699599499399299199098898798698598498398298198097897797697597497397297197096896796696596496396296196095895795695595495395295195094894794694594494394294194093893793693593493393293193092892792692592492392292192091891791691591491391291191090890790690590490390290190088878868858848838828818808778768758748738728718708678668658648638628618608578568558548538528518508478468458448438428418408378368358348338328318308278268258248238228218208178168158148138128118108078068058048038028018007776775774773772771770766765764763762761760756755754753752751750746745744743742741740736735734733732731730726725724723722721720716715714713712711710706705704703702701700666566466366266166065565465365265165064564464364264164063563463363263163062562462362262162061561461361261161060560460360260160055545535525515505445435425415405345335325315305245235225215205145135125115105045035025015004443442441440433432431430423422421420413412411410403402401400333233133032232132031231131030230130022212202112102012001110100

Test komut dosyası:

$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 bayt ve 1109 karakter

₄FDNå_iNì

Çıktılar:

90990190089989088981980980880079979879078978878077977870970870770069969869769068968868768067967867767066966866760960860760660059959859759659058958858758658057957857757657056956856756656055955855755650950850750650550049949849749649549048948848748648548047947847747647547046946846746646546045945845745645545044944844744644540940840740640540440039939839739639539439038938838738638538438037937837737637537437036936836736636536436035935835735635535435034934834734634534434033933833733633533430930830730630530430330029929829729629529429329028928828728628528428328027927827727627527427327026926826726626526426326025925825725625525425325024924824724624524424324023923823723623523423323022922822722622522422320920820720620520420320220019919719619519419319219118918818718618518418318218017917817717617517417317217016916816716616516416316216015915815715615515415315215014914814714614514414314214013913813713613513413313213012912812712612512412312212011811711611511411311211110910810710610510410310210110099919089888079787770696867666059585756555049484746454440393837363534333029282726252423222018171615141312119876543210

Çevrimiçi deneyin veya 1000'in altındaki tüm numaraları içerdiğini doğrulayın .

Açıklama:

            # 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 bayt (rekabetçi olmayan), dize uzunluğu 1133

Pyke mücadeleden daha yeni ve bu yüzden rekabetçi değil.

k~mV~oi{!o`*+

Burada dene!

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

Çıktı ne kadardır?
Kritixi Lithos

1

PHP, 48 44 bayt

Bana hatırlattığı için @primo teşekkürler ereg.

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

veya

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

çıkış: 1020 karakter. PHP <7 gerektirir

PHP 7, 48 bayt:

ereg PHP 7'de kaldırıldı

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

İkinci argüman strstr(veya strposdiğer dize arama işlevleri) bir dize değilse, bir ascii kodu olarak kullanılır, bu nedenle $idize alması gerekir.


1
ereg($i,$s)4 için (ayrıca <?bayt sayısına dahil ediyorum ).
primo

@primo Sadece bu zorluğun PHP 7'den eski olduğunu farkettim. :)
Titus

eregİşlev adı çok kısa olduğu ve / veya yeterli alt çizgi içermediği için büyük olasılıkla kaldırıldı. Bu splitda kaldırıldı, özellikle mükemmel.
primo

eregPOSIX, yalnızca PCRE’nin olanaklarının bir alt kümesini içerdiğinden kaldırıldı; ve muhtemelen iki farklı kütüphaneyi korumak istemediler. Tekrar Rasmus Lerdorf'la tanışmalı mıyım diye soracağım. splitkaldırıldı, ancak joinkaldı (muhtemelen "yalnızca" bir diğer adı olduğu için). Soygun için üzgünüm; ama ironiyi tanıyamayan insanları tanıyorum.
Titus

1

Groovy, 49 karakter / bayt

Bunun bir string değişkeni döndüren bir işlev olarak mı yapılacağından ya da sonucu yazdıracağından emin değildim, bu yüzden sadece stdout'a yazdırıyor. Regex eşleştiricisini kullanarak 2 bayt, "if" yerine üçlü işleci kullanarak başka bir bayt kaydedildi. Çıkış dizesi 1133 karakterdir.

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

Çıktı:

01234567891011131415161718192021222425262728293032333536373839404344464748495054555758596065666869707677798087889099100102103104105106107108109110112114115116117118119120124125126127128129130132133134135136137138139140142143144145146147148149150152153154155156157158159160162163164165166167168169170172173174175176177178179180182183184185186187188189190193194195196197198199200203204205206207208209219220221223225226227228229230231235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290294295296297298299300304305306307308309311329330332334336337338339340342346347348349350354355356357358359360364365366367368369370374375376377378379380384385386387388389390395396397398399400405406407408409422439440443445447448449450453457458459460465466467468469470475476477478479480485486487488489490496497498499500506507508509533549550554556558559560564568569570576577578579580586587588589590597598599600607608609644659660665667669670675679680687688689690698699700708709755769770776778780786790797799800809866877879880887888897898899900908932943954965976979987989

-1

Oyun Yapıcı Dil, 1014 - String 1000

show_message(909910010110210310410510610710810911121131141151161171181191201221231241251261271281291301321331341351361371381391401421431441451461471481491501521531541551561571581591601621631641651661671681691701721731741751761771781791801821831841851861871881891901921931941951961971981992002022032042052062072082092223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333433533633733833934034434534634734834935035435535635735835936036436536636736836937037437537637737837938038438538638738838939039439539639739839940040440540640740840944454464474484494504554564574584594604654664674684694704754764774784794804854864874884894904954964974984995005055065075085095556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666766866967067767867968068768868969069769869970070770870977787797807887897907987998008088098889890899900)

Ayrıca:

Ruby, 1003 - Dize 1000

p'909910010110210310410510610710810911121131141151161171181191201221231241251261271281291301321331341351361371381391401421431441451461471481491501521531541551561571581591601621631641651661671681691701721731741751761771781791801821831841851861871881891901921931941951961971981992002022032042052062072082092223224225226227228229230233234235236237238239240243244245246247248249250253254255256257258259260263264265266267268269270273274275276277278279280283284285286287288289290293294295296297298299300303304305306307308309333433533633733833934034434534634734834935035435535635735835936036436536636736836937037437537637737837938038438538638738838939039439539639739839940040440540640740840944454464474484494504554564574584594604654664674684694704754764774784794804854864874884894904954964974984995005055065075085095556557558559560566567568569570576577578579580586587588589590596597598599600606607608609666766866967067767867968068768868969069769869970070770870977787797807887897907987998008088098889890899900'


3
1) İlk çözümünüz “dizenin uzunluğu 1500 karakterin altında olmalı” kuralını ihlal ediyor. 2) Çıktınızda 909 sayısını bulamıyorum. ( Primo'nun yanıtından kopya yapıştırarak ilk haneyi kaçırdınız mı?) 3) rubyKod, sayısal parametresini geçmek pyerine kullanabilir puts.
Manatwork
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.