Essa pergunta é complicada (e em particular mais difícil do que Qual é o maior número? ), Para quem gosta de quebra-cabeças mais desafiadores.
Entrada
Inteiros a1, a2, a3, a4, a5, b1, b2, b3, b4, b5, cada um no intervalo de 1 a 10.
Resultado
True if a1^(a2^(a3^(a4^a5))) > b1^(b2^(b3^(b4^b5))) and False otherwise.
^ é exponenciação nesta questão.
Regras
Isso é código-golfe. Seu código deve terminar corretamente em 10 segundos para qualquer entrada válida no TIO . Se o seu idioma não estiver no TIO, o código deverá terminar em menos de 10 segundos na sua máquina.
Você pode produzir qualquer coisa Truthy for True e qualquer coisa Falsey for False.
Casos de teste
Lembre-se de que, pelas regras de exponenciação, 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
Novos casos de teste de Kevin Cruijssen
[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
code-golf
math
restricted-time
Anush
fonte
fonte
Respostas:
Ruby, 150 bytes
Veja as revisões para contagens de bytes anteriores.
-10 bytes graças a @ValueInk
+16 bytes graças a @RosLuP por erros.
Experimente online .
Comparar diferentes torres de poder (de 'altura' cinco)?
Código não destruído:
Repartição do código:
Este é o
t
logaritmo base , que será usado para reduzir o tamanho dos números que estamos comparando. O padrão é basearc
quando apenas um argumento é fornecido.Isso é atualizado
i = i ** j
porquei
nunca é usado por si próprio ey
é o resultado do registrob^c^d^e == g^h^i(^j)
duas vezes e da movimentação de tudo para um lado. Deixamos entãoz = l[a, f] * b ** c
como a baseg
de log da basef
de log dea ** b ** c
.1^b^c^d^e = 1
nunca é maior quef^g^h^i^j
, e da mesma forma,a^b^c^d^e
é sempre maior que1^g^h^i^j = 1
sea != 1
. Observe quereturn p
retornanil
, que é falsey, ereturn 1
retorna1
, que é verdade.Se
b == 1
org == 1
, isso reduz a comparaçãoa ** b ** c
comf ** g ** h
, o que é feito com dois logs para os dois lados.Isso se compara
a ** b ** c
comf ** g ** h ** i
reorganizando-lo comolog[log[b ** c * log[a, f], g], h]
em comparação comi
. (Lembre-se dissoi **= j
no começo ez = log[b ** c * log[a, f], g]
.)Isso compara os quatro poderes mais altos depois de registrar os dois lados duas vezes. Se eles são iguais, ele compara a base.
fonte
Python 2,
671612495490611597 bytes-59 bytes graças a @EmbodimentOfIgnorance
-117 bytes graças a @Neil +121
bytes por aproximadamente cinco correções de erros, todas encontradas por @ngn
Toma as entradas como duas listas.
NOTA: Também funciona com listas maiores ou de comprimento desigual.EDIT: não é mais verdade; ainda funciona seP(a)
eP(b)
resultar em tuplas diferentes, mas se forem iguais, este código atualizado acima funcionará apenas com listas com um tamanho fixo de 5 agora.Experimente online.
Explicação:
Versão simplificada desta resposta em math.stackexchange.com , portanto todo o crédito vai para @ThomasAhle .
Para citar sua resposta:
Em relação aos exemplos contrários, ele menciona o seguinte na seção de comentários:
Como os planos A e B são irrelevantes nesse desafio, uma vez que a altura é 5 para as duas torres de energia que inserimos, o plano C é. Então, mudei
P(a)>P(b)
paraP(S(a,b))>P(S(b,a))if P(a)==P(b)else P(a)>P(b)
com a função recursivaS(a,b)
. SeP(a)
eP(b)
resultar na mesma tupla,P(S(a,b))>P(S(b,a))
primeiro removeremos os valores finais iguais aos mesmos índices, antes de fazer a mesmaP(A)>P(B)
verificação nessas listas agora mais curtas.fonte
[10,10,10,10,10]>[9,10,10,10,10]
R
uma vez, então talvez você possa simplesmente incorporá-la?R
a linha 5 ...05AB1E ,
96104 bytesPorto da resposta Ruby de @SimplyBeautifulArt , por isso, certifique-se de votar nele!
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
Entrada como uma lista de inteiros dez:
[a,b,c,d,e,f,g,h,i,j]
.Experimente online ou verifique todos os casos de teste .
Explicação:
Se alguém quiser tentar jogar mais, aqui está um programa auxiliar que eu usei para obter as variáveis corretas na lista de entrada.
fonte
C,
168180 bytesPorta C da resposta de Kevin Cruijssen.
Experimente online
fonte
3,1,10,10,10,2,1,10,10,10
como a minha resposta Java costumava também. E é realmente um porto de @ resposta Ruby SimplyBeautifulArt, já que ele é o único que veio com tudo e fixa os erros ..APL (NARS), caracteres 118, bytes 236
A função acima da chamada z, em "az w", retornaria 1 se o número em a for maior que o número em w, caso contrário, retornaria 0.
Se eu tiver
Será f (aa)> f (bb) com a matriz aa e bb de 5 números positivos se e somente se (se a a> 1 de aa e bb) log (log (f (aa)))> log ( log (f (bb))) é preciso usar as leis log ():
Para construir v (aa) = log (log (aa)) = v (a, b, c, d, e) = log (log (a)) + log (b) (c ^ (d ^ e)) = {p (3 ↑ ⍵), / 3 ↓ ⍵} funcionam e, portanto, o exercício é encontrado quando v (aa)> v (bb).
Mas há um caso em que v (aa) e v (bb) são infinitos (o APL encerra o espaço de flutuação); nesse caso, eu usaria a função não segura
que eu não entendo completamente se está ok e não leva em conta um parâmetro também ... test:
fonte
log(log())
, mas, para esse caso de teste, a diferença entrelog(log(10^10^10^10^10))
elog(log(9^10^10^10^10))
exigiria uma quantidade absurda de precisão para perceber. Você precisaria ter um ponto flutuante com cerca de2e10
10 dígitos de precisão. E isso está ignorando o fato de que ambos os lados são aproximadamente tão grandes quanto10^10^10
, o que acho difícil acreditar que você foi capaz de calcular.9, 10, 10, 10, 10, 10, 9, 10, 10, 10
, o que deve retornar1
, mass(9,10,10,10,10) < s(10,9,10,10,10)
.Java 8,
299288286252210208224 bytesPorto da resposta Ruby de @SimplyBeautifulArt , por isso, certifique-se de votar nele!
-14 bytes graças a @SimplyBeautifulArt .
+17 bytes para as mesmas correções de bugs que a resposta do Ruby.
Experimente online.
Explicação:
fonte
x==y
vez deM.abs(x-y)<1e-9
.t
Isso pode ser removido para salvar um byte, colocando-oy
como eu fiz. TIO