package senscript_functions;
import java.util.Arrays;
import security.Blowfish;
import security.Operator;
import security.SuperFastHash;
public class Functions {
public static String min(String [] args) {
double min = Integer.MAX_VALUE;
for(int i=0; i<args.length; i++) {
if (Double.valueOf(args[i]) < min)
min = Double.valueOf(args[i]);
}
return ""+min;
}
public static String mysum(String [] args) {
int x = Integer.parseInt(args[0]);
int y = Integer.parseInt(args[1]);
int s = x + y + 2;
return ""+s;
}
public static String smin(String [] args) {
double min = Integer.MAX_VALUE;
String s = "";
for(int i=0; i<args.length; i++) {
String [] str = args[i].split("#");
if (Double.valueOf(str[0]) < min) {
min = Double.valueOf(str[0]);
s = str[1];
}
}
return min+"#"+s;
}
public static String angle(String [] args) {
if(args.length < 6)
try {
throw new Exception("angle (Functions class): argument number is < 6: "+args.length);
} catch (Exception e) {
e.printStackTrace();
}
double prec_X = Double.valueOf(args[0]);
double prec_Y = Double.valueOf(args[1]);
double local_X = Double.valueOf(args[2]);
double local_Y = Double.valueOf(args[3]);
double next_X = Double.valueOf(args[4]);
double next_Y = Double.valueOf(args[5]);
prec_X = prec_X - local_X;
prec_Y = prec_Y - local_Y;
next_X = next_X - local_X;
next_Y = next_Y - local_Y;
double b = 0;
double a = 0;
if(prec_X==next_X && prec_Y==next_Y)
b = Math.PI*2;
else{
a = Math.atan2(prec_X ,prec_Y);
if (a < 0)
a = (2 * Math.PI) + a;
b = Math.atan2(next_X, next_Y);
if (b < 0)
b = (2 * Math.PI) + b;
b = b - a;
if (b < 0)
b = (2 * Math.PI) + b;
}
return ""+b;
}
public static String check(String [] args) {
int [][] g = {{1,0,1,0,1},{1,1,0,0,1},{1,1,1,1,0}};
//String s = args[0].replaceAll("#", "");
String [] s = args[0].split("#");
System.out.println(s);
int [] vp = new int [5];
vp[0] = s[2].charAt(0)-'0';
vp[1] = s[7].charAt(0)-'0';
vp[2] = s[12].charAt(0)-'0';
vp[3] = s[17].charAt(0)-'0';
vp[4] = s[22].charAt(0)-'0';
String [] id = new String [5];
id[0] = s[1]+"";
id[1] = s[6]+"";
id[2] = s[11]+"";
id[3] = s[16]+"";
id[4] = s[21]+"";
System.out.println(Arrays.toString(vp));
int c1 = (vp[0] * g[0][0] + vp[1] * g[0][1] + vp[2] * g[0][2] + vp[3] * g[0][3] + vp[4] * g[0][4])%2;
int c2 = (vp[0] * g[1][0] + vp[1] * g[1][1] + vp[2] * g[1][2] + vp[3] * g[1][3] + vp[4] * g[1][4])%2;
int c3 = (vp[0] * g[2][0] + vp[1] * g[2][1] + vp[2] * g[2][2] + vp[3] * g[2][3] + vp[4] * g[2][4])%2;
boolean error1 = false;
boolean error2 = false;
boolean error3 = false;
for (int i=0; i<5; i++) {
int cp1 = s[i*5+3].charAt(0)-'0';
int cp2 = s[i*5+4].charAt(0)-'0';
int cp3 = s[i*5+5].charAt(0)-'0';
error1 = (c1==cp1);
error2 = (c2==cp2);
error3 = (c3==cp3);
}
String state = "";
int malicious = -1;
System.out.println(error1);
System.out.println(error2);
System.out.println(error3);
if(error1 && error2 && error3) { state = "[OK]"; malicious = -1;}
if(!error1 && !error2 && !error3) { state = "[MALICIOUS "+id[0]+"]"; malicious = 0;}
if(error1 && !error2 && !error3) { state = "[MALICIOUS "+id[1]+"]"; malicious = 1;}
if(!error1 && error2 && !error3) { state = "[MALICIOUS "+id[2]+"]"; malicious = 2;}
if(error1 && error2 && !error3) { state = "[MALICIOUS "+id[3]+"]"; malicious = 3;}
if(!error1 && !error2 && error3) { state = "[MALICIOUS "+id[4]+"]"; malicious = 4;}
String sOut = state+ " "+ Arrays.toString(vp);
if (malicious != -1) {
vp[malicious] = 1 - vp[malicious];
sOut += " -> "+ Arrays.toString(vp);
}
return sOut;
}
public static String fmu(String [] args) {
double muo = Double.valueOf(args[0]);
double hop = Double.valueOf(args[1]);
double eng = Double.valueOf(args[2]);
double mu = (muo*hop+eng)/(hop+1);
return ""+mu;
}
public static String fsigma(String [] args) {
double mu = Double.valueOf(args[0]);
double sigmao = Double.valueOf(args[1]);
double hop = Double.valueOf(args[2]);
double eng = Double.valueOf(args[3]);
double sigma = Math.sqrt((1/(hop+1))*((sigmao*sigmao)+((eng-mu)*(eng-mu))));
return ""+sigma;
}
public static String factor(String [] args) {
double mu = Double.valueOf(args[0]);
double sigma = Double.valueOf(args[1]);
double eng = Double.valueOf(args[2]);
double f = mu - sigma * Math.sin(Math.PI*(mu/eng));
return ""+f;
}
public static String encrypt(String [] args)throws Exception {
String valToReturn = "";
Blowfish b = new Blowfish(args[0],args[1]);
valToReturn = b.encrypt();
return valToReturn;
}
public static String decrypt(String [] args) throws Exception {
String valToReturn = "";
Blowfish b = new Blowfish(args[0],args[1]);
valToReturn = b.decrypt();
return valToReturn;
}
public static String hash(String [] args) throws Exception {
String valToReturn = "";
SuperFastHash b = new SuperFastHash(args[0],Long.valueOf(args[1]) ,Integer.valueOf(args[2]),Integer.valueOf(args[3]));
valToReturn = Long.toString(b.calculate());
return valToReturn;
}
public static String mod(String [] args) throws Exception {
String valToReturn = "";
Operator b = new Operator(Long.valueOf(args[0]),Long.valueOf(args[1]));
valToReturn = b.mod();
return valToReturn;
}
public static String myf(String [] args) {
String valToReturn = "";
// String s = args[0] ; // -> is the name of the first argument of the function myf
// double x = Double.valueOf(args[5]); // -> is the (double) value of the first argument of the function myf
//TODO
// Your program here
return valToReturn;
}
}