ปัญหาข้าวและหมากรุก


41

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

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

จักรพรรดิประหลาดใจที่ชายคนนั้นขอรางวัลเล็ก ๆ น้อย ๆ เช่นนี้ แต่เมื่อนักคณิตศาสตร์ของเขาเริ่มนับเขาก็สูญเสียหนึ่งในจังหวัดของเขา

งาน

กำหนดความยาวด้านข้างของกระดานหมากรุกสมมุติ (ซึ่งคือ 8 บนกระดานหมากรุกเริ่มต้น) และตัวทวีคูณระหว่างกำลังสอง (ซึ่งเป็น 2 ในตำนาน) คำนวณจำนวนข้าวที่จักรพรรดิต้องจ่ายให้กับผู้ชาย

หมายเหตุ

  • ความยาวด้านจะเป็นจำนวนเต็มบวกเสมอ ตัวคูณอาจเป็นจำนวนตรรกยะแทนก็ได้

  • หากภาษาที่คุณเลือกไม่สามารถแสดงตัวเลขที่มีขนาดใหญ่มากมันก็โอเคตราบใดที่โปรแกรมของคุณสามารถประมวลผลอินพุตที่เล็กลงได้อย่างถูกต้อง

  • นอกจากนี้หากภาษาที่คุณเลือกใช้ปัดเศษค่าที่มากขึ้น (ด้วยเครื่องหมายอธิบาย) มันก็โอเคถ้าค่าเหล่านั้นถูกต้องโดยประมาณ

Testcases

Input (side length, multiplier) => Output
8, 2                            => 18446744073709551615
3, 6                            => 2015539
7, 1.5                          => 850161998.2854
5, -3                           => 211822152361
256, 1                          => 65536
2, 2                            => 15
2, -2                           => -5

โปรดทราบว่าสูตรที่ชัดเจน

result = (multiplier ^ (side ^ 2) - 1) / (multiplier - 1)

ดำเนินการผิดพลาดในmultiplier = 1ฐานะ

1 ^ (side ^ 2) - 1 = 0
1 - 1 = 0
0 / 0 != side ^ 2 (as it should be)

เกณฑ์การให้คะแนน

นี่คือรหัสกอล์ฟ คำตอบที่สั้นที่สุดในการชนะไบต์


4
คุณอาจต้องการกรณีทดสอบที่ตัวคูณเป็น 1 และอีกกรณีหนึ่งซึ่งเป็น 0 (สมมติว่าทั้งสองถูกต้อง) นอกจากนี้ "อะไรก็ได้" ก็กว้างพอสมควรสแควร์รูทของจำนวนลบจะนับหรือไม่ แล้วมันฝรั่งล่ะ? ;) ฉันขอแนะนำ "จำนวนจริงใด ๆ " หรือบางสิ่งบางอย่าง
FryAmTheEggman

4
If your language of choose can't display too large numbers, it's ok as long as your program can correctly process smaller inputsระวังที่ทำให้เกิดปัญหาในอดีต meta.codegolf.stackexchange.com/a/8245/31716
DJMcMayhem

24
... มันจะต้องเป็นจังหวัดที่อุดมสมบูรณ์เพราะแม้กระทั่งทุกวันนี้การผลิตข้าวในแต่ละปีของโลกยังน้อยกว่า 2 ^ 64 เม็ด
vsz

1
@ vsz จริงๆแล้วคนที่ถูกฆ่าตาย จำนวนเงินที่เพิ่มเข้ามาเพื่อมอบให้ทั้งราชอาณาจักรให้กับมนุษย์ดังนั้นวิธีที่ง่ายกว่านั้นก็คือเอา
cst1992

1
@ cst1992 เวอร์ชันที่ฉันอ่านบอกว่าชายคนนี้ยอมแพ้ตามคำขอของเขาและได้รับจังหวัดเป็นของขวัญ
user6245072

คำตอบ:


23

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

²b1ḅ

นี้จะใช้วิธีการจาก@ คำตอบ

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

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

²b1ḅ  Main link. Arguments: x (side length), y (multiplier)

²     Square; yield x².
 b1   Convert to base 1 (unary), yielding a list of x² ones.
   ḅ  Convert from base y to real number.
      This yields y^(x²-1) + ... + y + 1.


23

APL, 10 ไบต์

⎕⊥1+0×⍳⎕*2

ถูกใช้เพื่ออ่านอินพุตของผู้ใช้สองครั้ง หากเราเก็บความยาวด้านเป็น sและตัวคูณเป็นmเราจะได้รหัสต่อไปนี้

m⊥1+0×⍳s*2

และนี่คือวิธีที่ APL วิเคราะห์โค้ดนี้

คำอธิบายของอัลกอริทึม


4
หรือเป็นฟังก์ชั่นรถไฟ: ⊣⊥1⍴⍨⊢×⊢(8 ไบต์) ในฐานะที่เป็นคำสั่ง REPL แบบโต้ตอบ⎕⊥×⍳⎕*2(7 ไบต์) ก็สามารถทำงานได้เช่นกัน
เดนนิส

19

Python ขนาด 40 ไบต์

lambda n,m:eval('1+m*('*n*n+'0'+')'*n*n)

สร้างและประเมินสตริงเช่น

1+m*(1+m*(1+m*(1+m*(0))))

ที่เข้ารหัสผลรวมเป็นพหุนามแบบ Hornerizedพร้อมn*nเงื่อนไข

วิธีการที่แตกต่างกันมากมายให้นับไบต์ที่คล้ายกันมาก:

#String evaluation
lambda n,m:eval('1+m*('*n*n+'0'+')'*n*n)   #40

#Direct summation
lambda n,m:sum(m**i for i in range(n*n))   #40
lambda n,m:sum(map(m.__pow__,range(n*n)))  #41

#Direct formula
lambda n,m:n*n*(1==m)or(m**n**2-1)/(m-1)   #40

#Iterative sequence
f=lambda n,m,j=0:j<n*n and 1+m*f(n,m,j+1)  #41
def f(n,m):s=0;exec"s=s*m+1;"*n*n;print s  #41

#Recursive expression
#Fails due to float imprecision of square root
f=lambda n,m:n and 1+m*f((n*n-1)**.5,m)    #39*

2
ใช่ฉันไม่ดี อย่างไรก็ตามฉันชอบที่จะเห็นวิธีการที่แตกต่างกันทั้งหมดที่คุณใช้ :)
FryAmTheEggman



11

JavaScript (ES2016 / ES7), 31 29 28 ไบต์

a=>b=>(b**(a*a)-1)/--b||a*a

เพียงแค่ @Bassdrop Cumberwubwubwub และรุ่น ES6 ของ @ Kaizo แต่มีโอเปอเรเตอร์การยกกำลัง :) (ฉันมีชื่อเสียงไม่เพียงพอที่จะแสดงความคิดเห็นแทน)

แก้ไข: /+(b-1)เปลี่ยนเป็น/--b(ขอบคุณ @Neil)

แก้ไข: ตอนนี้ใช้การแกง (ขอบคุณ @MamaFunRoll)


ยินดีต้อนรับสู่ PPCG! คำตอบของคุณค่อนข้างดี!
NoOneIsHere

ยินดีต้อนรับ! +ผู้ประกอบการคือการทดสอบฉันลืมที่จะแก้ไขออกมาเพื่อให้คุณสามารถโกน 1 ไบต์โดยเลี่ยงมัน :)
Bassdrop Cumberwubwubwub

สูตรไม่ทำงานสำหรับ m = 1: 3
user6245072

@ user6245072 คุณอยู่ใน chrome canary หรือไม่ หรือบนโหนด หากอยู่ในโหนดให้เปิดใช้งานการตั้งค่าความสามัคคี
NiCk Newman

คุณจะ/--bประหยัดไบต์หรือสองหรือไม่
Neil



8

Javascript ES6, 59 37 35 34 ไบต์

a=>b=>(Math.pow(b,a*a)-1)/--b||a*a` 

ขอบคุณ @Kaizo สำหรับการกำจัดเนื้อที่ขนาดมหึมาถึง 19 ไบต์, @Neil ต่ออีก 2 และ @gcampbell อีก 1 คน!

ลองที่นี่

ทางเลือกเวอร์ชันที่เสียหาย

32 ไบต์

(a,b)=>(Math.pow(b,a*a)-1)/(b-1)

สาเหตุสำหรับNaNb==1

30 ไบต์

(a,b)=>(Math.pow(b,a*a)-1)/~-b

สาเหตุสำหรับInfinityb==1.5

28 ไบต์

(a,b)=>~-Math.pow(b,a*a)/~-b

เอาต์พุต1สำหรับบางชุดทดสอบที่ถูกต้อง

รุ่นเก่าสำหรับ 59 ไบต์

(a,b)=>Array(a*a).fill``.reduce((c,d,i)=>c+Math.pow(b,i),0)


ทำไมคุณไม่ปฏิบัติต่อ b == 1 กรณีในกรณี 32 ไบต์? 40 ไบต์: (a, b) => b-1? (Math.pow (b, a * a) -1) / (b-1): a * a
Kaizo

@ Kaizo คุณพูดถูกฉันเป็นคนงี่เง่า: D
Bassdrop Cumberwubwubwub

/~-bเห็นได้ชัดว่าไม่ดีสำหรับเศษส่วนbแต่/--bควรใช้ใช่ไหม
Neil

โดยวิธีการที่ฉันเล่นกอล์ฟรุ่นเก่าลงไป 47 bytes:(a,b)=>[...Array(a*a-1)].reduce(s=>s+=p*=b,p=1)
Neil

@Neil คุณถูกแน่นอน ofcourse นั่นคือสิ่งที่คุณจะได้รับเมื่อคุณตอบคำถาม: p ขอบคุณ!
Bassdrop Cumberwubwubwub

6

Java, 132 ไบต์

import java.math.*;Object e(int n,BigDecimal m){BigDecimal r=BigDecimal.ONE,a=r;for(n*=n;n>1;n--)r=r.add(a=a.multiply(m));return r;}

Ungolfed

import java.math.*;

Object e(int n, BigDecimal m) {
    BigDecimal r = BigDecimal.ONE, a = r;
    for (n *= n; n > 1; n--)
        r = r.add(a = a.multiply(m));
    return r;
}

หมายเหตุ

  • สิ่งนี้จะทำงานสำหรับเอาต์พุตขนาดใหญ่ตามต้องการโดย OP (Java แย่เกินไปที่รองรับจำนวนมากซึ่งจะสั้นกว่านี้)

เอาท์พุท

Input:      8 2.0
Expected:   18446744073709551615
Actual:     18446744073709551615

Input:      3 6.0
Expected:   2015539
Actual:     2015539

Input:      7 1.5
Expected:   850161998.2854
Actual:     850161998.285399449204543742553141782991588115692138671875

Input:      5 -3.0
Expected:   211822152361
Actual:     211822152361

Input:      256 1.0
Expected:   65536
Actual:     65536

Input:      2 2.0
Expected:   15
Actual:     15

Input:      2 -2.0
Expected:   -5
Actual:     -5

Input:      263 359.9
Expected:   ?
Actual:     9709...[176798 digits]...7344.7184...[69160 digits]...6291



4

Haskell ขนาด 30 ไบต์

n#m=sum$take(n^2)$iterate(*m)1

หรือยาวเท่ากัน

n%1=n^2
n%m=(m**(n*n)-1)/(m-1)

รุ่นแรกเริ่มต้นด้วยซ้ำไปซ้ำมาคูณกับ1 mจากนั้นจะรวมn^2ตัวเลขแรกของลำดับนี้ รุ่นที่สองเป็นสูตรที่ชัดเจนตามที่เห็นในคำตอบอื่น ๆ


คุณทำn#m=sum$(m^)<$>[0..n*n-1]ไม่ได้เหรอ
xnor

@xnor: โอ้ดี ฉันคิดว่ามันแตกต่างกันพอสำหรับคำตอบแยกต่างหาก กรุณาโพสต์ด้วยตัวเอง
nimi

4

J, 10 ไบต์

+/@:^i.@*:

การใช้

ฉันทำเครื่องหมายจำนวนเต็มบางส่วนด้วยxคำต่อท้ายเพื่อใช้จำนวนเต็มแบบขยายเพื่อให้ได้ผลลัพธ์ที่แน่นอน

   f =: +/@:^i.@*:
   2x f 8
18446744073709551615
   3x f 6
75047317648499560
   6x f 3
2015539
   1.5 f 7
8.50162e8
   _3x f 5
211822152361
   1 f 256
65536
   2 f 2
15
   _2 f 2
_5

คำอธิบาย

+/@:^i.@*:
        *:  Square the value s to get s^2
     i.@    Make a range from 0 to s^2 exclusive, [0, 1, ..., s^2-1]
    ^       Using m as the base, calculate the power with the range
            [m^0, m^1, ..., m^(s^2-1)]
+/@:        Sum the entire list and return it

6 ไบต์#.*:$*ตาม APL Dude
FrownyFrog

4

Mathcad, [tbd] ไบต์ (~ 11)

ป้อนคำอธิบายรูปภาพที่นี่

ใช้ตัวดำเนินการ summation ของ Mathcad ยังแสดงให้เห็นถึงการทำให้เข้าใจง่ายหน่วยประมวลผลเชิงสัญลักษณ์เพื่อสร้างสูตรที่แน่นอน

Mathcad รันเครื่องมือการประมวลผลสองตัวในแบบคู่ขนานได้อย่างมีประสิทธิภาพหนึ่งอันคือจุดลอยตัวมาตรฐาน IEEE 64/80 บิตและอีกอันหนึ่งเป็นกระบวนการสัญลักษณ์ความยาวหมายเลขโดยพลการ (MuPad) การประเมินค่าตัวเลขมาตรฐานถูกระบุด้วยเครื่องหมายเท่ากับ (=) ในขณะที่ลูกศรขวาหมายถึงการประเมินเชิงสัญลักษณ์


รูปแบบการนับ Mathcad ยังไม่ได้รับการพิจารณาจึงไม่ได้รับนับไบต์

ctl- $ เข้าสู่ตัวดำเนินการ summation (Sigma) รวมถึงตัวยึดตำแหน่งที่ว่างเพื่อใส่ตัวแปรการรวมค่าเริ่มต้นค่าสุดท้ายและการแสดงออก จำนวนเทียบเท่าเทียบเท่าไบต์โดยประมาณ = 11


รหัสอยู่ที่ไหน
Abr001am

1
"รหัส" สำหรับความท้าทายที่แท้จริงคือสัญญาณแรกของการสรุป (เมืองหลวงซิกมา) ที่คุณเห็นภายใต้หัวข้อ "Challeng Solution" บิตอื่น ๆ ของ "รหัส" จะได้รับภายใต้ส่วนหัว "Solution Variants" สิ่งที่คุณเห็นในภาพคือสิ่งที่เขียนลงบนแผ่นงาน Mathcad - Mathcad ใช้สัญลักษณ์ทางคณิตศาสตร์สำหรับการดำเนินการต่าง ๆ เช่นผลรวมเวกเตอร์หรือผลิตภัณฑ์การรวมฟังก์ชันหรือความแตกต่างหรือการดำเนินการเชิงตรรกะ ผู้ประกอบการส่วนใหญ่สามารถป้อนข้อมูลด้วยการรวมกันของคีย์ (เช่น ctl-4 สำหรับผลรวมเวกเตอร์โดยนัยหรือ ctl- & สำหรับผลรวมซ้ำ) หรือผ่านเมนูหรือแถบเครื่องมือ
Stuart Bruff

4

PostgreSQL, 67 66 ไบต์

SELECT SUM(m^v)FROM(VALUES(3,6))t(s,m),generate_series(0,s*s-1)s(v)

SqlFiddleDemo

การป้อนข้อมูล: VALUES(side, multiplier)


แก้ไข:

ย้ายข้อมูลไปที่ตารางทุกกรณีพร้อมกัน:

SELECT s,m,SUM(m^v)FROM i,generate_series(0,s*s-1)s(v)GROUP BY s,m

SqlFiddleDemo

เอาท์พุท:

╔══════╦══════╦══════════════════════╗
║  s   ║  m   ║         sum          ║
╠══════╬══════╬══════════════════════╣
║   7  ║ 1.5  ║ 850161998.2853994    ║
║   2  ║ 2    ║ 15                   ║
║   2  ║ -2   ║ -5                   ║
║ 256  ║ 1    ║ 65536                ║
║   5  ║ -3   ║ 211822152361         ║
║   8  ║ 2    ║ 18446744073709552000 ║
║   3  ║ 6    ║ 2015539              ║
╚══════╩══════╩══════════════════════╝


3

Python ขนาด 40 ไบต์

lambda l,m:sum(m**i for i in range(l*l))

1
lambda l,m:(m**(l*l)-1)/(m-1)
Leun Nun

ในภาษาปกติที่ใช้สูตรจะสั้นกว่า ฉันใช้แผนที่เพราะในแผนที่ esolangs จะสั้นกว่านี้
Leun Nun

การนัดหยุดงานอยู่ที่ไหน
Leun Nun

@KennyLau ฉันยังคงตอบคำถามอยู่ฉันโพสต์สิ่งนี้ก่อนที่จะเห็นความคิดเห็นของคุณ
orlp

เอาล่ะ (อีก 7 ไป ... )
รั่วแม่ชี

3

ทับทิม: 39 ไบต์

->s,m{(0...s*s).reduce(0){|a,b|a+m**b}}

ทดสอบ:

f = ->s,m{(0...s*s).reduce(0){|a,b|a+m**b}}

f[8,2]   # 18446744073709551615
f[3,6]   # 2015539
f[7,1.5] # 850161998.2853994
f[5,-3]  # 211822152361
f[256,1] # 65536
f[2,2]   # 15
f[2,-2]  # -5
f[1,1]   # 1

Ruby ได้รับsumฟังก์ชันเมื่อใด นี่คือการเปลี่ยนเกม
หมึกมูลค่า

ไม่นะ! สิ่งที่ผมคิดว่าเป็นวิธีการหลักทับทิมในความเป็นจริงรางวิธี หน้าเศร้า ฉันได้อัพเดตคำตอบแล้ว
br3nt

คุณเปลี่ยนภาษาเป็น Rails ได้ไหม? ฉันไม่รู้เกี่ยวกับการนำเข้าใด ๆ ที่คุณอาจต้องการสำหรับ
หมึกมูลค่า

3

Python ขนาด 41 ไบต์

ใหม่ทั้งหมดในสิ่งที่เล่นกอล์ฟนี้วิจารณ์ยินดีต้อนรับ!

lambda n,m:sum(m**i for i in range(n**2))

จริงๆแล้วมันค่อนข้างดี )
user6245072

ฮ่าฮ่าขอบคุณ ฉันต้อง google วิธีทำแลมบ์ดาในไพ ธ อนอีกครั้งเนื่องจากฉันไม่ได้สัมผัสไพ ธ อนซักพัก
Lang Tran

ยินดีต้อนรับสู่ Programming Puzzles & Code Golf! นี่คือคำตอบที่ดี แต่ก็ค่อนข้างคล้ายกับคนนี้
Dennis

อาฉันไม่เห็นว่าจะมีวิธีแก้ไขปัญหาอื่น ๆ หรือไม่ เขาบันทึกไบต์ด้วยการทำl**lแทนสิ่งที่ฉันทำหรือไม่?
Lang Tran

l*ll**2จริงซึ่งจะสั้นกว่า
เดนนิส

2

Jolf, 18 15 10 ไบต์

ขอขอบคุณCᴏɴᴏʀO'Bʀɪᴇɴที่ช่วยประหยัด 3 ไบต์และชี้ให้ฉันเห็นถึงการทำแผนที่

uΜzQjd^JwH

ลองที่นี่!

 ΜzQj       Map over an array of 1 -> square(side length)
     d^JwH  Set the current array value to multiplier^(current value - 1)
u           Sum the array

เยี่ยมมาก! คุณสามารถลบ a ก่อนซีตาได้ซึ่งเป็น outed โดยปริยาย คุณสามารถใช้ Mu (map) แทนแต่ละอันได้และฉันคิดว่าคุณสามารถแทนที่ D ด้วยโฆษณาและลบตอนจบ}
Conor O'Brien

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Neat อย่าลืมเกี่ยวกับส่วนที่เป็นนัยของ Jolf พวกเขาเป็นวิธีที่ดีที่สุดในการโกนทิ้งสักสองสามไบต์
คลื่นที่

2

CJam , 9 ไบต์

q~2#,f#:+

อินพุตอยู่ในลำดับย้อนกลับคั่นด้วยการขึ้นบรรทัดใหม่หรือเว้นวรรค

ลองออนไลน์!

q~    e# Read input. Evaluate: pushes the two numbers, M and N, onto the stack
2#    e# Square: compute N^2
,     e# Range: generates array [0 1 ... N^2-1]
f#    e# Compute M raised to each element of the array [0 1 ... N^2-1]
:+    e# Fold addition: compute sum of the array [M^0 M^1 ... M^(N^2-1)]

2

PHP, 58 54 ไบต์

<?function a($n,$m){$n*=$n;echo(1-$m**$n)/(1-$m)?:$n;}

นี่ใช้สูตรการรวมเพื่อแสดงค่าหลังจากตรวจสอบว่าตัวคูณเป็น 1 (ซึ่งส่งคืน NAN ในสูตร)


2

Mathematica ขนาด 22 ไบต์

Tr[#^(Range[#2^2]-1)]&

สร้างช่วงของ{1, 2, ... s^2}, หัก 1 {0, 1, ..., s^2-1}มากกว่านั้นจะทำให้ จากนั้นยกระดับพลังmการสร้าง{m^0, m^1, ..., m^(s^2-1)}และคืนผลรวมของมัน

อีกทางเลือกหนึ่ง Mathematica สามารถใช้สูตรที่ชัดเจนโดยการ จำกัด สิ่งนี้ต้องมี29ไบต์

Limit[(s^#^2-1)/(s-1),s->#2]&

คุณสามารถเขียนเวอร์ชันแรกของคุณในฐานะTr[#^Range[#2^2]/#]&
Simon Woods


1

C #, 56 ไบต์

double f(int n,double q){return(Math.Pow(q,n*n)-1)/--q;}

TestCase 256, 1?
user6245072

ไม่ใช่ 256 ^ 2 ใช่ไหม
downrep_nation

1
(Math.Pow(1, 256 * 256) - 1) / --1= 0/0
user6245072

1
คุณต้องใช้ทั้งระบบ หรือ System.Math.Pow และรหัสของคุณไม่ทำงานเมื่อ q = 1 ตามที่ระบุโดย @ user6245072
HorváthDávid

1

Lua, 54 47 ไบต์

r=0l,m=...for i=0,l^2-1 do r=r+m^i end print(r)

เรียกใช้จากบรรทัดคำสั่งที่มีความยาวด้านกระดานเป็นอาร์กิวเมนต์แรกและตัวคูณเป็นวินาที

ขอบคุณ user6245072 สำหรับการบันทึก 6 ไบต์และ Katenkyo สำหรับการบันทึกเพิ่มเติม 1


เวอร์ชัน 54 ไบต์ดั้งเดิม:

a,b=...c=1 d=1 for i=2,a^2 do c=c*b d=d+c end print(d)

สวัสดีและยินดีต้อนรับสู่ PPCG! คำตอบที่ดี!
NoOneIsHere ที่

l,m=...r=0 for i=0,l^2 do r=r+m^i end print(r)
user6245072

สิ่งนี้ควรบันทึกบางไบต์
user6245072

การเปลี่ยนชื่อ d บันทึกหนึ่งไบต์เพราะมันจะช่วยให้การข้ามพื้นที่ใน=>c=1 d=1 a,b=...c=1g=1 for i=2,a^2 do c=c*b g=g+c end print(g)หากข้อเสนอแนะของ @ user6245072 ใช้งานได้คุณสามารถบันทึกไบต์บนหลักการเดียวกัน =>r=0l,m=...for i=0,l^2 do r=r+m^i end print(r)
Katenkyo

ช่องว่างระหว่างr=0และl,m=...บังคับต่อไปดังนั้นจึงไม่เปลี่ยนแปลง ควรวนซ้ำด้วย for i=0,l^2-1แต่นี่เป็นความผิดของฉัน
user6245072

1

𝔼𝕊𝕄𝕚𝕟, 11 ตัวอักษร / 14 ไบต์

⨭⩥ î²)ⓜⁿ⁽í$

Try it here (Firefox/WebKit Nightly only).

ใช่ตอนนี้𝔼𝕊𝕄𝕚𝕟ทำงานใน WebKit ทุกคืน! การสนับสนุนของ Chrome นั้นต่อไป

คำอธิบาย

⨭⩥ î²)ⓜⁿ⁽í$ // implicit: î = input1, í = input2
   ⩥ î²)       // generate a range [0..î^2)
                     ⓜ      // map over range ($ is mapitem):
        ⁿ⁽í$  //   í^$
⨭            // sum resulting range
              // implicit output

1

ผลตอบแทน 32 ไบต์

[a:2^0\
{[$¥][a;\^]#[¤¥][+]#]!

Try it here.

แลมบ์ดานิรนามที่ทิ้งผลไว้ใน Stack2 การใช้งาน:

8 2[a:2^0\
{[$¥][a;\^]#[¤¥][+]#]!

คำอธิบาย

[                              ]!  lambda
 a:                                store multiplier to a
   2^                              square side-length
     0\␊                           create range [0..result)
        {                          set current stack to range
         [  ][     ]#              while loop
          $¥                         check if TOS is truthy
              a;\^␌                  if so, push a^TOS to Stack2
                     ␁            set current stack to Stack2
                       [¤¥][+]#    sum Stack2
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.