CJam (59 byte)
{[WZ~C24X8TT]f*[4XGYC6 4Y].+_0=!>2%Z65135Zb+:(3/.f#:.*)W*+}
Questo è un blocco (funzione) anonimo che accetta un numero intero o doppio nello stack e produce un array con tre doppie. Ha due casi internamente per gestire tutti gli input non negativi, poiché con un solo caso si spezzerebbe su uno 0.25
o l'altro 4
. Si rompe ancora per gli input -12
e -1.3333333333333333
, ma le specifiche consentono che ...
La demo online la esegue, quindi aggiunge i valori, stampa tutti e quattro e li moltiplica per mostrare che ottiene il valore originale (errore di arrotondamento del modulo).
Sfondo matematico
w = - x - y- zx + y+ z+ w = 0- x yzw = ax yzw + a = 0
Elkies offre quattro famiglie di soluzioni. Eulero:
Xyzw====6 a s t3( a t4- 2 s4)2( 4 a t4+ s4) ( 2 a2t8+ 10 a s4t4- s8)3 s5( 4 a t4+ s4)22 t ( a t4- 2 s4) ( 2 a2t8+ 10 a s4t4- s8)2 ( 2 a2t8+ 10 a s4t4- s8)3 s3t ( 4 a t4+ s4)- ( 2 a2t8+ 10 a s4t4- s8)6 s3t ( a t4- 2s4)
Uno relativo a Eulero:
Xyzw====( 8 s8+ a2) ( 8 s8- 88 a s4- a2)12 s3( s4- a ) ( 8 s8+ 20 a s4- a2)( 8 s8+ a2) ( 8 s8- 88 a s4- a2)12 s3( 8 s4+ a ) ( 8 s8+ 20 a s4- a2)192 a s5( s4- a )2( 8 s4+ a )2( 8 s8+ a2) ( 8 s8- 88 a s4- a2) ( 8 s8+ 20 a s4- a2)- 3 secondi ( 8 secondi8+ 20 a s4- a2)34 ( s4- a ) ( 8 s4+ a ) ( 8 s8+ a2) ( 8 s8- 88 a s4- a2)
Uno più semplice:
Xyzw====( s4- 4 a )22 s3( s4+ 12 a )2 a ( 3 s4+ 4 a )2S3( s4- 4 a ) ( s4+ 12 a )S5+ 12 a s2 ( 3 s4+ 4 a )- 2 s5( s4+ 12 a )( s4- 4 a ) ( 3 s4+ 4 a )
E uno relativo a quello:
Xyzw====S5( s4- 3 a )32 ( s4+ a ) ( s12+ 12 a s8- 3 a2S4+ 2 a3)S12+ 12 a s8- 3 a2S4+ 2 a32 s3( s4- 3 a ) ( 3 s4- a )2 a ( s4+ a )2( 3 s4- a )2S3( s4- 3 a ) ( s12+ 12 a s8- 3 a2S4+ 2 a3)- 2 s ( s12+ 12 a s8- 3 a2S4+ 2 a3)( s4- 3 a ) ( s4+ a ) ( 3 s4- a )
p s4- qun'pqun'un's = 1s = 2