Anormal İptal ile bir fraksiyon basitleştirilebilir mi?


11

Anormal İptal (Wolfram Alpha'dan):

Anormal iptal, a / b fraksiyonunun pay ve paydasında orijinaline eşit bir fraksiyon ile sonuçlanan a ve b basamaklarının "iptal edilmesi" dir. Payda ve paydada bir veya daha fazla basamağın birden fazla ancak farklı sayımı varsa, hangi basamağın iptal edileceği konusunda belirsizliğin olduğunu, bu nedenle bu gibi durumları dikkate almanın en basit olduğunu unutmayın. bağlantı

Basit bir deyişle, bir kesiriniz olduğunu varsayalım a / b. c / dOrijinal ( a / b = c / d) değerine eşit başka bir kesir oluşturmak için kesirdeki rakamları iptal edebiliyorsanız, kesiri basitleştirmek için anormal iptal kullanılabilir.

a/bZorluğunuz , formda bir kesir dizesi giren ve kesir anormal iptal ile basitleştirilebiliyorsa ve doğruluk değeri veren bir program veya işlev yapmaktır. ave bher zaman sıfırdan farklı pozitif tamsayılar olacaktır. ave bher zaman iki veya daha fazla hane olacaktır. Ayrıca, birinden tüm basamakları aveya b(Sen girdi almak alışkanlık iptal edilmeyecektir 12/21en az bir basamak gelen) ave bher seferinde (Sen girdi almak alışkanlık iptal edilecektir 43/21) ve nihai sonuç asla 0biri için aveya b. Programınız ave arasındaki tüm ortak basamakları iptal etmelidir b(ör.1231/1234, a 1, a 2ve a 3) öğelerini iptal etmeniz gerekir . İptal için birden fazla olasılık varsa, önce en soldaki rakamı seçin (515/25, 51/2 yerine 15/2 olur).

Örnekler:

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.

Bu , bayt en kısa kod kazanır!


1
Relaticate: codegolf.stackexchange.com/questions/37794/… Tesadüfen sadece alıntı yaptığınız tam mathworld girişini açtım =)
flawr

515/25 103/5 iptal iptal izlenim altında mıydı?
Pulga

1
@Pulga Paydaki ilk 5, paydadaki 5 ile 15/2 bırakarak iptal edilir.
Alex A.

@Pulga 11 ve 55 herhangi bir rakam paylaşmaz, bu nedenle bu yöntem kullanılarak daha fazla basitleştirilemez. Bununla birlikte, normal kesir sadeleştirmeyi kullanmak, durum böyle olacaktır, ancak bu meydan okumada sadece rakamları iptal ediyoruz.
GamrCorps

43/21 için cevap nedir?
xnor

Yanıtlar:


3

Pyth, 22 19 bayt

@İsaacg'a üç bayt için teşekkürler!

qFcMsMM,Jcz\/.-M_BJ

Açıklama:

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

Burada deneyin .


1
m.-Fdgolf edilebilir .-M. Aynı şekilde mcFsMdgolf edilebilir cMsMM.
isaacg

@isaacg İlginç; Neden .-FMişe yaramadığını merak ediyordum . Peki Mmonadik olmayan fonksiyonlara otomatik olarak uyarılır?
lirtosiast

2

𝔼𝕊𝕄𝕚𝕟, 17 karakter / 34 bayt

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

Try it here (Firefox only).

açıklama

ïČ⍘/⎖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

İki aydır buradayım ve hala bana sihir gibi geliyor. +1
ETHproductions

2

Yakut, 95 76 bayt

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

açıklama

->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
}

19 bayt kapalı golf için Doorknob büyük teşekkürler.



1

MATL , 35 bayt

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

Örnekler

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

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

açıklama

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.