3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * */ class RompeCesar { private $letras = "abcdefghijklmnopqrstuvwxyz"; private $frecuenciasAlfabetoIngles = array(0.0817, 0.0150, 0.0278, 0.0425, 0.1270, 0.0223, 0.0202, 0.0609, 0.0697, 0.0015, 0.0077, 0.0403, 0.0241, 0.0675, 0.0751, 0.0193, 0.0010, 0.0599, 0.0633, 0.0906, 0.0276, 0.0098, 0.0236, 0.0015, 0.0197, 0.0007); function __construct() { // code... } // A 65 Z 90 // a 97 z 122 public function cifrarDesplazamiento($str, $shift) { while ($shift > 26) { $shift -= 26; } for ($i = 0; $i < strlen($str); $i++) { if (ord($str[$i]) != 32) { $posDesplazada = ord($str[$i]) + $shift; if ($posDesplazada > 122) { $str[$i] = chr(($posDesplazada % 122) + 96); } else if ($posDesplazada < 97) { $str[$i] = chr(122 - (96 - $posDesplazada)); } else { $str[$i] = chr($posDesplazada); } } } return $str; } public function descifrarDesplazamiento($str, $shift) { while ($shift > 26) { $shift -= 26; } return $this->cifrarDesplazamiento($str, -$shift); } public function quitarEspacios($str) { return preg_replace('/\s+/', '', $str); } public function calcularFrecuenciasAlfabeto($str) { $str = $this->quitarEspacios($str); $largoSinEspacios = strlen($str); $apariciones = array(); $frecuencia = array(); for ($i = 0 ; $i < strlen($this->letras) ; $i++) { $apariciones[$this->letras[$i]] = 0; $frecuencia[$this->letras[$i]] = 0; } for ($i = 0 ; $i < $largoSinEspacios ; $i++) { $apariciones[$str[$i]]++; } for ($i = 0 ; $i < strlen($this->letras) ; $i++) { $frecuencia[$this->letras[$i]] = $apariciones[$this->letras[$i]] / (float) $largoSinEspacios; } return $frecuencia; } // la comprobación del 0 es porque en textos pequeños puede que haya letras // que no aparezcan // cuanto menor sea la chi, más se parecen los arrays public function chiCuadrado($frecs1, $frecs2) { $chi = 0; for ($i = 0 ; $i < strlen($this->letras) ; $i++) { $diferencia = $frecs1[$i] - $frecs2[$this->letras[$i]]; $cuadradoDiferencia = $diferencia * $diferencia; if ($frecs2[$this->letras[$i]] != 0) $cuadradoDiferencia /= $frecs2[$this->letras[$i]]; $chi += $cuadradoDiferencia; } return $chi; } public function descifrarSinSaberClave($str) { $arrayChis = array(); for ($i = 1 ; $i < 25 ; $i++) { $arrayChis[$i] = $this->chiCuadrado($this->frecuenciasAlfabetoIngles, $this->calcularFrecuenciasAlfabeto($this->cifrarDesplazamiento($str, $i))); } return $arrayChis; } } // sabemos que está en inglés $textoCifrado = "lrvmnir bpr sumvbwvr jx bpr lmiwv yjeryrkbi jx qmbm wi bpr xjvni mkd ymibrut jx irhx wi bpr riirkvr jx ymbinlmtmipw utn qmumbr dj w ipmhh but bj rhnvwdmbr bpr yjeryrkbi jx bpr qmbm mvvjudwko bj yt wkbrusurbmbwjk lmird jk xjubt trmui jx ibndt wb wi kjb mk rmit bmiq bj rashmwk rmvp yjeryrkb mkd wbi iwokwxwvmkvr mkd ijyr ynib urymwk nkrashmwkrd bj ower m vjyshrbr rashmkmbwjk jkr cjnhd pmer bj lr fnmhwxwrd mkd wkiswurd bj invp mk rabrkb bpmb pr vjnhd urmvp bpr ibmbr jx rkhwopbrkrd ywkd vmsmlhr jx urvjokwgwko ijnkdhrii ijnkd mkd ipmsrhrii ipmsr w dj kjb drry ytirhx bpr xwkmh mnbpjuwbt lnb yt rasruwrkvr cwbp qmbm pmi hrxb kj djnlb bpmb bpr xjhhjcwko wi bpr sujsru msshwvmbwjk mkd wkbrusurbmbwjk w jxxru yt bprjuwri wk bpr pjsr bpmb bpr riirkvr jx jqwkmcmk qmumbr cwhh urymwk wkbmvb"; $cifrador = new RompeCesar; /* echo $cifrador->cifrarDesplazamiento("attack", 17) . "\n"; echo $cifrador->cifrarDesplazamiento("attack", 225) . "\n"; echo $cifrador->descifrarDesplazamiento("rkkrtb", 225) . "\n"; //print_r($cifrador->calcularFrecuenciasAlfabeto($textoCifrado));*/ print_r($cifrador->descifrarSinSaberClave($textoCifrado));

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.60.0150.00918.55
8.3.50.0210.00922.23
8.3.40.0120.00618.95
8.3.30.0070.01019.21
8.3.20.0060.00320.60
8.3.10.0060.00321.90
8.3.00.0000.00922.34
8.2.180.0080.00816.63
8.2.170.0030.01422.96
8.2.160.0030.01422.26
8.2.150.0070.00325.66
8.2.140.0000.00924.66
8.2.130.0060.00326.16
8.2.120.0000.01219.61
8.2.110.0080.00420.94
8.2.100.0110.00417.88
8.2.90.0080.00319.30
8.2.80.0050.00517.97
8.2.70.0070.00417.88
8.2.60.0070.00318.16
8.2.50.0060.00318.07
8.2.40.0060.00318.34
8.2.30.0040.00718.17
8.2.20.0000.01017.88
8.2.10.0000.00918.31
8.2.00.0030.00618.30
8.1.280.0090.00925.92
8.1.270.0030.00620.50
8.1.260.0090.00026.35
8.1.250.0030.00728.09
8.1.240.0090.00321.19
8.1.230.0040.00817.89
8.1.220.0030.00617.78
8.1.210.0050.00518.77
8.1.200.0060.00617.61
8.1.190.0060.00317.47
8.1.180.0030.00618.10
8.1.170.0060.00618.75
8.1.160.0070.00322.01
8.1.150.0110.00018.96
8.1.140.0030.00617.68
8.1.130.0030.00617.65
8.1.120.0050.00517.66
8.1.110.0000.00917.64
8.1.100.0030.00617.61
8.1.90.0100.00017.71
8.1.80.0060.00317.56
8.1.70.0030.00617.53
8.1.60.0080.00317.68
8.1.50.0110.00017.55
8.1.40.0060.00317.63
8.1.30.0000.01017.82
8.1.20.0000.01017.77
8.1.10.0050.00517.68
8.1.00.0000.01017.60
8.0.300.0100.00019.09
8.0.290.0030.00617.00
8.0.280.0030.00618.62
8.0.270.0000.01017.28
8.0.260.0000.01317.33
8.0.250.0030.00617.13
8.0.240.0030.00717.03
8.0.230.0000.00917.04
8.0.220.0030.00616.97
8.0.210.0030.00617.07
8.0.200.0050.00617.18
8.0.190.0000.01017.03
8.0.180.0050.00517.14
8.0.170.0070.00417.08
8.0.160.0000.00916.81
8.0.150.0050.00517.07
8.0.140.0030.00617.04
8.0.130.0040.00813.50
8.0.120.0000.01016.95
8.0.110.0000.00917.03
8.0.100.0030.00616.95
8.0.90.0030.00717.07
8.0.80.0130.00617.03
8.0.70.0000.01017.12
8.0.60.0000.01017.10
8.0.50.0030.00616.91
8.0.30.0090.01117.38
8.0.20.0140.01117.40
8.0.10.0000.00917.13
8.0.00.0080.01416.85
7.4.330.0050.00215.07
7.4.320.0000.00816.86
7.4.300.0030.00616.72
7.4.290.0030.00716.73
7.4.280.0000.01116.68
7.4.270.0000.01016.76
7.4.260.0060.00316.83
7.4.250.0000.00916.87
7.4.240.0020.00816.79
7.4.230.0000.00916.64
7.4.220.0030.02216.89
7.4.210.0070.01016.85
7.4.200.0060.00316.64
7.4.160.0080.01116.91
7.4.150.0100.01017.40
7.4.140.0170.01117.86
7.4.130.0120.01116.82
7.4.120.0070.01716.84
7.4.110.0030.01716.66
7.4.100.0150.00916.72
7.4.90.0120.00916.78
7.4.80.0110.01819.39
7.4.70.0120.00916.98
7.4.60.0080.01216.79
7.4.50.0000.01016.62
7.4.40.0120.01216.57
7.4.30.0060.02316.78
7.4.00.0070.01115.36
7.3.330.0030.00713.55
7.3.320.0060.00313.53
7.3.310.0060.00316.43
7.3.300.0030.00616.46
7.3.290.0130.00816.55
7.3.280.0060.01616.53
7.3.270.0100.01117.40
7.3.260.0090.01216.53
7.3.250.0090.01416.59
7.3.240.0100.01016.59
7.3.230.0130.01016.54
7.3.210.0060.01516.60
7.3.200.0110.01419.39
7.3.190.0130.00716.54
7.3.180.0090.00916.49
7.3.170.0120.01616.75
7.3.160.0070.01316.61
7.2.330.0000.02117.10
7.2.320.0130.01917.03
7.2.310.0050.01416.84
7.2.300.0140.01117.01
7.2.290.0100.01017.00
7.2.60.0030.01317.12
7.2.00.0210.01119.12
7.1.200.0120.00615.96
7.1.100.0030.01618.59
7.1.70.0000.01917.12
7.1.60.0130.01619.59
7.1.50.0130.01317.16
7.1.00.0030.09722.45
7.0.200.0030.00916.93
7.0.60.0170.07720.01
7.0.50.0000.08717.97
7.0.40.0170.07720.19
7.0.30.0470.06320.27
7.0.20.0200.04720.17
7.0.10.0130.04720.25
7.0.00.0070.09320.13
5.6.280.0030.08720.92
5.6.210.0170.07020.53
5.6.200.0070.05718.18
5.6.190.0070.10020.48
5.6.180.3500.05020.55
5.6.170.0170.06020.48
5.6.160.0030.05020.48
5.6.150.0100.08018.28
5.6.140.0000.07718.15
5.6.130.0000.05718.17
5.6.120.0100.09321.06
5.6.110.0170.08021.04
5.6.100.0070.04721.07
5.6.90.0200.08320.99
5.6.80.0070.05720.46
5.6.70.4230.05020.53
5.5.350.0170.09320.41
5.5.340.0030.08017.94
5.5.330.0100.05020.13
5.5.320.0270.04720.35
5.5.310.0170.04720.26
5.5.300.0100.10018.08
5.5.290.0070.10018.04
5.5.280.0100.06720.79
5.5.270.0030.10320.90
5.5.260.0030.05320.70
5.5.250.0130.09720.57
5.5.240.0230.08720.06
5.4.450.0670.06319.58
5.4.440.0470.07319.48
5.4.430.0600.07319.24
5.4.420.0670.08019.55
5.4.410.0730.09319.43
5.4.400.0730.06718.91
5.4.390.0800.06718.99
5.4.380.0930.07019.11
5.4.370.0870.06019.32
5.4.360.0730.07719.11
5.4.350.0730.07019.19
5.4.340.0730.07319.12
5.4.320.0900.06319.07
5.4.310.0900.05719.20
5.4.300.0730.07019.07
5.4.290.0570.07019.32
5.4.280.0500.07719.22
5.4.270.0700.06719.15
5.4.260.0730.07319.07
5.4.250.0600.06318.88
5.4.240.0800.06319.06
5.4.230.0670.05719.07
5.4.220.0870.07018.91
5.4.210.0770.07019.02
5.4.200.0730.06316.89
5.4.190.0830.06019.00
5.4.180.0830.07018.94
5.4.170.0730.07019.21
5.4.160.0730.06318.94
5.4.150.0770.06718.88
5.4.140.0700.07316.33
5.4.130.0600.08016.24
5.4.120.0600.05716.45
5.4.110.0770.06316.64
5.4.100.0730.07716.63
5.4.90.0800.07316.68
5.4.80.0670.06716.41
5.4.70.0500.08016.31
5.4.60.0670.09316.53
5.4.50.0500.07016.55
5.4.40.0530.07016.54
5.4.30.0430.07716.28
5.4.20.0630.06316.41
5.4.10.0570.06316.53
5.4.00.0730.06315.83
5.3.290.0630.08714.69
5.3.280.0670.08014.62
5.3.270.0800.07014.71
5.3.260.0700.08014.65
5.3.250.0700.07314.54
5.3.240.0730.07314.63
5.3.230.0670.08014.57
5.3.220.0730.07314.75
5.3.210.0870.06314.57
5.3.200.0700.07714.72
5.3.190.0730.07714.56
5.3.180.0770.07014.66
5.3.170.0670.08014.63
5.3.160.0770.06314.64
5.3.150.0700.07714.51
5.3.140.0700.08014.62
5.3.130.0670.07714.59
5.3.120.0670.08314.50
5.3.110.0730.07314.64
5.3.100.0700.07314.06
5.3.90.0800.06314.13
5.3.80.0730.07014.13
5.3.70.0630.07713.97
5.3.60.0730.07313.95
5.3.50.0730.07313.95
5.3.40.0700.07314.13
5.3.30.0700.06713.96
5.3.20.0600.06313.70
5.3.10.0470.07713.60
5.3.00.0530.07313.69
5.2.170.0430.06711.09
5.2.160.0530.05311.05
5.2.150.0530.05711.05
5.2.140.0530.05711.35
5.2.130.0430.07011.01
5.2.120.0570.06311.22
5.2.110.0630.05711.13
5.2.100.0530.06711.22
5.2.90.0530.06711.05
5.2.80.0630.07011.15
5.2.70.0670.05711.29
5.2.60.0570.06711.01
5.2.50.0600.06711.13
5.2.40.0400.07011.16
5.2.30.0470.06711.03
5.2.20.0500.06011.07
5.2.10.0430.06310.82
5.2.00.0470.07010.75
5.1.60.0470.05710.22
5.1.50.0500.05310.10
5.1.40.0530.0509.95
5.1.30.0530.05010.53
5.1.20.0500.06010.39
5.1.10.0500.05310.16
5.1.00.0470.05710.21
5.0.50.0230.0738.55
5.0.40.0230.0708.39
5.0.30.0300.0808.39
5.0.20.0270.0678.41
5.0.10.0300.0638.13
5.0.00.0270.0838.20
4.4.90.0270.0205.76
4.4.80.0300.0135.84
4.4.70.0400.0175.82
4.4.60.0270.0205.85
4.4.50.0230.0235.91
4.4.40.0200.0375.84
4.4.30.0200.0235.77
4.4.20.0230.0235.92
4.4.10.0300.0175.80
4.4.00.0300.0305.77
4.3.110.0230.0235.67
4.3.100.0230.0235.67
4.3.90.0270.0205.66
4.3.80.0230.0335.75
4.3.70.0200.0235.64
4.3.60.0200.0235.79
4.3.50.0230.0235.75
4.3.40.0230.0335.61
4.3.30.0130.0204.57
4.3.20.0100.0234.50
4.3.10.0130.0204.46
4.3.00.0070.0237.28

preferences:
71.49 ms | 401 KiB | 5 Q