作成日:
本記事は、クックパッド春の超絶技巧パンまつり〜スプリングインターンシップ 2022〜の参加レポートです。インターンシップは、3/18、4/24 日に開催されたのですが、3/18 日の方に参加しました。
1 日のスケジュールは下記の通りです。本来なら、オフラインでパン作りが体験できる予定だったのですが、コロナウイルスの影響でオンラインで開催され、パン作りもできませんでした。なので、オンラインでクックパッド CTO の成田さんのパン作りが中継されるという形でした。
13:00 集合&注意事項説明
13:15 超絶技巧プログラミングの講義
14:00 超絶技巧プログラミングの発表作品の作成
17:00 作品の発表
18:00 Q&A
18:30 終了
超絶技巧プログラミングの講義では、「あなたの知らない超絶技巧プログラミングの世界」の著者である遠藤さんにどのような超絶技巧プログラムがあるのかの紹介や、作成方法などを教えていただきました。14:00 からは、講義や本を参考にしながら、実際に自分で超絶技巧プログラムを作成します。そして、17:00 から作成したプログラムを発表します。発表では、悪い箇所を指摘されるのではなく、良い箇所をとことん褒めていただけるという感じです。
結論から言うと、とても楽しかったです。初めて超絶技巧プログラミングというものをしたのですが、とても奥が深く、実装できたらとても達成感がありました。また、初めて ruby を触るということで、心配だったのですが基本的な構文だけで作成できたので安心しました。 インターンといっても、本気でプログラムを書くと言うより、楽しくプログラムを書くと言う感じなので、気楽に参加できました。 心残りなのは、オンラインでの開催だったことと、実際にパン作りができなかったことです。ただ、オンラインでもとても楽しいインターンシップでした。自分も手作りのパンを作ってみようと思いました。
私が発表のために作成したプログラムを紹介します。
私は、アスキーアートでデジタル時計を作成しました。
リアルタイムで時間が更新されます。
get-num
def convertSharpToNum(asciiart,input_num) num = asciiart.scan('#').length num_string = "" loop{ if num ==0 then break end num_string +="#{input_num}" num-=1 } convertedAsciiart = asciiart.gsub("#"){num_string.slice!(0,1)} return convertedAsciiart end def getZero asciiart = <<END ####### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ####### END return convertSharpToNum(asciiart,0); end def getOne asciiart = <<END #### ## ## ## ## ## ## ## ## ## ## ## ############# END return convertSharpToNum(asciiart,1); end def getTwo asciiart = <<END ##### ## ## ## ## ## ## ## ## ## ## ## ############### END return convertSharpToNum(asciiart,2); end def getThree asciiart = <<END #### ## ## ## ### ##### ######## ##### ### ## ## ## #### END return convertSharpToNum(asciiart,3); end def getFour asciiart = <<END ## ## ## ## ## ## ## ## ## ## ## ## ################# ## ## ## ## END return convertSharpToNum(asciiart,4); end def getFive asciiart = <<END ############## ## ## ## ########### ## ## ## ## ## ## ## ####### END return convertSharpToNum(asciiart,5); end def getSix asciiart = <<END ####### ## ## ## ## ## ## ############# ## ## ## ## ## ## ## ## ######### END return convertSharpToNum(asciiart,6); end def getSeven asciiart = <<END ############## ## ## ## ## ## ## ## ## ## ## ## ## END return convertSharpToNum(asciiart,7); end def getEight asciiart = <<END ####### ## ## ## ## ## ## ## ## ####### ## ## ## ## ## ## ## ## ####### END return convertSharpToNum(asciiart,8); end def getNine asciiart = <<END ####### ## ## ## ## ## ## ## ## ####### ## ## ## ## ## END return convertSharpToNum(asciiart,9); end def getNum(input_num) case input_num when 0 then return getZero when 1 then return getOne when 2 then return getTwo when 3 then return getThree when 4 then return getFour when 5 then return getFive when 6 then return getSix when 7 then return getSeven when 8 then return getEight when 9 then return getNine end end
get-num.rb ではデジタル時計で利用する数字のアスキーアートの作成と、そのアスキーアートを取得するための関数を書いています。
clock.rb
require './get-num.rb' require "date" def sliceNum(num) tens_place = (num/10) %10 ones_place = (num/1) %10 return tens_place,ones_place end print "\x1b[2J" loop{ nowTime = DateTime.now hour_tens_place,hour_ones_place = sliceNum(nowTime.hour) minute_tens_place,minute_ones_place = sliceNum(nowTime.minute) seconde_tens_place,second_ones_place = sliceNum(nowTime.second) hour_tens_place_str = getNum(hour_tens_place).split(/\R/) hour_ones_place_str = getNum(hour_ones_place).split(/\R/) minute_tens_place_str = getNum(minute_tens_place).split(/\R/) minute_ones_place_str = getNum(minute_ones_place).split(/\R/) seconde_tens_place_str = getNum(seconde_tens_place).split(/\R/) second_ones_place_str = getNum(second_ones_place).split(/\R/) print "\x1b[1;1H" i = 0 loop{ if i > 11 then break end if i==3||i==4||i==7||i==8 then str ="#{hour_tens_place_str[i]}#{hour_ones_place_str[i]}時時 #{minute_tens_place_str[i]}#{minute_ones_place_str[i]}分分 #{seconde_tens_place_str[i]}#{second_ones_place_str[i]}" else str ="#{hour_tens_place_str[i]}#{hour_ones_place_str[i]} #{minute_tens_place_str[i]}#{minute_ones_place_str[i]} #{seconde_tens_place_str[i]}#{second_ones_place_str[i]}" end puts str i+=1 } }
clock.rb では、時刻を取得し、アスキーアートの表示を行なっています。
1 つ目の loop では無限ループを使い、最新の時間を取得しています。そして、時間によって取得するアスキーアートの数字を変えています。2 つ目の loop では、取得したアスキーアートの数字を横並びで表示させるために文字列を操作して、表示させています。i=3,4,7,8 ではデジタル時計の":"の部分を表示させるために条件を書き分けています。
$ ruby clock.rb
By kiyo