ตัวเลขที่ขาดหายไปในผลรวมเลขคณิต


14

ท้าทาย

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

ตัวอย่าง:

    1#3                 123
+   45#     =>     +    456
--------            --------
    579                 579

อินพุต

  • รูปแบบของนิพจน์สามารถเป็นอาร์เรย์["1#3", "45#", "579"]สตริง"1#3+45#=579"หรือ 3 อินพุตf("1#3","45#","579")

เอาท์พุต

  • เหมือนกับอินพุต
  • คุณไม่จำเป็นต้องแสดงผลลัพธ์

หมายเหตุ

  • ตัวเลขที่หายไปจะแสดงโดยใช้#หรืออักขระอื่นที่ไม่ใช่ตัวเลขคงที่ที่คุณต้องการ
  • สมมติว่าผลลัพธ์จะไม่มีหมายเลขที่หายไป
  • สมมติว่าอินพุต / เอาต์พุตประกอบด้วย 2 เทอมและผลลัพธ์สุดท้าย
  • สมมติว่าทั้งคำ> 0 และผลลัพธ์> = 2
  • อาจมีหลายวิธี คุณสามารถส่งออกทุกคนตราบใดที่ผลรวมตรงกัน

กรณีทดสอบที่มีเอาต์พุต (รูปแบบสวย)

    #79                     879
+   44#         =>      +   444
--------                --------
    1323                   1323

    5#5                     555
+   3#3         =>      +   343
--------                --------
    898                     898

      #                       1
+     #         =>      +     1
--------                --------
      2                       2

    ###                     998
+   ###         =>      +     1     PD: there are a lot of possible outputs for this one
--------                --------
    999                     999


    123                     123
+     #         =>      +     1
--------                --------
    124                     124


      9                       9
+    #6         =>      +    46
--------                --------
     55                      55


    #123651                     1123651
+      #98#         =>      +      7981
------------                -----------
    1131632                     1131632

ใช้กฎมาตรฐานของ


เราจำเป็นต้องตัดค่าศูนย์นำหน้าหรือไม่?

@ ความทรงจำไม่จำเป็น
Luis felipe De jesus Munoz

ฉันจะรับอินพุตด้วยการ=สลับข้างโดยรอบได้ไหม? เช่น579=1#3+45#
dzaima

2
"สมมติว่าทั้งสองคำ> 0" ทำ "ถือว่า" หมายความว่าฉันต้องแสดงผลทั้งสองคำ> 0 หรือว่าฉันสามารถคิดได้ว่ามีวิธีแก้ปัญหาด้วยทั้งสอง> 0 แต่เอาท์พุทอะไร?
dzaima

1
นอกจากนี้ยังเพิ่มกรณีทดสอบของคุณเพื่อหลีกเลี่ยงสิ่งที่ฉันขอ - ศูนย์ชั้นนำ
dzaima

คำตอบ:


9

Brachylog , 22 16 ไบต์

{Ṣ∧Ị∋|}ᵐ²ịᵐ.k+~t

ลองออนไลน์!

-6 ไบต์ขอบคุณ @Fatelize

คำอธิบาย

{Ṣ∧Ị∋|}ᵐ²ịᵐ.k+~t
{     }ᵐ²                   #   for each letter in each string
 Ṣ∧Ị∋                       #       if " " return a digit; else input
     |                      #
         ịᵐ                 #   cast each string to number
            k+              #   the sum of all but the last one
              ~t            #       is equal to the last one
           .                #   output that list

1
{"#"∧Ị∋|}ᵐ²ịᵐ.k+~tสั้นลง 4 ไบต์ ฉันไม่แน่ใจว่าทำไมคุณถึงทำสิ่งที่ซับซ้อนในแผนที่ของคุณ
ลดขนาด

เนื่องจากเราสามารถใช้อักขระที่ไม่ใช่ตัวเลขใด ๆ ได้คุณควรใช้ช่องว่างด้วยแทนที่จะใช้"#"ซึ่งจะช่วยประหยัดสองไบต์
ลดขนาด

8

JavaScript (ES6), 74 57 ไบต์

รับอินพุตเป็น(a)(b)(result)โดยที่aและbเป็นสตริงที่มี.ตัวเลขที่ไม่รู้จักและผลลัพธ์เป็นจำนวนเต็ม ส่งคืนอาร์เรย์จำนวนเต็ม 2 จำนวน

a=>b=>F=(c,n)=>`${r=[c,n]}`.match(`^`+[a,b])?r:F(c-1,-~n)

ลองออนไลน์!

แสดงความคิดเห็น

a => b =>                // a, b = term patterns (e.g. a = ".79", b = "44.")
  F = (c,                // c = expected result (e.g. 1323)
          n) =>          // n = guessed value of b, initially undefined
    `${r = [c, n]}`      // we coerce r = [c, n] to a string (e.g. "879,444")
                         // if n is still undefined, this gives just c followed by a comma
    .match(`^` + [a, b]) // we coerce [a, b] to a string, prefixed with "^" (e.g. "^.79,44.")
    ?                    // this is implicitly turned into a regular expression; if matching:
      r                  //   return r
    :                    // else:
      F(c - 1, -~n)      //   decrement c, increment n and do a recursive call

อานั่นคือสิ่งที่เกิดขึ้น ฉันพยายามที่จะเข้าใจโค้ดของคุณโดยไม่มีคำอธิบายเมื่อวานนี้ (และฉันไม่ดีที่ JS) แต่ไม่เข้าใจว่าทำไม-~nไม่เป็นเพียงแค่n+1วิธีการและการF=(c,n)=>ใช้งาน เมื่อคุณเพิ่มคำอธิบายแล้วทุกอย่างสมเหตุสมผลแล้ว cคือการป้อนข้อมูลที่สามnจะไม่ได้กำหนด (และ~undefinedกลายเป็น-1แตกต่างundefined+1) ชัดเจนแล้ว (และไม่ใช่สิ่งที่ฉันสามารถพอร์ตไปยัง Java ได้อย่างน่าเสียดายซึ่งส่วนใหญ่เป็นสาเหตุที่ฉันพยายามเข้าใจมัน xD) PS: อัปเดตแล้วเมื่อวานนี้ดังนั้นฉันจึงอัปเดตหนึ่งในคำตอบอื่น ๆ ของคุณ (ซึ่งฉันไม่ได้อัปเดตแล้วมีไม่มาก .. ); p
Kevin Cruijssen

@KevinCruijssen FWIW ฉันได้เขียนเคล็ดลับเกี่ยวกับเรื่องนี้หลายครั้งแล้ว แต่ใช่ ... นั่นคือสิ่งที่ JS และอาจไม่พกพาไปยังภาษาอื่น ๆ อีกมากมาย
Arnauld

ดีฉันอาจจะสามารถกึ่งพอร์ตก็ แต่เพียงการสร้างวิธีที่สองเรียกซ้ำและการใช้ ternary ถ้าเพื่อตรวจสอบด้วยตนเองแปลงไปnull -1อย่างไรก็ตาม Java มีข้อ จำกัด แบบซ้ำ recursive StackOverflow ดังนั้นการใช้วิธีแบบเรียกซ้ำด้วยการสุ่มหวังว่ามันจะจบลงด้วยความถูกต้องภายในการโทรแบบเรียกซ้ำประมาณ 1024 ครั้งจะไม่ทำงานใน Java อ่า ฉันยกระดับคำแนะนำของคุณแล้ว ขอให้มีความสุขในวันหยุดสุดสัปดาห์! :)
Kevin Cruijssen

@KevinCruijssen ความพยายาม JS ครั้งแรกของฉันคือทำอย่างนั้น: ลองใช้ค่าสุ่มด้วยฟังก์ชั่นวนซ้ำ และมันก็มักจะทำซ้ำอย่างมีนัยสำคัญน้อยกว่าอย่างใดอย่างหนึ่งโดยใช้เคาน์เตอร์ ความจริงแล้วสนุก: ถึงแม้###+###=999อัตราต่อรองของคุณจะเป็น 1 ใน 1,000 ดังนั้นด้วย 1024 การซ้ำคุณควรประสบความสำเร็จมากกว่าที่คุณล้มเหลวเล็กน้อย :)
Arnauld

7

Matlab, 143 134 132 119 115 ไบต์

function[m]=f(x,y,r),p=@(v)str2num(strrep(v,'#',char(randi([48,57]))));m=[1,1];while sum(m)-r,m=[p(x),p(y)];end;end

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

ลองออนไลน์


ค่อนข้างใหญ่และโง่มาก มันจะแทนที่#ด้วยตัวเลขสุ่มทั้งหมดจนกว่าจะพบว่าถูกต้อง


5

R , 67 51 ไบต์

เรียบง่ายและสเกลได้อย่างน่ากลัวเพียงแค่ผสมผลรวมทั้งหมด ใช้ "." สำหรับตัวเลขที่ไม่รู้จัก ไม่พบคำตอบเดียวกับกรณีทดสอบหมายเลข 4 แต่จะให้คำตอบที่เป็นไปได้ซึ่งตามตัวอักษรของกฎระเบียบตามที่กำหนด

-16 ไบต์โดย grepping หลังจากสร้างผลลัพธ์และแทนที่pasteด้วย?ดำเนินการ

function(x,y,z,`?`=paste)grep(x?y,1:z?z:1-1,v=T)[1]

ลองออนไลน์!


1
ความคิดที่ยอดเยี่ยมฉันจะไม่คิดอย่างนั้น คุณสามารถบันทึกได้สองสามไบต์โดยใช้ * แทนที่ grepl: tio.run/##PYzLCoMwEEX3/…
JayCe

1
ฉันกำลังมองหาผู้ให้บริการที่หลากหลายและคุณมากับ?... ฉันคิดว่านี่เป็นครั้งแรก โดยวิธีการที่ฉันลืมถ้าฉันบอกคุณแล้ว แต่เรากำลังพยายามที่จะได้รับการเสนอชื่อ R สำหรับเดือนกันยายนของเดือน - คุณสามารถโหวตถ้าไม่ได้ทำไปแล้ว
JayCe

ฉันเลือกอะไรก็ได้ที่มีลำดับความสำคัญต่ำ รู้สึกว่าควรจะมีวิธีที่ดีกว่าในการรับการจับคู่ ...
J.Doe

3

ถ่าน 32 ไบต์

F²⊞υ0W⁻ζΣIυ≔E⟦θη⟧⭆κ⎇⁼μ#‽χμυ←Eυ⮌ι

ลองออนไลน์!การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

F²⊞υ0

กดสองสตริง0s ไปยังรายการว่างที่กำหนดไว้ล่วงหน้าuเพื่อให้ได้ห่วงในขณะที่ไป

W⁻ζΣIυ

ทำซ้ำขณะที่ผลรวมของการคัดเลือกค่า uจำนวนเต็มไม่เท่ากับผลลัพธ์ที่ต้องการ

≔E⟦θη⟧

สร้างอาร์เรย์ของอินพุตทั้งสองและแผนที่เหนือมัน

⭆κ⎇⁼μ#‽χμυ

แทนที่แต่ละตัว#ด้วยตัวเลขสุ่มและกำหนดผลลัพธ์กลับไปที่uกับหลักสุ่มและกำหนดผลที่ได้กลับไป

←Eυ⮌ι

พิมพ์ผลลัพธ์ที่ถูกต้อง (ชิดซ้ายจะเป็นเพียงυการประหยัด 4 ไบต์)



3

05AB1E (เดิม), 23 20 ไบต์

[²³«εð9ÝΩ:}²gôJDO¹Q#

-3 ไบต์ขอบคุณที่@Emigna

ตัวเลขที่ไม่รู้จักคือช่องว่าง ( ) คำสั่งซื้อควรเป็น: ผลลัพธ์ที่คาดหวัง; สตริงที่ยาวที่สุด; สตริงที่สั้นที่สุด

ลองมันออนไลน์

คำอธิบาย:

[                 # Start an infinite loop
 ²³«              #  Take the second and third inputs, and merge them together
               #   i.e. " 79" and " 4 " → " 79 4 "
    ε     }    #  Map each character to:
     ð   :     #   Replace a space with:
      9ÝΩ      #   A random digit in the range [0,9]
               #    i.e. " 79 4 " → ['3','7','9','2','4','3']
               #    i.e. " 79 4 " → ['5','7','9','7','4','4']
²g             #  Get the length of the second input
               #   i.e. " 79" → 3
  ô            #  And split it into two numbers again
               #   i.e. ['3','7','9','2','4','3'] and 3 → [['3','7','9'],['2','4','3']]
               #   i.e. ['5','7','9','7','4','4'] and 3 → [['5','7','9'],['7','4','4']]
   J           #  Join each list together to a single number
               #   i.e. [['3','7','9'],['2','4','3']] → [379,243]
               #   i.e. [['5','7','9'],['7','4','4']] → [579,744]
    D          #  Duplicate this list
     O         #  Sum the list
               #   i.e. [379,243] → 622
               #   i.e. [579,744] → 1323
      ¹Q#      #  If it's equal to the first input: stop the infinite loop
               #  (and output the duplicate list implicitly)
               #   i.e. 1323 and 622 → 0 (falsey) → continue the loop
               #   i.e. 1323 and 1323 → 1 (truthy) → stop the loop and output [579,744]

1
แทนที่ประหยัด 3 กว่าถ้า
Emigna

@Emigna Ah แน่นอน ขอบคุณ!
Kevin Cruijssen

3

Perl 6 , 81 74 ไบต์

-7 ไบต์ขอบคุณ nwellnhof!

{first {try S/\=/==/.EVAL},map {$^a;S:g[\#]=$a[$++]},[X] ^10 xx.comb('#')}

ลองออนไลน์!

บล็อคโค้ดแบบไม่ระบุตัวตนที่รับอินพุตเป็นสตริงที่มีนิพจน์เชิงคณิตศาสตร์เช่น "12 # + 45 # = 579" แทนที่แต่ละอัน#ด้วยการเรียงสับเปลี่ยนตัวเลขที่เป็นไปได้แทนที่=ด้วย==และค้นหาผลลัพธ์ที่ถูกต้องครั้งแรก

คำอธิบาย:

{  # Anonymous code block                                                      }
 first   # Find the first of:
                                                               ^10  # The range of 0 to 9
                                                                   xx.comb('#') # Multiplied by the number #s in the code
                                                          ,[X]  # The cross-product of these lists
                          map   # Map each crossproduct to:
                              {$^a;.trans: "#"=>{$a[$++]}}  # The given string with each # translated to each element in the list
      {try S/\=/==/.EVAL}, # Find which of these is true when = are changed to == and it is eval'd

คุณสามารถใช้S:g[\#]=$a[$++]แทนtransสำหรับ74 ไบต์
nwellnhof

@nwellnhof ฉันไม่ทราบว่าคุณสามารถใช้S///ในรูปแบบของไวยากรณ์! ขอบคุณ!
Jo King


2

Java 10, 203 198 193 ไบต์

(a,b,c)->{int A=0,B=0,l=a.length();for(a+=b,b="";A+B!=c;A=c.valueOf(b.substring(0,l)),B=c.valueOf(b.substring(l)),b="")for(var t:a.getBytes())b+=t<36?(t*=Math.random())%10:t-48;return A+"+"+B;}

ลองออนไลน์

คำอธิบาย:

(a,b,c)->{           // Method with 2 Strings & integer parameters and String return-type
  int A=0,B=0,       //  Result-integers, starting both at 0
      l=a.length();  //  Length of the first String-input
  for(a+=b,          //  Concat the second String-input to the first
      b="";          //  Reuse `b`, and start it as an empty String
      A+B!=c         //  Loop as long as `A+B` isn't equal to the integer-input
      ;              //    After every iteration:
       A=c.valueOf(b.substring(0,l)),
                     //     Set `A` to the first String-part as integer
       B=c.valueOf(n.substring(l)),
                     //     Set `B` to the second String-part as integer
       b="")         //     Reset `b` to an empty String
    for(var t:a.getBytes())
                     //   Inner loop over the characters of the concatted String inputs
      b+=t<36?       //    If the current character is a '#':
          (t*=Math.random())%10
                     //     Append a random digit to `b`
         :           //    Else (it already is a digit):
          t-48;      //     Append this digit to `b`
  return A+"+"+B;}   //  After the loop, return `A` and `B` as result

2

C (gcc) , 228 213 203 172 170 ไบต์

-15ไบต์ขอบคุณที่@ceilingcat ฉันไม่เคยใช้มาindexก่อน

-10ไบต์ขอบคุณที่@Logem preprocessor เวทมนต์

โทรไปยัง refactored แล้ว exit(0)ด้วยทำให้เป็นพารามิเตอร์

char*c,*p[9],k;main(i,v)int**v;{for(i=X[1],35))||X[2],35))?p[k++]=c,main(*c=57,v):k;!c*i--;)47==--*p[i]?*p[i]=57:Y[1])+Y[2])^Y[3])?main(i,v):exit(puts(v[2],puts(v[1])));}

ลองออนไลน์!



คุณสามารถบันทึกสองไบต์แทนที่แมโคร-DX=c=index(vด้วย-DX=(c=index(vลิงค์ TIO ในความคิดเห็นล่าสุดของฉัน
Logern

ขอบคุณเพื่อน. ดูเหมือนจะไม่เคยลองเล่นกอล์ฟมาก่อนเลย ...
cleblanc

1

C # .NET, 225 220 196 ไบต์

(a,b,c)=>{int A=0,B=0,l=a.Length;for(a+=b,b="";A+B!=c;A=int.Parse(b.Substring(0,l)),B=int.Parse(b.Substring(l)),b="")foreach(var t in a)b+=(t<36?new System.Random().Next(10):t-48)+"";return(A,B);}

ท่าเรือของฉัน Java 10 คำตอบ
(ฉันเป็นสนิมมากในการเล่นกอล์ฟ C # .NET ดังนั้นสามารถตีกอล์ฟได้อย่างผิดกฎหมาย .. )

-3 ไบต์ขอบคุณโดยปริยาย@ user82593และใหม่นี้เคล็ดลับ C # เขาเพิ่ม
-29 ไบต์ขอบคุณที่@hvd

ลองออนไลน์

คำอธิบาย:

(a,b,c)=>{        // Method with 2 string & int parameters and int-tuple return-type
  int A=0,B=0,    //  Result-integers, starting both at 0
      l=a.Length; //  Length of the first string-input
  for(a+=b,       //  Concat the second string-input to the first
      b="";       //  Reuse `b`, and start it as an empty string
      A+B!=c      //  Loop as long as `A+B` isn't equal to the integer-input
      ;           //    After every iteration:
       A=int.Parse(b.Substring(0,l)),
                  //     Set `A` to the first string-part as integer
       B=int.Parse(b.Substring(l)),
                  //     Set `B` to the second string-part as integer
       b="")      //     Reset `b` to an empty string
    foreach(var t in a)
                  //   Inner loop over the characters of the concatted string inputs
      b+=(t<36?   //    If the current character is a '#':
           new System.Random().Next(10)
                  //     Use a random digit
          :       //    Else (it already is a digit):
           t-48)  //     Use this digit as is
         +"";     //    And convert it to a string so it can be appended to the string
  return(A,B);}   //  After the loop, return `A` and `B` in a tuple as result

คุณสามารถใช้ปกติแทนมันจะสั้นกว่าusing System; namespace System{}
hvd

@hvd นั่นแหละ! .. ฉันไม่ได้ทำ C # มาหลายปีแล้วฮ่า ๆ .. ฉันลองusing System.*;คล้ายกับการนำเข้าใน Java แต่ก็ไม่ได้ผล ลืมฉันต้องลบ.*ส่วน .. ขอบคุณสำหรับ -5 ไบต์
Kevin Cruijssen

1
อ่านอีกครั้งตอนนี้ซึ่งเป็นข้อเสนอแนะที่ดีที่สุดย่อย คุณสามารถเขียนint.Parse(-4) ใช้new System.Random()(+7) และปล่อยusing System;(-13) เพื่อบันทึกอีก 10 ไบต์ :) นอกจากนี้คุณไม่ต้องการ.ToCharArray()ที่จะเพิ่มอีก 14 ไบต์
hvd

@hvd ขอบคุณ! ไม่แน่ใจว่าฉันลืมเกี่ยวกับint.ParseVS System.Int32.Parse... มันเป็นพื้นเดียวกับSystem.Stringและstring.. .ToCharArray()และไม่ได้รู้ว่ามันเป็นไปได้ที่จะห่วงตัวละครโดยไม่ต้อง ขอบคุณสำหรับอีก -24 ไบต์ : D
Kevin Cruijssen

1

Python 3 , 121 155 152 149 ไบต์

import re
def f(i,k=0,S=re.sub):s=S('#','%s',i)%(*list('%0*d'%(i.count('#'),k)),);print(s)if eval(S('=','==',S('\\b0*([1-9])','\\1',s)))else f(i,k+1)

ลองออนไลน์!

+34 โซลูชั่นใหม่ที่มี regex เพื่อหลีกเลี่ยงความจริงที่ว่าหลามไม่สนับสนุนตัวเลขด้วยเลขศูนย์นำหน้า

-3 ขอบคุณ @Jonathan Frech


โซลูชันเก่าใช้ไม่ได้ถ้า # เป็นอักขระตัวแรกในจำนวนใด ๆ (เนื่องจาก eval ไม่ยอมรับเลขศูนย์นำหน้า) และดังนั้นจึงไม่ถูกต้อง :(

def f(i,k=0):
 s=i.replace('#','%s')%(*list('%0*d'%(i.count('#'),k)),)
 print(s)if eval(s.replace('=','=='))else f(i,k+1)

ลองออนไลน์!


1
ฉันเกรงว่าการส่งนี้จะไม่ถูกต้องเนื่องจากเหตุผลที่ระบุไว้ในโพสต์
Erik the Outgolfer

2
เนื่องจากฟังก์ชั่นของคุณไม่มีคำสั่งผสมใด ๆ คุณสามารถย่อให้เป็นหนึ่งบรรทัดเท่านั้น
Jonathan Frech

0

PHP, 112 ไบต์

วิธีการแก้ปัญหากำลังอ่อนแอโง่

for(;$s=$argn;eval(strtr($s,['='=>'==','#'=>0]).'&&die($s);'))for($k=$n++;$k;$k=$k/10|0)$s[strpos($s,35)]=$k%10;

ใช้สตริงเป็นอินพุตหยุดที่โซลูชันแรก ทำงานเป็นท่อที่มี-nRหรือลองออนไลน์


0

Powershell, 91 ไบต์

สคริปต์ค้นหาวิธีแก้ปัญหาทั้งหมด จำนวนรวมของการทำซ้ำ 10 #พลังงานจำนวนตัวอักษร ความลึก recursion #จะเท่ากับจำนวนของตัวละคร

filter f{$h,$t=$_-split'#',2
if($t){0..9|%{"$h$_$t"}|f}elseif($h-replace'=','-eq'|iex){$h}}

สคริปต์ทดสอบ:

filter f{$h,$t=$_-split'#',2
if($t){0..9|%{"$h$_$t"}|f}elseif($h-replace'=','-eq'|iex){$h}}

@(
    ,('1#3+45#=579','123+456=579')
    ,('#79+44#=1323','879+444=1323')
    ,('5#5+3#3=898','505+393=898 515+383=898 525+373=898 535+363=898 545+353=898 555+343=898 565+333=898 575+323=898 585+313=898 595+303=898')
    ,('#+#=2','0+2=2 1+1=2 2+0=2')
    ,('9+#6=55','9+46=55')
    ,('123+##=124','123+01=124')
    ,('#123651+#98#=1131632','1123651+7981=1131632')
    ,('##+##=2','00+02=2 01+01=2 02+00=2')
    ,('##+##=99','00+99=99 01+98=99 02+97=99 03+96=99 04+95=99 05+94=99 06+93=99 07+92=99 08+91=99 09+90=99 10+89=99 11+88=99 12+87=99 13+86=99 14+85=99 15+84=99 16+83=99 17+82=99 18+81=99 19+80=99 20+79=99 21+78=99 22+77=99 23+76=99 24+75=99 25+74=99 26+73=99 27+72=99 28+71=99 29+70=99 30+69=99 31+68=99 32+67=99 33+66=99 34+65=99 35+64=99 36+63=99 37+62=99 38+61=99 39+60=99 40+59=99 41+58=99 42+57=99 43+56=99 44+55=99 45+54=99 46+53=99 47+52=99 48+51=99 49+50=99 50+49=99 51+48=99 52+47=99 53+46=99 54+45=99 55+44=99 56+43=99 57+42=99 58+41=99 59+40=99 60+39=99 61+38=99 62+37=99 63+36=99 64+35=99 65+34=99 66+33=99 67+32=99 68+31=99 69+30=99 70+29=99 71+28=99 72+27=99 73+26=99 74+25=99 75+24=99 76+23=99 77+22=99 78+21=99 79+20=99 80+19=99 81+18=99 82+17=99 83+16=99 84+15=99 85+14=99 86+13=99 87+12=99 88+11=99 89+10=99 90+09=99 91+08=99 92+07=99 93+06=99 94+05=99 95+04=99 96+03=99 97+02=99 98+01=99 99+00=99')
) | % {
    $s,$e = $_
    $r = $s|f
    "$($e-eq$r): $r"
}

Powershell, 'สมมติว่าทั้งคำ> 0' เป็นข้อบังคับ 110 ไบต์

filter f{$h,$t=$_-split'#',2
if($t){0..9|%{"$h$_$t"}|f}else{$a,$b,$c=$_-split'\D'
$_|?{+$a*+$b*!(+$a+$b-$c)}}}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.