심심풀이 파이썬 코딩 문제..

3n+1 문제

임의의 자연수 n에 대해 다음과 같은 조작을 반복합니다.

n이 짝수면 2로 나누고, n이 홀수면 3n+1을 구한다.
예를 들어, n=5로 시작하면, 5 → 16 → 8 → 4 → 2 → 1 이 됩니다.

어떤 자연수 n에 대해서도, 이 조작을 유한 번 시행하면 1이 될 것이라고 예상하는데, 7000 0000 0000보다 작은 모든 짝수에 대해 성립한다는 것이 밝혀져 있긴 하지만, 아직 아무도 증명하지 못했습니다.

유명한 헝가리 수학자 폴 에르되시(Paul Erd\”os)는, “우리의 수학은 아직 이 문제를 풀 준비가 되어 있지 않다.”라고 했습니다.

심심해서 이걸 파이썬 코딩을 해봤다.
알고리즘 트레이닝 북에 나온 문제다…39page 문제1 참고하시오.. (저작권 문제때문에 여기서 문제는 못올리겠당…^^;)

# -*- coding: euc-kr -*-

class firstProg:
#생성자
def __init__(self):
self.maxcount = 0

#n이 짝수 인지 홀수 인지 판별해서 약정된 계산 수행
def calc(self, val):
if val%2 == 0:
return self.evennum(val)
elif val%2 == 1:
return self.oddnum(val)

def evennum(self, val):
val = val/2
return val

def oddnum(self, val):
val = (val*3) +1
return val

def loopdef(self, start, end):
for i in range(start, end+1):
countcycle = 1
while 1:
i = self.calc(i)
countcycle += 1
if i == 1:
break
self.setmaxcount(countcycle)

def setmaxcount(self, count):
if count > self.maxcount:
self.maxcount = count

def getmaxcount(self):
return self.maxcount

if __name__==”__main__”:
#입력
i,j = raw_input().split()

#출력
first = firstProg()
first.loopdef(int(i),int(j))
print i, j, first.getmaxcount()

파이썬으로 ProgrammingChallenges 알고리즘 트레이닝 북 문제풀이

#PC/UVa ID: 110102/10189, 인기도: A, 성공율: 높음 레벨: 1

#이 게임에서는 각 칸에 인접한 칸에 몇 개의 지뢰가 있는지를 보여주는 게임이다. 각 칸에는 최대 여덟 개의 인접한 칸이 있을 수 있다. 아래에서 왼쪽에 있는 4 * 4 지뢰밭에는 지뢰 두 개가 있으며 각각은 ‘*’ 문자로 표시되어 있다. 이 지뢰밭을 방금 설명한 힌트 숫자로 표기하면 오른쪽에 있는 것과 같은 필드가 만들어 진다.

#*… *100
#…. 2210
#.*.. 1*10
#…. 1110

#입력

#입력은 임의 개수의 지뢰밭으로 구성된다. 각 지뢰밭의 첫번째 줄에는 각각 행과 열의 개수를 나타내는
#두개의 정수 n과 m(0 #m개씩의 문자가 들어 있으며 이는 지뢰밭을 나타낸다.

#지뢰가 없는 칸은 ‘.’으로, 지뢰는 ‘*’로 표시되며 이때 따옴표는 쓰지 않는다. n=m=0인 줄은 입력이
#끝났음을 나타내는 것으로 그 줄은 처리하지 않는다.

#출력

#각 지뢰밭에 대해 Field #x:라고 적혀있는 메시지를 출력한다. 이때 x는 필드 번호를 나타내며 1에서
#시작한다. 그 다음 줄부터는 n개의 줄에 걸쳐서 ‘.’문자 대신 그 칸에 인접한 칸에 들어있는 지뢰의
#개수를 출력한다. 각 지뢰밭에 대한 출력 사이에는 반드시 빈 줄이 하나씩 있어야 한다.

#예

#입력 예 출력 예
#4 4 Field #1:
#*… *100
#…. 2210
#.*.. 1*10
#…. 1110

#References : ProgrammingChallenges 알고리즘 트레이닝 북

문제가 이렇다… 그럼 파이썬 코드로 보자… [#M_ 코드 보기 | 글 닫기 |

def makeSourceDest(source,dest):
for x in range(I):
source.append(raw_input())
dest.append([])
for y in range(J):
dest[x].append([0])

def getMineCount(source,dest,x,y):
flag = 0
for z in filter(lambda a:0<=a<=I-1, [x-1,x,x+1]):
if flag == 1:
break
for k in filter(lambda b:0<=b<=I-1,[y-1, y, y+1]):
if source[z][k] == ‘*’ and (z!=x or k!=y):
dest[x][y][0] += 1
elif source[z][k] ==’.’:
continue
elif source[z][k] == ‘*’ and z==x and k==y:
dest[x][y][0] = ‘*’
flag = 1
break

if __name__==”__main__”:
i,j = raw_input().split()
I = int(i) # 행
J = int(j) # 열

source = []
dest = []

makeSourceDest(source,dest)

for x in range(I):
for y in range(J):
getMineCount(source,dest,x,y)

strstr =”
for x in range(I):
for y in range(J):
if y ==J-1:
strstr +=str(dest[x][y][0])
strstr += ‘\n’
else:
strstr +=str(dest[x][y][0])

print strstr

_M#]

개발자 지위 하락, 누구 책임인가?

개발자 지위 하락, 누구 책임인가?

마이크로 소프트 잡지에 실린 글인데 어제 꼼꼼히 읽어보고 공감가는 부분이 많아서 링크걸었다.

앞으로 자바 개발자의 수요는 안정화체계로 돌아서고 C# 이나 VB.NET 개발자가 급격하게 늘것이다라구 하는군.

IDE 개발환경과 UML에 익숙해 지는게 좋다. 라고 하는 말씀에는 조금 딴지를 걸고싶기도 하다. 물론 VS.NET 2005 에서는 UML을 지원하지 않을것이다라고 했는데 조금 어폐가 있기두 하고 ..

IDE 개발환경 하면 비주얼 스튜디오 만큼 따라오는게 없을듯하다 VS.NET을 써봤지만 개발환경이 너무 좋아서 자칫 내부적으로 어플리케이션이 어떻게 돌아가고 만들어지는지 간과하기가 쉽다는 맹점이 있다고 생각한다.

내가 자바를 처음 배울때처럼 에디터로 먼저 시작하고 이클립스로 개발환경을 발전시키는 수순이라면 정말 좋을거 같다.
단순 IDE에 매달리는 개발자보다는 원리를 이해하는 개발자가 응용력도 뛰어나지 않을까 주장하고 싶다.

근데 결론은 전체적으로는 글이 우울한 분위기 였다. 글을 보고 현재에 대해서 비판하고 포기하기 보다는 발전할수 있는 틈새를 찾아보자.~~~!!! 아자~~!