เด็กน้อยต้องรวมกัน


67

เลขจำนวนเต็มบวกทุกตัวสามารถแสดงเป็นผลรวมของจำนวนเต็มบวกจำนวน Palindromic ได้สูงสุดในฐานb ≥5   Cilleruelo et al., 2017

จำนวนเต็มบวกคือpalindromicในฐานที่กำหนดหากการเป็นตัวแทนในฐานนั้นโดยไม่มีศูนย์นำหน้าจะอ่านย้อนหลังเดียวกัน ในสิ่งต่อไปนี้จะพิจารณาเฉพาะฐานb = 10

การสลายตัวเป็นผลรวมของตัวเลข palindromic เป็นไม่ได้ที่ไม่ซ้ำกัน ยกตัวอย่างเช่น5สามารถแสดงโดยตรงหรือเป็นผลรวมของ5 2, 3ในทำนองเดียวกัน132สามารถย่อยสลายเป็นหรือเป็น44, 44, 44121, 11

ความท้าทาย

กำหนดจำนวนเต็มบวกให้สร้างการสลายตัวของผลรวมเป็นจำนวนเต็มบวกสามตัวหรือน้อยกว่าที่มีค่า palindromic ในฐาน 10

กฎเพิ่มเติม

  • อัลกอริทึมที่ใช้ควรทำงานกับอินพุตที่มีขนาดใหญ่โดยพลการ อย่างไรก็ตามเป็นที่ยอมรับได้หากโปรแกรมนั้นถูก จำกัด ด้วยข้อ จำกัด ด้านหน่วยความจำเวลาหรือชนิดข้อมูล

  • input และ output สามารถดำเนินการโดยวิธีการที่เหมาะสมใดรูปแบบอินพุตและเอาต์พุตมีความยืดหยุ่นตามปกติ

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

  • โปรแกรมหรือฟังก์ชั่นที่ได้รับอนุญาตในการเขียนโปรแกรมภาษา ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม

  • รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ

ตัวอย่าง

เนื่องจากอินพุตสามารถมีการแยกย่อยจำนวนมากจึงเป็นตัวอย่างมากกว่ากรณีทดสอบ การสลายตัวแต่ละครั้งจะแสดงในบรรทัดที่แตกต่างกัน

Input  ->  Output

5     ->   5
           2, 3

15    ->   1, 3, 11
           9, 6

21    ->   11, 9, 1
           7, 7, 7

42    ->   22, 11, 9
           2, 7, 33

132   ->   44, 44, 44
           121, 11

345   ->   202, 44, 99
           2, 343

1022  ->   989, 33
           999, 22, 1

9265  ->   9229, 33, 3
           8338, 828, 99

32
mmm, ปุนในชื่อ
Erik the Outgolfer

ฉันสงสัยว่า: มีจำนวนเต็มใดที่จะต้องประกอบเป็นสอง palindromes? นี้จะทำให้กรณีทดสอบที่ดี (ถ้าไม่เดี๋ยวก่อนนักกอล์ฟสามารถใช้ความเป็นจริงนี้และมีเพียงการตรวจสอบk=1และk=3.)
ลินน์

@ ลินน์ดูเหมือนว่า "ไม่น่าเป็นไปได้" เนื่องจากมีการแยกย่อยสำหรับแต่ละอินพุตค่อนข้างน้อย แต่อย่างที่เรารู้ปรีชาในวิชาคณิตศาสตร์สามารถทำให้เข้าใจผิดมาก ...
Luis Mendo

1
@Lynn หากคุณอนุญาตk=1(ตามหมายเลขเดิมเป็น palindrome อยู่แล้ว) นั่นหมายความว่าคุณสมมติว่าอีก 2 หมายเลขนั้นเป็นทั้ง 0 ดังนั้นถ้า 0 เป็นที่ยอมรับว่าเป็นหนึ่งในหมายเลขใด ๆ ที่ต้องทำ ด้วยk=2ก็จะใช้งานได้k=3หากหนึ่งในสามหมายเลขนั้นคือ 0
Darrel Hoffman

ฉันไม่คิดว่าจะมีตัวเลขใด ๆ ที่สามารถแสดงผลรวมเป็น 2 เท่านั้นดังนั้นคุณสามารถครอบคลุมกรณีที่ 3 และ 1 และไม่สนใจ 2
Magic Octopus Urn

คำตอบ:


19

Brachylogขนาด 7 ไบต์

~+ℕᵐ.↔ᵐ

ลองออนไลน์!

น่าแปลกที่ไม่ช้า

คำอธิบาย

(?)~+  .          Output is equal to the Input when summed
     ℕᵐ.          Each element of the Output is a positive integer
       .↔ᵐ(.)     When reversing each element of the Output, we get the Output

2
อะไรคือ.คำอธิบายแบบสุ่มและ(.)? ไม่รู้จัก Brachylog
Magic Octopus Urn

3
@MagicOctopusUrn .เป็นตัวแปรเอาต์พุต ~+,, ℕᵐและ↔ᵐเป็นเพรดิเคตที่มีตัวแปรซ้ายและขวา ความซ้ำซ้อนของสิ่งเหล่านั้น.บ่งชี้ว่าเอาต์พุตเกี่ยวข้องโดยตรงในการเรียกใช้เพรดิเคตทั้ง 3 รายการ สุดท้าย(.)คือที่นี่เพื่อแสดงว่าตัวแปรเอาต์พุตเป็นตัวแปรสุดท้ายของโปรแกรมโดยปริยาย ดังนั้นความสัมพันธ์ที่ระบุไว้สุดท้ายคือจริงๆ.↔ᵐ.ซึ่งหมายถึง"การทำแผนที่กลับเกี่ยวกับผลการส่งออกในการส่งออก"
ทำให้เสียชีวิต

ดีมากในที่สุดอินพุตอาจเป็น> 10,000
RosLuP


8

เจลลี่ , 12 10 9 8 ไบต์

ŒṗDfU$ṪḌ

ลองออนไลน์!

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

ŒṗDfU$ṪḌ  Main link. Argument: n (integer)

Œṗ        Find all integer partitions of n.
  D       Convert each integer in each partition to base 10.
     $    Combine the two links to the left into a chain.
    U     Upend; reverse all arrays of decimal digits.
   f      Filter the original array by the upended one.
      Ṫ   Take the last element of the filtered array.
          This selects  the lexicographically smallest decomposition of those with
          the minimal amount of palindromes.
       Ḍ  Undecimal; convert all arrays of decimal digits to integers.

5
ฉันแค่ต้องการส่งวิธีแก้ปัญหาด้วย ~ 140 ไบต์แล้วฉันเห็น 8 ไบต์และฉันชอบ: "ไม่ไม่โพสต์ฉัน"
YU NO WORK

15
การเปรียบเทียบคะแนนข้ามภาษานั้นไม่มีความหมายมากนัก ผมเคยโพสต์หลามตอบตัวเองไม่ได้เพราะมันมีโอกาสที่จะชนะคำตอบนี้ แต่เพราะมันเป็นเรื่องที่สั้นที่สุดหลามคำตอบที่ฉันสามารถคิด
Dennis

8

Python 2 , 117 ไบต์

def f(n):p=[x for x in range(n+1)if`x`==`x`[::-1]];print[filter(None,[a,b,n-a-b])for a in p for b in p if n-a-b in p]

ลองออนไลน์!

พิมพ์รายการของแต่ละรายการซึ่งเป็นโซลูชัน Rod บันทึกได้ 9 ไบต์


-9 ไบต์สลับไปใช้ฟังก์ชั่นแทนที่cด้วยการลบและการใช้filter
ร็อด

1
@Rod ขอบคุณ! filter(Noneตีฉันด้วยในขณะที่ฉันกำลังทำอาหารเย็นฮ่าฮ่า c → n-a-bis cool :)
Lynn

7

JavaScript (ES6), 115 ... 84 83 ไบต์

ส่งคืนอาร์เรย์สามองค์ประกอบเสมอโดยที่รายการที่ไม่ได้ใช้จะถูกเติมด้วยศูนย์

f=(n,b=a=0)=>(r=[b,a%=n,n-a-b]).some(a=>a-[...a+''].reverse().join``)?f(n,b+!a++):r

กรณีทดสอบ


6

R, 126 ไบต์145 ไบต์

ขอบคุณ Giuseppe สำหรับการเล่นกอล์ฟที่มีขนาด 19 ไบต์

function(n){a=paste(y<-0:n)
x=combn(c(0,y[a==Map(paste,Map(rev,strsplit(a,"")),collapse="")]),3)
unique(x[,colSums(x)==n],,2)}

ลองออนไลน์!

คำอธิบาย

R ไม่มีวิธีเนทีฟในการย้อนสตริงและการดำเนินการสตริงเริ่มต้นจำนวนมากไม่ทำงานกับตัวเลข ดังนั้นก่อนอื่นเราแปลงชุดของจำนวนเต็มบวก (บวก 0) เป็นตัวอักษร

ต่อไปเราจะสร้างเวกเตอร์ของ 0 และ palindromes ทั้งหมด การย้อนกลับสตริงต้องแยกแต่ละตัวเลขด้วยอักขระการกลับคำสั่งของเวกเตอร์และวางกลับด้วยกันโดยไม่มีช่องว่าง

ต่อไปฉันต้องการตรวจสอบทุกกลุ่มในสามกลุ่ม (ที่นี่คือจุดที่ 0 มีความสำคัญ) โชคดีที่ R มีฟังก์ชั่นการรวมกันซึ่งส่งกลับเมทริกซ์แต่ละคอลัมน์ในการรวมกัน

ฉันใช้colSumsฟังก์ชันกับเมทริกซ์และเก็บเฉพาะองค์ประกอบที่เท่ากับเป้าหมายที่ให้มา

ในที่สุดเนื่องจากมีสอง 0s ชุดของจำนวนเต็มบวกสองชุดใด ๆ จะถูกทำซ้ำดังนั้นฉันจึงใช้ฟังก์ชันที่ไม่ซ้ำกันในคอลัมน์

เอาต์พุตเป็นเมทริกซ์โดยที่แต่ละคอลัมน์เป็นชุดของจำนวนเต็มบวก pallindromic ที่รวมกับค่าเป้าหมาย มันขี้เกียจและคืนค่า 0 เมื่อใช้องค์ประกอบน้อยกว่า 3


1
128 ไบต์ แม้ว่า +1 ใช้Mapสร้าง palindromes ได้ดี!
Giuseppe


4

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

L<4aŒḂ€Ạ
ŒṗÇÐf

ลองออนไลน์!

มากไม่มีประสิทธิภาพมาก


ดูเหมือนช้าเกินไปแม้ว่าเป้าหมายคือความยาวรหัสสำหรับฉันมันไม่ได้เป็นเพียงความยาว
RosLuP

@RosLuP ที่นี่คุณไม่ได้มีจุดมุ่งหมายเพื่อให้รหัสมีประสิทธิภาพที่นี่คุณมุ่งมั่นที่จะย่อรหัสให้มากที่สุด มันมีการทำงานในทางทฤษฎีไม่จำเป็นต้องในทางปฏิบัติตั้งแต่นี้เป็นรหัสกอล์ฟท้าทายไม่ได้เป็นรหัสกอล์ฟ จำกัด ซับซ้อนหรือรหัสกอล์ฟ จำกัด เวลาที่ท้าทาย
Erik the Outgolfer

4

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

RŒḂÐfṗ3R¤YS⁼³$$Ðf

ลองออนไลน์!

-6 ไบต์ขอบคุณ HyperNeutrino

ส่งออกทุกวิธี อย่างไรก็ตามเอาต์พุตประกอบด้วยบางส่วนที่ซ้ำกัน


1
มีis palindromebuiltin lol
HyperNeutrino

นอกจากนี้หากคุณใช้ช่วงปกติ (เพิ่มขึ้น) คุณสามารถลบ 4 ไบต์สุดท้ายได้
HyperNeutrino


@cairdcoinheringaahing ยังคงสามารถเอาชนะ Dennis หรือ Erik ไม่ได้ อย่างไรก็ตามฉันจะถอดรหัสที่ถูกตัดทอนยุบอัด URL เข้ารหัส Base64?
user202729

@ user202729 ไม่ต้องคัดลอกลิงก์อย่างถูกต้อง รหัสคือRŒḂÐfṗ3R¤YS⁼¥Ðf
caird coinheringaahing




3

Java (OpenJDK 8) , 185 ไบต์

n->{for(int i=0,j=n,k;++i<=--j;)if(p(i))for(k=0;k<=j-k;k++)if(p(k)&p(j-k))return new int[]{j-k,k,i};return n;}
boolean p(int n){return(""+n).equals(""+new StringBuffer(""+n).reverse());}

ลองออนไลน์!

ลบ 1 ไบต์จาก TIO เพื่อให้ได้จำนวนที่ถูกต้องเนื่องจากการส่งไม่ได้บรรจุ;เครื่องหมายแลมบ์ดาไว้


ในความคิดของฉันมันจะดีกว่าโซลูชันอื่น ๆ ทั้งหมดที่โพสต์จนถึงตอนนี้
RosLuP

@RosLuP ทำไมถึงเป็นเช่นนั้นถ้าฉันจะถาม
Olivier Grégoire

เพราะในที่สุดให้คำตอบสำหรับการป้อนข้อมูล> 500000 (ถ้าฉันจำได้ดี)
RosLuP

แนะนำi++<--jแทน++i<=--j
ceilingcat

2

โปรตอน , 117 ไบต์

a=>filter(l=>all(p==p[by-1]for p:map(str,l)),(k=[[i,a-i]for i:1..a-1])+sum([[[i,q,j-q]for q:1..j-1]for i,j:k],[]))[0]

ลองออนไลน์!

เอาต์พุตโซลูชัน


920 เป็นอินพุตไม่ส่งคืนเอาต์พุตใน 1 นาทีใน tio ... ฉันไม่พูดถึง 364757698688 แต่มีเพียง 920
RosLuP

1
@RosLuP นั่นไม่สำคัญ ประสิทธิภาพไม่ได้เป็นสิ่งสำคัญในการเล่นกอล์ฟ ในทางทฤษฎีมันจะใช้งานได้กับอินพุตทุกขนาดดังนั้นจึงไม่สำคัญ ให้เวลาเพียงพอมันจะให้ผลลัพธ์ที่ถูกต้องสำหรับ 920
HyperNeutrino

2

Pyth ,  16 12  10 ไบต์

ef_I#`MT./

ลองที่นี่!

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

ef_I # `MT. / ~ โปรแกรมเต็มรูปแบบ

        ./ ~ พาร์ทิชันที่มีจำนวนเต็ม
 f ~ Filter พร้อมตัวแปร T
     `MT ~ แผนที่แต่ละองค์ประกอบของ T เพื่อเป็นตัวแทนสตริง
    # ~ ตัวกรอง
  _I ~ เป็น palindrome หรือไม่? (เช่นค่าคงที่ย้อนกลับหรือไม่)
e ~ รับองค์ประกอบสุดท้าย

2

05AB1E , 17 ไบต์

LʒÂQ}U4GXNãDO¹QÏ=

ลองออนไลน์!


แสดงผลลัพธ์ในสามรายการดังนี้:

  • รายการ Palindromic ที่มีความยาว 1 (หมายเลข IFF ดั้งเดิมคือ Palindromic)

  • รายการ Palindromic ของความยาว 2

  • รายการ Palindromic ของความยาว 3


2

ความจริง 900 ไบต์

R(x)==>return x;p(r,a)==(n:=#(a::String);if r<0 then(a=0=>R a;n=1 or a=10^(n-1)=>R(a-1);a=10^(n-1)+1=>R(a-2));if r>0 then(n=1 and a<9=>R(a+1);a=10^n-1=>R(a+2));r=0 and n=1=>1;v:=a quo 10^(n quo 2);repeat(c:=v;w:=(n rem 2>0=>v quo 10;v);repeat(c:=10*c+w rem 10;w:=w quo 10;w=0=>break);r<0=>(c<a=>R c;v:=v-1);r>0=>(c>a=>R c;v:=v+1);R(c=a=>1;0));c)
b:List INT:=[];o:INT:=0
f(a:NNI):List INT==(free b,o;o:=p(-1,o);w:=0;c:=#b;if c>0 then w:=b.1;e:=a-o;e>10000000=>R[];if w<e then repeat(w:=p(1,w);w>e=>break;b:=cons(w,b));g:List INT:=[];for i in #b..1 by-1 repeat(b.i>e=>break;g:=cons(b.i,g));if o>e then g:=cons(o,g);n:=#g;for i in 1..n repeat(x:=g.i;x=a=>R[x];3*x<a=>break;for j in i..n repeat(y:=g.j;t:=x+y;t>a=>iterate;t=a=>R[x,y];t+y<a=>break;for k in j..n repeat(z:=t+g.k;z=a=>R[x,y,g.k];z<a=>break)));[])
D(a:NNI):List INT==(free o;p(0,a)=1=>[a];o:=a;for j in 1..10 repeat(t:=f(a);#t>0=>R t);[])

รหัสทดสอบ

--Lista random di n elmenti, casuali compresi tra "a" e "b"
randList(n:PI,a:INT,b:INT):List INT==
    r:List INT:=[]
    a>b =>r
    d:=1+b-a
    for i in 1..n repeat
          r:=concat(r,a+random(d)$INT)
    r

test()==
   a:=randList(20,1,12345678901234)
   [[i,D(i)] for i in a]

หากรหัสนี้จะต้องสลายตัวหมายเลข X ใน 1,2,3 palindrome รหัสนี้ทำอะไรมันจะลองใกล้ palindrome N <X และสลาย XN ใน 2 palindrome หากการสลายตัวของ XN นี้พบความสำเร็จกลับมา 3 palindrome ถ้ามันล้มเหลวให้ลองใช้ palindrome ก่อนหน้านี้ G <N <X แล้วลองสลาย XG ใน 2 palindrome เป็นต้น Ungolf code (แต่อาจเป็นไปได้ว่ามีข้อผิดพลาดบางอย่าง)

 R(x)==>return x

-- se 'r'=0 ritorna 1 se 'a' e' palindrome altrimenti ritorna 0
-- se 'r'>0 ritorna la prossima palindrome >'a'
-- se 'r'<0 ritorna la prossima palindrome <'a'
p(r,a)==(n:=#(a::String);if r<0 then(a=0=>R a;n=1 or a=10^(n-1)=>R(a-1);a=10^(n-1)+1=>R(a-2));if r>0 then(n=1 and a<9=>R(a+1);a=10^n-1=>R(a+2));r=0 and n=1=>1;v:=a quo 10^(n quo 2);repeat(c:=v;w:=(n rem 2>0=>v quo 10;v);repeat(c:=10*c+w rem 10;w:=w quo 10;w=0=>break);r<0=>(c<a=>R c;v:=v-1);r>0=>(c>a=>R c;v:=v+1);R(c=a=>1;0));c)

b:List INT:=[]   -- the list of palindrome
o:INT:=0         -- the start value for search the first is a

--Decompose 'a' in 1 or 2 or 3 palindrome beginning with prev palindrome of o
--if error or fail return []
f(a:NNI):List INT==
    free b,o
    -- aggiustamento di o, come palindrome piu' piccola di o
    o:=p(-1,o)
    -- aggiustamento di b come l'insieme delle palindromi tra 1..a-o compresa
    w:=0;c:=#b
    if c>0 then w:=b.1 --in w la massima palindrome presente in b
    e:=a-o
    output["e=",e,"w=",w,"o=",o,"#b=",#b]
    e>10000000=>R[]   --impongo che la palindrome massima e' 10000000-1
    if w<e then       --se w<a-o aggiungere a b tutte le palindromi tra w+1..a-o
          repeat(w:=p(1,w);w>e=>break;b:=cons(w,b))
                      -- g e' l'insieme dei b palindromi tra 1..a-o,o
    g:List INT:=[];for i in #b..1 by-1 repeat(b.i>e=>break;g:=cons(b.i,g))
    if o>e then g:=cons(o,g)
    --output["g=",g,b]
    n:=#g
    for i in 1..n repeat
        x:=g.i
        x=a  =>R[x]
        3*x<a=>break
        for j in i..n repeat
           y:=g.j;t:=x+y
           t>a   =>iterate
           t=a   =>R[x,y]
           t+y<a =>break
           for k in j..n repeat
                z:=t+g.k
                z=a =>R[x,y,g.k]
                z<a =>break
    []

--Decompose 'a' in 1 or 2 or 3 palindrome
--if error or fail return []
dPal(a:NNI):List INT==
   free o
   p(0,a)=1=>[a]
   o:=a                  -- at start it is o=a
   for j in 1..10 repeat -- try 10 start values only
        t:=f(a)
        #t>0=>R t
   []

ผล:

(7) -> [[i,D(i)] for i in [5,15,21,42,132,345,1022,9265] ]
   (7)
   [[5,[5]], [15,[11,4]], [21,[11,9,1]], [42,[33,9]], [132,[131,1]],
    [345,[343,2]], [1022,[999,22,1]], [9265,[9229,33,3]]]
                                                      Type: List List Any
                                   Time: 0.02 (IN) + 0.02 (OT) = 0.03 sec
(8) -> test()
   (8)
   [[7497277417019,[7497276727947,624426,64646]],
    [11535896626131,[11535888853511,7738377,34243]],
    [2001104243257,[2001104011002,184481,47774]],
    [3218562606454,[3218561658123,927729,20602]],
    [6849377785598,[6849377739486,45254,858]],
    [375391595873,[375391193573,324423,77877]],
    [5358975936064,[5358975798535,136631,898]],
    [7167932760123,[7167932397617,324423,38083]],
    [11779002607051,[11779000097711,2420242,89098]],
    [320101573620,[320101101023,472274,323]],
    [5022244189542,[5022242422205,1766671,666]],
    [5182865851215,[5182864682815,1158511,9889]],
    [346627181013,[346626626643,485584,68786]],
    [9697093443342,[9697092907969,443344,92029]],
    [1885502599457,[1885502055881,542245,1331]], [10995589034484,[]],
    [1089930852241,[1089930399801,375573,76867]],
    [7614518487477,[7614518154167,246642,86668]],
    [11859876865045,[11859866895811,9968699,535]],
    [2309879870924,[2309879789032,81418,474]]]
                                                      Type: List List Any
      Time: 0.25 (IN) + 115.17 (EV) + 0.13 (OT) + 28.83 (GC) = 144.38 sec

1

Java (OpenJDK 8) , 605 ไบต์

พิมพ์ซ้ำ แต่พวกเขาไม่ได้รับอนุญาต afaik

a->{int i=0,j,k,r[]=new int[a-1];for(;i<a-1;r[i]=++i);for(i=0;i<a-1;i++){if(r[i]==a&(""+r[i]).equals(""+new StringBuffer(""+r[i]).reverse()))System.out.println(r[i]);for(j=0;j<a-1;j++){if(r[i]+r[j]==a&(""+r[i]).equals(""+new StringBuffer(""+r[i]).reverse())&(""+r[j]).equals(""+new StringBuffer(""+r[j]).reverse()))System.out.println(r[i]+" "+r[j]);for(k=0;k<a-1;k++)if(r[i]+r[j]+r[k]==a&(""+r[i]).equals(""+new StringBuffer(""+r[i]).reverse())&(""+r[j]).equals(""+new StringBuffer(""+r[j]).reverse())&(""+r[k]).equals(""+new StringBuffer(""+r[k]).reverse()))System.out.println(r[i]+" "+r[j]+" "+r[k]);}}}

ลองออนไลน์!




1

Perl 6 , 51 ไบต์

{first *.sum==$_,[X] 3 Rxx grep {$_ eq.flip},1..$_}

ลองออนไลน์!

  • grep { $_ eq .flip }, 1 .. $_ สร้างรายการของตัวเลข palindromic ทั้งหมดจาก 1 ถึงหมายเลขอินพุต
  • 3 Rxx ทำซ้ำรายการที่สามครั้ง
  • [X]ลด list-of-list ด้วยโอเปอเรเตอร์ข้ามผลิตภัณฑ์Xส่งผลให้รายการ 3-tuples ทั้งหมดของตัวเลข palindrominc จาก 1 เป็นหมายเลขอินพุต
  • first *.sum == $_ ค้นหา 3 tuple ตัวแรกที่รวมกับหมายเลขอินพุต

คุณสามารถบันทึกไบต์xx 3โดยไม่ย้อนกลับ
Jo King

1

Python 3 , 106 ไบต์

lambda n:[(a,b,n-a-b)for a in range(n)for b in range(n)if all(f'{x}'==f'{x}'[::-1]for x in(a,b,n-a-b))][0]

ลองออนไลน์!

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


0

Ruby , 84 ไบต์

สร้างรายการชุดค่าผสมที่เป็นไปได้ทั้งหมดจาก 3 palindromes จาก 0 ถึง n ค้นหารายการแรกที่มีผลรวมตรงกันจากนั้นจึงตัดค่าศูนย์

->n{a=(0..n).select{|x|x.to_s==x.to_s.reverse};a.product(a,a).find{|x|x.sum==n}-[0]}

ลองออนไลน์!


0

เพิ่ม ++ , 62 ไบต์

D,g,@,BDdbR=
D,l,@@,$b+=
D,k,@@*,
L,RÞgdVBcB]Gd‽kdG‽k€bF++A$Þl

ลองออนไลน์!

~ 50 ไบต์เล่นกอล์ฟขณะเขียนคำอธิบาย นิยามฟังก์ชั่นแลมบ์ดาที่ส่งคืนรายการที่มีคำตอบ

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

1,231nn

1,2,...,ngRÞggA

ส่วนถัดไปสามารถแบ่งออกเป็นสามส่วนเพิ่มเติม:

BcB]
Gd‽k
dG‽k€bF

A[1 2 3 4 ...][[1] [2] [3] [4] ... ]Ak

D,k,@@*,

ฟังก์ชั่นนี้ไม่ทำอะไรเลย มันได้รับสองข้อโต้แย้งและล้อมพวกมันในอาเรย์ อย่างไรก็ตามตารางด่วนเป็นเคล็ดลับมายากลที่นี่ มันใช้เวลาสองรายการและสร้างองค์ประกอบทุกคู่ระหว่างทั้งสองรายการ ดังนั้น[1 2 3]และสร้าง[4 5 6] [[1 4] [1 5] [1 6] [2 4] [2 5] [2 6] [3 4] [3 5] [3 6]]จากนั้นจะรับอาร์กิวเมนต์การทำงานของมัน (ในกรณีนี้k) และเรียกใช้ฟังก์ชันนั้นกับแต่ละคู่ซึ่งในกรณีนี้เพียงแค่ส่งคืนคู่ตามที่เป็น

A€bF

1,23nln

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