Project Euler

Project Euler Problem 8

steloflute 2012. 5. 28. 00:46

Problem 8

11 January 2002

Find the greatest product of five consecutive digits in the 1000-digit number.

73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450


Answer:
40824

 

 

Solution in C#

 

using System;

namespace ConsoleApplication1 {
    class Program {
        static void Main(string[] args) {
            string s = "73167176531330624919225119674426574742355349194934" +
                "96983520312774506326239578318016984801869478851843" +
                "85861560789112949495459501737958331952853208805511" +
                "12540698747158523863050715693290963295227443043557" +
                "66896648950445244523161731856403098711121722383113" +
                "62229893423380308135336276614282806444486645238749" +
                "30358907296290491560440772390713810515859307960866" +
                "70172427121883998797908792274921901699720888093776" +
                "65727333001053367881220235421809751254540594752243" +
                "52584907711670556013604839586446706324415722155397" +
                "53697817977846174064955149290862569321978468622482" +
                "83972241375657056057490261407972968652414535100474" +
                "82166370484403199890008895243450658541227588666881" +
                "16427171479924442928230863465674813919123162824586" +
                "17866458359124566529476545682848912883142607690042" +
                "24219022671055626321111109370544217506941658960408" +
                "07198403850962455444362981230987879927244284909188" +
                "84580156166097919133875499200524063689912560717606" +
                "05886116467109405077541002256983155200055935729725" +
                "71636269561882670428252483600823257530420752963450";
            var d = new int[s.Length];
            for (int i = 0; i < s.Length; i++) {
                d[i] = Convert.ToInt32(s[i]-'0');
            }

            int to = s.Length - 5;
            int max = 0;
            for (int i = 0; i <= to; i++) {
                int p = d[i] * d[i + 1] * d[i + 2] * d[i + 3] * d[i + 4];
                if (p > max) max = p;
            }
            Console.WriteLine(max);
            Console.ReadKey();
        }
    }
}
 
Perl
sub problem8 {
 my $num = "73167176531330624919225119674426574742355349194934" .
"96983520312774506326239578318016984801869478851843" .
"85861560789112949495459501737958331952853208805511" .
"12540698747158523863050715693290963295227443043557" .
"66896648950445244523161731856403098711121722383113" .
"62229893423380308135336276614282806444486645238749" .
"30358907296290491560440772390713810515859307960866" .
"70172427121883998797908792274921901699720888093776" .
"65727333001053367881220235421809751254540594752243" .
"52584907711670556013604839586446706324415722155397" .
"53697817977846174064955149290862569321978468622482" .
"83972241375657056057490261407972968652414535100474" .
"82166370484403199890008895243450658541227588666881" .
"16427171479924442928230863465674813919123162824586" .
"17866458359124566529476545682848912883142607690042" .
"24219022671055626321111109370544217506941658960408" .
"07198403850962455444362981230987879927244284909188" .
"84580156166097919133875499200524063689912560717606" .
"05886116467109405077541002256983155200055935729725" .
"71636269561882670428252483600823257530420752963450";
 
 my @nl = map { substr($num, $_ , 1) } (0 .. length($num)); 
 print max( map { $nl[$_] * $nl[$_ + 1] * $nl[$_+ 2] * $nl[$_ + 3] * $nl[$_ + 4] } (0 .. length($num) - 5));
}
problem8();
# 2

$n = "73167176531330624919225119674426574742355349194934" ."96983520312774506326239578318016984801869478851843" ."85861560789112949495459501737958331952853208805511" ."12540698747158523863050715693290963295227443043557" ."66896648950445244523161731856403098711121722383113" ."62229893423380308135336276614282806444486645238749" ."30358907296290491560440772390713810515859307960866" ."70172427121883998797908792274921901699720888093776" ."65727333001053367881220235421809751254540594752243" ."52584907711670556013604839586446706324415722155397" ."53697817977846174064955149290862569321978468622482" ."83972241375657056057490261407972968652414535100474" ."82166370484403199890008895243450658541227588666881" ."16427171479924442928230863465674813919123162824586" ."17866458359124566529476545682848912883142607690042" ."24219022671055626321111109370544217506941658960408" ."07198403850962455444362981230987879927244284909188" ."84580156166097919133875499200524063689912560717606" ."05886116467109405077541002256983155200055935729725" ."71636269561882670428252483600823257530420752963450";
$maxP=0;
for (0..length($n)) {
  my $p=substr($n,$_,1)*substr($n,$_+1,1)*substr($n,$_+2,1)*substr($n,$_+3,1)*substr($n,$_+4,1);
  $maxP = $p if ($p > $maxP);}
print $maxP;

 

 
Python
def problem8():
    num = "73167176531330624919225119674426574742355349194934\
96983520312774506326239578318016984801869478851843\
85861560789112949495459501737958331952853208805511\
12540698747158523863050715693290963295227443043557\
66896648950445244523161731856403098711121722383113\
62229893423380308135336276614282806444486645238749\
30358907296290491560440772390713810515859307960866\
70172427121883998797908792274921901699720888093776\
65727333001053367881220235421809751254540594752243\
52584907711670556013604839586446706324415722155397\
53697817977846174064955149290862569321978468622482\
83972241375657056057490261407972968652414535100474\
82166370484403199890008895243450658541227588666881\
16427171479924442928230863465674813919123162824586\
17866458359124566529476545682848912883142607690042\
24219022671055626321111109370544217506941658960408\
07198403850962455444362981230987879927244284909188\
84580156166097919133875499200524063689912560717606\
05886116467109405077541002256983155200055935729725\
71636269561882670428252483600823257530420752963450"
    nl = [int(c) for c in num ]   
    print max(nl[i] * nl[i + 1] * nl[i + 2] * nl[i + 3] * nl[i + 4] for i in xrange(0, len(num) - 5))   
problem8()

 

 

Go

 

func problem8() {
 s := "73167176531330624919225119674426574742355349194934" +
  "96983520312774506326239578318016984801869478851843" +
  "85861560789112949495459501737958331952853208805511" +
  "12540698747158523863050715693290963295227443043557" +
  "66896648950445244523161731856403098711121722383113" +
  "62229893423380308135336276614282806444486645238749" +
  "30358907296290491560440772390713810515859307960866" +
  "70172427121883998797908792274921901699720888093776" +
  "65727333001053367881220235421809751254540594752243" +
  "52584907711670556013604839586446706324415722155397" +
  "53697817977846174064955149290862569321978468622482" +
  "83972241375657056057490261407972968652414535100474" +
  "82166370484403199890008895243450658541227588666881" +
  "16427171479924442928230863465674813919123162824586" +
  "17866458359124566529476545682848912883142607690042" +
  "24219022671055626321111109370544217506941658960408" +
  "07198403850962455444362981230987879927244284909188" +
  "84580156166097919133875499200524063689912560717606" +
  "05886116467109405077541002256983155200055935729725" +
  "71636269561882670428252483600823257530420752963450"

 d := make([]int, len(s))
 for i := 0; i < len(s); i++ {
  d[i] = int(s[i] - '0')
 }

 to := len(s) - 5
 max := 0
 for i := 0; i <= to; i++ {
  p := d[i] * d[i+1] * d[i+2] * d[i+3] * d[i+4]
  if p > max {
   max = p
  }
 }
 fmt.Println(max)

}

func main() {
 problem8()
}



C++


void problem8() {

string s = "73167176531330624919225119674426574742355349194934" 

"96983520312774506326239578318016984801869478851843" 

"85861560789112949495459501737958331952853208805511" 

"12540698747158523863050715693290963295227443043557" 

"66896648950445244523161731856403098711121722383113" 

"62229893423380308135336276614282806444486645238749" 

"30358907296290491560440772390713810515859307960866" 

"70172427121883998797908792274921901699720888093776" 

"65727333001053367881220235421809751254540594752243" 

"52584907711670556013604839586446706324415722155397" 

"53697817977846174064955149290862569321978468622482" 

"83972241375657056057490261407972968652414535100474" 

"82166370484403199890008895243450658541227588666881" 

"16427171479924442928230863465674813919123162824586" 

"17866458359124566529476545682848912883142607690042" 

"24219022671055626321111109370544217506941658960408" 

"07198403850962455444362981230987879927244284909188" 

"84580156166097919133875499200524063689912560717606" 

"05886116467109405077541002256983155200055935729725" 

"71636269561882670428252483600823257530420752963450";   


vector<int> d(s.size());

for (unsigned int i = 0; i < s.size(); i++) {

d[i] = s[i]-'0';

}


int to = s.size() - 5;

int max = 0;

for (int i = 0; i <= to; i++) {

int p = d[i] * d[i + 1] * d[i + 2] * d[i + 3] * d[i + 4];

if (p > max) max = p;

}

cout << max;

}

 

 

Bash

 

function problem8 {
    s=73167176531330624919225119674426574742355349194934\
96983520312774506326239578318016984801869478851843\
85861560789112949495459501737958331952853208805511\
12540698747158523863050715693290963295227443043557\
66896648950445244523161731856403098711121722383113\
62229893423380308135336276614282806444486645238749\
30358907296290491560440772390713810515859307960866\
70172427121883998797908792274921901699720888093776\
65727333001053367881220235421809751254540594752243\
52584907711670556013604839586446706324415722155397\
53697817977846174064955149290862569321978468622482\
83972241375657056057490261407972968652414535100474\
82166370484403199890008895243450658541227588666881\
16427171479924442928230863465674813919123162824586\
17866458359124566529476545682848912883142607690042\
24219022671055626321111109370544217506941658960408\
07198403850962455444362981230987879927244284909188\
84580156166097919133875499200524063689912560717606\
05886116467109405077541002256983155200055935729725\
71636269561882670428252483600823257530420752963450
    local to=$((${#s} - 5))
    local max=0
    local i
    echo $i
    for ((i=0; i<=to; i++)); do
        local p=$((${s:i:1} * ${s:i+1:1} * ${s:i+2:1} * ${s:i+3:1} * ${s:i+4:1}))
        if ((p>max)); then max=$p; fi
    done
    echo $max
}


problem8



Javascript


var s = "73167176531330624919225119674426574742355349194934" +

"96983520312774506326239578318016984801869478851843" +

"85861560789112949495459501737958331952853208805511" +

"12540698747158523863050715693290963295227443043557" +

"66896648950445244523161731856403098711121722383113" +

"62229893423380308135336276614282806444486645238749" + 

"30358907296290491560440772390713810515859307960866" +

"70172427121883998797908792274921901699720888093776" +

"65727333001053367881220235421809751254540594752243" +

"52584907711670556013604839586446706324415722155397" +

"53697817977846174064955149290862569321978468622482" +

"83972241375657056057490261407972968652414535100474" +

"82166370484403199890008895243450658541227588666881" +

"16427171479924442928230863465674813919123162824586" +

"17866458359124566529476545682848912883142607690042" +

"24219022671055626321111109370544217506941658960408" +

"07198403850962455444362981230987879927244284909188" +

"84580156166097919133875499200524063689912560717606" +

"05886116467109405077541002256983155200055935729725" +

"71636269561882670428252483600823257530420752963450";   


var d = new Array(s.length);

for (var i = 0; i < s.length; i++) {

 d[i] = s[i]-'0';

}


var to = s.length - 5;

var max = 0;

for (var i = 0; i <= to; i++) {

 var p = d[i] * d[i + 1] * d[i + 2] * d[i + 3] * d[i + 4];

 if (p > max) max = p;

}

max;



Racket

 

#lang racket

(define (digit str pos)

  (string->number (substring str pos (add1 pos))))


(define (problem8)

  (define n "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450")

  (define p 0)

  (for ([i (in-range 0 (- (string-length n) 4))])

    (set! p (max p (* (digit n i)

                      (digit n (+ 1 i))

                      (digit n (+ 2 i))

                      (digit n (+ 3 i))

                      (digit n (+ 4 i))))))

  (display p))

(problem8)

 

 


'Project Euler' 카테고리의 다른 글

Project Euler Problem 10  (0) 2012.05.28
Project Euler Problem 9  (0) 2012.05.28
Project Euler Problem 7  (0) 2012.05.28
Project Euler Problem 6  (0) 2012.05.28
Project Euler Problem 5  (0) 2012.05.28