รายชื่อเกมที่เป็นไปได้ทั้งหมดสำหรับเกม Anno


37

ในวิดีโอเกมซีรีส์ Annoมี 6 เกมที่มีเกมที่ 7 ซึ่งเปิดตัวในต้นปี 2562 ชื่อของพวกเขามักจะมีรูปแบบเฉพาะปีต่อปีในรูปแบบเฉพาะ:

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

  • ผลรวมดิจิตอลอยู่เสมอ 9
  • ปีมีความยาวสี่หลัก
  • ประกอบด้วยศูนย์อย่างน้อยหนึ่งรายการ

ภายในข้อ จำกัด เหล่านี้มีชื่อที่เป็นไปได้ 109 ข้อ:

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

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


รูปแบบผลลัพธ์มีความยืดหยุ่นเพียงใด คือนี้ยอมรับ?
Luis Mendo

1
@ LuisMendo ใช่มันไม่เป็นไรสำหรับฉัน
Laikoni


1
@ aslum ฉันคิดว่าคุณหมายถึงช่องว่างมากมายไม่ใช่แค่ใช่มั้ย เครื่องหมายแสดงความคิดเห็นไม่อนุญาตให้มีการเป็นตัวแทนที่ดี และฉันจะสมมติว่าได้รับอนุญาตเนื่องจากรูปแบบของ Luis ได้รับอนุญาต ;-)
Erik the Outgolfer

1
@EriktheOutgolfer ฉันจะบอกว่าไม่รายการของตัวเลขเพราะพวกเขาไม่ได้ดูเหมือนปีอีกต่อไป
Laikoni

คำตอบ:


20

R , 59 51 ไบต์

ส่งออกตัวเลขที่ถูกต้องเป็นชื่อของรายการ 201 ทำไมต้อง 201 เนื่องจาก ASCII 0 คือ 48 และ 4 * 48 + 9 คือ ... ใช่ บันทึก 6 ไบต์โดยใช้นามแฝง^ถึงMapและอีก 2 รายการโดยใช้1:9e3เป็นช่วง

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

ลองออนไลน์!

คำอธิบาย

# 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
อ่าgrepทำไมฉันไม่เคยจำได้ว่ามันส่งถึงcharacter...
Giuseppe



9

เยลลี่ 11 ไบต์

9ȷṢ€æ.ẹ9ṫ19

ลองออนไลน์!

มันทำงานอย่างไร

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 ไบต์

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

ลองออนไลน์!

โครงสร้างช่วงจาก999ไป10000แล้วใช้แบบอินไลน์เป็นตัวกรองที่จะดึงออกรายการเหล่านั้นที่ตรงกับ-match regex 0สิ่งนี้ทำให้เรากับ1000, 1001, 1002, etc.เราแล้วเราท่อที่เป็นWhere-Objectประโยคที่เราใช้หมายเลขปัจจุบันเป็นสตริง"$_", โยนมันเป็น - charอาเรย์, -joinตัวละครเหล่านั้นพร้อมกับ+และInvoke - Expression (คล้ายกับ eval) ที่จะเกิดขึ้นกับผลรวมหลักของพวกเขา เราตรวจสอบไม่ว่าจะเป็น-eqทางเพศไป9และถ้าเป็นเช่นนั้นก็ส่งผ่านท่อ เมื่อเสร็จสิ้นโปรแกรมตัวเลขเหล่านั้นจะถูกหยิบขึ้นมาจากไปป์ไลน์และเอาท์พุทโดยปริยาย


5

JavaScript (ES6), 78 73 ไบต์

บันทึก 2 ไบต์ขอบคุณ @KevinCruijssen

ส่งคืนสตริงที่คั่นด้วยช่องว่าง

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

ลองออนไลน์!

อย่างไร?

เราย้ำกว่าช่วงกับการเพิ่มขึ้นของไม่สนใจตัวเลขที่ไม่ได้มี0[1008..9000]90

ตัวเลขทั้งหมดเหล่านี้มีหลายรายการดังนั้นผลรวมของตัวเลขของพวกเขารับประกันได้ว่าจะมีหลายเช่นกัน99

เนื่องจากตัวเลขที่ถูกต้องมีอย่างน้อยหนึ่งพวกเขามีไม่เกินสอง 's ซึ่งหมายความว่าผลรวมของตัวเลขที่เหลืออยู่ที่ส่วนใหญ่18ดังนั้นจึงเพียงพอที่จะทดสอบว่าผลรวมของตัวเลขเป็นเลขคี่หรือไม่0918

ดังนั้นการทดสอบ:

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

คุณสามารถบันทึกไบต์เปลี่ยน1008ไป999เพราะมันไม่ได้มี 0 999+9 = 1008อยู่แล้วและ
Kevin Cruijssen

หรือแม้กระทั่ง 2 ไบต์ด้วยการเปลี่ยนเป็นf=(n=9e3)=>n<1e3?'':(eval([...n+''].join`+`)<10&/0/.test(n)?[n,,]:'')+f(n-9)(มีคอมม่าต่อท้ายด้วยดังนั้นf=(n=9e3)=>n<1e3?'':(eval([...n+''].join`+`)<10&/0/.test(n)?n+' ':'')+f(n-9)ด้วยตัวคั่นช่องว่างรวมถึงพื้นที่ต่อท้ายอาจดูสวยกว่า)
Kevin Cruijssen

@KevinCruijssen ขอบคุณ! ฉันพยายามอัปเดตสิ่งนี้ซักระยะ แต่ฉันมีแบนด์วิธอินเทอร์เน็ตประมาณ 500B / s ในคืนนี้ : /
Arnauld

ฉันรู้ว่าความรู้สึก .. เมื่อเร็ว ๆ นี้อินเทอร์เน็ตของเราที่บ้านมีอึด้วยเหตุผลบางอย่าง .. ไม่สามารถดาวน์โหลดอะไรเกิน 10 MB และบางครั้งต้องรีเฟรชวิดีโอหรือหน้าเว็บที่มี 10+ ภาพก่อนที่มันจะโหลดอย่างสมบูรณ์ .. เมื่อฉันทำงานจากที่บ้านในวันจันทร์ / วันอังคาร .. >.> พรุ่งนี้มีคนมาซ่อมมัน (และฉันจะไม่ทิ้งเขาไว้จนกว่าจะได้รับการแก้ไข xD)
Kevin Cruijssen

5

JavaScript (Node.js) , 89 ไบต์

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

ลองออนไลน์!

  • -4 ไบต์ขอบคุณ @ETHproductions

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

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

ลองออนไลน์!

คำอธิบาย

[...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 ฉันไม่คิดว่าฉันต้องพูด แต่ถ้าฉันทำอะไรผิดโปรดแจ้งฉันในความคิดเห็นด้านล่าง

  • -3 ไบต์ขอบคุณ @Luis felipe De jesus Munoz

  • -6 ไบต์ขอบคุณ @Kevin Cruijssen


1
[...Array(9e3)]แทนที่จะArray(9e3).fill()ช่วยประหยัด 2 ไบต์
หลุยส์เฟลิ De Jesus Munoz

1
.map(a=>+a).map(Number)ช่วยประหยัดไบต์อื่นแทน
Luis felipe De jesus Munoz

1
คุณสามารถลบช่องว่างที่(_, i)เพื่อบันทึกไบต์และs[0]+s[1]+s[2]+s[3]สามารถeval(s.join`+`)บันทึกเพิ่มอีก 4 ไบต์
Kevin Cruijssen

1
นอกจากนี้ฉันค่อนข้างแน่ใจว่า||สามารถเป็น|คำตอบของคุณ
Kevin Cruijssen

1
หากคุณใช้.map()เพียงเพื่อสร้างช่วงและแยกการกรองไว้คุณสามารถบันทึกได้ 8 ไบต์: ลองออนไลน์!
ETHproductions

5

Python 2 , 57 ไบต์

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

ลองออนไลน์!

2 ไบต์ขอบคุณเดนนิส

ใช้การexecวนซ้ำเพื่อนับnในขั้นตอนที่ 9 เป็น 1008, 1017, ... , 9981, 9990 เพื่อพิมพ์สิ่งที่ตรงตามเงื่อนไข

เพียง แต่หลายรายการสามารถมี 9 บาทรวม 9 แต่หลายรายการที่ 9 ในช่วงนี้ยังสามารถมีผลรวมของตัวเลข 18 และ 27 int(`n`,11)%10>8เรากฎเหล่านี้ออกโดยมีเงื่อนไข การตีความnในฐานที่ 11 ผลรวมหลักของมันเท่ากับโมดูโล 10 จำนวนเช่นเดียวกับในฐาน 10 a เท่ากับผลรวมโมดูโล 9 หลักผลรวมหลักของ (9, 18, 27) ตรงกับ (9, 8, 7) modulo 10 ดังนั้นการใช้>8งานเหล่านี้เพื่อกรองเก้า

จำนวนที่มีศูนย์คือการตรวจสอบกับสมาชิกสตริง '0'in`n`. เงื่อนไขนี้จะถูกรวมเข้ากับเงื่อนไขอื่นที่มีความไม่เท่าเทียมกันซึ่งถูกใช้โดย Python 2 นั้นจะปฏิบัติต่อสตริงมากกว่าตัวเลข


ผมชอบวิธีการอย่างหนักแข็งแรงเล่นกอล์ฟหลามดูเหมือนว่ามักจะมีมหาศาล autogenerated ยาว executables ...
J.Doe

4

sed และ grep (และ seq), 72 64 63 ไบต์

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

บางส่วนของเหล่านี้จะไม่ยาวสี่หลัก ( แต่ผมไม่แน่ใจว่าสิ่งสุดท้ายgrepคือดังนั้นบางทีผมทำงานมันผิด?)
สปาร์

@Sparhawk: สร้างความมั่นใจ grep สุดท้ายที่ตัวเลขเป็นตัวเลข 4 หลักยาว
ธ อร์

@Thor Ah ใช่ ด้วยเหตุผลบางอย่างฉันแยกวิเคราะห์ว่าเป็นจุดไข่ปลา
Sparhawk

4

Haskell , 55 ไบต์

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

ขอบคุณ @Laikoni เห็นความคิดเห็น

อ่านได้:

import Data.Char (digitToInt)

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

2
ยินดีต้อนรับสู่การเล่น PPCG และ Haskell โดยเฉพาะ! คุณสามารถบันทึกไม่กี่ไบต์โดยวาง(-48+)และเปรียบเทียบผลรวมกับแทน201 9อนึ่งนี่ยังช่วยให้คุณใช้1แทน1000ช่วง
Laikoni

รุ่นก่อนหน้าของคุณที่ไม่มีmain=printก็ดีตามฉันทามติใน Metaนี้
Laikoni

9999สามารถ5^6แทน
Laikoni

1
ฮ่ามีโกนอีกหนึ่งไบต์แล้ว! ขอบคุณ :-)
mb21

3

R , 82 ไบต์

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

ลองออนไลน์!

สร้างเมทริกซ์xของตัวเลข 4 หลักที่เป็นไปได้ทั้งหมดยกเว้นคอลัมน์นำหน้าลงคอลัมน์ จากนั้นกรองผลรวมคอลัมน์ (ดิจิทัล) จำนวน 9 รายการและมีค่าศูนย์นั่นคือallไม่ใช่ค่าที่ไม่ใช่ศูนย์ writeพิมพ์ลงคอลัมน์ดังนั้นเราwriteจะstdoutมีความกว้างของและแยกของ4""

แพ้ไปแล้วโดย J.Doe


คำตอบที่ดี! ฉันมากับเส้นทางที่แตกต่างกัน ...
J.Doe

3

Japt , 20 18 ไบต์

-2 ไบต์ต้องขอบคุณ @Shaggy และ @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

ลองออนไลน์!


นี้เป็นจริง28 ไบต์ ใช้จำนวนเต็มตามตัวอักษรแทน 22 ไบต์ แต่A³ò9000 f_ìx ¥9©ZsøTทำให้คุณกลับไปที่ 20
Shaggy

1
คุณสามารถบันทึก 1 ไบต์โดยใช้ìแทนsและซึ่งจะต้องมีการดำเนินการในการกรอง:¬ f_=ì)x ¥9...จากนั้นคุณสามารถบันทึกอีกด้วยการตรวจสอบว่าผลิตภัณฑ์ของ Z เป็นศูนย์ด้วย«Z×: ลองออนไลน์!
ETHproductions

3

Java 8, 128 117 115 ไบต์

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 ไบต์ขอบคุณที่@nwellnhof

ลองออนไลน์

คำอธิบาย:

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
เกี่ยวกับchars().sum()==201อะไร
nwellnhof

@nwellnhof อาแน่นอน ขอบคุณ!
Kevin Cruijssen

3

R , 85 ไบต์

(เพียงแข่งขันเพื่อการละเมิดที่ดีที่สุดของวงเล็บเหลี่ยม R ... : 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='')]]]]

ลองออนไลน์!


1
ศักดิ์สิทธิ์สำหรับลูปแบทแมน!
BLT

3

05AB1E , 15 13 12 10 ไบต์

₄4°ŸεW°ö9Q

-2 ไบต์ขอบคุณ@Emigna
-3 ไบต์ขอบคุณ@Grimy

ลองออนไลน์

คำอธิบาย:

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. ตัวกรองแยกมักจะสั้นกว่า
Emigna

@Emigna โอ้ฉันกำลังมองหาวิธีที่สั้นสำหรับช่วง แต่สมบูรณ์ลืมเกี่ยวกับ ขอบคุณ และคุณพูดถูกจริง ๆ ว่าฟิลเตอร์หลวม ๆ (ตอนจบ) นั้นสั้นกว่า จะเพิ่มไปยังคำตอบเคล็ดลับของฉันหรือไม่ ขอบคุณสำหรับทั้งสองไบต์!
Kevin Cruijssen

1
และอื่น ๆ 13 byter ของฉัน (แรงบันดาลใจจากผลรวมอ๊อด == 201 เคล็ดลับ) 4°Lʒ0å}ʒÇOт·-เป็น ออกจากที่นี่บางทีใครบางคนสามารถเล่นกอล์ฟต่อไปได้
Mr. Xcoder

1
₄4°ŸʒD0åôO9Q. การใช้ตัวกรองเดียวมักจะสั้นกว่า
Grimmy

1
ไม่เป็นไรนี่คือ 10:₄4°ŸʒW°ö9Q
Grimmy

2

Pip , 18 ไบต์

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

ใช้แฟล็กรูปแบบ ouput เช่น-pรับเอาต์พุตที่อ่านได้ ลองออนไลน์!

{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 (Mathematica) , 56 55 ไบต์

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

ลองออนไลน์!

เราทดสอบช่วงจาก 9 !! = 945 ถึง 9999 เนื่องจากไม่มีผลลัพธ์ระหว่าง 945 ถึง 999 อาจมีวิธีที่สั้นกว่าในการเขียนตัวเลขระหว่าง 9000 ถึง 1,0007 เช่นกัน

Tr@#==Times@@#+9&นำไปใช้กับ{a,b,c,d}การทดสอบว่าa+b+c+d == a*b*c*d+9ซึ่งเทียบเท่ากับ The Anno Condition หรือไม่


ในการมองย้อนกลับ 9 !! ไม่ได้สั้นไปกว่า 999 หรือบางอย่าง แต่มันจะเต้นได้ 1,000 คะแนน
Misha Lavrov

9 คืออะไร !! ? ในการคาดเดามันไม่เกี่ยวข้องกับแฟคทอเรียล
Robert Fraser

ปัจจัย @RobertFraser 9*7*5*3*1คู่:
Misha Lavrov

2

Ruby , 46 42 41 ไบต์

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

ลองออนไลน์!

มันทำงานอย่างไร:

  • ซ้ำในสตริงตั้งแต่ '9' ถึง '9999'
  • ตรวจสอบว่าผลรวมของค่า ASCII คือ 201
  • ตรวจสอบว่าสายอักขระมีศูนย์ (ไม่มี regex, regex จะยาว 1 ไบต์)

(ขอบคุณ Laikoni สำหรับ -2 ไบต์)


1
9*3อาจเป็นเพียง9เพราะการตรวจสอบกับ 201 แล้วต้องใช้ตัวเลข 4 หลัก
Laikoni

2

อ็อกเทฟ 49 ไบต์

6 ไบต์บันทึกไว้โดยใช้รูปแบบการส่งออกที่สะดวกมากขึ้นตามที่แนะนำโดยJ.Doe

ขอขอบคุณที่@Laikoniสำหรับการแก้ไข

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

ลองออนไลน์!


ฉันไม่รู้อะไรเลยเกี่ยวกับอ็อกเทฟ แต่ดูเหมือนว่าคุณจะสามารถออกdispจาก ...
J.Doe

@ J.Doe OP ยืนยันว่ารูปแบบผลลัพธ์เป็นที่ยอมรับ ขอบคุณสำหรับคำแนะนำ!
Luis Mendo

2

Dart ,  103 100  96 ไบต์

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

  • -3 ไบต์โดยการตั้งค่าในอาร์เรย์เป็นสตริงทำให้การแปลงหนึ่งครั้งและไม่ใช่สองครั้ง
  • -4 ไบต์โดยใช้อักษรรูนแทน codeUnits
  • สวยอธิบายตนเอง สร้างรายการของเซลล์ 9001 (0-9000) โดยมีดัชนีของเซลล์เป็นค่ากรองตัวกรองที่มี 0 จากนั้นเซลล์ที่มีผลรวม ASCII เท่ากับ 201 (ผลลัพธ์คือถ้าอักขระ ASCII ทั้งหมดรวมเป็น 9) เงื่อนไขเหล่านี้โดยนัยรวมถึงปีที่มีความยาว 4 หลักเนื่องจากใช้ 2 หมายเลข ASCII (และ 0) คุณจะไม่สามารถเข้าถึง 201

    ลองใช้กับ Dartpad!


    ยินดีต้อนรับสู่ PPCG :)
    Laikoni

    1
    ขอบคุณมาก! เคยซุ่มซ่อนอยู่ครู่หนึ่งในที่สุดก็สามารถเข้าร่วมได้
    Elcan




    2

    PHP, 69, 87 ไบต์ 74 ไบต์

    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;

    หมายเหตุสิ่งนี้ทำให้มีที่ว่างสำหรับหมายเลข "ล้มเหลว" ทุกอันทำให้มีระยะห่างแบบขี้ขลาดบางประเภท สิ่งนี้สามารถเปลี่ยนเป็นการแยกด้วยเครื่องหมายจุลภาค แต่จะเพิ่มอีก 4 อักขระ:?$i.",":""

    ใหญ่กว่าเพราะฉันไม่ได้ตรวจสอบ 0. Derp ย่อโดย 13 โดย Titus!


    2
    ฉันไม่รู้ PHP จริงๆ แต่รหัสนี้รับรองว่าในแต่ละปีมีศูนย์หรือไม่
    Laikoni

    รหัสนี้ไม่ได้ตรวจสอบศูนย์ในจำนวน
    krzysiej

    1
    สั้นลง 13 ไบต์:for($i=999;$i++<1e4;)echo!strpos($i,48)|array_sum(str_split($i))-9?" ":$i;
    ติตัส

    นี่คืออีก byte: ?"$i,":""เอ้อ ... ตอนนี้ทางกลับกัน:?"":"$i,"
    ติตัส

    จริง ๆ แล้ว @Titus ที่เพิ่มสองสามไบต์ เราไม่จำเป็นต้องมีเครื่องหมายคำพูดประมาณ $ i เว้นแต่ว่าเราจะรวมสตริงด้วย
    aslum


    2

    สกาลา ( 76 63 61 56 ไบต์)

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

    ลองออนไลน์

    • ขอบคุณ Laikoni สำหรับคำแนะนำ
    • อีกสองไบต์หลั่งหลังจากใช้ความคิดเห็นของ Jo King

    1
    ยินดีต้อนรับสู่ PPCG! คุณมีความคิดว่าต้องเพิ่มสิ่งใดในส่วนหัวกระดาษหรือท้ายกระดาษเพื่อให้รหัสนี้ทำงานบน TIO หรือไม่ ลองออนไลน์!
    Laikoni

    @Laikoni ไม่รู้ว่าฉันสามารถเรียกใช้ Scala ใน TIO ได้ ซ่อมมัน. ขอบคุณสำหรับความคิดเห็น
    jrook

    1
    ดูเหมือนว่าผลงานแทนt.sum==201 t.map(_.asDigit).sum==9
    Laikoni

    คุณอาจพบเคล็ดลับของเราสำหรับการเล่นกอล์ฟใน Scala ที่น่าสนใจ เช่นดูเหมือนว่าs"$n"สามารถn+""และสามารถs"$t " t+" "
    Laikoni

    1
    เนื่องจากคุณกำลังใช้ผลรวมอยู่ที่ 201 เคล็ดลับช่วงไม่จำเป็นต้องเริ่มต้นที่ 999
    Jo King


    1

    Japt, 16 ไบต์

    ส่งกลับอาร์เรย์ของอาร์เรย์หลัก

    L²õì l4 k_ת9aZx
    

    ทดสอบมัน


    คำอธิบาย

    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 ได้ตัดสินว่าอาร์เรย์หลักไม่ใช่เอาต์พุตที่ไม่ถูกต้องขออภัย: o (
    Sok

    1

    APL (NARS), 45 ตัวอักษร, 90 ไบต์

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

    ทดสอบการจัดรูปแบบอีกครั้ง:

    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 
    

    ทางเลือกที่เป็นไปได้

    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

    เยลลี่ขนาด 13 ไบต์

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

    ลองออนไลน์!

    อย่างไร?

    ȷ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]
    
    โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
    Licensed under cc by-sa 3.0 with attribution required.