Added solution for ProjectEuler/025: php, ruby
This commit is contained in:
		@@ -5,7 +5,8 @@ desc: |
 | 
			
		||||
  A permutation is an ordered arrangement of objects. For example, 3124 is one possible permutation of the digits 1, 2, 3 and 4. If all of the permutations are listed numerically or alphabetically, we call it lexicographic order. The lexicographic permutations of 0, 1 and 2 are:
 | 
			
		||||
  012   021   102   120   201   210
 | 
			
		||||
  What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9?
 | 
			
		||||
todo: Improve algorithm - 
 | 
			
		||||
solution: Bruteforce
 | 
			
		||||
 | 
			
		||||
solutions:
 | 
			
		||||
solutions:
 | 
			
		||||
    solve.php:
 | 
			
		||||
      desc: Basic Solution
 | 
			
		||||
      language: php
 | 
			
		||||
@@ -1,25 +1,26 @@
 | 
			
		||||
<?php
 | 
			
		||||
function fac($number) {
 | 
			
		||||
	if($number == 1) 
 | 
			
		||||
		return 1;
 | 
			
		||||
	return $number * fac($number-1);
 | 
			
		||||
}
 | 
			
		||||
$result = array(0,0,0,0,0,0,0,0,0,0);
 | 
			
		||||
define('NUM_PERMUTATION',1000000);
 | 
			
		||||
define('DIGITS',9);
 | 
			
		||||
$target = NUM_PERMUTATION - 1;
 | 
			
		||||
 | 
			
		||||
$endsteps = 1000000;
 | 
			
		||||
$cstep = 0;
 | 
			
		||||
$cdigit = 9;
 | 
			
		||||
while($cdigit != 0) {
 | 
			
		||||
	
 | 
			
		||||
	do{
 | 
			
		||||
		$result[9-$cdigit]++;
 | 
			
		||||
		$cstep += fac($cdigit);
 | 
			
		||||
	} while ($cstep < $endsteps) ;
 | 
			
		||||
	
 | 
			
		||||
	echo "Done with $cdigit - steps:$cstep\n";
 | 
			
		||||
	$cdigit--;
 | 
			
		||||
$digits = range(0, 9);
 | 
			
		||||
$permus = array(1 => 1);
 | 
			
		||||
for ($i = 2; $i <= 9; $i++) {
 | 
			
		||||
        $permus[$i] = $permus[$i - 1] * $i;
 | 
			
		||||
}
 | 
			
		||||
echo "DONE!";
 | 
			
		||||
print_r($result);
 | 
			
		||||
echo " - ".$cstep ."\n";
 | 
			
		||||
echo "Result: 2783915460";
 | 
			
		||||
$permus = array_reverse($permus);
 | 
			
		||||
$values = array();
 | 
			
		||||
 | 
			
		||||
foreach ($permus as $n) {
 | 
			
		||||
        $values[] = floor($target / $n);
 | 
			
		||||
        $target = $target%$n;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
$result = "";
 | 
			
		||||
foreach ($values as $val) {
 | 
			
		||||
        $result .= $digits[$val];
 | 
			
		||||
        unset($digits[$val]);
 | 
			
		||||
        sort($digits);
 | 
			
		||||
}
 | 
			
		||||
$result .= $digits[0];
 | 
			
		||||
echo $result;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										30
									
								
								ProjectEuler/025/desc.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								ProjectEuler/025/desc.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
title: What is the first term in the Fibonacci sequence to contain 1000 digits?
 | 
			
		||||
url: http://projecteuler.net/problem=25
 | 
			
		||||
 | 
			
		||||
desc: |
 | 
			
		||||
  The Fibonacci sequence is defined by the recurrence relation:
 | 
			
		||||
 | 
			
		||||
  Fn = Fn1 + Fn2, where F1 = 1 and F2 = 1.
 | 
			
		||||
  Hence the first 12 terms will be:
 | 
			
		||||
 | 
			
		||||
  F1 = 1
 | 
			
		||||
  F2 = 1
 | 
			
		||||
  F3 = 2
 | 
			
		||||
  F4 = 3
 | 
			
		||||
  F5 = 5
 | 
			
		||||
  F6 = 8
 | 
			
		||||
  F7 = 13
 | 
			
		||||
  F8 = 21
 | 
			
		||||
  F9 = 34
 | 
			
		||||
  F10 = 55
 | 
			
		||||
  F11 = 89
 | 
			
		||||
  F12 = 144
 | 
			
		||||
  The 12th term, F12, is the first term to contain three digits.
 | 
			
		||||
 | 
			
		||||
  What is the first term in the Fibonacci sequence to contain 1000 digits? 
 | 
			
		||||
solution: Bruteforce
 | 
			
		||||
 | 
			
		||||
solutions:
 | 
			
		||||
  solve.php:
 | 
			
		||||
    desc: Basic Solution
 | 
			
		||||
    language: php
 | 
			
		||||
							
								
								
									
										13
									
								
								ProjectEuler/025/solve.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								ProjectEuler/025/solve.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
<?php
 | 
			
		||||
define('DIGITS',1000);
 | 
			
		||||
 | 
			
		||||
$current = 1;
 | 
			
		||||
$prev = 1;
 | 
			
		||||
$term = 2;
 | 
			
		||||
while(strlen($current) < DIGITS) {
 | 
			
		||||
	$term++;
 | 
			
		||||
	$next = bcadd($current,$prev);
 | 
			
		||||
	$prev = $current;
 | 
			
		||||
	$current = $next;
 | 
			
		||||
}
 | 
			
		||||
echo $term;
 | 
			
		||||
							
								
								
									
										13
									
								
								ProjectEuler/025/solve.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								ProjectEuler/025/solve.rb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
DIGITS = 1000
 | 
			
		||||
 | 
			
		||||
max = 10 ** (DIGITS-1)
 | 
			
		||||
fcurrent = 1
 | 
			
		||||
fprev = 1
 | 
			
		||||
term = 2
 | 
			
		||||
while fcurrent < max do 
 | 
			
		||||
	term = term + 1
 | 
			
		||||
	fnext = fcurrent + fprev
 | 
			
		||||
	fprev = fcurrent;
 | 
			
		||||
	fcurrent = fnext;
 | 
			
		||||
end
 | 
			
		||||
puts term
 | 
			
		||||
		Reference in New Issue
	
	Block a user