Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class calculator{
- private $cifre=array(0=>"zero",1=>"unu",2=>"doi",3=>"trei",4=>"patru",5=>"cinci",6=>"sase",7=>"sapte",8=>"opt",9=>"noua",10=>"zece");
- private $cifre2=array("unu","doi","trei","patru","cinci","sase","sapte","opt","noua");
- private $numere=array(1=>"",2=>"zeci",3=>"sute",4=>"mii",5=>"mii",6=>"mii",7=>"milioane",8=>"milioane",9=>"milioane");
- private $putere=array("/"=>3,"*"=>2,"+"=>1,"-"=>1);
- public $operatii=array("/","*","+","-");
- private function numar($j,$calcul){
- $out="";
- for($i=$j;$i<strlen($calcul)&&!in_array($calcul[$i],$this->operatii)&&$calcul[$i]!=")";$i++)
- $out.=$calcul[$i];
- return $out;
- }
- private function topostfix($calcul){
- $operatori=array();
- $postfix="";
- $termeni=explode(" ",str_replace(array_merge($this->operatii,array("(",")"))," ",$calcul));
- //var_dump($termeni);
- $l=-1;
- for($i=0;$i<strlen($calcul);$i++){
- if(is_numeric($calcul[$i])){
- $n=$this->numar($i,$calcul);
- if(in_array($n,$termeni)&&$i>$l){
- $postfix.=$n." ";
- //echo $n." ";
- $l=$i+strlen($n);
- }
- }else if(in_array($calcul[$i],$this->operatii)){
- if(count($operatori)==0)
- array_push($operatori,$calcul[$i]);
- else{
- while(!empty($operatori)&&in_array(end($operatori),$this->operatii)&&$this->putere[end($operatori)]>=$this->putere[$calcul[$i]])
- $postfix.=array_pop($operatori)." ";
- array_push($operatori,$calcul[$i]);
- }
- }else if($calcul[$i]=="(")
- array_push($operatori,$calcul[$i]);
- else if($calcul[$i]==")"){
- $a=array_pop($operatori);
- while($a!="("){
- $postfix.=$a." ";
- $a=array_pop($operatori);
- }
- }
- //var_dump($operatori);
- }
- while(count($operatori)>0){
- $postfix.=array_pop($operatori)." ";
- //var_dump($operatori);
- }
- return $postfix;
- }
- public function calcul($calcul){
- $postf=substr($this->topostfix($calcul),0,-1);
- //echo $postf;
- $expresie_postfix=explode(" ",$postf);
- //$expresie_postfix;
- $stack=array();
- //var_dump($expresie_postfix);
- for($i=0;$i<count($expresie_postfix);$i++){
- if(is_numeric($expresie_postfix[$i]))
- array_push($stack,$expresie_postfix[$i]);
- else if(in_array($expresie_postfix[$i],$this->operatii)){
- $a=array_pop($stack);
- $b=array_pop($stack);
- $r=$this->calculeaza($b,$a,$expresie_postfix[$i]);
- array_push($stack,$r);
- }
- //print_r($stack);
- }
- //echo $stack[0];
- if(count($stack)>1||!isset($stack[0])){
- return "Calcul Naspa!";
- }else
- return $this->in_litere($stack[0]);
- }
- private function in_litere($rez){
- //echo $rez;
- if($rez[0]=="0")
- $rez=substr($rez,1);
- $spell="";
- $rez=(string)$rez;
- //print $rez." ";
- if($rez[0]=="-"){
- $spell="minus ";
- $rez=substr($rez,1);
- }
- $rez=(float)$rez;
- if($rez<=10&&$rez>=0){
- return $spell.$this->cifre[$rez].(strpos($rez,".")!=False?" virgula ".$this->in_litere(explode(".",$rez)[1]):"");
- }
- if($rez<20&&$rez>=0){
- $ultima=$rez%10;
- return $spell.$this->cifre[$ultima]." spre zece".(strpos($rez,".")!=False?" virgula ".$this->in_litere(explode(".",$rez)[1]):"");
- }
- if(strpos($rez,".")!=False)
- $str=explode(".",(string)$rez)[0];
- else
- $str=(string)$rez;
- //print $str;
- $len=strlen($str);
- switch($len){
- case 2:
- $zeci=substr($str,0,1);
- $unitati=substr($str,-1);
- $spell.=$zeci." zeci ".($unitati=="0"?"":" si ".$unitati);
- break;
- case 3:
- $sute=substr($str,0,1);
- $zeci=substr($str,1,1);
- $unitati=substr($str,2,1);
- $spell.=($sute!="0"?$sute:"")." sut".($sute=="1"?"a ":"e ").($zeci=="0"?"":$zeci." zeci")." ".($unitati=="0"?"":" si ".$unitati);
- break;
- case 4:
- $mii=substr($str,0,1);
- $sute=substr($str,1,1);
- $zeci=substr($str,2,1);
- $unitati=substr($str,3,1);
- $spell.=$mii." mi".($mii=="1"?"e ":"i ").($sute!="0"?$sute." sut".($sute=="1"?"a ":"e "):"").($zeci=="0"?"":$zeci." zeci")." ".($unitati=="0"?"":" si ".$unitati);
- break;
- case 5:
- $mii=substr($str,0,2);
- $sute=substr($str,2,1);
- $zeci=substr($str,3,1);
- $unitati=substr($str,3,1);
- $spell.=$mii." mi".($mii=="1"?"e ":"i ").($sute!="0"?$sute." sut".($sute=="1"?"a ":"e "):"").($zeci=="0"?"":$zeci." zeci")." ".($unitati=="0"?"":" si ".$unitati);
- break;
- case 6:
- $mii=substr($str,0,3);
- $sute=substr($str,3,1);
- $zeci=substr($str,4,1);
- $unitati=substr($str,3,1);
- $spell.=$mii." mi".($mii=="1"?"e ":"i ").($sute!="0"?$sute." sut".($sute=="1"?"a ":"e "):"").($zeci=="0"?"":$zeci." zeci")." ".($unitati=="0"?"":" si ".$unitati);
- break;
- case 7:
- $milion=substr($str,0,1);
- $smii=substr($str,1,3);
- $zmii=substr($str,4,3);
- $literesm=$this->in_litere($smii)." mii ";
- $literemii=$this->in_litere($zmii);
- $spell.=$milion." milio".($milion==1?"n ":"e ").($literesm!=""?$literesm:" ").($literemii!=""?$literemii:"");
- break;
- case 8:
- $milion=substr($str,0,2);
- $smii=substr($str,2,3);
- $zmii=substr($str,5,3);
- $literesm=$this->in_litere($smii)." mii ";
- $literemii=$this->in_litere($zmii);
- $spell.=$this->in_litere($milion)." milio".($milion==1?"n ":"e ").($literesm!=""?$literesm:" ").($literemii!=""?$literemii:"");
- break;
- case 9:
- $milion=substr($str,0,3);
- $smii=substr($str,3,3);
- $zmii=substr($str,6,3);
- $literesm=$this->in_litere($smii)." mii ";
- $literemii=$this->in_litere($zmii);
- $spell.=$this->in_litere($milion)." milio".($milion==1?"n ":"e ").($literesm!=""?$literesm:" ").($literemii!=""?$literemii:"");
- break;
- }
- if(strpos($rez,".")!=False)
- $spell.=" virgula ".$this->in_litere(explode(".",$rez)[1]);
- return str_replace(range(1,9),$this->cifre2,$spell);
- }
- private function calculeaza($o1,$o2,$operatie){
- switch($operatie){
- case "+":
- return (float)$o1+(float)$o2;
- case "-":
- return (float)$o1-(float)$o2;
- case "*":
- return (float)$o1*(float)$o2;
- case "/":
- return (float)$o1/(float)$o2;
- }
- }
- }
- class bad{
- public function is_bad($ip){
- touch("bad.txt");
- $badpeople=file("bad.txt");
- for($i=0;$i<count($badpeople);$i++)
- if(strpos($badpeople[$i],$ip)!==false){
- $time_ip=explode(" ",$badpeople[$i]);
- $time=(int)$time_ip[1];
- if(time()>$time){
- unset($badpeople[$i]);
- file_put_contents("bad.txt",implode(PHP_EOL,$badpeople));
- return false;
- }else{
- return true;
- }
- }
- return false;
- }
- public function ban($ip,$time){
- fwrite(fopen("bad.txt","a"),$ip." ".$time.PHP_EOL);
- }
- }
- $bad=new bad;
- if($bad->is_bad($_SERVER['REMOTE_ADDR']))
- {
- echo "You got banned wait";
- exit;
- }
- if(isset($_REQUEST['calcul'])){
- $calcul=str_replace(" ","",$_REQUEST['calcul']);
- $a=new calculator;
- for($i=0;$i<strlen($calcul);$i++)
- if($calcul[$i]!="."&&!in_array($calcul[$i],array("(",")"))&&!is_numeric($calcul[$i])&&!in_array($calcul[$i],$a->operatii)){
- echo "Sorry man banned";
- $timp=time()+60*60;
- $bad->ban($_SERVER['REMOTE_ADDR'],$timp);
- exit;
- }
- if($calcul!=""){
- echo "Calcul:".$calcul."<br />";
- echo "Rezultatul calcului:".$a->calcul($calcul);
- }
- }
- echo '<br />
- <form method="GET">
- <label>Calcul:</label><input type="text" name="calcul" />
- <input type="submit" value="Calculeaza" />
- </form>
- ';
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement