投稿の記録を残す

zenn.devへ投稿するための各種記録

ABC-046~050[A・B]へのリンク

zenn.devに投稿している解答例のうちABC-046~050[A・B]へのリンクを簡単な補足とともに貼っておきます。

ABC-046

A - AtCoDeerくんとペンキ

配列に格納したペンキの色の重複を取り除いてから個数を数えればいいですね。 今になってみるとわざわざlist()を使わなくてもset()のままで個数は出ますね。

B - AtCoDeerくんとボール色塗り

最初の1個はK色の中から選択できますが、それ以降は直前に選択した色を除いたK-1色から選ぶことになります。 ということでボールが1個の時はそのままK、それ以外の場合はK * (K - 1) * (K - 1) ...となりますが、ループではなく以下のようにした方が良かったかもしれませんね。

    print(K * ((K - 1) ** (N - 1)))

ABC-047

A - キャンディーと2人の子供

3つのものを2つに分けて同じ数にするわけですから、一番大きい数とそれ以外の2つの合計が同じになればYesとなります。

B - すぬけ君の塗り絵 2 イージー

指定された長方形を配列mで作成して1で埋めます。 あとは入力データにしたがって配列m内を0でクリアしていき、最終的に1のまま残った要素の数を数えれば答えが出ます。 何となく冗長な気もするので、もっとスッキリした方法があるのかもしれませんね。

ABC-048

A - AtCoder *** Contest

入力された3つの文字列の先頭の1文字を結合するだけですね。

B - Between a and b ...

a // xb // xの差を求めればいいのですが、a自体は対象に含まれるので実際にはa-1を割ることになります。 また、a0の場合は例外的にb // x0の場合の1個を足します。

ABC-049

A - 居合を終え、青い絵を覆う

母音の配列を用意してその中に入力文字があるかチェックしています。

B - たてなが

入力されたデータを2回ずつ出力するだけです。

ABC-050

A - Addition and Subtraction Easy

入力された演算子+-)によってbの正負を決め、その上でabを足し合わせています。

B - Contest with Drinks Easy

ドリンクごとのデータを元に所用時間tの合計から短縮できる時間(負数)を足して調整しています。 今考えるとadjust関数の計算を逆にして調整する時に減算した方がわかりやすかったかもしれませんね。

拙文失礼いたしました。

ABC-042~045[A・B]へのリンク

zenn.devに投稿している解答例のうちABC-042~045[A・B]へのリンクを簡単な補足とともに貼っておきます。今後も5回分くらいの単位でリンクを載せていこうと思います。

ABC-042

A - 和風いろはちゃんイージー

正解となる[5,5,7][5,7,5][7,5,5]と比較して合致すれば「OK」とprintすればいいのですが、先にソートしてしまえば1回の比較で済むよってことですかね。

B - 和風いろはちゃんイージー

Aの問題と同様、ソートしてしまえば単純に結合するだけで答えは得られますね。 pythonを勉強し始めてすぐの時期だったので、文字列の配列を結合するjoinの使い方(結合子となる文字列を基準にすること)が結構斬新に見えた気がします。

ABC-043

A - キャンディーとN人の子供イージー

1~Nまでの合計を求められているので(1 + N) * N / 2でいいのですが、除算の結果が小数になってしまったのでint()で丸めた感じです。 今なら// 2と書くでしょうね。

B - バイナリハックイージー

1文字ずつ取り出して以下のルールにしたがってバッファに移して最終結果をprintします。

  • 取り出した文字がBの時→バッファの最後尾の文字を削除
  • それ以外の文字の場合はそのまま結合

ただし、バッファが空の状態でBが来た場合にエスケープする必要があります。

ABC-044

A - 高橋君とホテルイージー

K泊目までとK+1泊目以降の泊数をそれぞれの単価で掛けて両者を足せばいいのですが、トータルの宿泊数がKより短い場合を忘れるとWAをもらいます。

B - 美しい文字列

前半で文字ごとの個数を数えて、その個数に奇数が検出された時点でFalse、それ以外ならTrueという判定をしています。

ABC-045

A - 台形

これは台形の面積の公式通りなのですが、2で割ると小数が返ってくるのでint()で丸めた感じです。 ABC-043-Aと同様、こちらも今なら// 2と書くでしょうね。

B - 3人でカードゲームイージー

A、B、Cさんを0~2として処理を行っています。 最初はAさんからなのでp=0とし、それ以降はplay関数で次の手番の人を返しています。 手札がなくなった時点で解答をprintして-1を返してカードゲームのループを抜けます。

2023年1月28日

拙文失礼いたしました。

たまには振り返るのも吉

AtCoderの過去問チャレンジもそろそろABCの100番台に突入する感じです。まだまだ始めたばかりではありますけど、ここまでやってきて「あの問題、こう書いた方が良かったかな」とか「何でそう書いたんだっけ?」と思うことも出てきました。

そこでただ前に進むだけではなく、たまには自分の書いた解答を見直してみて、必要に応じて説明を追記してみたり、解答自体を書き換えてもみようかなと考えています。とはいえ、Aの問題に多いのですが、問題文をそのままプログラムに書き換えましたみたいなパターンの場合は説明を追記するのは難しいかもしれませんね。

あとZenn.devに投稿している解答記事が増えてきたので、こちら側に10問単位くらいでリスト化した記事を投稿しようかとも思っています。Zenn.dev側にインデックス的な記事を置くのは正直どうなのかなと思ったので、はてなブログさんに甘えることにしました。

まだまだ試行錯誤の状況ではありますが、途中道半ばにして倒れることのないよう頑張っていきたいと思います。

2023年1月20日

拙文失礼いたしました。

2023年

昨年始めたAtCoderの過去問チャレンジのZenn.devへの投稿ですが、ABC-042から始めて本日投稿した分でABC-078まで進みました。

今やっているのはA,Bの問題なので、難易度からすれば高いわけではなく、1日あたりもっと多くの問題を解くことは可能だと思います。ただ1日にたくさんの問題を解くというよりは、問題を解いてから記事として投稿するまでの30分くらいの作業をより長く続けていけることの方が大事なのかなと思って今の形にしています。

AtCoderにあるような問題にあるような文章をきちんと理解してプログラムに変換するのが仕事なわけですが、日頃こうした作業の訓練をする機会があるかといえばそんなに多くあるわけではありません。事実、これまでチャレンジしてきた問題の中にも「ん? どういうこと??」となるような問題もありました。

といことで、2023年は年齢的に今更感がないわけではありませんが、こうしたトレーニングの意味でも過去問チャレンジを続けていきたいと思います。

2023年1月7日

拙文失礼いたしました。

何を付け加えたらいいのか

AtCoderの過去問を解いて記事に載せる際に困ったこと、それは今チャレンジしている問題だと設問をそのままコードにしているだけなので、補足的に何かを書くことができないことです。

Pythonを勉強するツールの1つとしてAtCoderの過去問を使っているわけですが、今のところ文法や関数のリファレンスを調べながら書いている状態なので、言わばいつも使っている他の言語で組み上がったものを置き換える作業をしているだけで、とくに何か補足するようなことはまったく思いつきません。

これって会社で勉強会のようなものを行った時にもありがちな話で、何をどう書けば参考になるんだろうかと悩んでしまうことも多いです。今回このような形でいろいろアウトプットしていこうと考えたのには、そうしたことを何とか解決して形にしていきたいと考えた部分もあるので、今後もいろいろ考えていきたいと思います。

ただ、自分自身の若い頃を思い出してみれば、他の人のソースコードを観ることはとても参考になった記憶があるので、内容の出来不出来に関わらずソースコードの部分だけでもどんどん出していきたいと思います。

2022年12月28日

拙文失礼いたしました。

Zenn.dev始めました

Zenn.devにて記事の投稿を始めました。

今のところ最近始めたPythonの勉強のために始めたAtCoderの過去問にチャレンジした結果を載せているだけですが、いずれ別なタイプの記事も書いていければいいかなと考えています。

それならこの手の記事もそちらに掲載すれば良いのでは?

当然そんな感じになると思うのですが、日記的な記事はどうなんだろうと考えた結果、いわゆるブログ的な記事はこちらに載せていこうと考えた次第です。

なぜPythonを?

これは答えは簡単です。

自分が使ったことが無くて、流行っていそうだからです。それ以外にも会社のミーティングの中での雑談で「AI」という言葉が頻繁に使われるようになったことも1つの理由かもしれませんね。

なぜZenn.devを?

昨年(2021年)COVID-19で1ヶ月ほど入院していた時に、このままだと何も残せないなと思ったことが発端で、退院して会社に復帰してからまずは社内にいろいろ共有していくことから始めて、最近になって外にもアウトプットしていこうかなと思ったことが経緯です。

Zenn.devをチョイスしたのにとくにこれという理由はありませんが、何となく好きだったこととGitHubリポジトリ経由で記事が書けることがあったかもしれません。

これからのこと

Zenn.devの方では過去問をABC-042から始めているので、それを最新回までまず追いつくこと、そして今はA、Bの問題のみを解いているので、2週目としてC以降にもチャレンジしていきたいと考えています。

一方、こちらのブログでは過去問にチャレンジしていく上で考えたことや思ったことなどを記事にしていきたいと考えています。

ということで、あまり大上段に構えず続けていくことを最初の目標に頑張りたいと思います。

2022年12月27日

拙文失礼いたしました。