Code Snippets/Boost2012. 2. 23. 11:50

C++0X를 사용 못할 상황이 생겼다.
lambda 사용을 제거해야 하는데 매번 functor class를 만들어 주는 것도 만만치 않다.
bind를 잘 사용하면 될 것 같아서 해 봤는데,
lambda 사용 버전과 미사용 버전은 그 편의성과 직관성에서 비교가 되지 않는 것 같다.
그래도, 간단한 lambda에 대해서는 fuctor class를 만드는 것보다는 나을 것 같아서 정리해 본다.

'Code Snippets > Boost' 카테고리의 다른 글

함수 호출 연기 & 함수 타입 캐스팅  (0) 2010.09.17
Nested Bind  (0) 2010.09.09
Generalized Function Pointers  (0) 2010.09.06
boost::bind 활용  (0) 2010.09.03
boost 관련 유용한 링크 모음  (0) 2010.08.20
Posted by codevania
Code Snippets/Clojure2010. 10. 14. 18:14
http://projecteuler.net/index.php?section=problems&id=8
http://www.ibm.com/developerworks/kr/library/os-eclipse-clojure/


Find the greatest product of five consecutive digits in the 1000-digit number.
>> 1000자리 숫자에서 5개의 연속된 곱중 최대값을 찾아라

Beforehand
필요한 기능들을 알아보자.
1. 1000자리 숫자를 표현하기 힘들다.
- 어차피 필요한 것은 연속된 5개의 숫자의 곱이다.
  1000자리 숫자는 문자열로 생각하고, 인덱스 윈도우를 바꿔가며 계산하자.
  즉, [0~4], [1~5], [2~6] ... [996~1000] 으로 가리키는 인덱스의 범위를 바꿔가겠단 말.
2. 필요한 함수는?
- 최대값 : max
- 제어문자가 아닌 숫자만을 선별 : filter, Character/isDigit
- 5개씩 구해진 숫자 시퀀스의 곱 : reduce
- 인덱스 윈도우를 하나씩 옮겨가며 5개씩의 시퀀스를 반환 : for


Make Simple
필요한 문법은 거의 다 알았다.
이제 문제를 간단히 생각해보자. 숫자 시퀀스가 1000개가 아니라 10개라고 생각해보자.

0123456789

여기서 얻을 수 있는 5개의 숫자 시퀀스는 다음과 같다.
01234  12345  23456  34567  45678  56789  67890

시퀀스의 곱의 최대값은?
  5 * 6 * 7 * 8 * 9 = 15120

시퀀스에서 5개씩 어떻게 뽑아올까?

이제 이 두 방법을 조합해서 문제를 풀어보자.


Resolve
문제에 제시된 1000개의 숫자를 문자열로 처리한다.
최대값을 구할 것인데, 5개의 연속된 숫자열의 곱에서 구한다.

'Code Snippets > Clojure' 카테고리의 다른 글

[Project Euler] Problem 2  (0) 2010.10.11
clojure용 Syntax HighLighting을 위한 js, css  (0) 2010.10.08
Clojure Sample - Sequence  (0) 2010.10.08
Clojure Sample - Function  (0) 2010.10.08
Clojure Sample - Basic  (0) 2010.10.07
Posted by codevania
Code Snippets/Clojure2010. 10. 11. 20:00

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

http://www.ibm.com/developerworks/kr/library/os-eclipse-clojure/

 

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

Find the sum of all the even-valued terms in the sequence which do not exceed four million.

>>피보나치 수열에서 400백만 이하의 모든 짝수들을 합한 결과는?


Beforehand

피보나치 수열의 equation은 다음과 같다.

F[n] = F[n-1] + F[n-2]

where F[0] = 0, F[1] = 1

수열을 나열해보면...

0 , 1,  1,  2,  3,  5,  8,  13,  21,  34,  55,  89, ...


피보나치 수열을 구하는 아주 간단한 방법.

 

하지만 재귀에 의한 이 방법은 무한 시퀀스를 형성하기 때문에, 스택을 빠르게 채워 스택 오버플로우를 일으킬 수 있다. 이 문제는 Seqable object를 산출하는 lazy-seq 함수를 사용하여 해결할 수 있다.

 

 

 

Make Simple

여기서 간단하게 100이하의 피보나치 수열에 대해서만 생각해 보자.

짝수들은?

 0,  1,  1,  2,  3,  5,  8,  13,  21,  34,  55,  89, ...

 

이 짝수들의 합은?

2 + 8 + 34 = 44

 

100을 처음으로 넘는 요소까지의 피보나치 수열을 정의하자.

 

 100 이하의 피보나치 수열은?

 

 그 중에서 짝수만 구하면?

 

이것들의 합은?

 

이제, 피보나치 수열을 지연시켜 구하는 함수를 fibo에 적용시키고, 100이 아닌 4000000을 적용하면 된다.

 

Resolve

 

'Code Snippets > Clojure' 카테고리의 다른 글

[Project Euler] Problem 8  (0) 2010.10.14
clojure용 Syntax HighLighting을 위한 js, css  (0) 2010.10.08
Clojure Sample - Sequence  (0) 2010.10.08
Clojure Sample - Function  (0) 2010.10.08
Clojure Sample - Basic  (0) 2010.10.07
Posted by codevania
Code Snippets/Clojure2010. 10. 8. 19:31
SyntaxHighlighter에 Clojure용 js가 아직은 없어서, 간단하게 만들었습니다.
License는 'Dual licensed under the MIT and GPL licenses'이니 코드 공개하면 배포 및 수정이 가능하다고 하네요.
(http://www.opensource.org/licenses/mit-license.php http://likedawn.tistory.com/9)

shBrushClojure.js
현재는 간단하게 주석과 키워드만 적용 되어 있습니다.
shTemeDefault.css
string의 색을 변경했습니다. blue -> 분홍(?)

'Code Snippets > Clojure' 카테고리의 다른 글

[Project Euler] Problem 8  (0) 2010.10.14
[Project Euler] Problem 2  (0) 2010.10.11
Clojure Sample - Sequence  (0) 2010.10.08
Clojure Sample - Function  (0) 2010.10.08
Clojure Sample - Basic  (0) 2010.10.07
Posted by codevania
Code Snippets/Clojure2010. 10. 8. 03:17

http://en.wikibooks.org/wiki/Clojure_Programming/Examples/API_Examples/Sequences

'Code Snippets > Clojure' 카테고리의 다른 글

[Project Euler] Problem 8  (0) 2010.10.14
[Project Euler] Problem 2  (0) 2010.10.11
clojure용 Syntax HighLighting을 위한 js, css  (0) 2010.10.08
Clojure Sample - Function  (0) 2010.10.08
Clojure Sample - Basic  (0) 2010.10.07
Posted by codevania
Code Snippets/Clojure2010. 10. 8. 02:27

http://en.wikibooks.org/wiki/Clojure_Programming/Examples/API_Examples/Function_Tools


'Code Snippets > Clojure' 카테고리의 다른 글

[Project Euler] Problem 8  (0) 2010.10.14
[Project Euler] Problem 2  (0) 2010.10.11
clojure용 Syntax HighLighting을 위한 js, css  (0) 2010.10.08
Clojure Sample - Sequence  (0) 2010.10.08
Clojure Sample - Basic  (0) 2010.10.07
Posted by codevania
Code Snippets/Clojure2010. 10. 7. 18:17
http://en.wikibooks.org/wiki/Clojure_Programming/Examples/API_Examples

'Code Snippets > Clojure' 카테고리의 다른 글

[Project Euler] Problem 8  (0) 2010.10.14
[Project Euler] Problem 2  (0) 2010.10.11
clojure용 Syntax HighLighting을 위한 js, css  (0) 2010.10.08
Clojure Sample - Sequence  (0) 2010.10.08
Clojure Sample - Function  (0) 2010.10.08
Posted by codevania
Code Snippets/Boost2010. 9. 17. 16:26
함수 호출을 늦추기 위해서는 함수자를 사용하면 된다.
대부분의 함수에서는 문제가 되지 않지만, 템플릿 함수 또는 오버로드된 함수일 경우 조금 난해한 상황이 있다.
특히 함수 타입 캐스팅의 경우는 인자 추론의 모호성 때문에 boost를 사용하기 힘든 경우가 있다.
또, 함수자 대신 shared_ptr을 사용하는 방법도 있다.



'Code Snippets > Boost' 카테고리의 다른 글

Nested bind for member function of member (-_-;)  (4) 2012.02.23
Nested Bind  (0) 2010.09.09
Generalized Function Pointers  (0) 2010.09.06
boost::bind 활용  (0) 2010.09.03
boost 관련 유용한 링크 모음  (0) 2010.08.20
Posted by codevania
Code Snippets/Boost2010. 9. 9. 16:20

boost::bind를 사용하면 많은 양의 중복 코드를 제거할 수 있다.
하지만 과유불급!!
좋다고 너무 남발하면 코드는 복잡해져서, 읽고 이해하고 유지보수 하기 어렵게 된다.
잘난척 남발하며 쓰다간 결국 동료들에게 대단히 민폐를 끼치는 것이 된다. (모든 사람이 boost를 사랑하진 않는다)
일단 이번에는 간단히 중첩 bind 사용에 대해서만 보이도록 하고,
다음에 지나치게 복잡해서 지양 해야할 bind 사용에 대해 알아보자.

Posted by codevania
Code Snippets/Boost2010. 9. 6. 12:17

Dr.Dobbs Article
> 학교 다닐 때 봤었던 아티클이지만 간단한 것만 쓰니 가물가물 하다.
   읽어 보면서 입맛에 맞춰 예제를 만들어 봤다.

'Code Snippets > Boost' 카테고리의 다른 글

함수 호출 연기 & 함수 타입 캐스팅  (0) 2010.09.17
Nested Bind  (0) 2010.09.09
boost::bind 활용  (0) 2010.09.03
boost 관련 유용한 링크 모음  (0) 2010.08.20
Boost Thread  (0) 2010.08.20
Posted by codevania