เศษส่วนสามารถลดความซับซ้อนได้ด้วยการยกเลิกแบบผิดปกติหรือไม่?


11

การยกเลิกที่ผิดปกติ (จาก Wolfram Alpha):

การยกเลิกที่ผิดปกติคือ "การยกเลิก" ของตัวเลขของ a และ b ในตัวเศษและตัวหารของเศษส่วน a / b ซึ่งส่งผลให้เศษส่วนเท่ากับต้นฉบับ โปรดทราบว่าหากมีการนับจำนวนหลายหลัก แต่แตกต่างกันของตัวเลขหนึ่งหลักขึ้นไปในตัวเศษและตัวส่วนนั้นจะมีความกำกวมเกี่ยวกับตัวเลขที่จะยกเลิกดังนั้นจึงเป็นการง่ายที่สุดในการแยกกรณีดังกล่าวออกจากการพิจารณา ลิงค์

a / bกล่าวง่ายๆว่าคุณมีเศษส่วน หากคุณสามารถยกเลิกตัวเลขในเศษส่วนเพื่อสร้างเศษส่วนอื่นc / dซึ่งเท่ากับต้นฉบับ ( a / b = c / d) การยกเลิกแบบผิดปกติสามารถใช้เพื่อทำให้เศษส่วนนั้นง่ายขึ้น

ความท้าทายของคุณคือการสร้างโปรแกรมหรือฟังก์ชั่นที่ป้อนสตริงเศษส่วนในรูปแบบa/bและเอาท์พุทหรือส่งกลับค่าความจริงหากเศษส่วนสามารถทำให้ง่ายขึ้นโดยใช้การยกเลิกแบบผิดปกติและค่าเท็จ aและbจะเป็นจำนวนเต็มบวกที่ไม่เป็นศูนย์เสมอ aและbจะมีตัวเลขสองหลักขึ้นไปเสมอ นอกจากนี้ตัวเลขทั้งหมดจากaหรือbจะไม่ถูกยกเลิก (คุณจะไม่ได้รับอินพุต12/21) อย่างน้อยหนึ่งหลักจากaและbจะถูกยกเลิกในแต่ละครั้ง (คุณจะไม่ได้รับอินพุต43/21) และผลลัพธ์สุดท้ายจะไม่เป็น0เช่นนั้นหรือa bโปรแกรมของคุณจะต้องยกเลิกตัวเลขทั่วไปทั้งหมดระหว่างaและb(เช่นใน1231/1234คุณต้องยกเลิก a 1, a 2และ a 3) หากมีความเป็นไปได้หลายทางในการยกเลิกให้เลือกหลักซ้ายสุดก่อน (515/25 กลายเป็น 15/2 ไม่ใช่ 51/2)

ตัวอย่าง:

Input      Output    Why

1019/5095  true      Remove the 0 and the 9 from both sides of the fraction to get 11/55, which is equivalent.
16/64      true      Remove the 6 from both sides, and get 1/4.
14/456     false     Remove the 4s. 14/456 is not equal to 1/56.
1234/4329  false     Remove the 2s, 3s, and 4s. 1234/4329 is not equal to 1/9.
515/25     false     Remove the first 5 from each side. 15/2 is not equal to 515/25.

นี่คือดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ!


1
Relaticate: codegolf.stackexchange.com/questions/37794/...บังเอิญผมได้ brosed เพียงรายการ Mathworld ที่แน่นอนที่คุณกำลังอ้าง =)
flawr

ฉันอยู่ภายใต้การแสดงผล 515/25 ยกเลิกไปที่ 103/5?
Pulga

1
@Pulga 5 ตัวแรกในตัวเศษจะยกเลิกโดยที่ 5 ในตัวส่วนเหลือ 15/2
Alex A.

@Pulga 11 และ 55 ไม่แบ่งปันตัวเลขใด ๆ ดังนั้นจึงไม่สามารถทำให้เรียบง่ายขึ้นได้โดยใช้วิธีนี้ อย่างไรก็ตามการใช้เศษส่วนธรรมดาทำให้เป็นกรณีนี้ แต่ในความท้าทายนี้เราจะยกเลิกตัวเลขเท่านั้น
GamrCorps

คำตอบสำหรับ 43/21 คืออะไร?
xnor

คำตอบ:


3

Pyth, 22 19 ไบต์

ขอบคุณ @isaacg สำหรับสามไบต์!

qFcMsMM,Jcz\/.-M_BJ

คำอธิบาย:

qFcMsMM,Jcz\/.-M_BJ      Implicit: z=input().
       ,                 two-element list
        Jcz\/              J = split z on ','
                _BJ      Bifurcate reverse: [J,reversed(J)]
             .-M         map multiset difference of elements in both lists
                             this gives the multiset difference both ways
       ,Jcz\/.-M_BJ      On input 1019/5095: [['1019','5095'], ['11','55']]
    sMM                  convert all strings to numbers
  cM                     map by float division
qF                       fold equality

ลองมันนี่


1
m.-Fd.-Mสามารถที่จะแข็งแรงเล่นกอล์ฟ ในทำนองเดียวกันmcFsMdสามารถเล่นกอล์ฟcMsMMได้
isaacg

@isaacg น่าสนใจ; ฉันสงสัยว่าทำไม.-FMไม่ทำงาน ดังนั้นMจะแยกโดยอัตโนมัติในฟังก์ชั่นที่ไม่ใช่ monadic?
lirtosiast

2

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

ïČ⍘/⎖0ⓢⓈë(ïę$)≔ëï

Try it here (Firefox only).

คำอธิบาย

ïČ⍘/⎖0ⓢⓈë(ïę$)≔ëï // implicit: ï = input fraction
ïČ⍘/⎖0              // get the numerator...
      ⓢ            // split it...
        Ⓢ          // and check if any of its items satisfy the condition:
          ë(ïę$)    // When the item is removed from ï,
                ≔ëï // does its fractional value still equal the original fractional value?
                    // implicit output

ฉันอยู่ที่นี่มาประมาณสองเดือนแล้วและมันก็ดูเหมือนว่าวิเศษสำหรับฉัน +1
ETHproductions

2

Ruby, 95 76 ไบต์

->a{x,y=a.split(?/).map &:chars;eval a+".0=="+(x-y).join+?/+(y-x).join+".0"}

คำอธิบาย

->a{                                                    # start of lambda
      a.split(?/)                                       # splits input fraction into numerator and denominator
                 .map &:chars;                          # converts them both into arrays of digits
  x,y=                                                  # assigns the numerator to x and the denominator to y

  eval                                                  # Evaluate...
       a+".0                                            # Original fraction with a .0 attached -- this forces floating-point division
            =="                                         # Equals...
               +(x-y).join                              # Numerator: Takes the relative complement of y in x (all elements in x that are not in y) and joins the resulting array into a string
                          +?/+(y-x).join                # Denominator: Takes the relative complement of x in y and joins the resulting array
                                        +".0"           # Add a .0 to force floating-point division
}

ต้องขอบคุณ Doorknob อย่างมากสำหรับการเล่นกอล์ฟขนาด 19 ไบต์


2

TeaScript ขนาด 22 ไบต์

xs`/`[0]M#E(xg(l))⌐E(x

ตอนนี้ข้อบกพร่องทั้งหมดได้ถูกรีดออกใน TeaScript 3 แล้วมันทำงานได้ดี

ลองออนไลน์

ชุดทดสอบ


E is not definedฉันได้รับ
Mama Fun Roll

@ ןnɟuɐɯɹɐןoɯฮะแปลกมันใช้งานได้จาก Github ... กำลังอัปเดต ...
Downgoat

เยี่ยมมากมันใช้งานได้ดีตอนนี้!
Mama Fun Roll

1

MATL , 35 ไบต์

jtXUw'\d+'XXZ)2$XKtbm~)Kwtbm~)UwU/=

ตัวอย่าง

>> matl
 > jtXUw'\d+'XXZ)2$XKtbm~)Kwtbm~)UwU/=
 > 
> 1019/5095
1

>> matl
 > jtXUw'\d+'XXZ)2$XKtbm~)Kwtbm~)UwU/=
 >
> 14/456
0

คำอธิบาย

j              % input string
tXUw           % duplicate, convert to number, swap
'\d+'XX        % apply regexp to split at '/'
Z)             % separate cell array of strings into two strings
2$XK           % copy those two strings to clipboard K
tbm~)          % remove from denominator all chars present in the numerator
Kw             % paste both strings and swap      
tbm~)          % remove from numerator all chars present in the denoninator
UwU/=          % obtain value of "simplified" fraction and compare with original

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