Codeへの愛とCuriosity

CodeIQ への出題・解説解題・その周辺について、思いつくままに。

過去問の振り返り #76〜#81

76.展開図上の反対側

問題と解説が
プログラム解説:CodeIQ「展開図上の反対側」
にある。

上記リンク先の実装は展開図を全部持つという作戦だけど、もちろんそうでない作戦でも書ける。

77.魔法使いの梯子(はしご)

問題と解説が
プログラム解説:CodeIQ「魔法使いの梯子(はしご)」
にある。

これは yhpg に出した マス目を歩く 2017.10.25 問題 をちょっと難しくした問題だけど、もとがとても簡単なので別に難しくはない。

78.回文に分ける

問題と解説が
プログラム解説:CodeIQ「回文に分ける」
にある。

再帰とかに抵抗がなければ簡単な問題だと思う。

79.割り算

問題と解説が
プログラム解説:CodeIQ「割り算」
にある。

有理数が使えないとやや面倒な問題。
rubypython なら楽。

80.迷路

問題と解説が
プログラム解説:CodeIQ「迷路」
にある。

解説に

考える必要があるのはマップをどう表現するかです。

とあるとおり、迷路をソースコード上にどう表現するのかを楽しむ問題。

81.ぐるぐる曼荼羅

結果的に最終問題になったのがこれ。

問題と解説が
プログラム解説:CodeIQ「ぐるぐる曼荼羅」
にある。

気に入っている問題。たぶん私らしいし、図も美しい(自画自賛)。
この問題を最後にできてよかったと思う。

上記のリンク先では、 OEIS を使って規則性を推測するという試みをしていて面白いと思った。

というわけで

というわけで、振り返りは終わり。

依然としてこのブログのコメント欄や Twitter @Nabetani にメンションいただければ解説解題を書こうと思っている。
要望ある?

過去問の振り返り #70〜#75

CodeIQ に出した過去問の振り返りもそろそろ終わりに近づいてきた。
今回は中途半端に 70〜75。

70.正二十面体の隣の面

問題と解説が
プログラム解説:CodeIQ「正二十面体の隣の面」
にある。

展開図の番号の並びをプログラム上でどう持つかを悩む問題。
それ以外に悩みはあまりないので、簡単だと思う。

71.マス目を回す

問題と解説が
プログラム解説:CodeIQ「マス目を回す」
にある。
上記サイトに

コツコツやればできるタイプの問題です。

とあるとおり、やればなんとかなる問題。
yhpg に出していた めぐるセル 横へな 2014.9.6 問題 をアレンジしたもの。

72.単調増加連数

問題と解説が
プログラム解説:CodeIQ「単調増加連数」
にある。
これは
yhpg に出していた 非三連数 2017.8.5 をアレンジしたもの。
もとの問題よりもだいぶ難しくなったと思う。
問題を考えた時点では解けるかどうか怪しいなと思っていたんだけど、ひと画面ぐらいのソースでなんとかなる感じになったので出題した。

73.回文数の中央値

問題と解説が
プログラム解説:CodeIQ「回文数の中央値」
にある。

yhpg に出していた オフラインリアルタイムどう書く E17 の実装例 で、数が数えられるんだから、中央値だって出せるよね、という問題。

いつもはサクサク解いている方でも、この問題には苦戦している場合もあったような気がする。

ところで、「回分数」ではなく「回文数」なので、注意しましょう。

74.ツリーの中にない数

yhpg に出していた ツリーの中の数 2017.9.20 問題 をアレンジした問題。

問題と解説が
プログラム解説:CodeIQ「ツリーの中にない数」
にある。

愚直な感じの地味な問題。だと思う。

75.ドット絵の丸が2つ

問題と解説が
プログラム解説:CodeIQ「ドット絵の丸が2つ」
にある。

yhpg に出していた ドット直角三角形の共通部分 2017.10.6 をアレンジした問題。
yhpg 版は三角形なので向きがあって面倒だったけど、CodeIQ 版は丸いので向きがなく、ちょっと簡単になったと思う。

これも愚直で地味な問題。

今日のところは

今日のところはこれぐらいで。
次回で最終回。
そのうち書きます。

毎回書いているけど、もっと真面目な解説解題がほしいよと言う方は、このブログにコメントか、Twitter:@Nabetani にメンションください。
対応するかもしれません。

過去問の振り返り #60〜#69

60.素数の足し算で

問題と解説が
プログラム解説:CodeIQ「素数の足し算で」
にある。
記事のとおり、なんでもない問題。
たまにはこういう問題もいいよね。

61.◯はぴったり☓は無し

問題と解説が
プログラム解説:CodeIQ「◯はぴったり☓は無し」
にある。
さきほど「たまには」と書いたけど、これも何でもない問題。
地図が狭いので、工夫しなくても間に合う。

地図を広くすると競技プログラミング的な問題になると思うけどどうだろう。

cielさんの 指摘 の通り、この問題は ぴったり含む長方形 横へな2016.3.5 問題 を元ネタにしている。

62.メビウスの亀

タートルグラフィクスをメビウスの帯で行おうという問題。
せっかく裏側があるので、裏に行くコマンドもつけてみた。
問題と解説が
「メビウスの亀」問題解答(CodeIQ) - ange1のブログ

プログラム解説:CodeIQ「メビウスの亀」
にある。

図を書くのが難しかったので、実物の写真で済ませた。

63.フィボナッチ進数

なんかふと思いついて出題した問題。
問題と解説が
プログラム解説:CodeIQ「フィボナッチ進数」
にあるんだけど、もう少し楽に解ける。

64.正六角形の分割

yhpg に出した 正八角形の分割 2017.4.19 問題 をほんの少し難しくした問題のつもり。

次の問題「正方形の分割」の肩慣らし。

問題と解説が
プログラム解説:CodeIQ「正六角形の分割」
にある。

65.正方形の分割

問題としてはすごくシンプルなんだけど、わりと難しい問題。
お気に入りの問題の一つ。

当初線を三本引こうと思っていたんだけど、難しすぎたので 2本にした。
三本だと中に三角形ができたりできなかったりして楽しいんだけどね。

問題と解説が
プログラム解説:CodeIQ「正方形の分割」
にある。

66.ハノイの塔ではありません

問題と解説解題を
CodeIQ に出した「ハノイの塔ではありません」の解説解題のようなもの - Codeへの愛とCuriosity
に書いた。

書いたとおり、なんとなく作った問題。まあだいたいどの問題もそうだけどね。

67.構造体のアライメント

簡単だけど真面目な問題。
たぶん仕事でアライメントの話になったからそれで、とかだと思う。

問題と解説が
プログラム解説:CodeIQ「構造体のアライメント」
にある

68.正六角形ブロックの回転

ciel さんの 指摘の通り、ブロックを回す 2017.5.24 問題 を六角形にしたもの。

問題と解説が
プログラム解説:CodeIQ「正六角形ブロックの回転」
にあるんだけど、この実装は

盤面のサイズが小さいので紙に書いてどこからどこに移動するかの変換テーブルを作ってごまかしました。

というもの。もうちょっと盤面を広くすればよかったかなぁ。

69.カーペット

yhpg でシェルピンスキーのギャスケットの問題 を出していたので、シェルピンスキーのカーペットの問題を出してみた。

問題と解説が
プログラム解説:CodeIQ「カーペット」
にある。

これはかなり難しく、ギブアップも考えました。

とあり、とても難しく感じたらしい。

何を難しいと感じるかは人それぞれだなといつも思う。

今日のところは

今日のところはこれぐらいで。

毎回書いてるけど、私の手による解説解題を希望の方は、このブログか Twitter:@Nabetani にコメントか何かください。対応するかもしれません。

過去問の振り返り #50〜#59

50.撤去作業の果てに現れる数列

問題と解説が
プログラム解説:CodeIQ「撤去作業の果てに現れる数列」
にあるものの、

私のコードはきちんとしていません。

とあるとおり、ちょっと残念な実装。

これは オフラインリアルタイムどう書くで出した
多段階選抜 2014.8.2 問題
を改変したもの。素数が出てくるけど、ruby なら prime を使っていいよということで素数判定を書いてほしいと思っているわけではなかった。

実装にあたっては、ruby の場合は lazy を使えば簡単に書ける。
遅延評価がない言語だと面倒だけど。

51.ちょっと奇妙な足すと引く

問題と解説が
プログラム解説:CodeIQ「ちょっと奇妙な足すと引く」
にある。

コンピュータサイエンスっぽい問題だけど、雑に書いてもなんとかなる感じ。
CodeIQ の中の人に送ったサンプル実装は 20行足らずだった。

52.ダブルテトロミノ

問題と解説が
プログラム解説:CodeIQ「ダブルテトロミノ」
にある。

オフラインリアルタイムどう書くに出した
テトロミノ認識〜 横へな 2012.10.6
をちょっと面倒にした問題。とはいえ、総当たりしてしまえば良いので全然難しくはない。

53.ぐるぐるスクエア

問題と解説が
プログラム解説:CodeIQ「ぐるぐるスクエア」
にある。

次の問題ぐるぐるペンタゴンの小手慣らし的な問題だと思います。

とある通り。
上記のリンク先では地図を作っているけど、算術的に解くのが自然だと思う。

入力は、1以上、1000以下です。

という不要な制限も、ぐるぐるペンタゴンに合わせたものである。

54.ぐるぐるペンタゴン

こちらが本命。

問題と解説が
プログラム解説:CodeIQ「ぐるぐるペンタゴン」
にある。

前の問題ぐるぐるスクエアと比べるとクソ難しいです。

というありがたい言葉を頂いた。

解説については
「ぐるぐるスクエア」「ぐるぐるペンタゴン」問題解答 ( CodeIQ ) - ange1のブログ
を見ていただくのがいいと思う。私もなんか書いたほうがいい?

指摘の通り、五角形の世界であなたは過去の自分に出会う 横へな2016.10.30 問題 が元ネタ。五角形は楽しいね。

あと。図を書くのが大変だった。
五角形を敷き詰めるのは別に大変じゃないんだけど、欠けないように数字を入れるのが大変だった。

55.外周の折り目


によると、「ぐるぐるペンタゴン」と並ぶ難問だったらしい。

問題と解説が
プログラム解説:CodeIQ「外周の折り目」
にある。

何を書かなければならないのかを把握するのに難儀するけど、わかってしまえばわりとあっさり書ける問題。
のつもり。

56.放物線とマス目の関係

問題と解説を
放物線とマス目の関係 の解説
に置いた。

見た目が簡単そうだけど、見た目ほどは簡単じゃない問題だったようで、正解率がすごく低かった。

プログラム解説:CodeIQ「放物線とマス目の関係」

浮動小数点を使わずに交点の有無をうまく判断できる方法があるのでしょうか?

とあるが、平方根を取る必要がないので有理数 を使えば浮動小数点を避けられる。

57.縦線と横線でマス目を塗る

問題と解説が
プログラム解説:CodeIQ「縦線と横線でマス目を塗る」
にある。

競技プログラミングっぽい問題のつもりなんだけど、私自身は競技プログラミングの経験がないので的はずれかもしれない。どう?

いろいろな解き方がある良い問題だったと感じている。

58.境界線の長さ

問題と解説が
プログラム解説:CodeIQ「境界線の長さ」
にある。

えらく素直な問題でした。
何か引っ掛けがあるのかな、と思いましたが何もありませんでした。

とあるとおり、素直な問題。

オフラインリアルタイムどう書くの
三種類の境界線 横へな 2014.10.4 問題

境界線分 〜 横へな 2013.12.7
を混ぜた問題。

59.周期表

問題と解説が
プログラム解説:CodeIQ「周期表」
にある。

私が CodeIQ に出した問題で一番簡単だったと思う。
見どころは、周期表ソースコード上で同表現するか。
表をハードコードするならするとして、どうハードコードするかが悩みどころ。

ゴルフをするのも楽しいかもね。

今日のところは

今日のところはこれぐらいで。
私の手による解説解題を希望の方は、このブログか Twitter:@Nabetani にコメントか何かください。対応するかもしれません。

過去問の振り返り #40〜#49

40.等比? 等差? フィボナッチ??

これも、浮動小数点を使ったら負けることを意図した問題。
CodeIQ Magazine に乗っていた記事は
等比? 等差? フィボナッチ?? の解題解説
に置いた。
解説解題ではない何かを CodeIQ に出した「等比? 等差? フィボナッチ?? 」の解説解題ではない何か - Codeへの愛とCuriosity に書いている。

41.限られた数字で作れる数の、まんなかの値

問題文がシンプルな割に、引っかかるポイントがたくさんある問題。
気に入っている問題のひとつ。

問題文と解説が
プログラム解説:CodeIQ「限られた数字で作れる数の、まんなかの値」
にある。

42.【100名限定】変進小数の足し算【手動採点】

久々の手動採点で、ちょっと緊張したおぼえがある。
問題自体はシンプルで簡単。

問題と解説解題が
「変進小数の足し算」の解題解説 - Codeへの愛とCuriosity
にある。

43.チェックポイントを順番に

ニコリの スラローム をヒントに作った問題。

問題と解説が
プログラム解説:CodeIQ「チェックポイントを順番に」
にある。

44.三角形と点の関係

次の問題「共通部分は何角形?」の準備のための問題。これができないと次はできない。

問題と解説が
プログラム解説:CodeIQ「三角形と点の関係」
にある。

45.共通部分は何角形?

問題と解説が
プログラム解説:CodeIQ「共通部分は何角形?」
にある。

これもシンプルな内容の割に罠がたくさんあって、良い問題だったと思う。

46.左と右の有理数

問題と解説が
プログラム解説:CodeIQ「左と右の有理数」
にある。

この問題は、はてなダイアリーに実質的に初めて書いた記事
http://d.hatena.ne.jp/Nabetani/20040207/p3
の計算をベースにしている。たぶん既知のものだと思うけど、自力で思いついた既約分数のツリー。

47.ヘックス上の最長狭義単調増加列

問題と解説が
プログラム解説:CodeIQ「ヘックス上の最長狭義単調増加列」
にある。

この問題は、くねくね増加列〜 横へな 2014.7.5 問題 を ヘックスにしたもの。
動的計画法やメモ化付き再帰で解ける。

48.単調増加で単調減少な数

問題と解説が
プログラム解説:CodeIQ「単調増加で単調減少な数」
にある。

一見面倒に見えるけど、それほどでもない問題。16進数までなので、たいしたことない。

49.異世界のブラウザの判定

ぜんぜん異世界感がない問題。
問題文が長い割に簡単。私が CodeIQ に出した問題で 2番目ぐらいに簡単だと思う。

問題と解説が
プログラム解説:CodeIQ「異世界のブラウザの判定」
にある。

問題を作るにあたって user-agent 文字列のことを調べたんだけど、Opera(Kabuki Browser) の対応が面白いと思った。

自分としては、OS名の「Tovax」がお気に入り。

大変どうでもいいけど今頃タイプミスを発見。
 誤:ichtus
 正:ichthus
icthus は イクトゥス - Wikipedia のこと。

今日のところは

今日のところはこれぐらいで。

私の手による解説解題を希望の方は、このブログか Twitter:@Nabetani にコメントか何かください。対応するかもしれません。

過去問の振り返り #30〜#39

30. 1の並びで小さい方から

CodeIQ に出した「1の並びで小さい方から」の解説解題 - Codeへの愛とCuriosity
に問題の紹介と解説解題がある。

31. 世界は歪んでいる。それでも君は歩む。

プログラム解説:CodeIQ「世界は歪んでいる。それでも君は歩む。」
に問題の紹介と解説がある。
なお。この問題は、ciel さんが 指摘しているとおり、
道なりの亀 〜 横へな 2013.7.6 参考問題 の地図を変えたものである。

32. 2つの円の位置関係

33. 円と線分の位置関係

二問まとめて、
位置関係2題の解説・解題 - Codeへの愛とCuriosity
に解説解題がある。
問題については
2つの円/円と線分の位置関係 問題解答 ( CodeIQ ) - ange1のブログ

プログラム解説:CodeIQ「2つの円の位置関係」プログラム解説:CodeIQ「円と線分の位置関係」
を参照のこと。

円と円は簡単だけど、円と線分は面倒。ciel さんが書いているとおり、直線なら簡単だけどね。

34. カードを使って数を作ろう(簡単編)

問題の紹介と解説が
プログラム解説:CodeIQ「カードを使って数を作ろう(簡単編)」
にある。

ブルートフォースで問題ないという、簡単な問題。

35. カードを使って数を作ろう(両面編)

問題の紹介と解説が
プログラム解説:CodeIQ「カードを使って数を作ろう(両面編)」
にあるんだけど、解説を書いてくださっている方は

テストケースはすべてパスしていますがパターンによっては制限時間を超える場合があると思っています

と、なにやら自信なさげ。

私がなにか書いたほうがいいかなぁ。
要望がある方はコメントください。

36. 共通の祖先は誰だろう

この問題は 続柄 〜 横へな 2013.1.11 を改変したもの。

問題の紹介と解説が
プログラム解説:CodeIQ「共通の祖先は誰だろう」
にある。

入力された数値から直接親を計算するのは(できるかもしれませんが)困難です。

とあるんだけど、それほど困難ではなかったつもり。困難だったかなぁ。

解説必要なら書くので、そうであるならコメントいただけると対応するかもしれません。

37. 排他的n乗数

問題の紹介と解説が
プログラム解説:CodeIQ「排他的 n乗数」
にある。

これも ブルートフォースで問題ないという、簡単な問題。

38. うそつきがいる!(いないかもしれません)

問題の紹介と解説が
プログラム解説:CodeIQ「うそつきがいる」
にある。

この問題の出題者の問題はビットフラグを活用する問題が多いような気がします。

と、なんか見透かされている。

39. 連分数の足し算

連分数というあまりプログラミングで使わない話題を取り上げてみた。
出力のデリミタが最初だけセミコロンなのが鬱陶しいんだけど、連分数 - Wikipedia がそういう記法を導入していたのでそれに合わせた。

問題の紹介と解説が
プログラム解説:CodeIQ「連分数の足し算」
にある。

これももう少しシンプルに書ける。

今日のところはこれぐらいで。

もっと詳しい解説解題が必要な方は、このブログへのコメントか Twitter:@Nabetaniへのコメントでお知らせください。対応するかもしれません。

過去問の振り返り #20〜#29

#20 からの問題の多くは、なぜか「神尾ソフトウェア研究所」の方が問題を公開してくださっているので、それに甘えようと思う。

20. バスの料金を計算しよう(ややリアル編)

問題と解説が
プログラム解説:CodeIQ「バスの料金を計算しよう(ややリアル編)」
にある。

21. バスの料金を計算しよう(初級編)

問題と解説が
プログラム解説:CodeIQ「バスの料金を計算しよう(初級編)」
にある。

上記二問は バス代 〜 横へな 2013.4.6 を改変したもの。
バス代のルールは馴染みがある割に複雑で面白いと思っている。
「ややリアル編」の「56%」は、「*0.56」と書いたときに間違えやすいように選んだ。
正しくは「*56/100」。そういうことに意識的になってほしいと思っている。

22. 先制 hello, world

先制 hello, world のこと - Codeへの愛とCuriosity
にあるのは、サブノート。
CodeIQ に掲載されていた解説解題は sakura に上げてみた。
先制 hello, world の解説とバックヤード

対戦楽しかったよね。

23. ボタンを押して数を作ろう

問題と解説が
プログラム解説:CodeIQ「ボタンを押して数を作ろう」
にある。

これは 増やす減らす二倍する 〜 横へな 2013.9.6 参考問題 を改変したもの。
CodeIQ 版の方が簡単になっている。珍しい。
なぜそうしたのかは憶えていない。

24. くねくね最短経路

問題と解説が
プログラム解説:CodeIQ「くねくね最短経路」
にある。

ちょっとひねった最短経路問題。ひねり方がたいしたことないのでわりと簡単だと思う。

25. 最寄りの素数

問題と解説が
プログラム解説:CodeIQ「最寄りの素数」
にある。

手元の最初の実装にバグが有り、焦った覚えがある。
素数判定はライブラリを使うことを想定していたんだけど、 C とか JavaScript の人は面倒だよね。

26. 【機械学習 超初級】【選択式】機械学習の基本のようなそうでもないような問題です

そんな問題も出したなぁ。

そのまま
【機械学習 超初級】【選択式】機械学習の基本のようなそうでもないような問題です
に置いたけど、なんかひとつ、やや間違った問題気味のやつがある。
SVM の問題の選択肢が気に入っている。

27. 遠い昔、はるか彼方の銀河系の カレンダー(初級編)

28. 遠い昔、はるか彼方の銀河系の カレンダー(ややリアル編)

二問まとめて、解題記事と問題へのリンクが
遠い昔、はるか彼方の銀河系の カレンダー の、解題と皆様の実装 - Codeへの愛とCuriosity
にある。

29. パスカルの 三角形では ありません(字余り)

解説解題が
パスカルの 三角形では ありません(字余り) の解説解題 - Codeへの愛とCuriosity
にある。
問題は、上記の記事からもリンクしているけど
「パスカルの 三角形では ありません(字余り)」問題解答(CodeIQ) - ange1のブログ
に詳しい。

今日のところはこれぐらいで。
もっと詳しい解説解題がほしいという方がもしいたら、twitter:@Nabetani かこのブログにコメントしてください。対応するかもしれません。