Чи може бути спрощена частка за допомогою аномального скасування?


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, ви повинні скасувати а 1, а 2та а 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
Виправити: codegolf.stackexchange.com/questions/37794/… Випадково я щойно переглянув точний запис mathworld, який ви цитуєте =)
flawr

Я був під враженням 515/25 скасування до 103/5?
Пульга

1
@Pulga Перші 5 у чисельнику скасуються з знаменником 5, залишивши 15/2.
Олексій А.

@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автоматично спливає немонадичні функції?
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

Рубі, 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
}

Величезне спасибі Дорнобу за те, що виграли 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 ... Оновлення ...
Пуховик

Чудово, зараз це чудово працює!
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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.