コツコツ学習ブログ

プログラマのweb上のメモ的なもの

ABC 266  B - Modulo Number

ABC 266 に参加した。

あと一歩で解けず、他の方の回答を見て悶絶したので自戒のため、次回のために

編集しておく

atcoder.jp

基本的に全探索+ 倍数判定で解ける問題なのだが、

出力例が一致せずつまってしまった。

■正解例

 for (long i = 0; i <= 998244353; i++) {
 if ( (N-i)% 998244353 == 0) {
 System.out.println(i);
 return;
 }

■誤答例

 for (int i = 0; i <= 998244353; i++) {
 int num = (int) (N - i);
 if (998244353 % num == 0) {
 System.out.println(i);
 return;
 }

何度やっても全問ACにならず、色々こねくり回したのだが

結果的にアルゴリズムは単純で、標準入力で受け取った値を

for文でループする際にintにキャストしてしまったのが原因だった。

凡ミス、、普段ループを回すときにintでしか回さない為

えがおよばなかった。

Longを扱う試験は今後もでるから気をつけよう

ちなみにだが、公式の動画で言及していたのだが、

入力値N を倍数判定の対象となる数で割ることでもxを求められる。

こちらの方がアルゴリズム的にシンプル。

**を~~で割ったあまりを求める、というのはよく出るらしいので次はすぐ解けるようにしたい。 ※下記はサンプル

       long res = in % min;
        if(in < 0 && res != 0)
        {
             res = min - Math.abs(res);
        }

Find Your LifeStyle

広告のタイトルみたいなタイトルになってしまった。

インターネットが市民権を得る前の世界と、その後の世界は 人類において大きな変革だと思っている。

そもそもマスメディアが生まれる前の世界にもどった訳でもなく、 情報を自分で考えて、それを力に出来る人間がどんどん強くなっていくということ。

インターネットという存在が、何に役立つかよくわからなかったものから、 先進国の生活インフラ基盤となっている。

日々技術革新が世界で起きているが、「で、それがなんの役に立つわけ?」って言っているのも良いが、 それが5年後に世界を変えている姿を想像することも忘れないようにしたい。


ところで僕は、インターネットが市民権を得る前の世界で思春期を過ごした人間だ。 要はスマホネイティブでなく、ガラケーネイティブだった。 インターネットはあったものの市民権は得ておらず、TVをはじめとしたマスメディアが幅を聞かせる時代だった。

そんな時代では、とにかく誰か一人や団体の意見、発信が正しいとされがちであった。 幸福な人生のステレオタイプも存在して、誰もがそれになりたがった。なるべきだと思っていた。 でも今はあきらかに幸せの形は人それぞれ変容してきている。 いや、もともとは存在したのだ。

しかし前述したマスメディアの価値観のおしつけ(悪くいうと)や日本人特有の 曖昧な共有意識によってそれは意識の奥に追い込められていただけの話だ。

よき友人を持ち、勉強やスポーツに励み、恋愛をしていずれ家庭を持ち 子供を何人かもうけて定年後はゆっくりとした人生を愛する家族と送る。

戦後の高度経済成長期はこんな感じの人生をみんな望んでいたんだと思う。 僕もそう思っていた。

けどインターネットが世界を変えていくことによって、いろいろなことが起きた。 自分の目の前にいないだけで、自分と同じようなことを考えている人間や 既存の価値観にとらわれず生きている人間が存在することを人々が気づき始めた。

自分を他人と比べずいきても良いんじゃないか?..そう考える人が 増えてきている気がする。


成功者という言葉がある。 成功とはでは何なのか? 広辞苑によると。

①目的を達成すること。事業などをなしとげること。「大陸横断に―する」「―をおさめる」↔失敗。 ②転じて、地位や富を得ること。「―者」 ③事業を成就した功績。

成功者とは、一般的に地位や富を得ることを指すらしい。 僕はいわゆる成功者の格言を読んだりするのが好きなので、聞いていると彼らは一様に 「こつこつ続けることが大事」「挑戦することが大事」という。そこが基礎なのだ。 みんな同じことを言っているのに、その部分だけは行間に置きさられ 「でもやっぱり才能が..」「自分には無理」と多くの人が言っているように見える。 続けることは大事。でもやっぱり才能や環境が必要。 自分とは違う、自分にはもう遅い、そんなに時間がない、恵まれてない、だからできない。 そんなふうに言い逃れする言い訳のために「才能」や「天才」という言葉が生まれてきたのではないかと邪推してしまう。 要はたかだか何十年の人生、何万時間の短い時間の中で、自分が傷つかない為の言い訳を探して 生きているのだ。

確かに向き不向きはある。ただそこを伸ばす、補うのが個性というものだろう。 何より一度の人生、才能なんて言葉で自分と他者を隔てて終わりにして諦めてそれが楽しいかと私は思いあがいて生きている。 結局私は自分のペースで見苦しくともコツコツと続けることしかできないのだ。 ただそんな日々がたまらなくいとおしい。


30代を超えてから、コツコツ続けるメソッドみたいなものを 自分の中で確立することができた。

まずはスモールスタートを心がけ、少しでも頑張った自分を褒めてあげること。 自分の現状と自分の理想を比較して悲観しすぎないこと。 いづれ自分も辿り着けると希望を持ってコツコツと歩み続けること。

僕は今までいっぱい失敗してたし嘘もついたし逃げてきた。 でも今こうして生きている。人から見たら凄いと思うことをやれているのかもしれない。

現にこうしている自分を5年前の自分がみたら、すげーと思うだろう。

目標がでかければでかいほど、たどり着くのは時間がかかるが、 寄り道しながらでもたどり着ければ良いと思う。 目標や目的は人生を輝かせる。 それが自分の人生のスタイルかなと思う。

でも、きっと1年後には価値観が変わってたりするんだ。 それで良いんだ、人生なんてそんなもんだ。

Javaで2つの文字列を辞書順で比較

Atcoderでたまに出てくる辞書順問題。 基本的に、インタフェースComparableを実装した Stringクラスのcompareto()を使用する。

戻り値は結果に応じて-1,0,1 のいずれかが返却される

     String textA = "aa";
        String textB = "bbb";
    int compare = textA.compareTo(textB);
        if(compare < 0) {
            System.out.println(textA);
        }else {
            System.out.println(textB);
        }

"aa"が出力される

progateよりcodeprep

なんか久々にJava以外の言語が触りたくなって、 pythonの基本文法やらをちょっと触ろうとして、codeprepというサイトをやりました。

javapython は基礎的な部分ではそんな変わらないので(型付けが違うという大きな差はあるが) 基本編は10ぷんぐらいで終わった。

今プログラミング初心者は、やっぱりprogateから始めるのかな? 批判する気はゼロだけど、progateってすごくよくできたUIなんだけど面白いと 思った記憶があまりない..俺のやってたときは、答えが見れちゃったから 直ぐ答えを見てたかもしれない。自業自得や

codeprepはカンニングできないので、自分で解答を考える必要がある。 ただしヒントはあるので全然難しくなく、それでいて 中級の入り口くらいの問題もある。言語によるけど。

だから、俺はcodeprepを推します。 あんま知られてないからもったいない。

なにより無料なんですYO!

膝日さにブログかきました。

個人開発について①

前回のABCについて書いた記事が消えていた,,夢の中で書いたかと思ったら 投稿せずブラウザ閉じてたみたい。うけるw いやうけねーか

たまーにリアルな夢見て、夢で良かったーとか、夢じゃなきゃ良かったのにとか考えて 現実とごっちゃになりそうなことが僕はたまにあります。 なんで映画Matrixを見たときは、ちょっと衝撃だった。

それはさておき、最近競プロと並行してちょっとづつ個人開発を進めて行こうかなと思います。 アイデアを考えるのは得意な方なんですが、これだっていうのはまだ出会えていないですが、、

まあ、企画出し、デザイン決めから気長にやって行こうと思います。

ただ、ABCは開催されるやつはなるべく全部出る予定です。 Aが解けないことは今までないので、A問題の高速ACとB,Cを解けるようにすること、速度改善が 目下の目標かな、Aizu onlineJudgeでの修行ももう直ぐで終わりそうだし。

JavaにおけるBooleanとbooleanの違い

Booleanとbooleanの違いについて。

普段意識してコーディングしていなかったけど、(ダメやん)、 JavaにはBooleanとbooleanがある。 どっちも型じゃねーのかと思いがちだが、 Boolean→クラス boolean→プリミティブ型

という、れっきとした違いがある。

ちなみにintやcharなんかもプリミティブ型で、 Stringはクラス。

このあたり、昔しっかり学習したんだけど、 当たり前に使っていたりすると忘れてしまう..

Booleanはクラスなので、真偽に関する便利な機能が使える。

業務で、人が作って動いている既存機能を引用したりしても、 こうゆうちょこちょことした部分が間違ってるのはよくある。 プログラマーとして恥ずかしいから、アルゴリズムだけでなく Java独自の言語の特徴も覚えていこう。