table_print gem

https://github.com/arches/table_print/

table_print 라는 젬을 보았는데, 데이터를 표로 알아서 이쁘게 잘 뿌려주는 것 같다. 시즌 2에서 printf와 format string 으로 이리저리 출력했던 걸 좀더 단순화할 수 있을 것 같아서 테스트 해봄.

이걸로 설치하고

gem install table_print

이걸로 불러들이고

require 'table_print'

멀티바이트 문자를 사용하기 때문에 아래와 같이 설정하고

tp.set :multibyte, true

기존 로직에서 printf 하던 부분을 해쉬로 만들어서 배열에 추가하는 방식으로 코드 변경

-  printf "#{n}\t%12s\t%12s\t%12s\t#{msg}\n" , fixed_sum, fib_original_sum, fib_filtered_sum

+  all << { absent: n, acc_fixed:  fixed_sum, acc_fibo: fib_original_sum, acc_fibo_filtered: fib_filtered_sum, zone: msg}

그리고 배열을 넘기면

tp all

아래와 같이 콘솔에 표로 출력해줌.

$ ruby find_profit_day_fibo_only_with_tp.rb
ABSENT | ACC_FIXED | ACC_FIBO  | ACC_FIBO_FILTERED | ZONE
-------|-----------|-----------|-------------------|-------
1      | 1000      | 100       | 100               | 개이득
2      | 2000      | 200       | 200               | 개이득
3      | 3000      | 400       | 400               | 개이득
4      | 4000      | 700       | 700               | 개이득
5      | 5000      | 1200      | 1200              | 개이득
6      | 6000      | 2000      | 2000              | 개이득
7      | 7000      | 3300      | 3300              | 개이득
8      | 8000      | 5400      | 5400              | 개이득
9      | 9000      | 8800      | 8800              | 개이득
10     | 10000     | 14300     | 14300             | 노이득
11     | 11000     | 23200     | 23200             | 노이득
12     | 12000     | 37600     | 37600             | 노이득
13     | 13000     | 60900     | 50000             | 노이득
14     | 14000     | 98600     | 50000             | 노이득
15     | 15000     | 159600    | 50000             | 노이득
16     | 16000     | 258300    | 50000             | 노이득
17     | 17000     | 418000    | 50000             | 노이득
18     | 18000     | 676400    | 50000             | 노이득
19     | 19000     | 1094500   | 50000             | 노이득
20     | 20000     | 1771000   | 50000             | 노이득
21     | 21000     | 2865600   | 50000             | 노이득
22     | 22000     | 4636700   | 50000             | 노이득
23     | 23000     | 7502400   | 50000             | 노이득
24     | 24000     | 12139200  | 50000             | 노이득
25     | 25000     | 19641700  | 50000             | 노이득
26     | 26000     | 31781000  | 50000             | 노이득
27     | 27000     | 51422800  | 50000             | 노이득
28     | 28000     | 83203900  | 50000             | 노이득
29     | 29000     | 134626800 | 50000             | 노이득
30     | 30000     | 217830800 | 50000             | 노이득
31     | 31000     | 352457700 | 50000             | 노이득

전체 소스는 find_profit_day_fibo_only_with_tp.rb 참고.

csv 나 html 으로도 출력할 수 있는 설정을 제공하는 것 같다. 다만 html 은 table 태그가 아니라 위와 같은 텍스트를 pre 태그로 감싸서 표 모양으로 볼 수만 있게 해주는 정도인듯.