はじめてのTRICK
コード懇親会自慢大会
Theme 3: TRICK, Reline and IRB by tompng
2025/05/12 村上 由侑
自己紹介
村上由侑 / @yuporonM
株式会社メドレーに所属 / みかんが大好き
CLINICS電子カルテ開発
バックエンドはRubyです!
RubyKaigi参加は2回目
1回目は学生の頃、2023年松本開催に参加!
今回はスポンサー企業として参加できました!
コード懇親会は初参加
緊張していました。。。
作りたいものは跳ねるみかん
やりたいことリスト
  • みかんを表示したい
  • 色もつけたい
  • ぴょんぴょんはねさせたい
  • 葉っぱもつけたい
1. みかんを表示
ベタ書きで表示
mikan = <<~END ### ## ############ ## ## ## ## ## ## ## ## ## ## ## ## ############ END puts mikan
2. オレンジ色に
\e[38;5;nm でnにカラーコードを指定することで出力色を指定
mikan = <<~END ### ## ############ ## ## ## ## ## ## ## ## ## ## ## ## ############ END puts "\e[38;5;208m" puts mikan
4. 跳ねさせる
デモ ruby demo1.rb
\e[#{y};10H で上からy,左から10移動
\e[2J で画面全体を消去
# 1000.times do |i| # puts "\e[2J" # y = 50 + (Math.sin(i * 0.5) * 5).to_i # puts "\e[#{y};10H" # puts mikan # sleep 0.1 # end
5. TRICKっぽく

Findy Tech Blog

RubyKaigi 2024をきっかけにQuineに入門してみた - Findy Tech Blog

ハイサイ、ファインディでTeam+を開発しているEND(@aiandrox)です。 RubyKaigi 2024最高でしたね!!私は2度目の参加でしたが、去年よりもみんなが笑っているところで笑えるようになり、各種イベントなどでいろんな方と話すことができたのでさらに楽しめました。 今回特に印象に残ったのは初日のKeyno…

eval$s=%w'b="BAhsK1cAAAAAABwAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAD8PwAAAAAAAAAAAAAAAABgABgAAAAAAAAAAAAAAAAABgAMAAAAAAAAAAAAAAAAwACAAQAAAAAAAAAAAAAAABgAMAAAAAAAAAAAAAAAAAADAAYAAAAAAAAAAAAAAADAADAAAAAAAAAAAAAAAAAA4P8BAA==";n=Marshal.load(b.unpack("m")[0]);e="eval$s=%w"<<39<<($s*3);o="";j=-1;0.upto(11*125-1){|i|; o<<((n[i]==1)?e[j+=1]:32); o<<((i%125==(124))?10:"");};o[-85,6]=""<<39<<".join";puts("");1000.times{|i|; puts(""); pos_y=50+(Math.sin(i*0.5)*5).to_i; puts("[#{pos_y};10H"); puts(o); sleep(0.1);}#'.join
5. ちょっとリアルに

DotArt

dotart

"Web上で簡単にドット絵を描けるサービスです\n描いた絵を保存して、他の人にも共有できます!"

6. 012で表現
生成AIを使って、画像から0,1,2に変換するスクリプトを作成して実行
0: スペース
1: オレンジ色
2: 緑色
7. 葉っぱは緑色に
サンプルMap = [ [0, 2, 0], [1, 1, 2], [1, 1, 0], [0, 2, 0] ] マス番号を振る: [(0), (1), (2), (3), (4), (5), (6), (7), (8), (9),(10),(11)] 葉っぱの位置Map = [1, 5, 10] 色付き文字Map = [ [0, 1, 0], [1, 1, 1], [1, 1, 0], [0, 1, 0] ]
# 現在の位置が葉の部分かどうかで色を決定 (34:緑, 208:オレンジ) color_code = (leaf_positions.include?(i) ? 34 : 208); # ビットが1なら色付き文字、0ならスペース(32)を追加 o << (bit_map[i] == 1 ? (m + \"[38;5;\" + color_code.to_s + \"m\" + e[j += 1] + m + \"[0m\") : 32);
↓これが生成できる
[] [🟢] []
[🟠] [🟠] [🟢]
[🟠] [🟠] []
[] [🟢] []
8. 完成!
デモ ruby demo2.rb
キャプチャ
(長くなった)
eval$s=%w'c=eval("[324..335, 〜〜省略〜〜, 6514..6515]").flat_map(&:to_a);n=Marshal.load("BAhbAkA1aQ〜〜省略〜〜BpAGkAaQBQBpAGkAaQBpAGkA".unpack("m")[0]);l=39.chr;m=27.chr;e="eval$s=%w"+l+($s*2);o="";j=-1;0.upto(n.size-1){|i|t=(c.include?(i)?34:208);o<<(n[i]==1?(m+"[38;5;"+t.to_s+"m"+e[j+=1]+m+"[0m"):32);o<<(i%192==191?10:"")};o[-85,6]=l+".join";1000.times{|k|puts(m+"[2J");pos_y=10+(Math.sin(k*0.5)*5).to_i;puts(m+"["+pos_y.to_s+";10H");puts(o);sleep(0.1)}#'.join
まとめ
コード懇親会楽しかった
知らないことばかりで楽しかった!
第6回TRICKへ挑戦したい
もっと良いものを作って挑戦したい!
次回への期待
また参加したいです!
他テーマも面白そうだった!
参考リンク
サンプルコード:https://t.co/e4xp3RhrD5
Made with