Яка велика кількість більша?


22

Вхідні дані

Цілі числа a1, a2, a3, b1, b2, b3 кожен в інтервалі від 1 до 20.

Вихідні дані

True if a1^(a2^a3) > b1^(b2^b3) and False otherwise.

^ - це експоненція в цьому питанні.

Правила

Це код-гольф. Ваш код повинен правильно скасуватись протягом 10 секунд для будь-якого дійсного вводу на стандартному настільному ПК.

Ви можете вивести що завгодно Truthy для True та False for False.

Ви можете приймати будь-який порядок введення, який вам подобається, якщо його вказано у відповіді та завжди однакове.

Для цього питання ваш код завжди повинен бути правильним. Тобто воно не повинно провалюватися через неточності плаваючої точки. Через обмежений діапазон введення цього не повинно бути надто важким.

Тестові кейси

3^(4^5) > 5^(4^3)
1^(2^3) < 3^(2^1)
3^(6^5) < 5^(20^3)
20^(20^20) > 20^(20^19)
20^(20^20) == 20^(20^20)
2^2^20 > 2^20^2
2^3^12 == 8^3^11
1^20^20 == 1^1^1
1^1^1 == 1^20^20

Коментарі не для розширеного обговорення; ця розмова переміщена до чату .
DJMcMayhem

Відповіді:


16

Perl 6 , 31 29 байт

-2 байти завдяки Гримі

*.log10* * ***>*.log10* * ***

Спробуйте в Інтернеті!

Вірите чи ні, це не езоланг, навіть якщо він складається з переважно зірочок. Для цього використовується формула Арнальда , з log10 замість ln.


Я вважаю, що це не вдається 2^3^12 == 8^3^11.
Ørjan Johansen

@ ØrjanJohansen Це слід виправити зараз. дайте мені знати, якщо не вдасться ні для чого іншого
Джо Кінг,


@Grimy Дякую! Я міг присягнути, що спробував це ...
Джо Кінг,

7

R , 39 байт

function(x,y,z)rank(log2(x)*(y^z))[1]<2

Спробуйте в Інтернеті!

Повертає FALSE коли a > bі TRUE ifb < a


4
Це неправильно дляf(2,2,20,2,20,2)
H.PWiz

Виправлено, використовуючи вашу пропозицію до відповіді @Arnauld;)
digEmAll

Я вважаю, що це не вдається 2^3^12 == 8^3^11.
Ørjan Johansen

1
Невдачі і для, 1^20^20 == 1^1^1і для 1^1^1 == 1^20^20.
Олів'є Грегоар

6

05AB1E , 11 9 11 7 байт

.²Šm*`›

Порт @Arnauld 'S застосування JavaScript і @digEmAll R' S підходи (я бачив їх розміщувати приблизно в той же час)
-2 байт завдяки @Emigna
+2 байта як баг-фікса після @Arnauld «s і @digEmAll містяться відповіді» s помилка -
4 байти, коли після коментарів @LuisMendo дозволено інший порядок введення

Вхідні дані, як [a1,b1], [a3,b3], в [a2,b2]вигляді трьох розділених входів.

Спробуйте в Інтернеті або перевірте всі тестові випадки .

Пояснення:

       # Take the logarithm with base 2 of the implicit [a1,b1]-input
  Š      # Triple-swap a,b,c to c,a,b with the implicit inputs
         #  The stack order is now: [log2(a1),log2(b1)], [a2,b2], [a3,b3]
   m     # Take the power, resulting in [a2**a3,b2**b3]
    *    # Multiply it with the log2-list, resulting in [log2(a1)*a2**a3,log2(b1)*b2**b3]
     `   # Push both values separated to the stack
        # And check if log2(a1)*a2**a3 is larger than log2(b1)*b2**b3
         # (after which the result is output implicitly)

1
Ваша друга версія може бути εć.²š] P` ›
Emigna

@Emigna Ах приємно, я дивився на підхід ć, але зовсім забув про використання š(не впевнений, чому зараз, коли це бачу, ха-ха). Спасибі!
Кевін Круїссен

Це здається невірним (оскільки відповідь Арнальда була невірною до останнього виправлення).
Ануш

@Anush Виправлено і 4 байти збережено, прийнявши вводи в іншому порядку зараз. :)
Кевін Круїссен

5

Java (JDK) , 56 байт

(a,b,c,d,e,f)->a>Math.pow(d,Math.pow(e,f)/Math.pow(b,c))

Спробуйте в Інтернеті!

Кредити


Я вважаю, що це не вдається 2^3^12 == 8^3^11.
Ørjan Johansen

@ ØrjanJohansen Fixed
Олів'є

4

Це не закінчується для a1 = 20, a2 = 20, a3 = 20.
Ануш

@Anush fix ...
J42161217

1
Дуже погано щодо переповнення, інакше ##>0&@@(##^1&@@@#)&це лише 19 байт і навіть більш розумно не схоже на Mathematica, ніж код вище. (формат введення {{a,b,c},{d,e,f}})
Грег Мартін,

3

J , 11 9 байт

>&(^.@^/)

Спробуйте в Інтернеті!

Аргументи, наведені у списках.

  • > чи лівий більший?
  • &(...) але спочатку трансформуйте кожен аргумент таким чином:
  • ^.@^/зменшіть його справа наліво за допомогою викривлення. Але оскільки звичайне експонування може обмежувати помилки навіть для розширених чисел, ми беремо журнали обох сторін


3

Python 3 , 68 байт

lambda a,b,c,d,e,f:log(a,2)*(b**c)>log(d,2)*(e**f)
from math import*

Спробуйте в Інтернеті!

Порт @Ar Yeards відповідають, але базу для журналу змінено.


^називається **в Python. І коли це змінилося, ви не зможете запустити всі тестові справи ОП.
Ørjan Johansen

Має бути все виправлено зараз, хоча 66 байт.
Артеміда підтримує Моніку

Я вважаю, що це не вдається 2^3^12 == 8^3^11.
Ørjan Johansen

@ ØrjanJohansen слід виправити
Артеміда підтримує Моніку

Здається, це так. Крім зміни логарифмічної основи для виправлення, це виглядає як метод Арнаульда.
Ørjan Johansen

2

05AB1E , 13 байт

Використовує метод з відповіді Арнальда на JS

2F.²IIm*ˆ}¯`›

Спробуйте в Інтернеті!


Це не закінчується для a1 = 20, a2 = 20, a3 = 20.
Ануш

1
@Anush: Мені здається, що закінчується менше ніж за секунду.
Емінья

Ви повинні встановити всі змінні в 20. Див tio.run/##yy9OTMpM/f9f79Du3GK9Q6tzHzXs@v8/2shAB4xiuRBMAA
Ануш

@Anush: Ах, ти мав на увазі b1=b2=b3=20, так, це не припиняється.
Емінья,

1
@Anush: це виправлено зараз. Дякуємо, що
вказали

2

Excel, 28 байт

=B1^C1*LOG(A1)>E1^F1*LOG(D1)

Реалізація Excel тієї самої формули, що вже використовується.


Я розумію, що Excel має 15 цифр точності, тому можуть бути випадки, коли округлення призводить до повернення неправильної відповіді.
Накопичення

2

JavaScript, 51 байт

f=(a,b,c,h,i,j)=>(l=Math.log)(a)*b**c-l(h)*i**j>1e-8

Дивно, але тестові випадки не показують жодної помилки з плаваючою комою. Я не знаю, чи це колись у такому розмірі.

Це просто порівнює логарифм чисел.

Толерантність рівності дорівнює 1e-8.


Ласкаво просимо до PPCG! На жаль, це не вдається з моїм2^3^12 == 8^3^11 тестовому випадку. Насправді ваша відповідь дуже схожа на оригінальну відповідь Арнольда (на жаль видалена, а не виправлена), яка надихнула більшість тих, хто її не зміг.
Ørjan Johansen

@ Ørjan Johansen Перейшов l(h)праворуч, а може, це працює і зараз? Редагувати: Зачекайте, це не так.
Наруйоко

Додано рівність толерантності 0.01.
Наруйоко

Я зробив швидкий пошук, і толерантність повинна спрацювати, але це трохи зависоко. Найвищий показник, який потрібно виключити (5.820766091346741e-11,(8.0,3.0,11,2.0,3.0,12))(мій тестовий випадок), а найнижчий - це найменший(9.486076692724055e-4,(17.0,19.0,1,3.0,7.0,2)) ( 3^7^2 > 17^19^1.). Так, щось на кшталт 1e-8має бути безпечно посередині та однаковою довжиною байтів.
Ørjan Johansen

@ Ørjan Johansen Добре, дякую!
Наруйоко

1

bc -l, 47 байт

l(read())*read()^read()>l(read())*read()^read()

з вхідним читанням STDIN, одне ціле число на рядок.

bcдосить швидко; він обробляє a = b = c = d = e = f = 1 000 000 за секунду на моєму ноутбуці.


Я люблю відповідь на bc! Просто потрібна у баші зараз :)
Ануш

1

C ++ (gcc) , 86 байт

Дякуємо @ ØrjanJohansen за те, що він виявив недолік у цьому, та @Ourous за те, що виправили.

#import<cmath>
int a(int i[]){return pow(i[1],i[2])/pow(i[4],i[5])>log(i[3])/log(*i);}

Спробуйте в Інтернеті!

abc>def , 0 в іншому випадку.


Формула після прийому logдвічі повинна бути i[2]*log(i[1])+log(log(*i)). Наприклад, поточний не вдасться отримати 2^2^20 > 4^2^18.
Ørjan Johansen

@ ØrjanJohansen: хороший улов! Я думаю, я повинен використовувати powметод тоді.
Ніл А.

Замінник має ту 2^3^12 == 8^3^11проблему, яку я вказав для інших.
Ørjan Johansen

@ ØrjanJohansen: ну, мабуть, тоді я використовую вашу фіксовану формулу.
Ніл А.

О, я боюся, що формула лише математично правильна. Він по- , як і раніше є проблеми з плаваючою точкою помилки, тільки з іншим випадком, 2^3^20 == 8^3^19. Насправді в середньому енергетичний метод виходить з ладу менше, можливо, тому, що він має тенденцію до багаторазового множення на дві потужності. Іншим вдалося змусити його працювати, лише трохи підправляючи його.
Ørjan Johansen

1

Желе , 8 байт

l⁵×*/}>/

Спробуйте в Інтернеті!

Спираючись на відповідь Арнальда JS . Очікує як введення [a1, b1]як лівий аргумент, так і [[a2, b2], [a3, b3]]правий аргумент.

Тепер змінено на використання журналу до бази 10, який, наскільки правильно обробляє всі можливі входи у вказаному діапазоні. Дякуємо Ørjan Johansen за те, що знайшов оригінальну проблему!


1
Я вважаю, що це не вдається 2^3^12 == 8^3^11.
Ørjan Johansen

Ваш Python TIO невірний. У вас 8*замість цього 8**. @ ØrjanJohansen дійсно вірно, що 2**(3**12) > 8**(3**11)це фальси, оскільки вони рівні.
Кевін Кройсейсен

@KevinCruijssen на жаль. Так, вони справді рівні. Причина, коли оригінали двох позначені різними, стосується помилки з плаваючою комою.
Нік Кеннеді,

1

TI-BASIC, 27 31 байт

ln(Ans(1))Ans(2)^Ans(3)>Ans(5)^Ans(6)(ln(Ans(4

6Ans
Виходи вірні, якщо перше велике число більше, ніж друге велике число. Виходи помилкові в іншому випадку.

Приклади:

{3,4,5,5,4,3
   {3 4 5 5 4 3}
prgmCDGF16
               1
{20,20,20,20,20,19       ;these two lines go off-screen
{20 20 20 20 20 19}
prgmCDGF16
               1
{3,6,5,5,20,3
  {3 6 5 5 20 3}
prgmCDGF16
               0

Пояснення:

ln(Ans(1))Ans(2)^Ans(3)>Ans(5)^Ans(6)(ln(Ans(4   ;full program
                                                 ;elements of input denoted as:
                                                 ; {#1 #2 #3 #4 #5 #6}

ln(Ans(1))Ans(2)^Ans(3)                          ;calculate ln(#1)*(#2^#3)
                        Ans(5)^Ans(6)(ln(Ans(4   ;calculate (#5^#6)*ln(#4)
                       >                         ;is the first result greater than the
                                                 ; second result?
                                                 ; leave answer in "Ans"
                                                 ;implicit print of "Ans"

Примітка: TI-BASIC - це токенізована мова. Кількість символів не дорівнює кількості байтів.


Я не такий знайомий з TI-BASIC, але це здається log(x) × y × zшвидше log(x) × y ^ z. Це не обов'язково призведе до того ж впорядкування, що і вихідна нерівність.
Нік Кеннеді

@NickKennedy Так, ти прав про це! Я оновлю публікацію для цього.
Тау

1

APL (NARS), символи 36, байти 72

{>/{(a b c)←⍵⋄a=1:¯1⋄(⍟⍟a)+c×⍟b}¨⍺⍵}

Тут нижче функція z в (abc) z (xyt) повертається 1, якщо a (b ^ c)> x ^ (y ^ t) іще поверне 0; тест

  z←{>/{(a b c)←⍵⋄a=1:¯1⋄(⍟⍟a)+c×⍟b}¨⍺⍵}
  3 4 5 z 5 4 3
1
  1 2 3 z 3 2 1
0
  3 6 5 z 5 20 3
0
  20 20 20 z 20 20 19
1
  20 20 20 z 20 20 20
0
  2 2 20 z 2 20 2
1
  2 3 12 z 8 3 11
0
  1 20 20 z 1 1 1
0
  1 1 1 z 1 20 20
0
  1 4 5 z 2 1 1
0

{(abc) ← ⍵⋄a = 1: ¯1⋄ (⍟⍟a) + c × ⍟b} - функція p (a, b, c) = log (log (a)) + c * log (b ) = log (log (a ^ b ^ c)) і якщо aa = a ^ (b ^ c) з a, b, c> 0 і a> 1 bb = x ^ (y ^ t) з x, y, t> 0 і x> 1, ніж

aa>bb <=> log(log(a^b^c))>log(log(x^y^t))  <=>  p(a,b,c)>p(x,y,t)

Виникає проблема з функцією p: Коли a дорівнює 1, журнал журналу 1 не існує, тому я вибираю зобразити це числом -1; коли a = 2, тому log log a є від'ємним числом, але> -1.

PS. Побачив функцію в її більшій множині, в якій визначено

p(a,b,c)=log(log(a))+c*log(b)

з'являється діапазон для a, b, c в 1..20 занадто мало ... Якщо бачити, коли він переповнюється базою журналів 10, діапазон для a, b, c може бути 1..10000000 або більше для 64 біт тип поплавця.

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