꽤 여러달전 Ruby를 취미생활용 도구로 써봐야겠다.. 라는 생각을 하구 글을 쓰기도했는데.....
게을러놔서 그렇게 열심히 Ruby질(?) 을즐긴것 같지는않다,,;;
Ruby동네의 idiom같은건 전혀 모르구..

 
어쨌든 지금까지 느낀점을보자면

전체적인 태도가마음에든다.

OOP의 요소가 필요하면 가져다 쓰는것도 편하게 해놨지만, OOP를 하라구 강요하지는않는다.
FP의 요소가 필요하면 가져다 쓰는것도 편하게 해놨지만, FP를 하라구 강요하지는않는다.


물론, 훌륭한 패러다임하에서 코드를 짜는것도 좋지만 강요당하면 좀 피곤하긴하다.
그런 점에서보면 Ruby는 꽤 '니 마음대로 하세요'라는 태도다.

음.. 쓰다보니 c++ 도 비슷한 스탠스를보인다 말해야하나....

하지만, c++이랑 Ruby의 다른점은 c++은 OOP의 요소를 가져다쓰기도, FP의 요소를 가져다 쓰기도 힘들다는게 있겠다,,

또, 퍼포먼스도 꽤 다르구나..

c++이 나쁘다는게 아니구 그냥 c++은 부담감(?)을 가지게 만드는 언어였는데 갈수록 더 그쪽방향으로 가는것같다.
같은 혈통을 가졌지만은 덩치가커지는것에대해서 강박적일 정도로 거부감을 보여온 c와는 반대되는 방향으로 계속 진행해왔구, 앞으로도 쭉 그럴듯..

각설하자면..
내가 쓰는 Ruby는

1. 읽기도 쓰기두편한, 그러나 느린 C
2. 좀 더 읽기 편한, 그러나 약간 느린(?) perl
3. 좀 더 바람끼가 있는, 그러나 살짝 느린(?) python
4. 나는 가능한안에서는 c++ 을 가지구 코드를 안짜려구 마음먹은지 좀 됐다.
 
정도의느낌으로 쓰구있는것 같으다..

  
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by sloth_chord
TAG ruby
# Ruby 1.8에서테스트

# 유명해진지 조금 된 셀프넘버 문제

# 1 이상이고 5000 보다 작은 모든 셀프 넘버들의 합을 구하라


def
d(n)

  ret = n

  while n > 0
    ret += (n % 10)
    n /= 10
  end

  return ret

end

# i가 어떤수의 generator인가를 계산을해가지구
# i가 generate를 하는 수인 generated는 self number가 아님
# 범위안에 있는수면은 tab에 false 넣음
# i < bound까지  d에 호출하면 되는 이유는
# generated 보다 큰 generator는 없기 때문

def sum_of_self_number(bound)

  tab = Array.new(bound, true)

  bound.times do |i|
    generated = d(i)
    (tab[generated] = false) if (generated < bound)
  end

  sum = 0
  bound.times do |i| ((sum += i) if tab[i]) end

  return sum

end

require 'test/unit'

class TestSumOfSelfNum < Test::Unit::TestCase

  def test_method
    assert_equal(1227365, sum_of_self_number(5000))
  end

end
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by sloth_chord
TAG program, ruby
자기 자신을출력하는 프로그램이라는 재미있는 오래된주제인 quine...

참 많은 언어들로 구현이있지만은
아래 세가지 언어로된구현이 그 중 가장 마음에든다

그 중 가장맘에드는것은 뭐 역시 그 Scheme 버전이다^^;;;;;;;;;;;;;;





Python :

a = ['print "a =", a', 'for s in a: print s']
print "a =", a
for s in a: print s

Ruby :

def x(s); puts %Q{#{s} x(%q{#{s}})}; end; x(%q{def x(s); puts %Q{#{s} x(%q{#{s}})}; end;})

Scheme :

((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x))))
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by sloth_chord
TAG program, quine
; plt scheme 의 개발환경 DrScheme에서 language를 standard(R5RS)로 맞춘후 테스트
; 정수 1에서 n 까지 숫자를 f(n)에 n이하의 수에1이 들어가는 갯수를 k라 할때, f(n)=k
;  f(13)=6 => 1,10,11,12,13 (총 1이 6개)

; n = k 이 되는 최초의 n은 1일때가 된다. 두번째로 n=k가 되는 n을 구하라


(define (num-of-one n)
  (define (next n) (truncate (/ n 10)))

  (let loop ((n n) (cnt 0))
    (if (<= n 0) cnt
        (if (= 1 (remainder n 10)) (loop (next n) (+ cnt 1))
            (loop (next n) cnt)))))

; 규칙을 생각하면 f(n)의 값은 (f(n - 1) + (n에 있는 1의 개수))  의 값이다
; 그러니까 무조건 1부터 계속 중복 계산을 할 필요 없이
; 그 앞항의 값을 계산해놓구 더해가면 된다

(define (solve)
  (define (calcul-k i k) (+ k (num-of-one i)))

  (define (found-cnt i k cnt)
    (if (= i k) (+ cnt 1)
        cnt))

  (let loop ((i 1) (k 0) (cnt 0))
   (if (> i 200000) -1
       (let* ((k (calcul-k i k)) (cnt (found-cnt i k cnt)))
         (if (= 2 cnt) i
             (loop (+ i 1) k cnt))))))

(define (test)
  (if (= 199981 (solve)) 'ok
      'failed))

(test)
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by sloth_chord

달콤한..

beat&chord 2008/07/03 02:37
http://kr.youtube.com/watch?v=LaJD_of1Ug4

Gap Band의 yearning for your love다.

gap band 형님들도 chart와 street에서 모두 사랑을 받은 real artist라 할수있겠다.
yearning for your love는 건반루프와 멜로디가 인상적인 slow jam이다.

이분들도 착 감기는 꽂히는멜로디와 그루비한 리듬을 모두 보여주시는 분들.

You dropped bomb on me, party train, early in the morning, outstanding 등도 funk/soul을 사랑하는 사람들이라면은 꼭 들어야 하는음악들이다.



크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by sloth_chord