Esiste una bella espressione polinomiale modulo 7 per il terzo lato dato due lati a e b .
3 ( a3b - a b3)mod7
o fattorizzato
3 a b ( a2- b2)mod7
Il modulo 7 è mappato ad un resto in {0,1,2,3,4,5,6}.
Spiego perché funziona in questa risposta di Math SE , anche se penso che probabilmente manchi un argomento più pulito. L'unico altro polinomio a due termini che funziona è
( 3 a5B5- a3B )mod7
che originariamente ho trovato trasformando il mio bit-bashing in operazioni aritmetiche, quindi ho fatto una ricerca di forza bruta sui polinomi di questa forma per trovare quella più bella.
Non esitate a aggiungere porte di questo nella tua lingua preferita; questo è un post in CW.
J, 9 di Synthetica
7|3***+*-
Vedi il mio post
Dyalog APL, 9 di ngn (refuso da Adám)
7|3×××+×-
Sfacciatamente rubato dall'alto J risposta.
TI-Basic, 14 di Timtech
7fPart((A³B-AB³)/21
Pyth, 16 di FryAmTheEggman
M%*3-*H^G3*^H3G7
Definisce una funzione gdi due valori.
Golfscript, 18 di Peter Taylor (vecchio polinomio)
~1$*.5?3*@.*@*- 7%
CJam, 18 di Martin Büttner (portato da Peter's GolfScript) (vecchio polinomio)
l~1$*_5#3*@_*@*m7%
Mathematica, 20 anni di Martin Büttner
Mod[+##(#-#2)3##,7]&
Sì, questo è un vantaggio unario e no, non esiste un modo più breve che non utilizza un vantaggio unario.
dc, 21 di Toby Speight
sb7+d3^lb*rlb3^*-3*7%
Devo aggiungere 7 per aassicurarsi che la differenza sia sempre positiva (dc ha un %operatore firmato ).
Julia, 24 23 di Martin Büttner
f(a,b)=3a*b*(a^2-b^2)%7
CoffeeScript, 28 26 di rink.attendant.6
x=(a,b)->3*a*b*(a*a-b*b)%7
JavaScript (ES6), 28 26 di rink.attendant.6
x=(a,b)=>3*a*b*(a*a-b*b)%7
Sostanzialmente uguale a CoffeeScript.
Python 28, di xnor
lambda a,b:3*a*b*(a*a-b*b)%7
Bash, 31
Niente di speciale:
echo $[3*($1**3*$2-$1*$2**3)%7]
o in alternativa:
echo $[3*$1*$2*($1*$1-$2*$2)%7]
Un altro approccio (più lungo ma forse interessante) .
Nim, 36 di Sillesta
proc(x,y:int):int=3*x*y*(x*x-y*y)%%7
Java 7, 46 44 di rink.attendant.6
int f(int a,int b){return(a*a-b*b)*a*b*3%7;}
Java 8, 25 23 di Kevin Cruijssen
a->b->(a*a-b*b)*a*b*3%7
PHP, 49 47 di rink.attendant.6
function x($a,$b){echo($a*$a-$b*$b)*3*$a*$b%7;}
Lotto, 52 Unlemeat
set/aa=(3*(%1*%1*%1*%2-%1*%2*%2*%2)%%7+7)%%7
echo %a%
CMD non supporta il vero modulo in modo nativo (quindi non può gestire numeri negativi) - quindi %%7+7)%%7.
MENO (come mixin parametrico ), 62 60 di rink.attendant.6
.x(@a,@b){@r:mod(3*@a*@b*(@a*@a-@b*@b),7);content:~"'@{r}'"}
Vedi il mio post qui sotto .
05AB1E, 10 8 di Emigna (-2 byte di Kevin Cruijssen)
nÆs`3P7%
Provalo online.
Haskell, 31 27 25 per nome visualizzato generico
a#b=3*a*b*(a*a-b*b)`mod`7
Provalo online!
Excel, 27 di Wernisch
=MOD(3*(A1^3*B1-A1*B1^3),7)
Excel VBA, 25 di Taylor Scott
?3*[A1^3*B1-A1*B1^3]Mod 7
Forth (gforth) 41 di reffu
: f 2>r 2r@ * 2r@ + 2r> - 3 * * * 7 mod ;
Provalo online!
C #, 23 di Kevin Cruijssen
a=>b=>(a*a-b*b)*a*b*3%7