Encontre o trem de força!


29

O vencedor (obviamente) é Dennis ♦, que usou Jelly com 10 bytes!

Este desafio ainda estará aqui, no entanto, os resultados não serão mais aceitos.


O trem de força de um número é um conceito de John Conway (que também é notável por fazer o Game of Life de Conway, mas esse não é o ponto). É definido da seguinte forma:

Para qualquer número insira a descrição da imagem aqui..., o trem de força do número é insira a descrição da imagem aqui... (ou seja, todo segundo dígito, da esquerda para a direita, é um poder do dígito antes disso). Este processo é repetido até o resultado ser um único dígito.

EXEMPLOS:

2592 => (2^5)(9^2) = 2592 <= Cannot be further decomposed 135 => (1^3)5 = 5 1234 => (1^2)(3^4) = 81 => (8^1) = 8 1100 => (1^1)(0^0) = 1 # (0^0) = 1 -42 => -42 # Negative numbers output the input

Seu desafio é, para qualquer número nda entrada, retornar powertrain(n)(ou seja, napós a decomposição do trem de força terminar) como saída.

Isso é código de golfe, e a menor quantidade de bytes ganha.

AVISO LEGAL:

  • Você pode ter um número ímpar de dígitos na entrada, o último dígito simplesmente não terá energia.
  • 0 ^ 0 é 1, porque se fosse 0, muitos números seriam reduzidos instantaneamente para 0 ou 1.
  • Se o número for indestrutível em qualquer parte do processo de computação (por exemplo, se terminar com 2592), você poderá simplesmente gerar o número.
  • Se a entrada for < 10(ou seja, todos os números de um dígito e negativos), faça a saída.

Provavelmente anunciarei um vencedor depois de algumas horas .

Classificação atual:

  1. Geléia ( Dennis ♦ ): 10
  2. Pyth ( DenkerAffe ): 16
  3. MATL ( Don Muesli ): 21
  4. Perl ( Ton Hospel ): 42
  5. Haskell ( Damien ): 64
  6. Javascript ES6 ( edc65 ): 71
  7. Mathematica ( murphy ): 74
  8. Mathematica ( LegionMammal978 ) e Haskell ( Renzeee ): 77
  9. Python 2 ( mathmandan ): 111
  10. Python 3 ( Erwan ): 161
  11. Java 8 ( Azul ): 229
  12. Oracle SQL 11.2 ( Jeto ): 456
  13. Befunge '93 ( Lex ): 490

Mais alguns casos de teste seriam apreciados.
Mego

Então a entrada terá 4 dígitos no máximo?
Denker

7
E se um ciclo for alcançado, mas o período do ciclo não for 1 ou o número de entrada não fizer parte do ciclo?
feersum

11
"Estou certo de que não há nenhum dentro dos reinos da viabilidade". Podemos assumir que isso nunca vai acontecer? Ou seja, permitindo que o loop continue para sempre se um ciclo de período> 1 for alcançado?
Stewie Griffin

6
Casos de teste propostos: 1100e -42É fácil perder regras sobre casos extremos, se eles não aparecerem nos casos de teste.
Dennis

Respostas:


4

Geléia, 15 14 12 10 bytes

Ds2*/€Pµ³¡

Experimente online!

Como funciona

Ds2*/€Pµ³¡  Main link. Argument: n

D           Convert n into the array of its decimal digits.
 s2         Split into pairs of digits.
   */€      Reduce each pair by exponentiation.
      P     Take the product of the resulting powers.
       µ    Push the preceding chain as a link, and start a new one.
        ³¡  Execute the link n times and return the last result.

Isso pode ser reduzido n, simplesmente repetindo os tempos, mas não tenho uma prova de que funcione para todas as entradas possíveis.
Dennis

11
Você deve concordar com qualquer número razoável. Na verdade você está quase certamente ok para QUALQUER número usando 16 iterações: oeis.org/A133503
Ton Hospel

@ Dennis Hm, isso é o que eu faço na minha resposta
Luis Mendo

11
@ DonMuesli E agora que pensei nisso, provavelmente funciona. As chances de conseguir um 0 e um índice ímpar são esmagadora ...
Dennis

No Jelly moderno, isso pode ser feito em 7 bytes:D*2/Pµ¡
Dennis

5

Haskell, 67 64 bytes

(>> = (==)) >> = até $ p.show é uma função sem nome, recebendo um número inteiro como entrada e retornando seu trem de força.

Economizou 3 bytes graças ao Zgarb

p(x:y:r)=p[x]^p[y]*p r;p[]=1;p x=read x
(>>=(==))>>=until$p.show

11
((==)=<<g)salva dois bytes acima (\n->g n==n).
`` Zgarb

Uau, não estou familiarizado com a instância ((->) r) do Monad. Obrigado pelo truque.
Damien

Essa enxurrada de sinais de pontuação (>>=(==))>>=realmente parece um trem!
Andreï Kostyrka

4

Perl, 42 48 bytes

Inclua +2 para -lp(você pode soltar -ltambém, mas eu gosto de novas linhas)

Execute com entrada no STDIN, por exemplo

perl -lp powertrain.pl <<< 1234

powertrain.pl:

s/\B/1&pos?"**":"*"/eg until++$.>($_=eval)

(em perls mais antigos, você também pode soltar o espaço entre a regex e até)

Isso não será capaz de lidar com o ponto fixo, 24547284284866560000000000mas um valor tão alto não funcionará de qualquer maneira, porque nesse momento o perl passou para a notação exponencial.

De fato, a versão acima funcionará rapidamente (na maioria dos 2592loops) para todos os números que o perl pode representar sem usar notação exponencial, pois está provado que não há pontos fixos entre 2592e 24547284284866560000000000( https://oeis.org/A135385 )

No entanto, isso pressupõe algo ainda não comprovado. Em princípio, pode haver uma redução que leva mais do que X=10^7etapas (é suposto que nenhum ponto não fixo execute mais de 16 etapas, https://oeis.org/A133503 ) cujo valor cai abaixo X(mas acima 10^7) e depois sobe novamente. Se for esse o caso, devo recorrer a:

s/\B/1&pos?"**":"*"/eg until$s{$_=eval}++||/-/

Explicação

O código funciona colocando **e *(alternando) entre os dígitos

s/\B/1&pos?"**":"*"/eg

assim 2592se torna 2**5*9**2e 12345se torna 1**2*3**4*5. Essas são expressões perl válidas que podem ser avaliadas com

$_ = eval

( 0**0está 1em perl). Em seguida, basta colocar um loop em torno disso com um contador que faça com que ele expire. Como, exceto pelos pontos fixos, os valores diminuem extremamente rapidamente, a série do trem de força converge antes que o contador tenha a chance de realmente continuar


3

Pitão, 25 18 11 16 bytes

?<Q0Qu*F^McjGT2Q

Experimente aqui!

7 14 bytes salvos com a ajuda de @Jakube

Explicação

? <Q0Qu * F ^ McjGT2Q # Q = eval (entrada)

? <Q0Q # Se a entrada for negativa, retorne Q
     u Q # aplique a seguinte função até atingirmos um ciclo               
                   # valor inicial é Q e o valor atual está em G
           jGT # divide a entrada em uma lista de dígitos
          c 2 # dividido em pares de 2
        ^ M # calcula a potência de cada par
      * F # calcula o produto de todos os poderes


11
Pyth é basicamente apenas uma versão de golfe do Python, exceto com pequenas alterações?
Clismique 8/03/16

11
@Jakube Obrigado pelas dicas! :) Ainda no início da manhã para mim ...
Denker

@DerpfacePython Sim, meio. Dê uma olhada nos documentos, se você quiser aprender sobre isso.
Denker

Sem problemas. ;-)
Jakube 8/16

4
@DerpfacePython Pyth começou como apenas "Python reduzido", mas chamá-lo de que agora seria falso. Pyth divergiu significativamente de Python.
Mego

3

Python 2, 111 bytes

def p(n,b=0,o=''):
 if n<1:return n
 for c in str(n):o+=c+'**'[b:];b=~b
 j=eval(o+'1');return p(j)if j-n else j

A idéia é criar uma string onde os dígitos de nsão separados por operações que alternam entre *e **, e depois evala string. (Outras soluções usam essa mesma idéia; veja, por exemplo, a resposta Perl de Ton Hospel .)

Portanto, a operação alterna entre o '**'[0:]que é **e o '**'[-1:]que é justo *.

No entanto, no final do forloop, a string termina com uma operação (uma ou outra), então precisamos soltar a última operação ou adicionar outro dígito, para que a string faça sentido.

Felizmente, anexar um 1no final funcionará, não importa qual operação seja a última. (Se você preferir, 1é uma identidade unilateral da direita, para multiplicação e exponenciação. Outra maneira de dizer isso é isso powertrain(n) == powertrain(10*n + 1)para todos n>0.)

Finalmente, se o resultado do resultado evalfor o mesmo que a entrada (como em um 1ciclo de duração ), a função será encerrada. Caso contrário, a função chama a si mesma no resultado. (Ele permanecerá para sempre em qualquer ciclo de duração > 1, mas, de acordo com os comentários do OP, posso assumir que não existem tais ciclos.)

(Nota: a explicação acima funciona para números inteiros positivos de um dígito, pois uma entrada de um dígito nserá concluída e n**1resultará em um 1ciclo. No entanto, também precisamos aceitar entradas não positivas, portanto, há uma condição no iniciando esse curto-circuito se a entrada for menor que 1. Nós poderíamos eliminar essa linha e economizar 17 bytes, se a entrada não fosse negativa.)


Isso parece tendencioso, mas ... voto positivo por ser Python 2. E tem uma explicação.
Clismique 9/03/16

@DerpfacePython Thanks! (Acho que isso iria funcionar tão bem em Python 3 ...)
mathmandan

3

Java 8, 265 244 229 bytes

Esta é a minha primeira resposta, mas estou lendo este site há algum tempo e acho que sei o que estou fazendo. Pelo menos ele bate befunge e SQL ...

Infelizmente, como outras respostas, esta não funciona para 24547284284866560000000000 devido a java'a embutida em restrições sobre o tamanho de números inteiros grandes.

Guardado 36 bytes graças a @JackAmmo

public int p(int n){if(n<10)return n;int i=1,t=1,s=(int)Math.log10(n)+1,r[]=new int[s];for(;i<=s;){int a=(int)Math.pow(10,i);r[s-i++]=n%a/(a/10);}for(i=0;i<s-1;i++)t*=Math.pow(r[i],r[++i]);if(s%2==1)t*=r[s-1];return n==t?n:p(t);}

Explicação Ungolfed

public int powertrain(int input){
    //handles negative and 1-digit cases
    if(input<10)return input;
    //initialize output variable       
    int total=1;
    // get "length" of number. Shorter than getting length of string representation
    int size=(int)Math.log10(input)+1;
    //initialize array to store digits
    int[] array=new int[size];
    //Now, because Java doesn't have support
    // for the "**" operation, and the way of turning
    // an integer into a string takes too many bytes,
    // I decided just to put every digit into an array with
    // math and iterate from there
    for(int i=1;i<=size;){
        int place=(int)Math.pow(10,i);
        //crazy math. Saved 1 byte by incrementing i when accessed
        array[size-i++]=input%place/(place/10);
    }
    for(int i=0;i<size-1;i++)
        //This is where the train happens.
        //Saved 1 byte by incrementing while accessing 
        //again, instead of i+=2 and i+1
        total*=Math.pow(array[i],array[++i]);
    //Make sure last number isn't left out if size is odd
    if(size%2==1)
        total*=array[size-1];
    //if we end up with same number, stop.
    //otherwise, keep recurring
    return input==total?input:powertrain(total);
}

No seu primeiro if ... else, if(n<10)return n;else{...}o else é desnecessário, pois logicamente tudo nesse bloco else seria executado de qualquer maneira quando n <10 for falso. Remover o resto e os 2 chaves correspondentes economizará 6 bytes. Existe uma situação semelhante à sua última se ... else if(n==t)return n;else return p(t);remover o else e o espaço após ele para salvar outros 5 bytes. Na verdade, você pode reduzi-lo ainda mais se você usar o operador triádica em vez do if ... else como assimreturn n==t?n:p(t);
Jack Ammo

você pode economizar mais alguns bytes (17 eu acho) por declarando t, s, r, e o loop for i é em conjuntoint t=i=1,s=(int)Math.log10(n)+1,r[]=new int[s];for(;i<=s;){...}for(i=0;...)...
Jack Ammo

@ JackAmmo Eu não sabia que variáveis ​​poderiam ser declaradas assim, vou ter que tentar. Obrigado pela ajuda!
Azul

sim, você apenas tem que ter cuidado com o fim de declarar-los se você estiver usando um inicializar outro (como como R usa s para defini-lo de comprimento)
Jack Ammo

para grandes números arbitrários, você deve olhar para classe BigInteger de java docs.oracle.com/javase/8/docs/api/java/math/BigInteger.html
Jack Ammo

2

JavaScript (ES6) 71

Uma função recursiva, parando quando uma repetição é encontrada. Isso não pode funcionar para loops mais longos (2 ou mais valores repetidos), mas parece que isso não poderia acontecer, pelo menos no intervalo limitado de precisão do número de javascript (17 dígitos)

f=n=>[...n+'1'].map((c,i)=>i&1?r*=Math.pow(d,c):d=c,r=1)&&n-r?f(r):n

Teste

f=n=>[...n+'1'].map((c,i)=>i&1?r*=Math.pow(d,c):d=c,r=1)&&n-r?f(r):n

function go()
{
  v=+I.value
  R.textContent=f(v)
}  

go()
<input id=I value="1234"><button onclick="go()">Go</button>
<span id=R></span>


Foi legal +'1'matar dois coelhos com uma cajadada só!
305 Neil

Não sei se você já investigou, mas o melhor que pude fazer replacefoi 1 byte mais:f=n=>`${n}1`.replace(/../g,([x,y])=>r*=Math.pow(x,y),r=1)&&n-r?f(r):n
Neil

@Neil eu tentei duro também, mas essa seqüência de modelo é uma nova ideia ...
edc65

1

Mathematica, 77 bytes

Times@@(If[#2<1,1,#^#2]&)@@@Partition[IntegerDigits@#,2,2,1,1]&~FixedPoint~#&

Função anônima. Não é muito complicado.


Mesmo assim, ainda posso ter uma explicação?
Clismique 14/03

1

Baixar 720 490 bytes

Não pude resistir a fazer mais uma vez depois da coisa Nunca me diga as probabilidades . Então, eu otimizei o "ASCII-fier" do anterior. Nesse caso, não vi necessidade de deixar o ponteiro das instruções percorrer os dígitos para lê-los; portanto, não me esforcei para torná-los legíveis por humanos. Portanto, agora é mais um digitador.

Novamente, se vocês quiserem uma explicação, avise-me nos comentários, tentarei criar algumas descrições úteis. Você pode copiar e colar o código no intérprete . Descobri que o exemplo 24547284284866560000000000 gera 0, mas isso parece ser um problema ao obter um valor tão grande de um ponto na grade, pois é possível ver claramente o valor correto sendo armazenado nas etapas finais.

v                                                    //top row is used for "variables"
>&:0`#v_.@                                           //initialize the counter                          
v     <                           g01_v#-p01:  <     //on our way back to the digitifier, check if we're done
>::>210p>55+%:10g0p-55+/:v            >10g.@         //digitifier, creates a series of ASCII characters at the top line, one for each digit in the source
        ^p01+1g01    _v#:<
v1$$                  <                              //forget some remainders of the digitifier, put 1 on the stack as a base of calculation
                      v p0-1g01-1g0-1g01*g0g01<      //taking powers of each pair of digit
>10g2-!#v_10g1-!#v_  1>                10g1-0g|
^                                  p01-2g01  *<
        >10g0g*  >                             ^     //extra multiplication with last digit if the number of digits was odd

Esta versão também suporta entrada negativa. É uma grande melhoria em relação à versão anterior, se é que digo. Pelo menos 1 bug foi corrigido e o tamanho foi reduzido bastante.


Quantos bytes mais serão necessários para a entrada de números negativos?
Clismique 11/03/16

Eu não tenho certeza para ser honesto. Eu tive alguns problemas com números negativos e escrevi-os em algum lugar da grade. Vou tentar de novo.
rael_kid

Acabei de encontrar outro bug também. Consegui adicionar suporte para números negativos. Vou postar uma atualização em breve! Provavelmente será a mesma quantidade de bytes, já que conto toda a grade.
rael_kid

1

Haskell, 100 79 77 bytes

g x|x==h x=x|1<2=g$h x;h=i.map(read.(:[])).show;i[]=1;i[a]=a;i(a:b:c)=a^b*i c

Não jogou golfe:

g x|x==h x=x|1<2=g$h x
h=i.map(read.(:[])).show
i[]=1
i[a]=a
i(a:b:c)=a^b*i c

Esta função divide a entrada em dígitos e faz o truque via i.

EDIT: Obrigado a nimi por algumas dicas.


Algumas dicas: a) i(a:[])=aé i[a]=a, b) sem a necessidade de max 1, por causa 0^0 = 1de Haskell, c) substitua (:[])com pure, d) mover o letinterior gem uma função separada e substituir o if ... then ... elsecom guardas:h=i.map(read.pure).show ; g x|x==h x=x|1<2=h x
nimi

purenão está no Prelude, mas o restante das dicas funciona, obrigado. Eu estava tentando fazer isso com os guardas, mas acabei usando ;antes do guarda e isso não funcionou, mas agora eu sei como deve funcionar.
Renzeee

pureestá no Prelude que vem com base-4.8.2.0. Não sei quando foi introduzido. Você não precisa o ( )no i([a])=a.
nimi

1

Mathematica, 74 bytes

0~f~0=f[]=1
f@n_=n
f[a_,b_,c___]:=f[c]a^b
#//.i_/;i>0:>f@@IntegerDigits@i&

Explicação

Esta solução usa uma função auxiliar f, que aceita os dígitos do número como argumentos e aplica uma iteração da operação do trem de força. A última linha é uma função pura criada para explorar a ReplaceRepeatedfunção (ou //.abreviada), que aplica uma regra a uma expressão (nesse caso, o argumento #da função pura) até que ela não mude mais. A regra i_/;i>0:>f@@IntegerDigits@isubstitui qualquer coisa não negativa pela função faplicada aos seus dígitos decimais.


A linha 2 não funciona (use :=)
CalculatorFeline

Explicação, por favor?
Clismique 14/03

@CatsAreFluffy Não vejo seu problema com a linha 2. Funciona bem para mim!
murphy

SetDelayed::write: Tag Times in n f[a_,b_,c___] is Protected. >>, Set::write: Tag Times in 1 f[n_] is Protected. >>O segundo erro desaparece quando eu uso :=vs =.
CalculatorFeline

Desculpe, não é possível reproduzir esse erro. Mas sua saída indica que as quebras de linha fazem parte do problema. Por favor, tente a versão com ;s em vez das quebras de linha:0~f~0=f[]=1;f@n_=n;f[a_,b_,c___]:=f[c]a^b;#//.i_/;i>0:>f@@IntegerDigits@i&
murphy

1

MATL , 21 bytes

tt0>*:"V!UtQgv9L2#)^p

Pode demorar alguns segundos para produzir a saída.

EDIT (30 de julho de 2016): o código vinculado substitui 9Lpor 1Lpara se adaptar às alterações recentes no idioma.

Experimente online!

Isso usa os dois truques a seguir para reduzir a contagem de bytes em detrimento da eficiência do código:

  • Repita os ntempos em vez de esperar até que um ciclo seja encontrado. Isso é aceitável conforme os comentários do OP.
  • Para um número ímpar de dígitos, uma final 1teria que ser anexada para concluir a operação final de energia. Em vez disso, o número adicionado 1é o número de dígitos. Isso garante um número par, para que todas as operações de energia possam ser realizadas (mesmo que as últimas sejam 1^1operações desnecessárias ).

Código:

t         % implicitly take input x. Duplicate
t0>*      % duplicate. Is it greater than 0? Multiply. This gives 0 if input is negative,
          % or leaves the input unchanged otherwise
:         % Generate array [1,2,...,x]
"         % for each (repeat x times)
  V       %   convert x to string
  !       %   transpose into column char array
  U       %   convert each char into number
  tQg     %   duplicate. Add 1 so that no entry is zero. Convert to logical: gives ones
  v       %   concatenate vertically
  9L2#)   %   separate odd-indexed and even-indexed entries
  ^       %   element-wise power
  p       %   product of all entries
          % implicitly end for each
          % implicitly display

Uh ... heh heh heh ... quando eu disse "loops de números", eu quis dizer números que eram assim - a, b, a, bad infinitum (mais de um termo). Se um termo for repetido, você deverá gerar esse número. Desculpe se isso não estava realmente claro.
Clismique 11/03/16

Se um termo for repetido, estou exibindo esse número. Saída I o resultado depois de muitas iterações
Luis Mendo

Ah, entendo agora ... apenas perguntando, quantas iterações seriam (aprox.)? Porque quando digito 2592a entrada, ela parece não produzir nada por um bom tempo.
Clismique

O número de iterações é o número de entrada, portanto, 2592 nesse caso. Sim, demora um pouco
Luis Mendo

0

Python 3, 169 161 bytes

def f(s):
 o=[['1',s]['-'in s]]
 while s not in o:
  o+=[s];s+='1'*(len(s)%2==1);r=1;
  for i,j in zip(s[::2],s[1::2]):r*=int(i)**int(j);s=str(r);
 return o[-1]

Ungoldfed

def f(s):
 o=[['1',s]['-'in s]]
 while s not in o:
  o+=[s]
  s+='1'*(len(s)%2==1)
  r=1
  for i,j in zip(s[::2],s[1::2]):
   r*=int(i)**int(j)
  s=str(r)
 return o[-1]

Resultados

>>> [f(i) for i in ['135', '1234', '642', '2592', '-15']]
['5', '8', '2592', '2592', '-15']

@PeterTaylor Fixed!
Erwan

Você pode colocar várias instruções em uma linha se separá-las com um ;espaço em branco. Dessa maneira, você economiza os espaços em branco da intenção. Também é possível colocar o corpo do loop for na mesma linha.
Denker

Golfe sugerido:def f(s,o=[['1',s]["-"in s]],n=int): while s not in o: o+=[s];s+=1*(len(s)%2<1);r=1 for i,j in zip(s[::2],s[1::2]):r*=n(i)**n(j) s=str(r) return o[-1]
CalculatorFeline

@CatsAreFluffy o=[['1',s]["-"in s]]no argumento padrão não funcionam para mim levantar um erro `s não defined`
Erwan

Ops, mova o para a próxima linha.
CalculatorFeline

0

Oracle SQL 11.2, 456 bytes

WITH v(n,c,i,f,t)AS(SELECT:1+0,CEIL(LENGTH(:1)/2),1,'1',0 FROM DUAL UNION ALL SELECT DECODE(SIGN(c-i+1),-1,t,n),DECODE(SIGN(c-i+1),-1,CEIL(LENGTH(t)/2),c),DECODE(SIGN(c-i+1),-1,1,i+1),DECODE(SIGN(c-i+1),-1,'1',RTRIM(f||'*'||NVL(POWER(SUBSTR(n,i*2-1,1),SUBSTR(n,i*2,1)),SUBSTR(n,i*2-1,1)),'*')),DECODE(SIGN(c-i+1),-1,0,TO_NUMBER(column_value))FROM v,XMLTABLE(f)WHERE i<=c+2 AND:1>9)CYCLE n,c,i,f,t SET s TO 1 DEFAULT 0SELECT NVL(SUM(n),:1) FROM v WHERE s=1;

Sem golfe

WITH v(n,c,i,f,t) AS
(
  SELECT :1+0,CEIL(LENGTH(:1)/2),1,'1',0 FROM DUAL
  UNION ALL
  SELECT DECODE(SIGN(c-i+1),-1,t,n),
         DECODE(SIGN(c-i+1),-1,CEIL(LENGTH(t)/2),c),
         DECODE(SIGN(c-i+1),-1,1,i+1),
         DECODE(SIGN(c-i+1),-1,'1',RTRIM(f||'*'||NVL(POWER(SUBSTR(n,i*2-1,1),SUBSTR(n,i*2,1)),SUBSTR(n,i*2-1,1)),'*')),
         DECODE(SIGN(c-i+1),-1,0,TO_NUMBER(column_value))
  FROM v,XMLTABLE(f) WHERE i<=c+2 AND :1>9 
)  
CYCLE n,c,i,f,t SET s TO 1 DEFAULT 0
SELECT NVL(SUM(n),:1) FROM v WHERE s=1;

v é uma visão recursiva, os parâmetros são

n: número a ser dividido em partes de 2 dígitos

c: número de partes de 2 dígitos

i: parte atual de 2 dígitos para calcular

f: string concatenando os poderes com * como separador

t: avaliação de f

Os DECODES alternam para o próximo número para dividir e calcular quando todas as partes do número atual forem concluídas.

XMLTABLE (f) pega uma expressão e a avalia, colocando o resultado na pseudo coluna "column_value". É a versão para golfe de http://tkyte.blogspot.fr/2010/04/evaluating-expression-like-calculator.html

CYCLE é o oráculo construído na detecção de ciclo e é usado como condição de saída.

Como o resultado para: 1 <10 é: 1 ev não retorna nenhuma linha para esses casos, SUM força uma linha com NULL como o valor. NVL retorna: 1 como resultado se a linha for nula.


Onde está a explicação?
Clismique 11/03/16
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.