Advertisement
Guest User

Untitled

a guest
Feb 13th, 2015
322
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.74 KB | None | 0 0
  1. <?php
  2. class calculator{
  3. 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");
  4. private $cifre2=array("unu","doi","trei","patru","cinci","sase","sapte","opt","noua");
  5. private $numere=array(1=>"",2=>"zeci",3=>"sute",4=>"mii",5=>"mii",6=>"mii",7=>"milioane",8=>"milioane",9=>"milioane");
  6. private $putere=array("/"=>3,"*"=>2,"+"=>1,"-"=>1);
  7. public $operatii=array("/","*","+","-");
  8. private function numar($j,$calcul){
  9. $out="";
  10. for($i=$j;$i<strlen($calcul)&&!in_array($calcul[$i],$this->operatii)&&$calcul[$i]!=")";$i++)
  11. $out.=$calcul[$i];
  12. return $out;
  13. }
  14. private function topostfix($calcul){
  15. $operatori=array();
  16. $postfix="";
  17. $termeni=explode(" ",str_replace(array_merge($this->operatii,array("(",")"))," ",$calcul));
  18. //var_dump($termeni);
  19. $l=-1;
  20.  
  21. for($i=0;$i<strlen($calcul);$i++){
  22. if(is_numeric($calcul[$i])){
  23. $n=$this->numar($i,$calcul);
  24. if(in_array($n,$termeni)&&$i>$l){
  25. $postfix.=$n." ";
  26. //echo $n." ";
  27. $l=$i+strlen($n);
  28. }
  29. }else if(in_array($calcul[$i],$this->operatii)){
  30. if(count($operatori)==0)
  31. array_push($operatori,$calcul[$i]);
  32. else{
  33. while(!empty($operatori)&&in_array(end($operatori),$this->operatii)&&$this->putere[end($operatori)]>=$this->putere[$calcul[$i]])
  34.  
  35. $postfix.=array_pop($operatori)." ";
  36.  
  37. array_push($operatori,$calcul[$i]);
  38.  
  39. }
  40. }else if($calcul[$i]=="(")
  41. array_push($operatori,$calcul[$i]);
  42. else if($calcul[$i]==")"){
  43. $a=array_pop($operatori);
  44. while($a!="("){
  45. $postfix.=$a." ";
  46. $a=array_pop($operatori);
  47. }
  48. }
  49. //var_dump($operatori);
  50. }
  51. while(count($operatori)>0){
  52. $postfix.=array_pop($operatori)." ";
  53. //var_dump($operatori);
  54. }
  55. return $postfix;
  56. }
  57. public function calcul($calcul){
  58. $postf=substr($this->topostfix($calcul),0,-1);
  59. //echo $postf;
  60. $expresie_postfix=explode(" ",$postf);
  61. //$expresie_postfix;
  62. $stack=array();
  63. //var_dump($expresie_postfix);
  64. for($i=0;$i<count($expresie_postfix);$i++){
  65.  
  66. if(is_numeric($expresie_postfix[$i]))
  67. array_push($stack,$expresie_postfix[$i]);
  68. else if(in_array($expresie_postfix[$i],$this->operatii)){
  69. $a=array_pop($stack);
  70. $b=array_pop($stack);
  71. $r=$this->calculeaza($b,$a,$expresie_postfix[$i]);
  72. array_push($stack,$r);
  73. }
  74. //print_r($stack);
  75.  
  76. }
  77. //echo $stack[0];
  78. if(count($stack)>1||!isset($stack[0])){
  79. return "Calcul Naspa!";
  80. }else
  81. return $this->in_litere($stack[0]);
  82. }
  83. private function in_litere($rez){
  84. //echo $rez;
  85. if($rez[0]=="0")
  86. $rez=substr($rez,1);
  87. $spell="";
  88. $rez=(string)$rez;
  89. //print $rez." ";
  90. if($rez[0]=="-"){
  91. $spell="minus ";
  92. $rez=substr($rez,1);
  93. }
  94. $rez=(float)$rez;
  95. if($rez<=10&&$rez>=0){
  96. return $spell.$this->cifre[$rez].(strpos($rez,".")!=False?" virgula ".$this->in_litere(explode(".",$rez)[1]):"");
  97.  
  98. }
  99. if($rez<20&&$rez>=0){
  100. $ultima=$rez%10;
  101. return $spell.$this->cifre[$ultima]." spre zece".(strpos($rez,".")!=False?" virgula ".$this->in_litere(explode(".",$rez)[1]):"");
  102. }
  103. if(strpos($rez,".")!=False)
  104. $str=explode(".",(string)$rez)[0];
  105. else
  106. $str=(string)$rez;
  107. //print $str;
  108. $len=strlen($str);
  109. switch($len){
  110. case 2:
  111. $zeci=substr($str,0,1);
  112. $unitati=substr($str,-1);
  113. $spell.=$zeci." zeci ".($unitati=="0"?"":" si ".$unitati);
  114. break;
  115. case 3:
  116. $sute=substr($str,0,1);
  117. $zeci=substr($str,1,1);
  118. $unitati=substr($str,2,1);
  119. $spell.=($sute!="0"?$sute:"")." sut".($sute=="1"?"a ":"e ").($zeci=="0"?"":$zeci." zeci")." ".($unitati=="0"?"":" si ".$unitati);
  120. break;
  121. case 4:
  122. $mii=substr($str,0,1);
  123. $sute=substr($str,1,1);
  124. $zeci=substr($str,2,1);
  125. $unitati=substr($str,3,1);
  126. $spell.=$mii." mi".($mii=="1"?"e ":"i ").($sute!="0"?$sute." sut".($sute=="1"?"a ":"e "):"").($zeci=="0"?"":$zeci." zeci")." ".($unitati=="0"?"":" si ".$unitati);
  127. break;
  128. case 5:
  129. $mii=substr($str,0,2);
  130. $sute=substr($str,2,1);
  131. $zeci=substr($str,3,1);
  132. $unitati=substr($str,3,1);
  133. $spell.=$mii." mi".($mii=="1"?"e ":"i ").($sute!="0"?$sute." sut".($sute=="1"?"a ":"e "):"").($zeci=="0"?"":$zeci." zeci")." ".($unitati=="0"?"":" si ".$unitati);
  134. break;
  135. case 6:
  136. $mii=substr($str,0,3);
  137. $sute=substr($str,3,1);
  138. $zeci=substr($str,4,1);
  139. $unitati=substr($str,3,1);
  140. $spell.=$mii." mi".($mii=="1"?"e ":"i ").($sute!="0"?$sute." sut".($sute=="1"?"a ":"e "):"").($zeci=="0"?"":$zeci." zeci")." ".($unitati=="0"?"":" si ".$unitati);
  141. break;
  142.  
  143. case 7:
  144. $milion=substr($str,0,1);
  145. $smii=substr($str,1,3);
  146.  
  147. $zmii=substr($str,4,3);
  148.  
  149. $literesm=$this->in_litere($smii)." mii ";
  150. $literemii=$this->in_litere($zmii);
  151. $spell.=$milion." milio".($milion==1?"n ":"e ").($literesm!=""?$literesm:" ").($literemii!=""?$literemii:"");
  152. break;
  153. case 8:
  154. $milion=substr($str,0,2);
  155. $smii=substr($str,2,3);
  156. $zmii=substr($str,5,3);
  157. $literesm=$this->in_litere($smii)." mii ";
  158. $literemii=$this->in_litere($zmii);
  159. $spell.=$this->in_litere($milion)." milio".($milion==1?"n ":"e ").($literesm!=""?$literesm:" ").($literemii!=""?$literemii:"");
  160. break;
  161. case 9:
  162. $milion=substr($str,0,3);
  163. $smii=substr($str,3,3);
  164. $zmii=substr($str,6,3);
  165. $literesm=$this->in_litere($smii)." mii ";
  166. $literemii=$this->in_litere($zmii);
  167. $spell.=$this->in_litere($milion)." milio".($milion==1?"n ":"e ").($literesm!=""?$literesm:" ").($literemii!=""?$literemii:"");
  168. break;
  169. }
  170. if(strpos($rez,".")!=False)
  171. $spell.=" virgula ".$this->in_litere(explode(".",$rez)[1]);
  172. return str_replace(range(1,9),$this->cifre2,$spell);
  173. }
  174. private function calculeaza($o1,$o2,$operatie){
  175. switch($operatie){
  176. case "+":
  177. return (float)$o1+(float)$o2;
  178. case "-":
  179. return (float)$o1-(float)$o2;
  180. case "*":
  181. return (float)$o1*(float)$o2;
  182. case "/":
  183. return (float)$o1/(float)$o2;
  184. }
  185. }
  186.  
  187. }
  188. class bad{
  189. public function is_bad($ip){
  190. touch("bad.txt");
  191. $badpeople=file("bad.txt");
  192. for($i=0;$i<count($badpeople);$i++)
  193. if(strpos($badpeople[$i],$ip)!==false){
  194. $time_ip=explode(" ",$badpeople[$i]);
  195. $time=(int)$time_ip[1];
  196. if(time()>$time){
  197. unset($badpeople[$i]);
  198. file_put_contents("bad.txt",implode(PHP_EOL,$badpeople));
  199. return false;
  200. }else{
  201. return true;
  202. }
  203. }
  204. return false;
  205. }
  206. public function ban($ip,$time){
  207. fwrite(fopen("bad.txt","a"),$ip." ".$time.PHP_EOL);
  208. }
  209. }
  210. $bad=new bad;
  211. if($bad->is_bad($_SERVER['REMOTE_ADDR']))
  212. {
  213. echo "You got banned wait";
  214. exit;
  215. }
  216. if(isset($_REQUEST['calcul'])){
  217. $calcul=str_replace(" ","",$_REQUEST['calcul']);
  218. $a=new calculator;
  219. for($i=0;$i<strlen($calcul);$i++)
  220. if($calcul[$i]!="."&&!in_array($calcul[$i],array("(",")"))&&!is_numeric($calcul[$i])&&!in_array($calcul[$i],$a->operatii)){
  221. echo "Sorry man banned";
  222. $timp=time()+60*60;
  223. $bad->ban($_SERVER['REMOTE_ADDR'],$timp);
  224. exit;
  225. }
  226.  
  227. if($calcul!=""){
  228. echo "Calcul:".$calcul."<br />";
  229. echo "Rezultatul calcului:".$a->calcul($calcul);
  230. }
  231. }
  232. echo '<br />
  233. <form method="GET">
  234. <label>Calcul:</label><input type="text" name="calcul" />
  235. <input type="submit" value="Calculeaza" />
  236. </form>
  237. ';
  238.  
  239.  
  240.  
  241. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement