Этот вопрос сложен (и, в частности, сложнее, чем Какая большая цифра больше? ), Для тех, кто любит более сложные головоломки.
вход
Целые числа a1, a2, a3, a4, a5, b1, b2, b3, b4, b5, каждое в диапазоне от 1 до 10.
Вывод
True if a1^(a2^(a3^(a4^a5))) > b1^(b2^(b3^(b4^b5))) and False otherwise.
^ это возведение в степень в этом вопросе.
правила
Это код-гольф. Ваш код должен завершаться правильно в течение 10 секунд для любого действительного ввода на TIO . Если ваш язык не на TIO, код должен завершиться менее чем за 10 секунд на вашем компьютере.
Вы можете вывести что-нибудь Truthy для True и что-нибудь Falsey для False.
Контрольные примеры
Напомним, что по правилам экспоненты a1 ^ (a2 ^ (a3 ^ (a4 ^ a5))) == a1 ^ a2 ^ a3 ^ a4 ^ a5.
10^10^10^10^10 > 10^10^10^10^9
1^2^3^4^5 < 5^4^3^2^1
2^2^2^2^3 > 10^4^3^2^2
6^7^8^9^10 is not bigger than 6^7^8^9^10
10^6^4^2^2 < 10^6^2^4^2
2^2^2^2^10 > 2^2^2^10^2
10^9^8^7^6 < 6^7^8^9^10
3^1^10^10^10 > 2^1^10^10^10
9^10^10^10^10 < 10^9^10^10^10
Новые тестовые случаи от Кевина Круйссена
[10,10,10,10,10, 10,10,10,10,9] #true
[2,2,2,2,3, 10,4,3,2,2] #true
[2,2,2,2,10, 2,2,2,10,2] #true
[10,10,10,10,10, 9,10,10,10,10] #true
[3,2,2,1,1, 2,5,1,1,1] #true
[2,2,3,10,1, 2,7,3,9,1] #true
[7,9,10,10,10, 6,9,10,10,10] #true
[3,2,2,2,2, 2,2,2,2,2] #true
[8,3,1,2,1, 2,2,3,1,1] #true
[2,4,2,1,1, 3,3,2,1,1] #true
[5,4,3,2,1, 1,2,3,4,5] #true
[1,2,3,4,5, 5,4,3,2,1] #false
[6,7,8,9,10, 6,7,8,9,10] #false
[10,6,4,2,2, 10,6,2,4,2] #false
[10,9,8,7,6, 6,7,8,9,10] #false
[1,10,10,10,10, 1,10,10,10,9] #false
[2,4,1,1,1, 2,2,2,1,1] #false
[2,2,2,1,1, 2,4,1,1,1] #false
[2,5,1,1,1, 3,2,2,1,1] #false
[4,2,1,1,1, 2,4,1,1,1] #false
[2,4,1,1,1, 4,2,1,1,1] #false
[2,3,10,1,1, 8,3,9,1,1] #false
[8,3,9,1,1, 2,3,10,1,1] #false
[2,4,1,1,1, 3,3,1,1,1] #false
[2,2,1,9,9, 2,2,1,10,10] #false
[2,2,1,10,10, 2,2,1,9,9] #false
[1,1,1,1,1, 1,2,1,1,1] #false
Ответы:
Рубин, 150 байт
Смотрите ревизии для количества предыдущих байтов.
-10 байт благодаря @ValueInk
+16 байт благодаря @RosLuP за ошибки.
Попробуйте онлайн .
Сравните разные базовые державы-башни (высотой пять)?
Код Ungolfed:
Разбивка кода:
Это базовый
t
логарифм, который будет использоваться для уменьшения размера сравниваемых чисел. По умолчанию используется основание,c
если указан только один аргумент.Это обновление,
i = i ** j
поскольку оноi
никогда не используетсяy
само по себе, и является результатомb^c^d^e == g^h^i(^j)
двойной регистрации и перемещения всего в одну сторону. Затем мыz = l[a, f] * b ** c
в качестве базыg
журнала базыf
данныхa ** b ** c
.1^b^c^d^e = 1
никогда не бывает большеf^g^h^i^j
, а такжеa^b^c^d^e
всегда больше, чем1^g^h^i^j = 1
если быa != 1
. Обратите внимание, чтоreturn p
возвращаетсяnil
, что ложно, иreturn 1
возвращается1
, что правда.Если
b == 1
илиg == 1
, то это сводится к сравнениюa ** b ** c
сf ** g ** h
, что делается с двумя бревнами с обеих сторон.Это сравнивается
a ** b ** c
сf ** g ** h ** i
перестановкой поlog[log[b ** c * log[a, f], g], h]
сравнению сi
. (Напомним, чтоi **= j
в начале иz = log[b ** c * log[a, f], g]
.)Это сравнивает 4 высшие силы после входа в обе стороны дважды. Если они равны, он сравнивает базу.
источник
Python 2
671612495490611597 байт-59 байт благодаря @EmbodimentOfIgnorance
-117 байт благодаря @Neil
+121 байт примерно для пяти исправлений ошибок, все найдены @ngn
Принимает входные данные в виде двух списков.
ПРИМЕЧАНИЕ. Также работает с большими списками или списками неравной длины.РЕДАКТИРОВАТЬ: больше не правда; это все еще работает, еслиP(a)
иP(b)
приводит к различным кортежам, но если они одинаковы, этот обновленный код выше работает только со списками с фиксированным размером 5.Попробуйте онлайн.
Объяснение:
Гольф-версия этого ответа на math.stackexchange.com , поэтому вся заслуга принадлежит @ThomasAhle .
Процитирую его ответ:
Что касается встречных примеров, он упоминает следующее в разделе комментариев:
Так как планы A и B не имеют значения в этой задаче, так как высота для обеих вводимых башен равна 5, план C это так. Поэтому я изменил
P(a)>P(b)
кP(S(a,b))>P(S(b,a))if P(a)==P(b)else P(a)>P(b)
с рекурсивной функциейS(a,b)
. ЕслиP(a)
и вP(b)
результатеP(S(a,b))>P(S(b,a))
получится один и тот же кортеж, он сначала удалит конечные значения, равные по тем же индексам, а затем выполнит ту жеP(A)>P(B)
проверку в этих теперь более коротких списках.источник
[10,10,10,10,10]>[9,10,10,10,10]
R
только один раз, так что, может быть, вы можете просто встроить ее?R
линии 5 все еще есть громкий звонок ...05AB1E ,
96104 байтаПорт @SimplyBeautifulArt 's Ruby answer , так что обязательно проголосуйте за него!
POSITIVE_INFINITY
NEGATIVE_INFINITY
0.0
[3,2,2,1,1,2,5,1,1,1]
POSITIVE_INFINITE
[2,4,1,1,1,3,3,1,1,1]
NEGATIVE_INFINITY
Ввод в виде списка из десяти целых чисел:
[a,b,c,d,e,f,g,h,i,j]
.Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
Если кто-то захочет попробовать это в дальнейшем, вот вспомогательная программа, которую я использовал, чтобы получить правильные переменные из списка ввода.
источник
C
168180 байтС портом от ответа Кевина Круйссена.
Попробуйте онлайн
источник
3,1,10,10,10,2,1,10,10,10
как и мой Java-ответ. И это на самом деле порт Ruby-ответа @ SimplyBeautifulArt, поскольку именно он придумал все и исправил ошибки ..APL (NARS), символы 118, байты 236
Функция выше вызова z в «az w» вернет 1, если число в a больше, чем число в w, в противном случае вернет 0.
Если у меня есть
Это будет f (aa)> f (bb) с массивом aa и bb из 5 положительных чисел тогда и только тогда, когда (если a> 1 для aa и bb) log (log (f (aa)))> log ( log (f (bb))) нужно использовать законы log ():
для сборки v (aa) = log (log (aa)) = v (a, b, c, d, e) = log (log (a)) + log (b) (c ^ (d ^ e)) = {p (3 ↑ ⍵), / 3 ↓ ⍵}, и поэтому упражнение найти, когда v (aa)> v (bb).
Но есть случай, когда v (aa) и v (bb) оба бесконечны (APL имеет конец пространства с плавающей запятой), в этом случае я бы использовал небезопасную функцию
что я не совсем понимаю, если это нормально, и это не принимать во внимание параметр тоже ... test:
источник
log(log())
, но для этого тестового случая разница междуlog(log(10^10^10^10^10))
иlog(log(9^10^10^10^10))
потребовала бы абсурдной точности, чтобы уловить. Вам нужно иметь с плавающей запятой примерно2e10
10 цифр точности. И это игнорирует тот факт, что обе стороны примерно равны друг другу10^10^10
, и мне трудно поверить, что вы смогли вычислить.9, 10, 10, 10, 10, 10, 9, 10, 10, 10
, которая должна вернуться1
, ноs(9,10,10,10,10) < s(10,9,10,10,10)
.Java 8,
299288286252210208224 байтаПорт @SimplyBeautifulArt 's Ruby answer , так что обязательно проголосуйте за него!
-14 байт благодаря @SimplyBeautifulArt .
+17 байт за те же исправления ошибок, что и ответ Ruby.
Попробуйте онлайн.
Объяснение:
источник
x==y
вместоM.abs(x-y)<1e-9
.t
Это можно удалить, чтобы сохранить один байт, поместив его,y
как я сделал. TIO