3v4l.org

run code in 300+ PHP versions simultaneously
<?php // Returns the total number of $count-length strings generatable from $letters. function getPermCount($letters, $count) { $result = 1; // k characters from a set of n has n!/(n-k)! possible combinations for($i = strlen($letters) - $count + 1; $i <= strlen($letters); $i++) { $result *= $i; } return $result; } // Decodes $index to a $count-length string from $letters, no repeat chars. function getPerm($letters, $count, $index) { $result = array(); for($i = 0; $i < $count; $i++) { $pos = $index % strlen($letters); $result[] = $letters[$pos]; $index = ($index-$pos)/strlen($letters); $letters = substr($letters, 0, $pos) . substr($letters, $pos+1); } sort($result); return implode("", $result); } $r = array(); //$letters = 'abcdefghijklm'; $letters = 'abcdefgh'; $len = strlen($letters); for ($c = 1; $c <= $len; $c++) for($i = 0; $i < getPermCount($letters, $c); $i++) $r[] = getPerm($letters, $c, $i); //print_r(array_unique($r, SORT_REGULAR)); array_unique($r, SORT_REGULAR); print_r(count($r));

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.0160.23430.49
8.3.50.0200.27227.65
8.3.40.0230.23329.89
8.3.30.0230.24931.18
8.3.20.0170.13630.03
8.3.10.0030.13433.21
8.3.00.0070.14635.81
8.2.180.0300.24227.88
8.2.170.0170.24229.96
8.2.160.0200.25131.66
8.2.150.0130.12529.97
8.2.140.0140.12831.52
8.2.130.0100.12534.47
8.2.120.0000.13632.02
8.2.110.0130.19631.46
8.2.100.0100.19029.16
8.2.90.0070.18430.52
8.2.80.0100.16930.35
8.2.70.0070.21828.75
8.2.60.0070.19229.04
8.2.50.0100.18628.88
8.2.40.0030.19129.47
8.2.30.0070.17730.69
8.2.20.0100.18028.81
8.2.10.0070.18429.02
8.2.00.0100.17628.97
8.1.280.0330.25332.39
8.1.270.0070.13036.80
8.1.260.0070.13134.88
8.1.250.0070.12140.05
8.1.240.0170.18035.55
8.1.230.0070.18035.45
8.1.220.0070.18331.96
8.1.210.0100.16733.45
8.1.200.0100.19631.73
8.1.190.0030.18732.05
8.1.180.0100.17431.88
8.1.170.0100.17633.02
8.1.160.0100.17733.48
8.1.150.0170.16633.30
8.1.140.0070.19531.96
8.1.130.0130.16732.49
8.1.120.0130.21732.07
8.1.110.0070.17531.95
8.1.100.0100.17832.12
8.1.90.0100.18032.08
8.1.80.0070.17932.05
8.1.70.0130.16832.04
8.1.60.0130.18432.15
8.1.50.0100.18432.04
8.1.40.0070.19332.17
8.1.30.0070.18932.20
8.1.20.0070.18832.18
8.1.10.0070.19032.13
8.1.00.0100.23532.10
8.0.300.0170.20434.39
8.0.290.0070.18131.57
8.0.280.0130.17032.96
8.0.270.0130.16831.68
8.0.260.0160.17132.92
8.0.250.0100.17631.34
8.0.240.0130.17631.36
8.0.230.0100.17931.25
8.0.220.0100.17931.40
8.0.210.0100.18431.26
8.0.200.0200.16731.39
8.0.190.0070.19531.47
8.0.180.0100.18531.41
8.0.170.0070.19131.35
8.0.160.0070.19031.34
8.0.150.0070.19231.27
8.0.140.0100.18531.18
8.0.130.0030.19427.86
8.0.120.0130.18631.39
8.0.110.0070.19331.38
8.0.100.0070.18731.27
8.0.90.0130.18431.17
8.0.80.0230.29931.37
8.0.70.0130.18631.15
8.0.60.0070.19731.16
8.0.50.0170.18431.27
8.0.30.0330.30031.49
8.0.20.0260.34531.55
8.0.10.0100.20031.29
8.0.00.0370.34031.14
7.4.330.0100.18429.66
7.4.320.0100.18730.91
7.4.300.0070.19230.90
7.4.290.0130.19730.81
7.4.280.0100.20031.04
7.4.270.0130.19330.90
7.4.260.0160.19127.88
7.4.250.0100.21630.99
7.4.240.0030.20830.88
7.4.230.0070.20331.11
7.4.220.0260.35730.90
7.4.210.0240.32330.89
7.4.200.0030.20831.00
7.4.190.0100.20030.96
7.4.160.0240.36931.13
7.4.150.0570.31031.07
7.4.140.0350.30231.05
7.4.130.0280.34731.06
7.4.120.0290.29930.89
7.4.110.0330.38531.00
7.4.100.0230.30730.89
7.4.90.0200.32531.06
7.4.80.0360.44231.04
7.4.70.0170.37231.00
7.4.60.0330.35630.88
7.4.50.0070.17330.89
7.4.40.0130.36030.64
7.4.30.0230.35530.87
7.3.330.0070.21227.77
7.3.320.0100.20827.72
7.3.310.0070.21230.84
7.3.300.0030.21730.70
7.3.290.0260.34530.78
7.3.280.0230.39130.75
7.3.270.0230.30430.76
7.3.260.0290.37031.01
7.3.250.0460.33630.74
7.3.240.0290.33330.85
7.3.230.0300.33131.08
7.3.210.0330.38631.12
7.3.200.0280.48730.97
7.3.190.0360.36630.70
7.3.180.0230.32031.13
7.3.170.0270.52931.05
7.3.160.0260.34630.81
7.2.330.0190.35531.31
7.2.320.0230.60331.24
7.2.310.0290.45030.99
7.2.300.0300.33031.13
7.2.290.0290.32831.27
7.1.00.0070.34338.35
7.0.140.0100.38038.12
5.6.280.0170.91758.44
5.4.280.0221.08750.04
5.4.270.0221.01850.03
5.4.260.0241.00950.03
5.4.250.0221.02250.03
5.4.240.0190.99150.03
5.4.230.0171.01150.02
5.4.220.0221.02350.02
5.4.210.0281.16350.03
5.4.200.0231.06450.03
5.4.190.0331.19350.02
5.4.180.0201.05350.02
5.4.170.0221.14850.03
5.4.160.0281.02850.02
5.4.150.0271.03250.02
5.4.140.0200.96549.70
5.4.130.0251.10649.69
5.4.120.0241.03249.64
5.4.110.0241.01449.64
5.4.100.0311.02249.65
5.4.90.0231.11949.64
5.4.80.0251.07349.64
5.4.70.0231.05049.64
5.4.60.0251.06949.64
5.4.50.0241.28049.64
5.4.40.0241.19149.63
5.4.30.0231.04849.63
5.4.20.0401.13349.63
5.4.10.0321.18249.63
5.4.00.0201.09649.11
5.3.280.0221.26149.58
5.3.270.0241.21749.59
5.3.260.0301.17249.59
5.3.250.0231.23949.59
5.3.240.0271.25949.59
5.3.230.0301.25749.58
5.3.220.0311.22349.55
5.3.210.0211.29249.55
5.3.200.0401.62351.43
5.3.190.0311.41249.55
5.3.180.0291.20749.55
5.3.170.0341.43049.55
5.3.160.0281.32649.54
5.3.150.0221.27649.55
5.3.140.0281.25649.54
5.3.130.0141.25149.54
5.3.120.0301.32249.53
5.3.110.0261.33049.53
5.3.100.0211.20949.02
5.3.90.0241.28549.00
5.3.80.0291.25448.99
5.3.70.0241.27748.99
5.3.60.0281.29448.97
5.3.50.0301.25149.62
5.3.40.0251.38248.91
5.3.30.0231.18548.88
5.3.20.0501.62350.44
5.3.10.0261.41148.62
5.3.00.0401.57750.30

preferences:
38.77 ms | 401 KiB | 5 Q