원본
http://slothchord.tistory.com/352
쪼금 고쳐봤습니다.
Output:
늅늅
http://slothchord.tistory.com/352
쪼금 고쳐봤습니다.
# Ruby 1.86에서테스트
# 32비트 머신에서만 동작함
# Ruby의 Array 클래스가 제공하는 each, each_index, map, 그런거따위없다
# 먹고사는데(?) 꼭 필요한 것만 메세지로 제공하는데, 그 이유는 할줄 모르기 때문에서다.
class BitArray
private
SHIFTS = 0x05
MASK = 0x01f
def initialize(n)
@n = n
@tab_len = ((@n + 1) / 32) + 1
@tab = Array.new(@tab_len, 0x00)
end
def at(i)
return ((@tab[i >> SHIFTS] & (0x01 << (i & MASK))) != 0) ? 1 : 0
end
def set(i)
@tab[i >> SHIFTS] |= (0x01 << (i & MASK))
end
def clr(i)
@tab[i >> SHIFTS] &= ~(0x01 << (i & MASK))
end
public
attr_reader :n, :tab_len
def []=(i, b)
set(i) if (b == 1)
clr(i) if (b == 0)
end
def [](i)
return at(i)
end
def on?(i)
return (at(i) == 1)
end
# 여기서부터 DMW의 코드
# Enumerable을 사용하려면 each 메쏘드를 구현해야 한다.
# 그리구 컬랙션에 들어있는 것들이 의미있는 <=>메소드를 제공해야 된다
# each는 구현하면 되구 <=>는 문제업ㅂ어 보인다.
include Enumerable
def each
@n.times do |i|
yield at(i)
end
end
end
t = BitArray.new(4)
t[0] = 1
t[1] = 0
t[2] = 1
t[3] = 0
t.each { |i| puts i}
puts "Ahehheh"
a = t.map { |i| i = 0 }
a.each { |i| puts i }
|
Output:
1
0
1
0
Ahehheh
0
0
0
0
|
늅늅
'루비' 카테고리의 다른 글
| Queue (6) | 2009/09/22 |
|---|---|
| tmpdir (0) | 2009/06/20 |
| BitArray from sloth (3) | 2009/03/17 |
| ruby 숫자에 세자리마다 쉼표를 집어넣기 (0) | 2008/11/05 |
| 팩토리얼 (4) | 2008/10/09 |
| Ruby/SDL - 최근 근황 (1) | 2008/09/30 |


댓글을 달아 주세요
해놓고 보니까 sloth흉이랑 나랑 스탈이 좀 틀린거 같다.
난 public을 위에 쓰는데...늘보흉은 private를 위에 쓰네;;
initialize(n) 이 프라이빗으로 들어가네요?
오오 모르는거다 늅늅.
우오오 이제 BitArray도 each를 갔게 됐다는.... 업데이트해야지 캄사 늅늅