본문 바로가기

오일러프로젝트

[오일러프로젝트] 4번문제

앞에서부터 읽을 때나 뒤에서부터 읽을 때나 모양이 같은 수를 대칭수(palindrome)라고 부릅니다.

두 자리 수를 곱해 만들 수 있는 대칭수 중 가장 큰 수는 9009 (= 91 × 99) 입니다.

세 자리 수를 곱해 만들 수 있는 가장 큰 대칭수는 얼마입니까?

#Python
 


def myReverse(targetList):
for index in range(len(targetList) -1, -1, -1):
yield targetList[index]
def isSymmetryNum(targetNumber):
targetList=list(str(targetNumber))
result=list()
for char in myReverse(targetList):
result.append(char)
reversedNum=int(''.join(result))
return targetNumber==reversedNum
result=isSymmetryNum(1234)
print (result)
target1=range(1,1000)
target2=range(1,1000)
biggestNum=0
for n1 in target1:
for n2 in target2:
a=n1*n2
if isSymmetryNum(a) and biggestNum < a :
biggestNum=a
print(biggestNum)
view raw 4.py hosted with ❤ by GitHub


#Ruby
 

def myReverse(targetNum)
numList=Array.new()
targetNumStr=targetNum.to_s()
return targetNumStr.reverse().to_i()
end
def isSymmetryNum(targetNum)
reversedNum=myReverse(targetNum)
return reversedNum == targetNum
end
n1=Array.new(999) {|x| x+1}
n2=Array.new(999) {|x| x+1}
biggestNum=0
for i in n1
for j in n2
r=i*j
if isSymmetryNum(r) and biggestNum < r
biggestNum=r
end
end
end
puts biggestNum
view raw 4.rb hosted with ❤ by GitHub


두 언어를 모두 배우는 중입니다.
더 좋은 코드와 솔루션 있으시면 알려주시면 감사하겠습니다. :)

루비와 파이썬의 접근 방식이 많이 다른 것 같다.같이 공부하기 힘드네 --;
Perl
#!/usr/bin/perl
use strict;
use warnings;
sub is_symmetry_num {
my($num) = @_;
my $reversed_num = scalar reverse $num;
if ($reversed_num == $num) {
return 1;
} else {
return 0;
}
}
my @target1 = (1..1000);
my @target2 = (1..1000);
my $biggest_num = 0;
foreach my $num1 (@target1) {
foreach my $num2 (@target2) {
my $a = $num1 * $num2;
if (is_symmetry_num($a) and $biggest_num < $a) {
$biggest_num = $a;
}
}
}
print $biggest_num;
view raw 4.pl hosted with ❤ by GitHub