Anno oyunları için tüm olası başlıkları listele


37

Gelen Anno video oyunu serisi , isimleri hep belirli bir düzende bir yıl özelliği erken 2019 için duyurulan 7 biriyle 6 oyun vardır:

Anno 1602, Anno 1503, Anno 1701, Anno 1404, Anno 2070, Anno 2205, Anno 1800

  • Dijital toplam daima 9'dur.
  • Yıllar dört basamaklıdır.
  • En az bir sıfır içerirler.

Bu kısıtlamalar içerisinde 109 olası başlık vardır:

[1008,1017,1026,1035,1044,1053,1062,1071,1080,1107,1170,1206,1260,1305,1350,1404,1440,1503,1530,1602,1620,1701,1710,1800,2007,2016,2025,2034,2043,2052,2061,2070,2106,2160,2205,2250,2304,2340,2403,2430,2502,2520,2601,2610,2700,3006,3015,3024,3033,3042,3051,3060,3105,3150,3204,3240,3303,3330,3402,3420,3501,3510,3600,4005,4014,4023,4032,4041,4050,4104,4140,4203,4230,4302,4320,4401,4410,4500,5004,5013,5022,5031,5040,5103,5130,5202,5220,5301,5310,5400,6003,6012,6021,6030,6102,6120,6201,6210,6300,7002,7011,7020,7101,7110,7200,8001,8010,8100,9000]

Amacınız, hepsini en az bayt sayısında makul bir biçimde listelemek.


Çıktı formatı ne kadar esnek? Mı bu kabul edilebilir?
Luis Mendo

1
@LuisMendo Evet, benim için sorun değil.
Laikoni


1
@ aslum Sanırım sadece bir tane değil, çok fazla alan demek istiyorsun? Yorum işareti, bunun iyi bir şekilde temsil edilmesine izin vermez. Ve Luis'in yukarıdaki formata izin verildiği göz önüne alındığında buna izin verildiğini varsayardım. ;-)
Outgolfer Erik,

1
@EriktheOutgolfer Rakam listelerine hayır derim çünkü artık yıllara benzemiyorlar.
Laikoni

Yanıtlar:


20

R , 59 51 bayt

Geçerli sayıları 201'lerin listesinin adı olarak verir . Neden 201 Çünkü ASCII 0 48 ve 4 * 48 + 9 ... evet. Aliasing ile 6 bayt Kaydedilen ^için Mapkullanarak bir 2 ve 1:9e3aralık olarak.

"^"=Map;x=sum^utf8ToInt^grep(0,1:9e3,,,T);x[x==201]

Çevrimiçi deneyin!

açıklama

# Create list of sums of ASCII char values of numbers,
# with the original numbers as the names of the list
x <- Map(sum,
  # Create a list from the strings where each element is the string split 
  # into ASCII char values
  Map(utf8ToInt,
      # Find all numbers between 1 and 9e3 that contain a zero
      # Return the matched values as a vector of strings (6th T arg)
      grep(pattern=0,x=1:9000,value=TRUE)
  )
)
# Pick out elements with value 201 (i.e. 4-digits that sum to 9)
# This implicitly only picks out elements with 4 digits, since 3-digit 
# sums to 9 won't have this ASCII sum, letting us use the 1:9e3 range
x[x==201] 

3
ah, grepneden hatırlayamadığımı asla hatırlayamıyorum character...
Giuseppe



9

Jöle , 11 bayt

9ȷṢ€æ.ẹ9ṫ19

Çevrimiçi deneyin!

Nasıl çalışır

9ȷṢ€æ.ẹ9ṫ19  Main link. No arguments.

9ȷ           Set the left argument and the return value to 9000.
  Ṣ€         Sort the digits of each integer in [1, ..., 9000].
    æ.       Perform the dot product of each digit list and the left argument,
             which gets promoted from 9000 to [9000].
             Overflowing digits get summed without multiplying, so we essentially
             map the digit list [a, b, c, d] to (9000a + b + c + d).
      ẹ9     Find all 1-based indices of 9.
             Note that 9000a + b + c + d == 9 iff a == 0 and b + c + d == 9.
        ṫ19  Tail 19; discard the first 18 indices.

7

PowerShell , 50 49 bayt

999..1e4-match0|?{([char[]]"$_"-join'+'|iex)-eq9}

Çevrimiçi deneyin!

İle arasında bir aralık 999oluşturur 10000, ardından -matchregex'in eşleştiği girişleri çıkarmak için filtre olarak satır içi kullanır 0. Bu da bizi bırakır. 1000, 1001, 1002, etc.Daha sonra Where-Object, şu anki sayıyı bir dize olarak aldığımız bir cümlenin içine koyarız, "$_"onu bir dizi olarak charatarız, -joinbu karakterleri bir araya getirir +ve Ibasamağa Ex( basmaya değer ) benzer şekilde toplarlar . Biz o olup olmadığını kontrol -eqetmek UAL 9ve eğer öyleyse bu boru hattı üzerinde bayılmış. Programın bitiminde, bu numaralar boru hattından toplanır ve dolaylı olarak verilir.


5

JavaScript (ES6), 78 73 bayt

@KevinCruijssen sayesinde 2 bayt kaydedildi

Boşluklu bir dize döndürür.

f=(n=9e3)=>n>999?f(n-9)+(eval([...n+''].join`+`)&/0/.test(n)?n+' ':''):''

Çevrimiçi deneyin!

Nasıl?

[1008..9000]90

99

0918

Dolayısıyla test:

(eval([...n + ''].join`+`) & /0/.test(n)

Sen değişen bir byte kaydedebilirsiniz 1008için 999yine bir 0 içermediği, ve 999+9 = 1008.
Kevin Cruijssen

Ya da değiştirerek 2 bayt bile f=(n=9e3)=>n<1e3?'':(eval([...n+''].join`+`)<10&/0/.test(n)?[n,,]:'')+f(n-9)(gerçekte son bir virgül içeriyorsa, bu yüzden f=(n=9e3)=>n<1e3?'':(eval([...n+''].join`+`)<10&/0/.test(n)?n+' ':'')+f(n-9)sondaki boşluk da dahil olmak üzere alan sınırlayıcıyla daha güzel görünebilir)
Kevin Cruijssen

@KevinCruijssen Teşekkürler! Aslında bir süre bunu güncellemeye çalışıyorum, ancak bu gece olduğum yerde 500B / sn Internet bant genişliğine sahibim. : /
Arnauld

Duyguları biliyorum .. Son zamanlarda evdeki internetimiz bir nedenden ötürü saçmalık. 10 MB'ın üzerinde bir şey indiremiyorum ve bazen tamamen yüklenmeden birkaç kez 10'dan fazla görüntü içeren videoları veya sayfaları yenilemek zorunda kalıyorum .. Gerçekten can sıkıcı .. pazartesi / salı günleri evden çalışırken ..>.> yarın birisi düzeltmek için geliyor (ve onu xD düzeltilene kadar bırakmayacağım)
Kevin Cruijssen

5

JavaScript (Node.js) , 89 bayt

[...Array(9e3)].map(_=>i++,i=1e3).filter(a=>(s=[...a+""]).sort()[0]<1&eval(s.join`+`)==9)

Çevrimiçi deneyin!

  • @ETHproductions sayesinde -4 byte

JavaScript (Node.js), 129 127 126 124 115 114 111 110 105 97 93 92 90 bayt

[...Array(9e3)].map(f=(_,i)=>eval(s=[...(i+=1e3)+""].sort().join`+`)-9|s[0]?0:i).filter(f)

Çevrimiçi deneyin!

açıklama

[...Array(9e3)].map(f=(_,i)=>eval(s=[...(i+=1e3)+""].sort().join`+`)-9|s[0]?0:i).filter(f)
[...Array(9e3)].map(f=(_,i)=>                                                  )           // Create a 9000-length array and loop over it; store the loop body
                                    [...(i+=1e3)+""]                                       // Add 1000 to the index and split it into an array of characters (17 -> ["1", "0", "1", "7"])
                                                    .sort()                                // Sort the array of characters in ascending order by their code points ("0" will always be first) (["1", "0", "1", "7"] -> ["0", "1", "1", "7"])
                                  s=                       .join`+`                        // Join them together with "+" as the separator (["0", "1", "1", "7"] -> "0+0+2+9"); store the result
                             eval(                                 )-9                     // Evaluate and test if it's different than 9
                                                                       s[0]                // Take the first character of the string and implicitly test if it's different than "0"
                                                                      |    ?0              // If either of those tests succeeded, then the number doesn't meet challenge criteria - return a falsey value
                                                                             :i            // Otherwise, return the index
                                                                                .filter(f) // Filter out falsey values by reusing the loop body

JavaScript'te ilk kez golf kodunu yapıyorum. Söylemem gerektiğini düşünmüyorum, ancak yanlış bir şey yapıyorum, lütfen aşağıdaki yorumlardan bana bildirin.

  • @Luis felipe De jesus Munoz sayesinde -3 bayt

  • -6 byte @Kevin Cruijssen sayesinde


1
[...Array(9e3)]bunun yerine Array(9e3).fill()2 bayt kazandırır
Luis felipe De jesus Munoz

1
.map(a=>+a)yerine .map(Number)başka bir bayt kaydeder
Luis Felipe De isa Munoz

1
(_, i)Bir baytı kaydetmek için alanındaki boşluğu kaldırabilir ve ek 4 bayt kaydetmek için s[0]+s[1]+s[2]+s[3]olabilir eval(s.join`+`).
Kevin Cruijssen

1
Ayrıca, cevabında ||olabileceğinden çok eminim |.
Kevin Cruijssen

1
Eğer kullanırsanız .map()aralığını oluşturmak ve filtreleme ayrı tutmak sadece 8 byte kaydedebilirsiniz: çevrimiçi deneyin!
ETHProductions

5

Python 2 , 57 bayt

n=999
exec"n+=9\nif'0'in`n`>int(`n`,11)%10>8:print n\n"*n

Çevrimiçi deneyin!

Dennis sayesinde 2 bayt

9 ile 1008, 1017, ..., 9981, 9990 arasındaki adımlarda execsaymak için bir döngü kullanır nve koşulu karşılayanları yazdırır.

Yalnızca 9'un katları 9 rakamının toplamına sahip olabilir, ancak bu aralıktaki 9'un katları 18 ve 27. basamakların toplamına da sahip olabilir. Bunları koşulla ekarte ediyoruz int(`n`,11)%10>8. n11 no'lu tabanda yorumlama , hane toplamı 10 no'lu modüle eşittir, 10 no'lu bazda olduğu gibi, 10 no'lu sayı sayıları da 10 no'lu hacmine eşittir. modulo 10, bu yüzden bu >8işleri yapmak, dokuzları filtrelemek için.

Sıfır içeren sayı string üyeliğe göre kontrol edilir. '0'in`n`. Bu koşul diğeri ile zincirleme eşitsizliği ile birleştirilir, Python 2'nin karakter dizileri sayılardan daha büyük olduğunu kabul eder.


Ağır bir şekilde golf oynayan Python'un ne kadar uzun süredir
otojenik

4

sed ve grep (ve seq), 72 64 63 bayt

seq 9e3|sed s/\\B/+/g|bc|grep -wn 9|sed s/:9//|grep 0|grep ....

Bunlardan bazıları dört basamaklı değil (ama finalin ne olduğundan emin değilim grep, bu yüzden belki yanlış
koştum

@Sparhawk: Son adım sayının 4 hane uzunluğunda olmasını sağlar
Thor

@ Ah Ah doğru. Bazı nedenlerden dolayı bunu bir üç nokta olarak ayrıştırdım.
Sparhawk

4

Haskell , 55 bayt

[i|i<-show<$>[1..5^6],201==sum(fromEnum<$>i),elem '0'i]

@Laikoni sayesinde, yorumları görün.

Okunabilir:

import Data.Char (digitToInt)

[i | i <- show <$> [1000..9999]
   , sum (digitToInt <$> i) == 9
   , '0' `elem` i
   ]

2
Özellikle PPCG ve Haskell golf oynamalarına hoş geldiniz! (-48+)Toplamı düşürmek ve 201yerine toplamı karşılaştırarak birkaç bayttan tasarruf edebilirsiniz 9. Bu arada, bu aralık için kullanmak 1yerine de sağlar 1000.
Laikoni

Ayrıca önceki sürümünüz Meta'daki bu fikir birliğine göremain=print gayet iyiydi .
Laikoni

99995^6bunun yerine olabilir .
Laikoni

1
Ha, tıraş olmak için her zaman başka bir bayt var! Thanks :-)
mb21 16:18

3

R , 82 bayt

write((x=t(expand.grid(1:9,0:9,0:9,0:9)))[,colSums(x)==9&!apply(x,2,all)],1,4,,"")

Çevrimiçi deneyin!

Öndeki xsıfırlar hariç, sütun aşağı gidiş hariç tüm olası 4 basamaklı sayıların bir matrisini oluşturur . Ardından sütun (dijital) toplamları 9 olan ve sıfır içeren, yani allsıfır olmayan filtreler . writeböylece aşağı sütunlar baskıları writeiçin stdoutbir genişliği olan 4ve bir ayırıcı "".

J.Doe tarafından Outgolfed


Güzel cevap! Farklı bir yoldan geldim ...
J.Doe

3

Japt , 20 18 bayt.

@Shaggy ve @ETHproductions sayesinde -2 bayt

A³òL² f_=ì)x ¥9«Z×

A³òL² f_=ì)x ¥9«Z×  Full program
A³òL²               Range [1000, 10000]
      f_            Filter by : 
        =ì)         Convert to array 
           x ¥9     Sum equal to 9?
               «    And 
                Z×  Product not 0

Çevrimiçi deneyin!


Bu aslında 28 bayttır . Kelimenin tam anlamıyla bir tamsayı kullanmak 22 bayt ancak A³ò9000 f_ìx ¥9©ZsøT20'ye geri dönmenizi sağlıyor.
Shaggy

1
Sen kullanarak 1 byte kaydedebilirsiniz ìyerine sve ¬filtreye yapılmalıdır ki,: f_=ì)x ¥9.... Daha sonra Z ürününün sıfır olup olmadığını kontrol ederek bir tane daha tasarruf edebilirsiniz «Z×: Çevrimiçi deneyin!
ETHProductions

3

Java 8, 128 117 115 bayt

v->{int i=109,r[]=new int[i],n=i;for(;i>0;n++)if((n+"").chars().sum()==201&(n+"").contains("0"))r[--i]=n;return r;}

@Nwellnhof sayesinde -11 bayt .

Çevrimiçi deneyin.

Açıklama:

v->{                              // Method with empty unused parameter & int-array return
  int i=109,                      //  Index-integer, starting at 109
      r[]=new int[i],             //  Result-array of size 109
      n=i;                        //  Number integer, starting at 109
   for(;i>0;                      //  Loop as long as `i` is not 0 yet:
       n++)                       //    After every iteration, increase `n` by 1
     if((n+"").chars().sum()==201 //   If the sum of the unicode values of `n` is 201,
                                  //   this means there are four digits, with digit-sum = 9
        &(n+"").contains("0"))    //   and `n` contains a 0:
       r[--i                      //    Decrease `i` by 1 first
            ]=n;                  //    And put `n` in the array at index `i`
  return r;}                      //  Return the array as result

1
Ne hakkında chars().sum()==201?
nwellnhof

Tabii ki @nwellnhof Ah. Teşekkürler!
Kevin Cruijssen

3

R , 85 bayt

(R köşeli ayraçların en iyi şekilde kullanılması için yarışıyor ...: P)

`[`=`for`;i[a<-0:9,j[a,k[a,w[a,if(sum(s<-c(i,j,k,w))==9&any(!s)&i)write(s,1,s='')]]]]

Çevrimiçi deneyin!


1
Döngüler için kutsal, Batman!
BLT

3

05AB1E , 15 13 12 10 bayt

₄4°ŸεW°ö9Q

-2 sayesinde bayt @Emigna
-3 sayesinde bayt @Grimy

Çevrimiçi deneyin.

Açıklama:

4°Ÿ        # Create a list in the range [1000,10000]
    ʒ       # Filter this list by:
     W      #  Get the smallest digit in the number (without popping the number itself)
      °     #  Take 10 to the power this digit
       ö    #  Convert the number from this base to an integer (in base-10)
        9Q  #  Check if it's equal to 9
  • d=0110d°ö
  • d=11010d°ö
  • d=210010d°ö023452030405
  • d=3100010d°ö0034563004005006
  • d=[4,9]d=2d=3d10

>0[1000,10000]°ö[1111,9000000009000000009000000009]999Qd=0°ö9


1
₄4°Ÿʒ0å}ʒSO9Q. Yarma filtreleri genellikle daha kısadır
Emigna

@Emigna Ah, seri için daha kısa bir yol arıyordum ama tamamen unutmuştum . Teşekkürler. Ve gerçekten de (sonunda) çoklu gevşek filtrelerin daha kısa olması haklısın. Ayrıca bahşiş cevaplarımdan birine ekleyeceğim. Her iki byte için teşekkürler!
Kevin Cruijssen

1
Ve benim diğer 13-byter'ım (ord toplamından ilham == 201 numarası) 4°Lʒ0å}ʒÇOт·-. Ayrıca bu burada, belki birisi kutu golf o bırakarak
Sn Xcoder

1
₄4°ŸʒD0åôO9Q. Tek bir filtre kullanmak genellikle daha kısadır.
Grimmy

1
₄4°ŸʒW°ö9Q
Boş ver

2

Pip , 18 bayt

{0Na&$+a=9}FIm,t*m

-pOkunabilir çıkış elde etmek için çıkış biçiminde bir bayrak kullanın . Çevrimiçi deneyin!

{0Na&$+a=9}FIm,t*m
             m,t*m  Range from 1000 to 10*1000
{         }FI       Filter on this function:
 0Na                 There is at least one 0 in the argument
    &                and
     $+a             The sum of the argument
        =9           equals 9

2

Wolfram Dili (Mathematica) , 56 55 bayt

Select[9!!~Range~9999,Tr@#==Times@@#+9&@*IntegerDigits]

Çevrimiçi deneyin!

9'dan aralığı test ediyoruz! = 945 ile 9999 arasında, çünkü 945 ile 999 arasında sonuç yok. Belki 9000 ile 10007 arasında bir sayı yazmanın daha kısa bir yolu vardır.

Tr@#==Times@@#+9&Anno Koşulu'na eşdeğer olması {a,b,c,d}halinde testlere uygulanır a+b+c+d == a*b*c*d+9.


Geçmişe bakıldığında, 9 !! 999 ya da bir şeyden daha kısa değil, fakat 1000'i geçiyor.
Misha Lavrov

9 nedir! ? Tahmininde, factorials ile ilgili değildir.
Robert Fraser

@RobertFraser Çift faktöryel: 9*7*5*3*1.
Misha Lavrov

2

Ruby , 46 42 41 bayt

?9.upto(?9*4){|x|x.sum==201&&x[?0]&&p(x)}

Çevrimiçi deneyin!

Nasıl çalışır:

  • '9' ile '9999' arasında değişen dizelerde yineleme
  • ASCII değerlerinin toplamının 201 olduğunu kontrol edin
  • Dize sıfır içerip içermediğini kontrol edin (regex olmadan, regex 1 bayt daha uzun olur)

(-2 bayt için teşekkürler Laikoni)


1
9*3sadece olabilir 9, çünkü 201'e karşı kontrol etmek için 4 basamaklı sayılar gerekiyor.
Laikoni

2

Oktav , 49 bayt

J.Doe tarafından önerildiği gibi daha uygun bir çıktı formatı kullanılarak kaydedilen 6 bayt .

@Laikoni'ye düzeltme için teşekkürler .

y=dec2base(x=1e3:9999,10)'-48;x(sum(y)==9>all(y))

Çevrimiçi deneyin!


Octave hakkında hiçbir şey bilmiyorum, ama görünüşe göre ayrılabilirsiniz disp...
J.Doe

J. J. OP, çıkış formatının kabul edilebilir olduğunu onaylamıştır. Önerin için teşekkürler!
Luis Mendo

2

Dart ,  103 100  96 bayt

f()=>List.generate(9001,(i)=>'$i').where((i)=>i.contains('0')&&i.runes.fold(0,(p,e)=>p+e)==201);

  • Dizideki değeri dizeye ayarlayarak -3 bayt, dönüşümü iki kez değil bir kez yaparak
  • CodeUnits yerine runes kullanarak -4 bayt
  • Oldukça kendini açıklayıcı. hücrenin indeksi değer olarak 9001 (0-9000) hücrelerin bir listesini oluşturur, 0'ı içerenleri filtreler, ASCII toplamı 201 olanı filtreler (tüm ASCII karakterlerinin toplamı 9 olduğunda). Bu koşullar, örtülü olarak yılın 4 basamak olduğunu, çünkü 2 ASCII numarası (ve 0) kullanarak 201'e ulaşamazsınız.

    Dartpad'de dene!


    PPCG'ye Hoşgeldiniz. :)
    Laikoni

    1
    Teşekkürler ! Bir süredir gizleniyor, nihayet katılabilir
    Elcan




    2

    PHP, 69, 87 bayt 74 bayt

    for($i=999;$i<9001;$i++){echo((array_sum(str_split($i))==9&strpos($i,"0")!=0)?$i:" ");} for($i=999;$i++<1e4;)echo!strpos($i,48)|array_sum(str_split($i))-9?" ":$i;

    Bunun, her "başarısız" sayı için bir boşluk bıraktığını ve bunun da bir tür korkak boşluk bıraktığını unutmayın. Bu, virgül ayrımına dönüştürülebilir, ancak başka bir 4 karakter daha ekleyecektir:?$i.",":""

    Büyüdüm çünkü 0'ı kontrol etmiyordum. Titus tarafından 13 tarafından kısaltıldı!


    2
    PHP'yi gerçekten tanımıyorum ama bu kod her yıl sıfır içerdiğinden emin mi?
    Laikoni

    Bu kod numarada sıfır kontrolü yapmaz.
    krzysiej 16:18

    1
    13 bayt daha kısa:for($i=999;$i++<1e4;)echo!strpos($i,48)|array_sum(str_split($i))-9?" ":$i;
    Titus

    İşte başka bir bayt: ?"$i,":""er ... şimdi diğer tarafa:?"":"$i,"
    Titus

    Aslında @ Bayt ekleyen @Titus. W i ile bir string ekleyemediğimiz sürece $ i civarında tırnaklara ihtiyacımız yoktur.
    18'de


    2

    Scala ( 76 63 61 56 bayt)

    for(n<-0 to 9000;t=n+""if t.sum==201&t.min<49)println(t)
    

    Çevrimiçi deneyin

    • Önerileriniz için Laikoni'ye teşekkürler
    • Jo King'in yorumunu yaptıktan sonra iki bayt daha akıyor

    1
    PPCG'ye Hoşgeldiniz! Bu kodu TIO'da çalıştırmak için üstbilgi veya altbilgi bölümüne ne eklenmesi gerektiğine dair bir fikriniz var mı? Çevrimiçi deneyin!
    Laikoni

    @Likonikon, SIO'yu TIO'da çalıştırabileceğimi bilmiyordu. Onu düzeltti. Yorumunuz için teşekkürler.
    18:40

    1
    Bunun t.sum==201yerine esere benziyor t.map(_.asDigit).sum==9.
    Laikoni

    Bizim bulabilirsiniz Scala golf için ipuçları ilginç. Örneğin s"$n", olabilir n+""ve s"$t "olabilir gibi görünüyor t+" ".
    Laikoni

    1
    Toplamı 201 numara olarak kullandığınızdan, menzilin 999'dan başlaması gerekmiyor
    Jo King


    1

    Japt, 16 bayt

    Rakam dizilerinin bir dizisini döndürür.

    L²õì l4 k_ת9aZx
    

    Dene


    açıklama

    L                    :100
     ²                   :Squared
      õ                  :Range [1,L²]
       ì                 :Convert each to a digit array
         l4              :Filter elements of length 4
            k_           :Remove each Z that returns truthy (not 0)
              ×          :  When reduced by multiplication
               ª         :  OR
                  Zx     :  When reduced by addition
                9a       :   And subtracted from 9
    

    1
    OP, rakam dizilerinin maalesef geçerli çıktı olmadığına karar verdi: o (
    Sok

    1

    APL (NARS), 45 karakter, 90 bayt

    f←{⍵×⍳(0∊x)∧9=+/x←⍎¨⍕⍵}⋄f¨1e3..5e3⋄f¨5e3..9e3
    

    bazı biçimlendirmelerden sonra test edin:

    1008  1017  1026  1035  1044  1053  1062  1071  1080  1107  1170  1206  1260  
      1305  1350  1404  1440  1503  1530  1602  1620  1701  1710  1800  2007  2016  
      2025  2034  2043  2052  2061  2070  2106  2160  2205  2250  2304  2340  
      2403  2430  2502  2520  2601  2610  2700  3006  3015  3024  3033  3042  3051  
      3060  3105  3150  3204  3240  3303  3330  3402  3420  3501  3510  3600  
      4005  4014  4023  4032  4041  4050  4104  4140  4203  4230  4302  4320  4401  
      4410  4500 
    5004  5013  5022  5031  5040  5103  5130  5202  5220  5301  5310  5400  6003  
      6012  6021  6030  6102  6120  6201  6210  6300  7002  7011  7020  7101  7110  
      7200  8001  8010  8100  9000 
    

    olası alternatif

    r←f;i;x
       r←⍬⋄i←1e3⋄→B
    A: r←r,i
    B: i+←1⋄→A×⍳(0∊x)∧9=+/x←⍎¨⍕i⋄→B×⍳i≤9e3
    

    1

    Jöle , 13 bayt

    ȷ4µṢÄm3Ḍ)ẹ9ṫ4
    

    Çevrimiçi deneyin!

    Nasıl?

    ȷ4µṢÄm3Ḍ)ẹ9ṫ4 - Link: no arguments
    ȷ4            - literal 10^4 = 10000
      µ     )     - for each in range (1,2,3,...,10000): e.g. 3042       or  5211
       Ṣ          -   sort (given an integer makes digits)    [0,2,3,4]      [1,1,2,5]
        Ä         -   cumulative addition                     [0,2,5,9]      [1,2,4,9]
         m3       -   modulo 3 slice (1st,4th,7th...)         [0,9]          [1,9]
           Ḍ      -   convert from decimal digits             9              19
             ẹ9   - 1-based indices equal to nine             [9,99,999,1008,1017,...,8100,9000]
               ṫ4 - tail from the 4th index                   [1008,1017,...,8100,9000]
    
    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.