루비, 150 자
a=(0..15).map{|i|[0.9-3*i*=0.02,i]}
[9,*a[0,11],*(z=a.reverse)[5,11],11,*z,*a,2,11,6,*[0.2]*9].map{|x,y|c=Time.now
1until Time.now-c>x/3
sleep y||x%3}
이것은 지금까지 그렇게 짧지는 않지만 내 의견으로는 출력이 다소 좋기 때문에 어쨌든 게시 할 것이라고 생각했습니다. 대부분의 다른 솔루션과 마찬가지로 Ruby 프로세스를 접두사로 특정 코어에 고정해야 할 수도 있습니다 taskset -c $core
.
코드는 특정 시간에 대한 자 / 회전의 간단한 조합 한다 그것은 다소 휴대용 만든다. 회전 / 수면 시간의 비율을 변경하여 부드러운 그라데이션을 만듭니다.
CPU 샘플링 주파수를 낮추면 가장자리가 조금 더 좋아 보입니다.
알파벳에 글자를 몇 개 더 추가하면 ( AILMNUVW
약간 알아볼 수 있음) 다른 단어도 쓸 수 있습니다.
이 그림은 다음 코드로 생성되었습니다.
def gradient num_samples, direction, base = 0.3, increment = 0.02, scale = 1
range = [*0..num_samples]
samples = case direction
when :up then range.reverse
when :down then range
when :updown then range.reverse + range
when :downup then range + range.reverse
end
samples.map{|i|
i *= increment
[base - scale * i, i]
}
end
# letters are defined as a series of pairs of (spin-time, sleep-time)
# with the time in seconds
THIN_A = gradient(15, :updown, 0.2, 0.2/15)
A = gradient(15, :updown)
I = 2,0
L = 1.5,0, [[0.1,0.2]]*9
M = 2,0, gradient(9, :downup), 2,0
N = 1,0, gradient(9, :down), 2,0
U = 1,0, gradient(9, :downup, 0.1, 0.03, 0.1), 1,0
V = 0.5,0, gradient(12, :downup, 0.25, 0.02), 0.5,0
W = 0.5,0, [gradient(12, :downup, 0.25, 0.02)]*2, 0.5,0
[A,I,L,M,N,U,V,W].map{|i|
# add 2 second pause after each letter
i + [0,2]
}.flatten.each_slice(2){|x,y|
# spin, then sleep
c = Time.now
1 until Time.now-c > x
sleep y
}
구현 된 글자로 쓸 수있는 단어는
grep -E '^[aijlmnuvw]+$' /usr/share/dict/words