로제타 코드
스칼라 공부하면서 찾은 좋은 사이트다.
처음엔 그냥 스칼라에서 뭐뭐하는 법 이런식으로 검색했다.
방금 전엔 스칼라로 약수 개수 확인하는 방법을 검색했다. (물론 머리속으로 해결책을 적긴했는 데 너무 스칼라스럽지 않아서 검색했는데 검색하길 잘했다. 아직 Functional Programming에 미숙하다 보니 자꾸 기존의 Procedural 혹은 Object-Oriented Programming으로 사고한다.)
그러다 찾았는데 내가 검색한 문제처럼 뭐뭐하는 법을 굉장히 다양한 프로그래밍 언어로 구현이 되어 있다.
오픈 위키같은 형태라 여럼 사람들이 contribute하는 거 같다.
-
약수 개수 문제의 경우 78개의 언어로 작성 되어 있다. (어샘블리 언어는 물론 매트랩도 있다 ㅋㅋㅋ)
- 심지어 각 언어별로 구현 방법이 다양하면 각 방법별 특징을 설명해주면서 해결책이 나온다.
- 파이썬은 4가지 해결책이 있다. ㅋㅋㅋ (방금 쭉 읽었는데 좀 과하게 적었는데? Test케이스 다른 언어엔 없는 데 왜 있는 거야 ㅋㅋ)
나처럼 익숙해진 언어를 벗어나서 여러개의 다른 언어를 공부하거나 갈아타려는 사람들에게 좋은 거 같다.
스칼라 말고 고랭도 같이 공부하려 하는 데 스칼라 solution과 함께 고랭 solution 하나 첨부한다.
def properDivisors(n: Int) = (1 to n/2).filter(i => n % i == 0).length
package main
func countProperDivisors(n int) int {
if n < 2 {
return 0
}
count := 0
for i := 1; i <= n/2; i++ {
if n%i == 0 {
count++
}
}
return count
}
conclusion
Functional이 수학적으로 사고하는 데에만 익숙해지고 문제상황이 수학적인 해결책이 더 간단하면 이게 더 깔끔하고 보기도 좋고 사이드 이펙트도 확실히 없어 보인다.
( 그래서 안그래도 파이썬에서 람다식 자주 사용하는 데 스칼라 익숙해지면 스칼라로 이주할 수 있는 건 이주 해봐야겠다. :) )