Bisakah sebagian kecil disederhanakan menggunakan Pembatalan Anomali?

11

Pembatalan Anomali (dari Wolfram Alpha):

Pembatalan anomali adalah "pembatalan" digit a dan b dalam pembilang dan penyebut dari fraksi a / b yang menghasilkan pecahan sama dengan yang asli. Perhatikan bahwa jika ada banyak tetapi berbeda hitungan satu digit atau lebih dalam pembilang dan penyebut ada ambiguitas tentang digit mana yang harus dibatalkan, sehingga paling sederhana untuk mengecualikan kasus tersebut dari pertimbangan. Tautan

Secara sederhana, katakanlah Anda memiliki sebagian kecil a / b. Jika Anda dapat membatalkan digit dalam fraksi untuk membuat fraksi lain c / dyang sama dengan yang asli ( a / b = c / d), pembatalan anomali dapat digunakan untuk menyederhanakan fraksi.

Tantangan Anda adalah membuat program atau fungsi yang memasukkan string fraksi dalam bentuk a/bdan menghasilkan atau mengembalikan nilai kebenaran jika fraksi dapat disederhanakan menggunakan pembatalan anomali, dan nilai palsu sebaliknya. adan bakan selalu menjadi bilangan bulat positif bukan nol. adan bakan selalu memiliki dua digit atau lebih. Juga, semua digit dari salah satu aatau btidak akan dibatalkan (Anda tidak akan mendapatkan input 12/21), setidaknya satu digit dari adan bakan dibatalkan setiap kali (Anda tidak akan mendapatkan input 43/21), dan hasil akhirnya tidak akan pernah 0baik untuk aatau b. Program Anda harus membatalkan semua digit umum antara adan b(mis. Dalam1231/1234, Anda harus membatalkan a 1, a 2, dan a 3). Jika ada beberapa kemungkinan pembatalan, pilih digit paling kiri terlebih dulu (515/25 menjadi 15/2 bukan 51/2).

Contoh:

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.

Ini adalah , jadi kode terpendek dalam byte menang!

GamrCorps
sumber
1
Relaticate: codegolf.stackexchange.com/questions/37794/... Kebetulan saya baru saja memasukkan entri mathworld yang Anda kutip =)
flawr
Saya mendapat kesan 515/25 membatalkan ke 103/5?
Pulga
1
@Pulga 5 pertama di pembilang akan dibatalkan dengan 5 di penyebut, meninggalkan 15/2.
Alex A.
@Pulga 11 dan 55 tidak membagikan angka apa pun, sehingga tidak bisa disederhanakan lagi menggunakan metode ini. Namun, dengan menggunakan penyederhanaan fraksi normal, ini akan terjadi, tetapi dalam tantangan ini kita hanya membatalkan angka.
GamrCorps
Apa jawaban untuk 43/21?
xnor

Jawaban:

3

Pyth, 22 19 byte

Berkat @isaacg selama tiga byte!

qFcMsMM,Jcz\/.-M_BJ

Penjelasan:

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

Coba di sini .

lirtosiast
sumber
1
m.-Fdbisa bermain golf .-M. Begitu juga mcFsMdbisa bermain golf cMsMM.
isaacg
@isaacg Menarik; Saya bertanya-tanya mengapa .-FMtidak berhasil. Jadi Msecara otomatis bercak pada fungsi non-monadik?
lirtosiast
2

π”Όπ•Šπ•„π•šπ•Ÿ, 17 karakter / 34 byte

ïČ⍘/βŽ–0β“’β“ˆΓ«(Γ―Δ™$)≔ëï

Try it here (Firefox only).

Penjelasan

ïČ⍘/βŽ–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
Mama Fun Roll
sumber
Saya sudah sekitar π”Όπ•Šπ•„π•šπ•Ÿ selama dua bulan sekarang, dan itu masih tampak ajaib bagi saya. +1
ETHproduk
2

Ruby, 95 76 byte

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

Penjelasan

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

Terima kasih banyak kepada Doorknob untuk bermain golf 19 byte.

sebuah spaghetto
sumber
2

TeaScript, 22 byte

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

Sekarang semua bug telah diperbaiki dalam TeaScript 3, ini berfungsi dengan baik

Cobalah online

Suite uji

Downgoat
sumber
Saya mengerti E is not defined.
Mama Fun Roll
@ ן nɟuɐɯɹɐ ן oɯ huh, aneh, ini bekerja dari Github ... Memperbarui ...
Downgoat
Bagus, sekarang berfungsi dengan baik!
Mama Fun Roll
1

MATL , 35 byte

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

Contohnya

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

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

Penjelasan

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
Luis Mendo
sumber
1

Javascript ES6, 73 byte

a=>[...a.split`/`[0]].some(x=>(e=eval)(a.replace(e(`/${x}/g`),``))==e(a))
Mama Fun Roll
sumber