ทวีคูณและหาร


10

รับค่าxค้นหาค่าตัวเลขที่เล็กที่สุดที่มากกว่าyที่สามารถคูณและหารด้วยxในขณะที่ยังคงรักษาตัวเลขเดิมทั้งหมดไว้

  • ตัวเลขใหม่จะไม่สูญเสียตัวเลข
  • หมายเลขใหม่ไม่ได้รับตัวเลข

ตัวอย่างเช่น:

อินพุต: x = 2, y = 250000

  • เดิม: 285714
    • กอง: 142857
    • การคูณ: 571428

นี่คือความจริงเพราะ285714มีค่ามากกว่าปี ; แล้วเมื่อหารด้วยxผลลัพธ์ใน142,857และเมื่อคูณด้วยxผลลัพธ์ใน571428 ในการทดสอบทั้งตัวเลขหลักเดิมจาก285714มีอยู่และไม่มีการเพิ่มตัวเลขพิเศษ


กฎระเบียบ

  • Xควรเป็น2หรือ3เนื่องจากการคำนวณใด ๆ ที่สูงกว่าใช้เวลานานเกินไป
  • Yต้องเป็นจำนวนเต็มที่มากกว่าศูนย์
  • รหัสที่สั้นที่สุดชนะ

กรณีทดสอบ

นี่เป็นกรณีทดสอบที่พบบ่อยที่สุดของฉันเนื่องจากเป็นแบบทดสอบที่เร็วที่สุด

  • x = 2, y = 250000 = 285714
  • x = 2, y = 290000 = 2589714
  • x = 2, y = 3000000 = 20978514
  • x = 3, y = 31000000 = 31046895
  • x = 3, y = 290000000 = 301046895

ชี้แจง

  • ประเภทของการแบ่งไม่สำคัญ ถ้าคุณได้2.05, 0.25 และ 5.20 คุณก็จะรู้สึกเป็นอิสระ

ขอให้โชคดีทุกท่าน!


4
" X จะต้องมีค่าระหว่าง 2 ถึง 5 " - หาก X> = 4 จำนวนที่คูณด้วย X จะมากกว่า 16 คูณด้วยจำนวนที่แน่นอนดังนั้นมันจะมีตัวเลขมากกว่า
ngn

2
x ไม่สามารถเป็นอย่างอื่นได้นอกจาก 2 หรือ 3 เนื่องจากผลิตภัณฑ์คือ x ^ 2 คูณความฉลาดและทั้งคู่ควรมีจำนวนหลักเท่ากัน x = 1 จะเป็นกรณีเล็กน้อย IMO, ไม่มีวิธีแก้สำหรับ x = 3 สำหรับ y ใด ๆ แม้ว่าฉันอาจจะผิด
Jatin Sanghvi

2
หารลอยหรือหารจำนวนเต็ม?
Erik the Outgolfer

3
กรณีทดสอบจะดีมาก
Stephen

3
ฉันสงสัยว่าฉันไม่ใช่คนเดียวที่งดออกเสียงเพื่อเปิดใหม่เนื่องจากการชี้แจงทำให้ความท้าทายที่คลุมเครือมากขึ้นเพราะคำตอบที่ถูกต้องอาจเปลี่ยนแปลงได้ขึ้นอยู่กับว่าการส่งออกจุดลอยได้รับการพิจารณาหรือไม่ ฉันสงสัยว่าคำถามของ @EriktheOutgolfer ไม่ได้ถามเกี่ยวกับการอนุญาตให้ส่งออกจุดลอยตัว แต่เกี่ยวกับการอนุญาตให้ใช้การตัดทอนจำนวนเต็มหรือไม่ (และฉันขอโทษถ้าความคิดเห็นของฉันเพิ่มความสับสน)
Ørjan Johansen

คำตอบ:


4

Husk , 14 ไบต์

ḟ§¤=OoDd§¤+d*/

ลองออนไลน์!

คำอธิบาย

ḟ§¤=O(Dd)§¤+d*/  -- example inputs: x=2  y=1
ḟ                -- find first value greater than y where the following is true (example on 285714)
 §               -- | fork
         §       -- | | fork
              /  -- | | | divide by x: 142857
                 -- | | and
             *   -- | | | multiply by y: 571428
                 -- | | then do the following with 142857 and 571428
                 -- | | | concatenate but first take
           +     -- | | | | digits: [1,4,2,8,5,7] [5,7,1,4,2,8]
          ¤ d    -- | | | : [1,4,2,8,5,7,5,7,1,4,2,8]
                 -- | and
       d         -- | | digits: [2,8,5,7,1,4]
      D          -- | | double: [2,8,5,7,1,4,2,8,5,7,1,4]
                 -- | then do the following with [2,8,5,7,1,4,2,8,5,7,1,4] and [1,4,2,8,5,7,5,7,1,4,2,8]
   =             -- | | are they equal
  ¤ O            -- | | | when sorted: [1,1,2,2,4,4,5,5,7,7,8,8] [1,1,2,2,4,4,5,5,7,7,8,8]
                 -- | : truthy
                 -- : 285714

ผมปรับค่าสำหรับปีที่จะได้รับเป็นจุดที่ใกล้ชิดเริ่มต้นและผลที่ได้ไม่ถูกต้องสำหรับx = 3, y = 25000000
เอ็มม่า - สิ้นสุด

@PerpetualJ: ถ้าคุณรู้ผลลัพธ์คุณก็สามารถปรับค่าyและเวอร์ชั่นนี้ควรจะเร็วขึ้นเล็กน้อย (เฉพาะการตรวจสอบประเภทเท่านั้น)
ბიმო

ฉันปรับมันหลังจากที่คิดและแก้ไขความคิดเห็นแรกของฉัน
เอ็มม่า - สิ้นสุด

@PerpetualJ: ฉันได้แก้ไขแล้ว: ตั้งสมมติฐาน-ว่าผิด
ბიმო

1
@PerpetualJ: ฉันเขียนโปรแกรม;) ฉันเพิ่มคำอธิบายตอนนี้ทุกคนควรเข้าใจว่าเกิดอะไรขึ้น
ბიმო

5

Brachylog v2, 15 ไบต์

t<.g,?kA/p.∧A×p

ลองออนไลน์!

[x,y]จะเข้าในรูปแบบ

คำอธิบาย

t<.g,?kA/p.∧A×p
t                  Tail (extract y from the input)
 <                 Brute-force search for a number > y, such that:
  .                  it's the output to the user (called ".");
   g                 forming it into a list,
    ,?               appending both inputs (to form [.,x,y]),
      k              and removing the last (to form [.,x])
       A             gives a value called A, such that:
        /              first ÷ second element of {A}
         p             is a permutation of
          .            .
           ∧         and
            A×         first × second element of {A}
              p        is a permutation of {.}

ความเห็น

จุดอ่อนของ Brachylog ที่นำค่าหลายค่ามาใช้ซ้ำหลายครั้งปรากฏขึ้นที่นี่ โปรแกรมนี้เกือบทั้งหมดประปาและอัลกอริทึมน้อยมาก

ด้วยเหตุนี้จึงอาจสะดวกกว่าในการระบุค่าของy (มีความคิดเห็นเกี่ยวกับคำถามนี้โดยสมมติว่า 2 เป็นค่าที่เป็นไปได้เท่านั้น) อย่างไรก็ตามในความเป็นจริงแล้วคำตอบสำหรับy = 3 หมายความว่าน่าเสียดายที่การประปาต้องจัดการกับค่าของyเช่นกัน ที่เล็กที่สุดที่ฉันรู้คือต่อไปนี้:

                         315789473684210526
315789473684210526 × 3 = 947368421052631578
315789473684210526 ÷ 3 = 105263157894736842

(เทคนิคที่ฉันใช้ในการค้นหาหมายเลขนี้ไม่ได้เป็นแบบทั่วไปดังนั้นจึงเป็นไปได้ว่ามีวิธีแก้ปัญหาที่น้อยกว่าโดยใช้วิธีอื่น)

คุณไม่น่าจะตรวจสอบว่ามีนี้โปรแกรมแม้ว่า Brachylog pเขียนในลักษณะทั่วไปที่ไม่มีการเพิ่มประสิทธิภาพสำหรับกรณีพิเศษ (เช่นกรณีที่ทั้งอินพุตและเอาต์พุตเป็นที่รู้จักกันแล้วหมายความว่าคุณสามารถทำการตรวจสอบใน O ( n log n ) ผ่านการเรียงลำดับแทน กว่า O ( n !) สำหรับแนวทางการใช้กำลังแบบเดรัจฉานที่ฉันสงสัยว่าใช้งานอยู่) เป็นผลให้ใช้เวลานานมากในการตรวจสอบว่า 105263157894736842 เป็นการเปลี่ยนแปลงของ 315789473684210526 (ฉันปล่อยให้มันทำงานเป็นเวลาหลายนาทีโดยไม่มีความคืบหน้าชัดเจน)

(แก้ไข: ฉันตรวจสอบแหล่งที่มาของ Brachylog ด้วยเหตุผลปรากฎว่าถ้าคุณใช้pกับจำนวนเต็มสองจำนวนที่รู้จักกันอัลกอริทึมที่ใช้สร้างการเรียงสับเปลี่ยนที่เป็นไปได้ทั้งหมดของจำนวนเต็มในคำถามจนกว่าจะพบหนึ่งที่เท่ากับจำนวนเต็มออก คือ "input → indigits, permig indigits → outdigits, outdigits → output" อัลกอริทึมที่มีประสิทธิภาพมากขึ้นคือการตั้งค่า outdigits / ความสัมพันธ์เอาท์พุทก่อนเพื่อให้ backtracking ภายในการเปลี่ยนแปลงสามารถนำมาพิจารณาว่า


การใช้ส้อมสามารถลดรหัสของคุณได้ 1 ไบต์ ลองออนไลน์!
Kroppeb

นอกจากนี้ตามเอกสารที่ดูเหมือนว่าการตรวจสอบว่าสองรายการที่รู้จักกันมีการเปลี่ยนแปลงคือ O (n²) swi-prolog.org/pldoc/man?predicate=permutation/2
Kroppeb

@Kroppeb: ปัญหาคือว่า Brachylog pไม่ได้ทำงานpermutation/2กับสองรายการที่รู้จักกันแม้ว่าจะได้รับจำนวนเต็มสองเท่าที่รู้จักเป็นอาร์กิวเมนต์ มันสร้างการเรียงสับเปลี่ยนทั้งหมดของจำนวนเต็มแรก (ใช้permutation/2กับรายการที่รู้จักกันหนึ่งรายการ) แล้วเปรียบเทียบกับจำนวนเต็มที่สอง
ais523



3

q, 65 ไบต์

{f:{asc 10 vs x};while[not((f y)~f y*x)&(f y*x)~f"i"$y%x;y+:1];y}

แยกจำนวนที่ฐาน 10 เรียงลำดับจากน้อยไปหามากและตรวจสอบว่าเท่ากัน ถ้าไม่เพิ่มขึ้น y และไปอีกครั้ง


3

JavaScript (ES6), 76 73 69 ไบต์

บันทึก 3 ไบต์โดยใช้eval()ตามที่แนะนำโดย @ShieruAsakoto

(x)(y)จะเข้าเป็น

x=>y=>eval("for(;(g=x=>r=[...x+''].sort())(y*x)+g(y/x)!=g(y)+r;)++y")

ลองออนไลน์!

เวอร์ชันแบบเรียกซ้ำจะเป็น62 ไบต์แต่มันไม่เหมาะกับที่นี่เพราะมีการวนซ้ำที่จำเป็นจำนวนมาก

อย่างไร?

g

ตัวอย่าง:

g(285714) = [ '1', '2', '4', '5', '7', '8' ]

y×xy/xyg(y×x)g(y/x)g(y)

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

ตัวอย่าง:

g(123) + g(456) = [ '1', '2', '3' ] + [ '4', '5', '6' ] = '1,2,34,5,6'

แต่:

g(1234) + g(56) = [ '1', '2', '3', '4' ] + [ '5', '6' ] = '1,2,3,45,6'

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

x => y =>                   // given x and y
  eval(                     // evaluate as JS code:
    "for(;" +               //   loop:
      "(g = x =>" +         //     g = helper function taking x
        "r =" +             //       the result will be eventually saved in r
          "[...x + '']" +   //       coerce x to a string and split it
          ".sort() + ''" +  //       sort the digits and coerce them back to a string
      ")(y * x) +" +        //     compute g(y * x)
      "g(y / x) !=" +       //     concatenate it with g(y / x)
      "g(y) + r;" +         //     loop while it's not equal to g(y) concatenated with
    ")" +                   //     itself
    "++y"                   //   increment y after each iteration
  )                         // end of eval(); return y

66: x=>F=y=>(g=x=>r=[...x+''].sort()+'')(y*x)!=g(y)|r!=g(y/x)?F(y+1):yอาจทำให้เกิดการล้นสแต็คถ้า y อยู่ไกลจากวิธีแก้ปัญหา
Shieru Asakoto

หรือ 75 ใช้eval:x=>y=>eval("for(;(g=x=>r=[...x+''].sort()+'')(y*x)!=g(y)|r!=g(y/x);y++);y")
Shieru Asakoto

@ShieruAsakoto ขอบคุณสำหรับeval()ความคิด ความพยายามครั้งแรกของฉันคือการเรียกซ้ำ แต่ฉันยอมแพ้เพราะมีการทำซ้ำที่ต้องใช้จำนวนมาก
Arnauld

3

Haskell, 76 74 ไบต์

สองไบต์ถูกสลัดทิ้งเนื่องจากความคิดเห็นของ Lynn

import Data.List
s=sort.show
x#y=[n|n<-[y+1..],all(==s n)[s$n*x,s$n/x]]!!0

1
สำหรับไบต์เดียวกันนับคุณfสามารถf x y=[n|n<-[y+1..],all(==s n)[s$n*x,s$n/x]]!!0แต่แล้วการกำหนดคำตอบของคุณเป็นผู้ประกอบการประหยัดไบต์ที่สอง: x!y=…และแล้วคำตอบของคุณ(!):)
ลินน์

ไม่ได้คิดถึงการใช้ความเข้าใจในรายการ! ขอบคุณสำหรับคำแนะนำ: D
umnikos

2

Japt 24 ไบต์

วิธีการแก้ปัญหาที่ไร้เดียงสามากกว่าเบียร์ไม่กี่; ฉันแน่ใจว่ามีวิธีที่ดีกว่า

@[X*UX/U]®ì nÃeeXì n}a°V

ลองมัน


แต่น่าเสียดายที่นี้ก่อให้เกิดผลไม่ถูกต้องเมื่อx = 3 และการ y = 25000
เอ็มม่า - สิ้นสุด

@PerpetualJ การสันนิษฐานว่า315789473684210526เป็นวิธีการแก้ปัญหาแรกสำหรับx=3Javascript หรือ Japt ไม่สามารถคำนวณได้อย่างถูกต้องเนื่องจากมันไม่พอดีกับความแม่นยำสองเท่า
Bubbler

@PerpetualJ แก้ไขก่อนหน้านี้ กรณีทดสอบดังกล่าวจะไม่สมบูรณ์แม้ว่าด้วยเหตุผลที่บับเลอร์กล่าวถึงข้างต้น
Shaggy

@Shaggy ตอนนี้ก่อให้เกิดผลที่ถูกต้องและวิธีการแก้ปัญหาที่ Bubbler ชี้ไปที่ไม่ได้ผลที่ถูกต้องครั้งแรกข้างต้น25000 ดูกรณีทดสอบของฉันหากคุณสงสัยในเรื่องนั้น +1
เอ็มม่า - สิ้นสุด

1

Python 2 , 69 ไบต์

S=sorted
x,y=input()
while(S(`y`)==S(`y*x`)==S(`y/x`))<1:y+=1
print y

ลองออนไลน์!


f=lambda x,y,S=sorted:y*(S(`y`)==S(`y*x`)==S(`y/x`))or f(x,y+1)ควรใช้งานได้ แต่มันถึงขีด จำกัด การเรียกซ้ำอย่างรวดเร็วและฉันไม่รู้ว่ากฎ PPCG ต้องพูดถึงเรื่องนั้นอย่างไร
ลินน์

1

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

-1 ต้องขอบคุณ Erik the Outgolfer (`` ใช้ make_digits ดังนั้นจึงDไม่จำเป็น)
+2 แก้ไขข้อผิดพลาด (ขอบคุณ Erik the Outgolfer อีกครั้งสำหรับการชี้ให้เห็นถึงปัญหาหนึ่งต่อหนึ่ง)

×;÷;⁸Ṣ€E
‘ç1#

โปรแกรมเต็มรูปแบบการพิมพ์ผล (เป็นลิงค์ dyadic รายการความยาว 1 จะได้รับผล)

ลองออนไลน์!

อย่างไร?

×;÷;⁸Ṣ€E - Link 1, checkValidity: n, x               e.g. n=285714,  x=2
×        -     multiply -> n×x                       571428
  ÷      -     divide -> n÷x                         142857
 ;       -     concatenate -> [n×x,n÷x]              [571428,142857]
    ⁸    -     chain's left argument = n             285714
   ;     -     concatenate -> [n×x,n÷x,n]            [571428,142857,285714]
     Ṣ€  -     sort €ach (implicitly make decimals)  [[1,2,4,5,7,8],[1,2,4,5,7,8],[1,2,4,5,7,8]]
        E    -     all equal?                        1

‘ç1# - Main link: y, x
‘    - increment -> y+1
   # - count up from n=y+1 finding the first...
  1  - ...1 match of:
 ç   -   the last link (1) as a dyad i.e. f(n, x)

โปรดทราบว่าเมื่อการแบ่งไม่ถูกต้องคำสั่งทศนิยมโดยนัย (เทียบเท่ากับD) ที่ใช้ก่อนการเรียงลำดับจะให้ส่วนที่เป็นเศษส่วน
เช่น: 1800÷3D-> [6,0,0]
ขณะที่1801÷3D->[6.0,0.0,0.33333333333337123]


ฉันไม่แน่ใจจริงๆคำตอบนี้ถูกต้อง; ความท้าทายต้องการผลที่ได้คือ "มากกว่าy " ซึ่งฉันตีความว่า "เคร่งครัดมากกว่าY " Dนอกจากนี้คุณไม่จำเป็นต้อง
Erik the Outgolfer

จุดที่ดีใน>=ฉันทั้งหมดที่พลาด! ไม่มีความคิดเลยว่าได้ตั้ง make_digits ไว้ - ขอบคุณ จะต้องแก้ไขและอัปเดตในภายหลังแม้ว่า ...
Jonathan Allan

1

Mathematica, 82 74 ไบต์

x=Sort@*IntegerDigits;Do[If[x[i#]==x@Floor[i/#]==x@i,Break@i],{i,#2,∞}]&

-8 ไบต์ขอบคุณ tsh

[x,y]ฟังก์ชั่นที่ใช้เป็นข้อโต้แย้ง ได้อย่างมีประสิทธิภาพค้นหาแรงโง่ตรวจสอบว่าถ้ารายการที่เรียงลำดับของตัวเลขสำหรับy, y/xและxyจะเหมือนกัน

ลองออนไลน์!


ฉันไม่คุ้นเคยกับ Mathematica แต่มันอาจพิสูจน์ได้ว่าคำตอบนั้นยังคงถูกต้องหากคุณลบส่วนที่เป็นเศษส่วน: คำตอบทั้งหมด, ans / x, ans * x ควรหารด้วย 9 และนี่อาจทำให้การแก้ปัญหาของคุณสั้นลง
tsh

@tsh งานว่าแต่ผมไม่แน่ใจว่ามันเป็นความจริงสำหรับx=3 x=2
Ørjan Johansen

@ ØrjanJohansenให้v = a[1]*10^p[1] + a[2]*10^p[2] + ... + a[n]*10^p[n], u = a[1] * 10^q[1] + ... + a[n] * 10^q[n]. และu-v = a[1]*(10^p[1]-10^q[1]) + ... + a[n]*(10^p[n]-10^q[n])เนื่องจาก10^x-10^y=0 (mod 9)ถือเสมอ u-v=0 (mod 9)มักจะถือ หากมีคำตอบที่ผิดwตั้งแต่w*x-w=0 (mod 9)และเรายังมีw-floor(w/x)=0 (mod 9) floor(w/x)=0 (mod 9)ถ้าfloor(w/x)*x <> w, w-floor(w/x)*x>=9แต่สิ่งนี้ขัดแย้งกับข้อเท็จจริงที่ว่าw-floor(w/x)*x<xในขณะที่ x อาจเป็น 2 หรือ 3
tsh

@tsh ขอบคุณ! เพื่อประโยชน์ของผู้อื่นที่ใช้เวลานานเกินไปในการรับประเด็นนี้w=0 (mod 9)มีดังนี้w*x-w=0 (mod 9)เพราะx-1ไม่หารด้วย 3
Ørjan Johansen

ถ้าฉันไม่รวมการIntegerQทดสอบมันจะสร้างข้อผิดพลาดสองสามข้อเมื่อมันพยายามทำIntegerDigitsกับเศษส่วน แต่ Mathematica ก็ยังคงผ่านมันไปและให้คำตอบที่ถูกต้อง ฉันไม่แน่ใจว่าจะรวมข้อผิดพลาดระหว่างการคำนวณได้หรือไม่แม้ว่าคำตอบสุดท้ายนั้นถูกต้อง
numbermaniac

0

APL (NARS), 490 ตัวอักษร, 980 ไบต์

T←{v←⍴⍴⍵⋄v>2:7⋄v=2:6⋄(v=1)∧''≡0↑⍵:4⋄''≡0↑⍵:3⋄v=1:5⋄⍵≢+⍵:8⋄⍵=⌈⍵:2⋄1}
D←{x←{⍵≥1e40:,¯1⋄(40⍴10)⊤⍵}⍵⋄{r←(⍵≠0)⍳1⋄k←⍴⍵⋄r>k:,0⋄(r-1)↓⍵}x}
r←c f w;k;i;z;v;x;y;t;u;o ⍝   w  cxr
   r←¯1⋄→0×⍳(2≠T c)∨2≠T w⋄→0×⍳(c≤1)∨w<0⋄→0×⍳c>3
   r←⌊w÷c⋄→Q×⍳w≤c×r⋄r←r+c
Q: u←D r⋄x←1⊃u⋄y←c×x⋄t←c×y⋄o←↑⍴u⋄→0×⍳o>10⋄→A×⍳∼t>9
M:                     r←10*o⋄⍞←r⋄→Q
A: u←D r⋄→M×⍳x≠1⊃u⋄→B×⍳∼(t∊u)∧y∊u⋄z←r×c⋄v←D z⋄→C×⍳(⍳0)≡v∼⍦u
B: r←r+1⋄→A
C: k←z×c⋄⍞←'x'⋄→B×⍳(⍳0)≢v∼⍦D k
   ⎕←' '⋄r←z

ทดสอบ

  2 f¨250000 290000 3000000
xxxx 
1000000xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
10000000xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
285714 2589714 20978514 
 3 f¨ 31000000 290000000 
xxxxxxxxx 
100000000xxxxxxxxxxxxxxxxxxxxxxxxxx 
31046895 301046895 

ฉันคิดว่าปัญหาเป็นจำนวนสะดวกสบาย ra ที่สามารถเปลี่ยนแปลงได้ดังนั้นหนึ่งมี 3 ตัวเลข r, r * x, r * x * x ในวิธี r เริ่มค่าที่ r * x อยู่ใกล้ y (ที่ x และ y เป็นอินพุต ของปัญหาโดยใช้ตัวอักษรเดียวกับโพสต์หลัก) ฉันใช้การสังเกตว่าถ้าตัวเลขแรกของ r คือ d มากกว่าใน r จะต้องปรากฏหลัก d * x และ d * x * x เช่นกันเพื่อให้ r (หรือดีกว่า r * x) ทางออกเดียว


0

05AB1E , 16 ไบต์

[>©Ð²÷s²*)€{Ë®s#

ลองออนไลน์ (หมายเหตุ: วิธีการแก้ปัญหาที่ไม่มีประสิทธิภาพมากดังนั้นให้ใช้อินพุตใกล้เคียงกับผลลัพท์มันใช้งานได้กับอินพุตที่ใหญ่กว่าเช่นในพื้นที่ แต่บน TIO จะหมดเวลาหลังจาก 60 วินาที)

คำอธิบาย:

[                   # Start an infinite loop
 >                  #  Increase by 1 (in the first iteration the implicit input is used)
  ©                 #  Store it in the register (without popping)
   Ð                #  Triplicate it
    ²÷              #  Divide it by the second input
      s             #  Swap so the value is at the top of the stack again
       ²*           #  Multiply it by the second input
         )          #  Wrap all the entire stack (all three values) to a list
          €{        #  Sort the digits for each of those lists
             ®s     #  Push the value from the register onto the stack again
            Ë       #  If all three lists are equal:
               #    #   Stop the infinite loop
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.