천재들의 세계

Project Euler의 홈페이지를 잘 살펴보면 통계 페이지가 있다.


http://projecteuler.net/index.php?section=statistics

통계 페이지의 위에는 국가별 통계가 있다.

남한에서는 179명이 참여하고 있다. 북한에 2명 -_-; 놀라운 일일 따름이다…

그리고 국가별 통계 밑에 보면 언어별 통계가 있는데, 정말 이렇게 많은 컴퓨터 언어가 있다는 점에 놀라게 된다. 그리고 한가지 특기할만한 사항은, Pencil/Paper가 있다는 점(!) 설마 Pencil이나 Paper라는 언어가 있을 것 같지는 않고, 직접 손으로 풀었다는 뜻으로 보인다. 사용자 평균 등급을 보면 10%를 차지하고 있다.

가장 많이 쓰는 Python/C/C++/Java 등의 등급이 잘해야 13%이고 10%정도에 머물러 있는 것을 보면 놀라울 따름이다.

그래서 그렇게 푸는 사람들이 누가 있는지 살펴봤는데, 전부 다 푼 사람도 있다. 진짜일까!? 뭐…그게 진짜로 손으로 다 풀었는지 어쨌는지는 나로서는 알 수 없는 노릇이지만, 사실이라면 정말 대단한 것 같다. 내가 앞발로 만든 C 프로그램을 컴퓨터가 두시간씩 걸려서 풀어준 문제도 있는데, 그걸 손으로 풀었다면, 천재이거나 엄청난 끈기의 소유자이거나, 둘 다이거나…

흥미로운 점은 – 그중에 5위에 한국인이 있다는 점. 현재 195문제로, 바로 어제 새로운 문제를 풀었다고 한다.

음…난 이제 겨우 30문제 풀었는데. 나머지 200여문제는 언제 풀어보려나 모르겠다.

아무튼. 천재들을 바라보고 따라갈수록, 나도 그만큼의 실력을 갖추게 되는 거겠지. 이렇게 생각하든 저렇게 생각하든, 논리적인 결과는 같을테니.

화면 감시 프로그램 – 힌트 요청…

블로그에 질문을 올리는 것도 가능하다. (응?)

나는 다음과 같은 코드를 작성하였다.

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim bounds As Rectangle

Dim screenshot, backup As System.Drawing.Bitmap

Dim graph As Graphics

Dim x, y, z, w As Integer

x = 0

bounds = Screen.PrimaryScreen.Bounds

screenshot = New System.Drawing.Bitmap(bounds.Width, bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)

backup = New System.Drawing.Bitmap(bounds.Width, bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)

graph = Graphics.FromImage(screenshot)

graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)

Do While True

backup = screenshot

graph = Graphics.FromImage(screenshot)

graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)

Dim i, j As Integer

For i = 1 To 10

For j = 1 To 10

y = System.Math.Abs(CInt(backup.GetPixel(i, j).R – screenshot.GetPixel(i, j).R Mod 256))

z = System.Math.Abs(CInt(backup.GetPixel(i, j).G – screenshot.GetPixel(i, j).G Mod 256))

w = System.Math.Abs(CInt(backup.GetPixel(i, j).B – screenshot.GetPixel(i, j).B Mod 256))

x = x + y + z + w

Next

Next

If Not (x = 0) Then

MsgBox(x)

Exit Do

End If

Loop

End Sub

End Class

앞발로 짠 코드이므로 가독성이나 그런건 전혀 신경 안쓰고 막 두들겼다.

이 코드가 하는 일은 다음과 같다.

1. 모니터 화면의 특정 영역을 감시한다. (이 예제 코드에서는 0,0에서 10,10까지의 왼쪽 상단 모서리)

2. 특정 영역에 변화가 생기면

3. 알림 팝업을 띄운다.

이걸 왜 만드는가…

그것은, 월급 400만원 받는 사람이 모니터를 뚫어지게 바라보고 있다가 특정 영역에 변화가 생기면 마우스를 클릭하는, 그런 일을 하고 있기 때문이다. 그 사람에게 다른 일을 시키기 위해서 이 부분을 자동화 시켜야 한다.

물론…이 프로그램을 만든다고 해서 절약된 돈 400만원의 일부가 나에게 성과급으로 돌아올 것인가…그건 전혀 기대할 수 없다.

아무튼.

요점은, 위의 코드를 실행하는 Form1에는 버튼이 하나 있고, 그 버튼을 클릭하면 저 프로그램의 코드가 작동을 시작하도록 되어 있다.

문제는 저 코드를 실행시키면 예상대로 무한루프에는 빠져 들어가는데, 화면이 변해도 감지를 못한다는 점이다. 무한루프 자체에 너무 빠져버린 듯…

그래서 – 화면을 감시하는 프로그램은 대체 알고리즘이 어떻게 되어 있는 걸까?

일단은 그런 알고리즘을 찾는다는 핑계로 인터넷 서핑을 하고 있었다. 정신을 차려보니 네이버 뉴스와 올블로그를 돌아다니는 나를 발견, 급히 이 글을 작성해 둔다.

질문은 잘 하자

http://oops.org/?t=lecture&sb=beginner&n=1

다른 사람에게 질문을 던지고 싶은 사람이라면 누구든지 위의 글을 반드시 읽어볼 것을 권한다. 김정균 님이 작성하신







HOWTO For Beginners

이다.





아까 누가 메신저에 등록해서…

그분과의 대화를 저장하였다.

사실 대화하면서 많이 답답했다. 포트포워딩이 왜 필요한지 말도 안하고 포트포워딩을 해달라고 하였으니…

만약 내가 왜 할거냐고 안 물어봤다면 나의 대답은 다음과 같았다.

1. 리눅스 설치하세요.

2. 터미널에서 sudo apt-get install iptables 를 입력하세요.

3. iptables 설정하세요

물론 내가 iptables를 개뿔 아는게 있을리 없지만, 이건 그 이전에 매우 기본적인 것에 대한 내용이다. 일단 이 분은 리눅스가 무엇인지 모르고 계셨기에… 아니, 그보다는 운영체제라는 것에 대해서 모르고 있었던 것 같다. ”

윈도에서 큐파일이라는 프로그램을 이용하기 위해 포트포워딩을 해야 한다

“는 것을 질문했어야 제대로 된 답이 나올텐데, 앞쪽을 잘라놓고 ”

포트포워딩을 해야 한다

“는 것만 질문 하면 그 어떠한 전문가라도 iptables 를 쓰라고 할 것이다.

http://www.google.co.kr/search?q=%ED%8F%AC%ED%8A%B8+%ED%8F%AC%EC%9B%8C%EB%94%A9&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ko:official&client=firefox-a

구글에서 검색해보면 iptables를 이용하는 방법이 가장 처음에 나온다. 어쨌든, 나야 뭐 질문도 많이 해봤고 대답도 많이 해봤기에 답답함을 이겨내고 원초적인 부분을 파내서 이분이 원하는 답을 해주긴 했지만. 뭔가 안된다는 질문은 아무런 대답도 얻을 수 없는 공허한 질문이다. 뭐가 안된다는 건지 알려주지 않으면 답이 나오지 않는 법이다.

그래서, 질문을 잘하는 것이 좋은 대답을 얻는 비결이다. 우문에는 우답밖에 나오지 않는다.


더보기

매트릭스의 이상한 점

영화 매트릭스 – 너무나 유명해서 더이상 그 스토리를 말한다고 해도 스포일러가 아닐 정도일 것이다.

매트릭스의 기본 설정은, 기계들이 엄청나게 많은 인간의 뇌를 조작하여 그들이 모두 매트릭스 안에서 꿈을 꾸도록 한다는 것이다. 그리고 그 꿈은 현실과 똑같다.

현실에서, 우리는 아기를 만든다. 그렇다면, 매트릭스에서는 그 과정을 도대체 어떻게 처리하는 것일까?

인공 보육실이 있다 치고, 인공 자궁에서 아기를 만든다고 치자. 그럼, 그걸 공장에서 기계적으로 생산하는 것이 아니라 “꿈” 속에서 아기가 만들어질 때 마다 새로운 실제의 아기를 만들어서 꿈 속에서 그 아기가 태어나는 시점에 실제의 아기와 연결시켜주고, 그 속에서 실제의 아기가 꿈을 꾸기 시작하도록 만드는 것인가?

매트릭스에서 이 문제를 어떻게 해결했는지가 정말 궁금하다. 객체지향적으로 말하자면, 새로운 Human 객체를 생성해서 Parent로부터 상속을 해 주는 과정에서 생성자를 어떻게 처리하는가, 그것이 문제인 것이다.

물론…

너무 깊이 들어가면, 다치겠지만.

젊은 프로그래머에게 내미는 도전장(?)

Project Euler에서 이메일이 한통 왔다.

Next Live Quiz Competiton on:


17th JAN. 2009
4:00 PM -GMT

10:00 PM -BAN 9:30 PM -IND

Fix your local data and time here:

View

Current Time: 11th January 2009 11:42:52 AM UTC

Countdown: 6 Days 4 Hours 17 Min 8 Sec

Quiz covers the follwoing topics:

C/CPP programming puzzles

c aptitude questions

Algorithm

Data Structure

Simple Math

IQ

Total questions:

Not fixed yet


Time:

Not fixed yet


For any query regarding the contest, feel free to mail me: slimonbd@yahoo.com (also IM)

흠…

재밌을 것 같아서 일단 신청했다. 못하면 말지 뭐. ㅋㅋ

알고리즘과 자료구조와 IQ에서 망칠 것 같다. 다른 분야라고 자신있는건 아니지만. -_-;

신청은 다음 URL에서 하면 된다.


http://www.youngprogrammer.com/live_quiz.php

순환소수 자리수 세기

원래 문제 : index.php?section=problems&id=26

1을 자연수 n으로 나누면 유리수다. (당연히!) 예를 들어…


1

)
/
_(

2

)

= 0.5
^(

1

)
/
_(

3

)


= 0.(3)
^(

1

)
/
_(

4

)


= 0.25
^(

1

)
/
_(

5

)


= 0.2
^(

1

)
/
_(

6

)


= 0.1(6)
^(

1

)
/
_(

7

)


= 0.(142857)
^(

1

)
/
_(

8

)


= 0.125
^(

1

)
/
_(

9

)


= 0.(1)
^(

1

)
/
_(

10

)


= 0.1

여기서 (6)은 무한히 반복됨을 뜻한다. (142857)은 142857이 무한히 반복된다는 뜻이다.

가령, 1/6은 1자리의 순환 마디를 갖고 있다. 1/7은 6자리의 순환 마디를 갖고 있다.

문제 : 1부터 1000까지의 자연수 중, 1/d가 가장 긴 순환 마디를 갖게 되는 자연수 d를 찾아라.

이 문제를 풀기 위해서 고민을 하는데, 도저히 방법이 안보인다. 지금까지 푼 29개의 문제는 어떻게든 (시간이 오래 걸리더라도) 풀긴 했는데, 이건 수가 없다.

일단 알아낸 것 – d가 2나 5만을 인수로 갖는다면 그냥 넘어가도 된다. 확실하게 유한소수니까.

고민해본 방법 1

1/d=x라고 하자. x, 10x, 100x, 1000x…이런 식으로 10을 곱해나간다. 그리고, 10x-x, 100x-x, 1000x-x등등을 계산해서 정수로 떨어지면 그때까지 반복한 회수를 세면 된다

문제점 – 1/6을 처리할 수 없다. -_-;

고민해본 방법 2

그래서. 10x-x, 100x-x, …를 계산하고, 그때마다 10, 100, 1000…을 곱해서 정수로 떨어지게 만들어 보려고 했다.

문제점 – 어느세월에 끝나나…

고민해본 방법 3

순환마디의 특징을 고찰해 보자.

x=0.abcde…(xyz) 이런 식으로 되어 있다.

어릴 적에 배운 기억을 되짚어 본다.

이런 걸 풀기 위해서는 x에다가 최초의 순환마디가 끝나는 데 까지의 자리수만큼인 10^m을 곱한 숫자에서 최초로 순환마디가 나오는 데 까지의 자리수만큼인 10^n을 곱한 숫자를 뺀다.즉 x(10^m-10^n) 을 계산한다고 들었다. 근데 어차피 내가 필요한 숫자는 m-n아닌가?

!$^$%@#$^@#%&@$%*@%^@#$%…..

꼬였다.

누가 힌트좀 주세요. -_-;

기독교

다음 글에 트랙백을 걸기 위하여 작성한 글이다.

http://truthway.tistory.com/41

이하, 퍼온 부분은 그 댓글 중에서 퍼왔다.

http://truthway.tistory.com/41#comment1193359

우선 저는 샤머니즘이라고 언급한 것을 님께서는 [유교,불교,도교,이슬람,힌두교]까지 포함시키셨군요. 저는 순수하게 ‘샤머니즘’을 지칭한 건데 그렇게 확대 해석해 버리시니 조금은 당황스럽습니다. 그리고 그 종교들 모두가 ‘TEXT’ 즉 경전이라고 불릴만한 것을 기초로 하긴 합니다. 그러나 유교의 경우에는 종교라기보다는 하나의 학문이라고 보시면되고, 불교같은 경우는 개인의 성찰이나 묵상과 같은 초경건주의적인, 샤머니즘에 가까운 성격의 종교입니다. 힌두교 역시 마찬가지고요. 이슬람교 정도가 엄밀하게 말해서, ‘TEXT’를 근본적 가르침의 기준으로 두는 종교라고 부를 수 있는 정도입니다. 사실상 오늘날의 ‘신학’이라는 학문이 ‘기독교를 공부’하는 것을 가리키는 것도 사실상 기독교가 중세를 기점으로하여 전세계적으로 가장 널리 퍼졌으며, 가장 학문적인 연구가 활발했던 종교임을 드러내 줍니다. 미국의 하버드나 예일, 영국의 옥스퍼드와 같은 세계 최고 수준의 대학들 모두 처음에는 ‘신학 대학’으로 시작했구요, 유럽에서 처음 대학이 설립되었을 때도, ‘신학’을 가르치는 것에서부터 시작했습니다. 따라서 님께서 다른 여타 종교와 신학을 동일 선상에서 ‘학문적인 성향’을 따지신 것은 매우 비적절한 비교라고 생각됩니다. 신학은 세계 어느 종교보다도 보다 더욱 확고하게 ‘학문적’임을 알려 드립니다.

신학과 기독교의 학문적 성향을 혼동하여 표현하지 않으셨으면 좋겠군요. 아무튼, 문맥상 기독교가 학문적인 성향을 갖고 있음을 나타낸 것으로 보입니다. 그런데, 예를 들어 보지요. 불교 또한 전 세계적으로 영향을 미치고 있는 종교인데, 그 영향력이 기독교에 비해서 약하다고 생각하는 것은 편협한 사고 아닐까요? 또한, 실제로 불교가 기독교에 비해 영향력이 약하다고 하더라도, 가장 널리 퍼지고 가장 영향력있고 가장 연구가 활발한 종교라 하여 기독교가 가장 학문적이라고 주장하는 것은 주관적인 관점으로 보입니다. 불교도인 사람이 볼 때는 불교가 가장 학문적일 수 있습니다.

샤머니즘의 정의를 조사해 보면 다음과 같습니다.

http://mtcha.com.ne.kr/korea-term/sunsa/term6-samunisum.htm



엑스터스[忘我·脫我·恍惚]와 같은 이상심리 상태에서 초자연적 존재와 직접 접촉·교섭하여, 이 과정 중에 점복(占卜)·예언·치병(治病)·제의(祭儀)·사령(死靈)의 인도(引導) 등을 행하는 주술·종교적 직능자인 샤먼을 중심으로 하는 종교현상을 말한다. 북아시아의 샤머니즘이 가장 고전적·전형적인 것으로 알려져 있으나 지역에 따라 여러 샤머니즘의 형태가 있으며, 다른 종교현상과 복합되어 있는 경우도 적지 않다.

자. 기독교에서 하지 않았던 걸 골라보세요.

초자연적 존재 – 기독교의 교리에 의하면, 있죠.

초자연적 존재와 직접 접촉, 교섭 – 예수님이나 하나님과 직접 만났다는 사람, 많이 있죠.

점복, 예언, 치병, 제의, 사령 – 예수나 기타 성자들이 하고 다닌 일이죠.

제가 보기엔 기독교도 샤머니즘에 속하는 것 같습니다. 반박해 주시기 바랍니다.

그리고, 하버드든 예일이든 옥스퍼드든 그 대학이 기독교 신학 연구에서 출발한 신학대학이었다는건, 당시에는 “학문”이라든가 “과학”이라고 할만한 것이 모두 “신학”의 범주에 있었기 때문입니다. 고대 그리스의 대학이 모두 “철학”을 가르쳤지만, 그 철학의 범주 안에 “기하학”과 “음악”이 포함되었던 것과 같죠. 즉, 하버드나 옥스퍼드 대학 설립 초기의 신학은 당시의 세상을 설명하는 그쪽 동네의 유일한 세계관이 기독교 세계관이기 때문에 신학 대학에서 출발한 겁니다. 오히려 기독교 세계관을 따르지 않는 그 바깥의 세상은 모르고 지낸, 어찌 보면 무식한 학문이라고 말할 수도 있습니다. 동국대학교도 처음에는 “불교사범학교”에서 시작했다는 점을 알려 드리죠.

여러 다른 종교와 기독교를 동일 선상에서 “학문적인 성향”을 따진 것이 적절하지 않다고 하였는데, 이 말은 다른 종교의 신도들이 들으면 굉장히 기분 나쁘겠군요. 차라리 저는 모든 종교는 학문적이지 않다고 주장하겠습니다.

또한 이들 종교의 경전들을 비롯한 수많은 역사상의 서적들이 기록되었지만 성경만큼 급속하게 확산되었던 책은 없습니다. 예를 들어, 우리가 철학을 공부하는데 있어서 가장 중요한 인물 중에 하나인 플라톤의 경우 1900년 동안 사본(베껴진 것)의 수가 불과 7개 밖에 되지 않는 반면에 성경은 100년만에 5,300개의 사본수를 돌파했습니다. 비교가 되지 않을 정도로 급속하게 확산 되었음을 볼 수 있습니다. 즉, 성경은 역사가 보증하고 있는 책이며, 오늘날의 고고학 학계에서도 그러한 부분을 인정하고 있답니다. 잭 커트랩은 “역사적, 고고학적 탐사에 의해 발견된 풍부한 자료를 통하여 우리는 성경의 역사적 사실성을 측정할 수 있다. 성경의 주장들이 시험되는 어떤 경우에서든 성경은 정확하고 신빙성 있는 것으로 입증된다.”라고 말하였습니다. 또한 유명한 영국의 학자인 F. F. 브루스는 “신약성경에 대한 증거는 고전 작가들의 여러 작품들에 대한 증거보다 훨씬 더 많아서 그 누구도 그것의 신빙성에 의문을 품을 꿈도 꾸지 못할 정도이다.”라고 말했습니다.

이건 그저 기독교가 폭발적으로 성장했다는 소리밖에 되지 않죠. 불교가 폭발적으로 성장했다면, 불경 역시 100년 안에 5300개 이상의 사본을 만들어 낼 수도 있습니다. 오히려, 기독교가 폭발적으로 성장하면서, 사실이 아닐 수도 있는 성경을 “진실”이나 “진리”라고 주장하는 “사람의 수”가 늘어났다는 의심이 드는군요. 제 의도는 성경의 모든 것을 의심하겠다는 것이 아니라, “성경의 모든 것이 진실이고 진리이다”라는 주장을 의심하겠다는 겁니다.

성경은 세계 최초로 인쇄된 책입니다(구텐베르크의 성서). 또한 성경은 세계에서 가장 비싼 책이기도 합니다. 그리고 가장 비싼 필사본중의 하나도 성경이며, 역사상 가장 긴 전보 역시 뉴욕에서 시카고로 보내진 ‘개역 성경’입니다. 또한 역사상 어떤 책의 최다 발행의 초판은 ‘현대어역 성경’이며, 백만권 이상이 발행되었다고 합니다. 사실상 이 세상에 존재하는 그 어떠한 서적이라도 성경에 감히 필적할만한(비교도 되지 않을 정도로 압도적인) 책은 없습니다. 이에 대해서 버나드 램은 이렇게 말했어요. “성경은 1500년간 40여 세대에 걸쳐 다른 삶을 살았던 40명 이상의 다른 저자들에 의해 기록되었다. 정치 지도자였던 모세, 목동이었던 아모스, 왕이었던 솔로몬, 내과 의사였던 누가, 세관원이었던 마태, 어부였던 베드로가 그 저자들이다. 성경은 아시아, 아프리카, 유럽 세 개의 대륙에서 기록되었고, 히브리어, 아람어, 그리스어 세 개의 언어로 기록되었다. 그리고 성경은 여러 다른 장소에서 기록되었다. 모세는 광야에서, 다니엘은 왕궁에서, 예레미야는 지하 감옥에서, 바울은 로마 감옥에서, 누가는 여행중에 기록했다. 또한 성경은 서로 다른 시기에 기록되었다. 다윗은 전쟁시에 기록했고, 솔로몬은 평화시에 기록했다. 그리고 성경은 다른 감정 상태에서 기록되었는데, 어떤 것은 기쁨의 최고조에서 기록되었고, 또 어떤 것은 슬픔의 심연에서 기록되었다. 그것의 독특성을 고려해 볼 때 그것은 정말 경이로운 책이다. 그것에 필적할 만한 다른 책은 없다.”

일단, 앞 부분은 그냥 “성경이 많이 복사되었다”는 양적인 측면에 관한 내용이므로 건너 뛰도록 하죠. 이 기록이 객관적이지 않다는 것은 버나드 램이 말한 마지막 문장에 적혀 있군요. 저자들이 감정 상태가 다른 상태에서 기록하였는데 어떻게 그것이 “진실”이나 “사실”을 담을 수 있는지 모르겠군요. 게다가, 그 기록에 자신의 주관적인 해석을 덧붙이지 않았다는 보증도 없죠. 역사학자들이 말하는 “성경은 믿을만하다”라는 것은, 가령 솔로몬이 작성한 부분에 대해서 그것이 솔로몬이 자신의 이야기를 기록하였고 대체로 그 시대의 상황을 서술하고 있다는 것일 뿐이지 그것이 있는 그대로 진실이고 진리임을 뜻하지는 않습니다.

성경이 경이로운 책이라면, 제가 좋아하는 도덕경도 경이로운 책입니다. 똑같이.

님께서 오해하고 계신 두 번째는, 창조과학을 ‘결과를 부정할 수 없는 실험’을 제시할 수 없다고 생각하는데 있습니다. 창조과학을 무엇이라 생각하시나요? 혹시 창조과학에 대해서 잘 모르신다면,

http://www.kacr.or.kr/

여기로 ‘한국창조과학회’ 홈페이지에 가셔서 한 번 그들이 어떤 식으로 논증하는지 살펴 보세요. 이 홈페이지에서 논의되고 있는 대부분의 주제들은 [진화를 부정하는 살아있는 화석들, 사람과 공룡이 함께 살았다는 증거들, 부정되고 있는 수십 억 년의 지구연대] 등과 같은 것들입니다. 또한 창조과학자로서 활동했던 인물들로 [블레이즈 파스칼, 제임스 주올, 폰 브라운, 니콜라스 스테노, 헨리 모리스, 요하네스 케플러] 등 쟁쟁한 과학자들이 소개되고 있습니다. 이밖에 한국창조과학회도 국내의 저명한 과학자들로 구성되어 있습니다. 님이 쓰신 글을 보아하니 그들이 과학적 관찰과 검증의 방법이 아닌 다른 말도 안되는 억측이나 부리는 사람들인 것처럼 써놨는데요. 절대 그렇지 않습니다. 창조과학 역시 과학임에 분명하고요, 단지 차이점이 있다면 그들은 과학적인 결과를 ‘신의 창조’를 증명해주는 자료로 인정하고 있다는 점입니다. 보세요. 요즈음 과학이 발달되면서 나타나는 과학적 결과들은 신의 창조행위를 부정하지 못하며, 아울러서 진화론을 지지하지도 않습니다. 오히려 과학이 밝혀주는 우주 행성의 비밀들은 점점 이 세계는 갑작스러운 어느 시점에서 형성되었음(즉 신의 창조)을 지지해주고 있답니다. 과학은 어찌보면 신학으로 가는 통로가 될 수 있다는 것이지요. 이제 님께서 갖고 계신 오해를 이해하시겠습니까?

자…”옳은길” 님이야말로 제 말을 오해하셨군요. 과학은 – 그 과학이 어느 분야든지(자연과학, 사회과학, 인문과학) – 부정될 수 있어야만 합니다. 다시말해서, “이 가설은, 이런 종류의 증거가 발견된다면 부정된다.”라는 주장이 가능해야 합니다. 진화론은 말씀하신대로 그런 “부정적인” 증거들이 존재할 수 있으며, 진화론을 지지하는 학자들은 그러한 부정적인 증거들을 설명하기 위해서 연구합니다.

창조론은 그것을 “긍정하는” 근거들만 있습니다. 저는 도저히 이해가 되지 않는 점이, 창조론에서는 “이러이러한 증거가 발견된다면 창조론은 부정된다”는 주장이 단 하나도 없다는 겁니다. 어떤 경우에, 어떤 증거가 발견된다면 창조론을 부정할 수 있는지 얘기해 주세요. 그럼 창조론을 과학이라고 인정해 드리죠.

또한, 진화론이 틀렸다고 하여 창조론이 긍정되는 것이 아님을 분명히 해 둡니다. 이건 아주 많은 창조론자들이 빠진 논리적 오류입니다. 진화론의 진리 여부는 창조론의 진리 여부와 관련이 없습니다. 진화론이 참이라면 창조론은 참일 수 없겠지만, 진화론이 거짓이라 하여 창조론이 참이 되지는 않습니다. 창조론이 참이라는 것은 독립적으로 증명되어야만 합니다.

그리고, 파스칼, 줄, 브라운, 스테노, 모리스, 케플러 같은 아주 유명한 과학자들이 창조론자였다고 해도, 일단 그 사람들은 진화론이 나오기도 전에 살았던 사람들이라 진화론이 뭔지도 모른 사람입니다. 당연히 성경을 믿었을 거고 창조론밖에 없었겠죠. 아울러 창조과학회가 저명한 과학자들로 구성되어 있다 하더라도 주장 자체가 논리적으로 오류가 있는데 어떻게 믿습니까?

또한 “기독교가 세상에 미친 여러 영향 중, 좋은 것과 나쁜 것 중에 어느 것이 더 많아 보입니까?”라는 질문을 하셨지요. 혹시 님께서는 흑과 백 중에 흑만 보고 계신것은 아닌가라는 생각은 안드시나요? 존 스토트에 의하면 의학이나 윤리학이나 또는 복지 체계와 같은 사회를 건전하게 만드는 학문들의 발달에 기독교가 결정적인 역할을 했음을 알 수 있습니다. 또한 영국의 산업혁명으로 인한 인권유린(어린이 노동자)과 같은 문제들이 성행하였을 때, 영국에서 부흥운동을 주도했던 웨슬리와 휫필드와 같은 인물들의 영향으로 영국 사회의 범죄율이 급격하게 하락하고 노동자들의 인권을 되찾았다는 사실은 아시는지요. 아울러서 노예해방을 부르짖었던 인물들, 즉 [영국의 윌리엄 윌버포스, 미국의 아브라함 링컨과 마틴 루터 킹 목사]와 같은 인물들에 의해 노예해방이 진행되었습니다. 또한 일제 강정기를 벗어나는 시점의 평양은 타락한 도시로서 수많은 기생집들의 범람과 각종 범죄의 도가니가 되었는데, 외국인 선교사들의 주도에 의해 그곳에서 일어났던 1907년도 ‘평양대부흥운동’이 있은 후로 평양의 기생집들이 문을 닫고, 매우 살기 좋은 도시가 되었다는 사실은 어떻게 설명하실 건가요? 물론 역사상 기독교가 일으킨 매우 안 좋은 사건들이 있었습니다. 예를 들면, 십자군 전쟁이나 스페인의 종교 재판소와 같은 것들이요. 그러나 많은 사람들이 착각하는 것 중에 하나가 교회의 이름으로 자행했던 그러한 사건들의 핵심에 있는 것이 ‘기독교의 본질’이라고 생각하는 것입니다. 그렇지만 그렇지 않아요. 많은 사람들이 기독교에 대해 오해해왔고, 그런 종교적 방향이 잘못되어 많은 비극적인 사건이 있었습니다. 그건 분명히 기독교에 대한 올바른 가르침을 따른 이들이 자행했던 일이 아닙니다. 예수님은 ‘비폭력적 운동’을 벌이시다가 십자가에 힘없이 죽었지요. 그런데 마녀사냥이라니요. 그런데 십자군 전쟁이라니요. 이건 명백히 성경을 곡해한 해석들입니다. 이해가 가십니까? 님께서는 그런 기독교의 치부들(기독교인의 한 사람으로서도 정당치 못한)을 들춰내느라 혹시 기독교의 좋은점 앞에서는 눈을 가리고 계신것은 아닙니까?

의학, 윤리학은 기독교 아니더라도 발달했을 학문입니다. 불교에도 윤리학은 있고 힌두교에도 윤리학은 있으며 유교에도 윤리학은 들어가 있죠. 동양권에서 발달한 한의학은 기독교의 영향을 전혀 받지 않았지만, 나름의 독자적인 체계와 효과를 갖고 있습니다. 이러한 점은 기독교가 없었다 하더라도 의학이 발달할 수 있음을 충분히 시사합니다.

그리고 영국에서 기독교나 성공회 같은 크리스트 교 계열의 종교 말고 다른 종교가 있었나요? 인권유린을 한 사람들은 이단이고 웨슬리와 휫필드는 이단이 아닌가요? 제가 볼 때, 인권유린을 하는 사람과 그걸 막은 사람들 모두가 기독교도들인걸로 알고 있는데, 그럼 애초에 기독교가 좋은 일은 한 점은 없는 것으로 쳐야 하지 않나요? 아니면, 기독교의 영향과 상관 없이 사람은 나쁘거나 좋거나 개개인의 특성에 따라 달라진다고 봐야 하지 않습니까?

평양대부흥운동에 대해서는 제가 알고 있는 역사가 아니므로 뭐라고 할 말은 없지만, 저는 백만번 좋은 일을 한다 하더라도 단 한번 나쁜일을 한다면 그걸 용서해서는 안된다고 생각합니다.

이 부분은 제가

http://snowall.tistory.com/656

에 정리한 것이 있으므로 읽어보시기 바랍니다.

이렇게 한번 생각해 보죠.

기독교에 대해 올바른 가르침을 따르지 않는 자들을 모두 제외해 놓고 기독교의 영향력을 따져 봅시다. 십자군 전쟁을 일으킨 자들을 제외하면, 그 시대의 당시 기독교의 영향력은 얼마나 되었을까요? 마녀 사냥을 주도했던 자들을 모두 제외하고서 그 당시의 기독교의 영향력을 따져 봅시다. 우리나라에서 여의도 순복음 교회를 빼놓고 기독교의 영향력을 따져 봅시다. 기독교가 얼마나 영향력이 있겠습니까? 그래도 기독교가 세계적인 종교일까요?

제가, 기독교의 치부를 들춰내느라 기독교의 좋은 점에서 눈을 가리고 있는 것은 아닐까요? 글쎄요. 그럼, 기독교의 좋은 점은 다른 종교가 갖고 있는 좋은점 또는 좋은 행동과 어떻게 다릅니까? 기독교가 “가장 좋다”라고 말할 수 있는 특별한 차별화된 무언가가 있나요?

제 주변에는 교회를 다니는 독실한 크리스챤인 친구들이 아주 많아서 그 친구들과 교회 내부의 문제에 대해서 여러가지를 전해들을 수 있습니다. 그런데, 그런 얘기를 듣다보면 교회랑 국회랑 그닥 구별이 가질 않더군요.

마직막으로 한 가지만 말씀드립니다. 많은 사람들이 기독교인들은 맹목적인 믿음을 가지고 있다고 꺼려합니다. 그러나 사실 우리가 사는 이 세상은 ‘믿음’을 전제로 하고 있습니다. 님께서 엄마가 처려주시는 밥상을 의심치 않고 먹을 수 있는 이유는 “우리 엄마가 내 밥에 독을 넣지 않았을 것이다.”라는 믿음이 있기 때문이지요. 님께서 아무렇지않게 의사의 시퍼런 칼날에 수술을 맡길 수 있는 이유는, “의사가 저 칼로 나를 해하지 않을 것이다.”라는 믿음이 전제하기에 가능한 것입니다. 즉, 이 세상은 ‘믿음’을 바탕으로 움직이고 있다는 거지요. 그런데 유난히도 무신론자들은 특별히 기독교인들의 ‘믿음’을 매우 ‘야만적’이며 ‘비이성적인’ 깔보아 마땅한 행위로 치부해 버립니다. “신이 있는냐 없느냐”하는 문제에도 무신론자들은 흔히 “신이 있다면 증명해보라”라고 ‘관찰’과 ‘검증’의 잣대를 쉽게 들이댑니다. 그런데 보십시오. 그렇다면 거꾸로 그런 잣대를 본인들에게 들이대 보십시오. 무신론자들은 본인들이 요구한 것과 마찬가지로, “신이 없다는 것을 증명해 보십시오.”라는 질문을 스스로에게 던져야 할 것입니다. 그러나 그게 가능한가요? 불가능하지요. 신을 어떻게 찾습니까. 우주는 한없이 드넓은데 어떻게 샅샅이 뒤지실래요? 만약 “내 방에 압정이 없다”라는 사실을 증명하기 위해서는 제 방을 샅샅히 뒤져보고 난 후에야 확신할 수 있습니다. 신에 대한 증명에서도 마찬가지입니다. 신이 없다는 것을 확실히 증명하시려거든, 우주를 샅샅히 뒤져서 없다는 결론이 나오면 그 때 이야기하십시오. 그러나 위에 글에서도 밝혔지만, 우리의 3차원적인 세계를 초월하는 신에 대해 우리는 눈으로 볼수도 손으로 만질수도 없을 겁니다. 단지 이 우주 세계에 존재하는 그분의 ‘흔적’을 발견할 수 있을 뿐이죠.

제가 당부하고픈 마지막 부탁은 첫째, “기독교인에 대한 깔보는 태도”를 수정하시고요. 둘째, “신에 대한 검증의 잣대를 본인들에게도 적용” 하라는 것입니다. 제가 보았을 때 이 두가지 난점은 무신론자들이 지니고 있는 가장 큰 결점인 것 같군요.

저는 신이 존재함을 증명하라고 요구하지 않습니다. 있든 없든 신경쓰지 않을 따름이지요. 저는 그래서 신에게 욕도 잘 해줍니다. 칭찬도 해주지요.

다만, 그런식으로 증명할 수 없는 것들을 갖고서 “과학”이라고 부르는 사람들은 깔볼 수 밖에 없습니다.

그리고 자신이 믿는 종교가 좋다 하여 남에게 강요하는 사람을 깔볼 수밖에 없습니다. “나는 하나님 안에서 행복합니다. 당신도 이 행복에 동참하세요”라는 좋은 말로, 그들은 행복을 저에게 강요합니다. 행복하기를 강요하는 것은 저에게 지옥입니다. 그런 사람들을 저는 깔봅니다.

저는 그냥 지옥에 가겠습니다.

끝으로, 신에 대한 검증은 요구하지 않으므로 이러한 검증의 잣대를 저에게 들이댈 이유도 없겠죠.

Abundant number

Project Euler의 23번 문제

“2개의 Abundant Number의 합으로 표현할 수 없는 모든 양의 정수의 합을 구하여라”

(단, 28123보다 큰 정수는 모두 2개의 Abundant Number의 합으로 표현할 수 있다)

http://projecteuler.net/index.php?section=problems&id=23

#include

#define TRUE 1

#define FALSE 0

int isAbundantNumber(int);

int sumOfDivisors(int );

int main(void){

int i,j,n,sum;

int abun[6965];

for(i=1;i<28124;i++){
if(isAbundantNumber(i) == TRUE){

abun[j]=i;

j++;

}

}

for(i=1;i<28124;i++){
if(isRepresentable(i, abun)==TRUE){

n+=i;

}

}

n = (28123*28124/2)-n;

printf(“The answer is %d\n”, n);

return TRUE;

}

int isAbundantNumber(int a){

if(a return TRUE;

}

else{

return FALSE;

}

}

int isRepresentable(int a, int *b){

int i,j,sum;

for(i=0;i<6965;i++){
for(j=0;j<6965;j++){
sum=b[i]+b[j];

if(sum==a){

return TRUE;

}

}

}

return FALSE;

}

int sumOfDivisors(int a){

int i,n;

n=1;

for(i=2;i if(a%i==0){

n+=i;

}

}

return n;

}

이번에도 1분이 넘긴 했지만…-_-;

아무튼 풀었다.

잔머리 굴리다가 자꾸 틀려서, 그냥 Brutal Force 방식으로 때웠다.