#第22回[Telephone keypad]#
[問題]
携帯電話のダイヤルボタンのアルファベット入力に従い、
英文を、実際に入力するダイヤルボタンの数字列になおす
2 = ABC
3 = DEF
4 = GHI
5 = JKL
6 = MNO
7 = PQRS
8 = TUV
9 = WXYZ
例)
X は「9」を2回押す
Pは「7」を1回押す
以下の4つの入力例に対し、正しい出力ができれば正解とする
[入力 |例1]
C
[出力 |例1]
222
[入力 |例2]
GOLFZUKI
[出力 |例2]
466655533399998855444
[入力 |例3]
SHORTCODER
[出力 |例3]
7777446667778222666333777
[入力 |例4]
LOREMIPSUMDOLORSITAMETCONSECTETUERADIPISCINGELIT
[出力 |例4]
555666777336444777778863666555666777777744482633822266666777733222833888337772344474447777222444664335554448
[期間]
3/ 5(土)22:00 ~ 3/19(土)21:59
[hr]
=結果=
投稿数7件(3人)
1位 (72B)
pes さん
t;main(s){for(;t--<3.16*s?t=getchar()%61,s=t*.318-t/29:putchar(49+s););}
2位 (103B)
五反田 さん
c;main(){(c&&(putchar((c-65-c/83)/3+50-c/90),(--c-c/83-!!(c^82&&c^89)-c/90)%3)?:read(0,&c,1))&&main();}
*1位1番乗り
pes さん
[hr]
Code Golf に興味が出てきたら、コミュニティ「Code Golf を楽しもう」まで!
初心者歓迎、参戦&観戦いつでもお待ちしています!
http://dixq.net/forum/viewforum.php?f=52
五反田さんからの出題、第23回の投稿受付中です。
Twitter で、中間報告や結果報告・出題の更新をお知らせします。 @Reputeless
[hr]
第22回 mixC++ Code Golf 結果報告
Re: 第22回 mixC++ Code Golf 結果報告
相変わらずpesさんに勝てないですね。
というか次元が違う感じで、どうやってその計算式までたどり着いたんだろうかと不思議なくらいです。
提出者数が若干心配ですが、来週は自分の出題なのでよければ参加してください。
というか次元が違う感じで、どうやってその計算式までたどり着いたんだろうかと不思議なくらいです。
提出者数が若干心配ですが、来週は自分の出題なのでよければ参加してください。
- あーる@Reputeless
- 記事: 84
- 登録日時: 15年前
- 住所: 千葉
Re: 第22回 mixC++ Code Golf 結果報告
> 五反田 さん
僕もこのコードには???です。
参加者数、出題企画の前後はなぜか盛り上がらない傾向があるんですよね(笑)
みんな投稿どしどしどうぞ!
僕もこのコードには???です。
参加者数、出題企画の前後はなぜか盛り上がらない傾向があるんですよね(笑)
みんな投稿どしどしどうぞ!
Re: 第22回 mixC++ Code Golf 結果報告
題材から、1次式+αくらいでいけるだろうと踏んでExcelで試行錯誤してたら、こんなのになりましたw
謎が多いとのことなので、書いたコードを読めるうちに内容について少々…。
tは(文字コード-61)で、mod計算により入力の終わりではt=-1になるようにしています。
s=.318*t-t/29が(押すボタンの番号-1)で、'z'だけ特別な処理(-t/29のとこ)を入れる事で1次式表現にしました。
また、この式はt=-1のときs=0になるので、終了判定にも使えます。
で、文字の出力はceil(t-3.16*s)回行います。
3.16*sは、丸めると(sに対応する最小の文字の番号-1)に対応します。
式の導出は、Excelに入力値と目標出力値を書いておき、1次関数のパラメータを変えながら条件に合うものを探しました。
浮動小数の切り捨てを使えば部分的に増分が異なる箇所も表現できるので、今回はそれを利用しました。
また、axの形式で表せればax+bより短縮できるので、オフセットを検討した結果としてすべてaxの形にできました。
ここまでまとまったのは、偶然という感が否めないですが…。
長々と失礼しましたm(_ _)m
疑問等あればお答えします。
謎が多いとのことなので、書いたコードを読めるうちに内容について少々…。
tは(文字コード-61)で、mod計算により入力の終わりではt=-1になるようにしています。
s=.318*t-t/29が(押すボタンの番号-1)で、'z'だけ特別な処理(-t/29のとこ)を入れる事で1次式表現にしました。
また、この式はt=-1のときs=0になるので、終了判定にも使えます。
で、文字の出力はceil(t-3.16*s)回行います。
3.16*sは、丸めると(sに対応する最小の文字の番号-1)に対応します。
式の導出は、Excelに入力値と目標出力値を書いておき、1次関数のパラメータを変えながら条件に合うものを探しました。
浮動小数の切り捨てを使えば部分的に増分が異なる箇所も表現できるので、今回はそれを利用しました。
また、axの形式で表せればax+bより短縮できるので、オフセットを検討した結果としてすべてaxの形にできました。
ここまでまとまったのは、偶然という感が否めないですが…。
長々と失礼しましたm(_ _)m
疑問等あればお答えします。
- あーる@Reputeless
- 記事: 84
- 登録日時: 15年前
- 住所: 千葉
Re: 第22回 mixC++ Code Golf 結果報告
> pes さん
Oh... 。+゚(*´∀`*)。+゚
僕も適当な式を探すためのプログラムを書くことがありますが、今回ここまで短くなったとは...
そういえば、Golfコミュ初となる4連続1位が達成されちゃいました /(^o^)\
Oh... 。+゚(*´∀`*)。+゚
僕も適当な式を探すためのプログラムを書くことがありますが、今回ここまで短くなったとは...
そういえば、Golfコミュ初となる4連続1位が達成されちゃいました /(^o^)\