Liệt kê tất cả các tiêu đề có thể cho các trò chơi Anno


37

Trong loạt trò chơi video Anno có 6 trò chơi với một trò chơi thứ 7 được công bố vào đầu năm 2019. Các tựa game của họ luôn có một năm theo một mô hình cụ thể:

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

  • Tổng số luôn là 9.
  • Những năm dài bốn chữ số.
  • Chúng chứa ít nhất một số không.

Trong các ràng buộc này tồn tại 109 tiêu đề có thể:

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

Mục tiêu của bạn là liệt kê tất cả chúng ở bất kỳ dạng hợp lý nào với số lượng byte ít nhất.


Làm thế nào linh hoạt là định dạng đầu ra? Là này chấp nhận được?
Luis Mendo

1
@LuisMendo Vâng, điều đó tốt với tôi.
Laikoni


1
@aslum Tôi giả sử bạn có nghĩa là rất nhiều không gian, không chỉ một, phải không? Đánh dấu nhận xét không cho phép thể hiện tốt điều đó. Và tôi cho rằng điều đó được cho phép, với điều kiện là định dạng của Luis ở trên được cho phép. ;-)
Erik the Outgolfer 15/10/18

1
@EriktheOutgolfer Tôi nói không với danh sách các chữ số bởi vì chúng thực sự không còn giống như năm nữa.
Laikoni

Câu trả lời:


20

R , 59 51 byte

Xuất ra các số hợp lệ dưới dạng tên của danh sách 201. Tại sao 201? Bởi vì ASCII 0 là 48 và 4 * 48 + 9 là ... vâng. Đã lưu 6 byte bằng cách đặt bí danh ^cho Mapvà 2 byte khác bằng cách sử dụng 1:9e3làm phạm vi.

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

Hãy thử trực tuyến!

Giải trình

# 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
à, greptại sao tôi không bao giờ nhớ rằng nó chuyển sang character...
Giuseppe



9

Thạch , 11 byte

9ȷṢ€æ.ẹ9ṫ19

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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 byte

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

Hãy thử trực tuyến!

Xây dựng một phạm vi từ 999đến 10000, sau đó sử dụng nội tuyến -matchlàm bộ lọc để lấy ra các mục mà regex khớp với 0. Điều này khiến chúng ta cùng với 1000, 1001, 1002, etc.Chúng ta sau đó chuyển nó thành một Where-Objectmệnh đề trong đó chúng ta lấy số hiện tại làm một chuỗi "$_", đặt nó thành một ký tự char, -joincác ký tự đó cùng với +Imô tả Ex(tương tự như eval) để đưa ra tổng số chữ số của chúng. Chúng tôi kiểm tra xem đó là -equal tới 9, và nếu như vậy nó được thông qua trên đường ống. Khi hoàn thành chương trình, những con số đó được chọn từ đường ống và đầu ra ngầm.


5

JavaScript (ES6), 78 73 byte

Đã lưu 2 byte nhờ @KevinCruijssen

Trả về một chuỗi được phân tách bằng dấu cách.

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

Hãy thử trực tuyến!

Làm sao?

Chúng tôi lặp lại trong phạm vi [1008..9000] với số gia là 9 , bỏ qua các số không có 0 .

Tất cả các số này là bội số của 9 , vì vậy tổng các chữ số của chúng được đảm bảo là bội số của 9 .

Bởi vì các số hợp lệ có ít nhất một 0 , chúng có không quá hai 9 , có nghĩa là tổng các chữ số còn lại nhiều nhất là 18 . Do đó, đủ để kiểm tra xem tổng các chữ số có phải là số lẻ hay không.

Do đó kiểm tra:

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

Bạn có thể lưu một byte thay đổi 1008thành 999, vì dù sao nó không chứa 0 và 999+9 = 1008.
Kevin Cruijssen

Hoặc thậm chí là 2 byte bằng cách thay đổi nó thành f=(n=9e3)=>n<1e3?'':(eval([...n+''].join`+`)<10&/0/.test(n)?[n,,]:'')+f(n-9)(mặc dù có dấu phẩy dấu, vì vậy f=(n=9e3)=>n<1e3?'':(eval([...n+''].join`+`)<10&/0/.test(n)?n+' ':'')+f(n-9)với dấu phân cách không gian bao gồm cả dấu cách có thể trông đẹp hơn)
Kevin Cruijssen

@KevinCruijssen Cảm ơn! Tôi thực sự đang cố gắng cập nhật điều này trong một thời gian, nhưng tôi có 500B / s băng thông Internet nơi tôi đang ở tối nay. : /
Arnauld

Tôi biết cảm giác .. Gần đây, mạng internet của chúng tôi ở nhà rất tệ vì không thể tải xuống bất cứ thứ gì trên 10 MB và đôi khi phải làm mới video hoặc trang có hơn 10 hình ảnh một vài lần trước khi tải hoàn toàn .. Thật khó chịu khi tôi làm việc tại nhà vào thứ Hai / thứ Ba ..>.> Ngày mai có người đến sửa nó (và tôi sẽ không rời xa anh ấy cho đến khi nó sửa xong xD)
Kevin Cruijssen

5

JavaScript (Node.js) , 89 byte

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

Hãy thử trực tuyến!

  • -4 byte nhờ @ETHproductions

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

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

Hãy thử trực tuyến!

Giải trình

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

Lần đầu tiên làm mã golf trong JavaScript. Tôi không nghĩ rằng tôi cần phải nói điều đó, nhưng nếu tôi đang làm gì đó sai, xin vui lòng thông báo cho tôi trong các ý kiến ​​dưới đây.

  • -3 byte nhờ @Luis felipe De jesus Munoz

  • -6 byte nhờ @Kevin Cruijssen


1
[...Array(9e3)]thay vào đó Array(9e3).fill()tiết kiệm 2 byte
Luis felipe De jesus Munoz

1
.map(a=>+a)thay vào đó .map(Number)tiết kiệm một byte khác
Luis felipe De jesus Munoz

1
Bạn có thể xóa khoảng trống tại (_, i)để lưu một byte và s[0]+s[1]+s[2]+s[3]có thể eval(s.join`+`)lưu thêm 4 byte.
Kevin Cruijssen

1
Ngoài ra, tôi khá chắc chắn rằng ||có thể |trong câu trả lời của bạn.
Kevin Cruijssen

1
Nếu bạn .map()chỉ sử dụng để tạo phạm vi và tách riêng bộ lọc, bạn có thể lưu 8 byte: Hãy thử trực tuyến!
Sản xuất ETH

5

Python 2 , 57 byte

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

Hãy thử trực tuyến!

2 byte nhờ Dennis

Sử dụng một execvòng lặp để đếm lên ntheo các bước của 9 như 1008, 1017, ..., 9981, 9990, in những vòng đáp ứng điều kiện.

Chỉ bội số của 9 có thể có tổng chữ số 9, nhưng bội số của 9 trong phạm vi này cũng có thể có tổng các chữ số là 18 và 27. Chúng tôi loại trừ những điều này với điều kiện int(`n`,11)%10>8. Giải thích ntrong cơ sở 11, tổng chữ số của nó bằng số modulo 10, giống như trong cơ sở 10, một số bằng tổng số modulo của nó 9. Tổng các chữ số của (9, 18, 27) tương ứng với (9, 8, 7) modulo 10, vì vậy lấy những >8công việc đó để lọc ra số tiền phạt.

Số chứa số 0 là kiểm tra với thành viên chuỗi. '0'in`n`. Điều kiện này được nối với một điều kiện khác có bất đẳng thức chuỗi, sử dụng Python 2 đó xử lý các chuỗi lớn hơn số.


Tôi thích cách Python chơi golf nặng nề dường như thường có các thực thi được tạo tự động rất dài ...
J.Doe

4

sed và grep (và seq), 72 64 63 byte

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

Một số trong số này không dài bốn chữ số (nhưng tôi không chắc trận chung kết greplà gì, vì vậy có lẽ tôi đang chạy sai?)
Sparhawk

@Sparhawk: Grep cuối cùng đảm bảo rằng số đó dài 4 chữ số
Thor

@Thor À đúng rồi. Vì một số lý do, tôi đã phân tích nó như một dấu chấm lửng.
Sparhawk

4

Haskell , 55 byte

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

Cảm ơn @Laikoni, xem các bình luận.

Có thể đọc được

import Data.Char (digitToInt)

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

2
Chào mừng bạn đến với sân golf PPCG và Haskell nói riêng! Bạn có thể lưu một vài byte bằng cách bỏ (-48+)và so sánh tổng với 201thay vì 9. Ngẫu nhiên điều này cũng cho phép bạn sử dụng 1thay vì 1000cho phạm vi.
Laikoni

Ngoài ra phiên bản trước của bạn mà không main=printổn theo sự đồng thuận này trên Meta .
Laikoni

9999có thể 5^6thay thế
Laikoni

1
Ha, luôn có một byte khác để cạo râu! Cảm ơn :-)
mb21

3

R , 82 byte

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

Hãy thử trực tuyến!

Tạo một ma trận xgồm tất cả các số có 4 chữ số có thể, ngoại trừ các số 0 đứng đầu, đi xuống các cột. Sau đó, các bộ lọc cho tổng cột (kỹ thuật số) là 9 và chứa số không, nghĩa là không phải alllà số khác. writein xuống các cột, vì vậy chúng tôi writephải stdoutcó chiều rộng 4và thiết bị tách của "".

Bị ruồng bỏ bởi J.Doe


Câu trả lời tốt đẹp! Tôi đã nghĩ ra một lộ trình khác ...
J.Doe

3

Japt , 20 18 byte.

-2 byte nhờ @Shaggy và @ETHproductions

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

Hãy thử trực tuyến!


Đây thực sự là 28 byte . Thay vào đó, sử dụng số nguyên theo nghĩa đen là 22 byte nhưng A³ò9000 f_ìx ¥9©ZsøTgiúp bạn giảm xuống còn 20.
Shaggy

1
Bạn có thể lưu 1 byte bằng cách sử dụng ìthay vì s¬, điều này phải được thực hiện trong bộ lọc : f_=ì)x ¥9.... Sau đó, bạn có thể lưu cái khác bằng cách kiểm tra xem sản phẩm của Z có bằng không «Z×: Hãy thử trực tuyến!
Sản phẩm ETH

3

Java 8, 128 117 115 byte

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

-11 byte nhờ @nwellnhof .

Hãy thử trực tuyến.

Giải trình:

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
Thế còn chars().sum()==201?
nwellnhof

@nwellnhof À, dĩ nhiên rồi. Cảm ơn!
Kevin Cruijssen

3

R , 85 byte

(chỉ cạnh tranh để lạm dụng dấu ngoặc vuông R tốt nhất ...: 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='')]]]]

Hãy thử trực tuyến!


1
Thánh cho các vòng lặp, Batman!
BLT

3

05AB1E , 15 13 12 10 byte

₄4°ŸεW°ö9Q

-2 byte nhờ @Emigna
-3 byte nhờ @Grimy

Hãy thử trực tuyến.

Giải trình:

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°ö ) sẽ hoạt động như một tổng các chữ số.
  • d= =11010d°ö
  • d= =210010d°ö023452030405
  • d= =3100010d°ö0034563004005006
  • d= =[4,9]d= =2d= =3d-10

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


1
₄4°Ÿʒ0å}ʒSO9Q. Bộ lọc chia thường ngắn hơn
Emigna

@Emigna Ah, tôi đang tìm kiếm một cách ngắn hơn cho phạm vi, nhưng hoàn toàn quên mất . Cảm ơn. Và bạn thực sự đúng rằng nhiều bộ lọc lỏng lẻo (ở cuối) ngắn hơn. Cũng sẽ thêm nó vào một trong những câu trả lời mẹo của tôi. Cảm ơn cho cả hai byte!
Kevin Cruijssen

1
Và 13 -terter khác của tôi (lấy cảm hứng từ thủ thuật tổng == 201) là 4°Lʒ0å}ʒÇOт·-. Để lại điều này ở đây, có lẽ ai đó có thể chơi gôn hơn nữa
Ông Xcoder

1
₄4°ŸʒD0åôO9Q. Sử dụng một bộ lọc duy nhất thường ngắn hơn.
Grimmy

1
Nevermind, đây là 10:₄4°ŸʒW°ö9Q
Grimmy

2

Pip , 18 byte

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

Sử dụng cờ định dạng ouput như -pđể có được đầu ra có thể đọc được. Hãy thử trực tuyến!

{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

Ngôn ngữ Wolfram (Mathicala) , 56 55 byte

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

Hãy thử trực tuyến!

Chúng tôi kiểm tra phạm vi từ 9 !! = 945 đến 9999, vì không có kết quả nào giữa 945 và 999. Có thể có một cách ngắn hơn để viết một số trong khoảng từ 9000 đến 10007.

Tr@#==Times@@#+9&áp dụng cho {a,b,c,d}các thử nghiệm nếu a+b+c+d == a*b*c*d+9, kết thúc tương đương với Điều kiện Anno.


Nhìn lại, 9 !! không ngắn hơn 999 hay gì, nhưng nó vượt quá 1000.
Misha Lavrov

9 là gì !! ? Trong đoán nó không liên quan đến giai thừa.
Robert Fraser

@RobertFraser Nhân tử kép : 9*7*5*3*1.
Misha Lavrov

2

Ruby , 46 42 41 byte

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

Hãy thử trực tuyến!

Làm thế nào nó hoạt động:

  • Lặp lại trên các chuỗi từ '9' đến '9999'
  • Kiểm tra tổng giá trị ASCII là 201
  • Kiểm tra xem chuỗi có chứa số 0 không (không có regex, regex sẽ dài hơn 1 byte)

(Cảm ơn Laikoni cho -2 byte)


1
9*3có thể chỉ 9vì kiểm tra so với năm 201 đã yêu cầu số có 4 chữ số.
Laikoni

2

Octave , 49 byte

6 byte được lưu bằng định dạng đầu ra thuận tiện hơn theo đề xuất của J.Doe .

Cảm ơn @Laikoni đã sửa .

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

Hãy thử trực tuyến!


Tôi không biết gì về Octave, nhưng có vẻ như bạn có thể rời dispkhỏi ...
J.Doe

@ J.Doe OP đã xác nhận rằng định dạng đầu ra là chấp nhận được. Cám ơn vì sự gợi ý!
Luis Mendo

2

Phi tiêu ,  103 100  96 byte

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

  • -3 byte bằng cách đặt giá trị trong mảng thành chuỗi, thực hiện chuyển đổi một lần và không hai lần
  • -4 byte bằng cách sử dụng rune thay vì codeUnits
  • Khá tự giải thích. tạo một danh sách các ô 9001 (0-9000) với chỉ số của ô là giá trị, lọc các ô chứa 0 rồi một ô có tổng ASCII là 201 (Kết quả nếu tất cả các ký tự ASCII tổng bằng 9). Những điều kiện này bao gồm cả năm dài 4 chữ số vì sử dụng 2 số ASCII (và 0), bạn không thể đạt tới 201.

    Hãy thử nó trên Dartpad!


    Chào mừng đến với PPCG. :)
    Laikoni

    1
    Cảm ơn ! Được ẩn giấu một lúc, cuối cùng cũng có thể tham gia
    Elcan




    2

    PHP, 69, 87 byte 74 byte

    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;

    Lưu ý điều này đặt một khoảng trống cho mỗi số "không thành công", dẫn đến một số khoảng cách thú vị. Điều này có thể được thay đổi thành phân tách dấu phẩy, nhưng sẽ thêm 4 ký tự khác:?$i.",":""

    Lớn hơn bởi vì tôi đã không kiểm tra 0. Derp. Rút ngắn bằng 13 bởi Tít!


    2
    Tôi thực sự không biết PHP, nhưng mã này có đảm bảo rằng mỗi năm có một số không?
    Laikoni

    Mã này không kiểm tra số không trong số.
    krzysiej

    1
    13 byte ngắn hơn:for($i=999;$i++<1e4;)echo!strpos($i,48)|array_sum(str_split($i))-9?" ":$i;
    Tít

    Ở đây, một byte khác: ?"$i,":""er ... bây giờ ngược lại:?"":"$i,"
    Tít

    Trên thực tế @Titus có thêm một vài byte. Chúng tôi không cần báo giá khoảng $ i trừ khi chúng tôi bao gồm một chuỗi với nó.
    vào


    2

    Scala ( 76 63 61 56 byte)

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

    Dùng thử trực tuyến

    • Cảm ơn Laikoni vì những gợi ý
    • Hai byte nữa đổ ra sau khi áp dụng bình luận của Jo King

    1
    Chào mừng đến với PPCG! Bạn có biết những gì cần được thêm vào phần đầu trang hoặc chân trang để có được mã này để chạy trên TIO không? Hãy thử trực tuyến!
    Laikoni

    @Laikoni, không biết tôi có thể chạy Scala trong TIO. Đã sửa nó. Cảm ơn các bình luận.
    jrook

    1
    Nó trông giống như t.sum==201công trình thay vì t.map(_.asDigit).sum==9.
    Laikoni

    Bạn có thể thấy những lời khuyên của chúng tôi để chơi golf ở Scala thú vị. Ví dụ, nó trông giống như s"$n"có thể n+""s"$t "có thể t+" ".
    Laikoni

    1
    Vì bạn đang sử dụng tổng là 201 lừa, nên phạm vi không cần bắt đầu ở 999
    Jo King


    1

    Japt, 16 byte

    Trả về một mảng các mảng số.

    L²õì l4 k_ת9aZx
    

    Kiểm tra nó


    Giải trình

    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 đã quy định rằng mảng số không phải là đầu ra hợp lệ không may: o (
    Sok

    1

    APL (NARS), 45 ký tự, 90 byte

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

    kiểm tra một số định dạng sau:

    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 
    

    có thể thay thế

    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

    Thạch , 13 byte

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

    Hãy thử trực tuyến!

    Làm sao?

    ȷ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]
    
    Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
    Licensed under cc by-sa 3.0 with attribution required.