u-ryo's blog

various information for coding...

Category: Algorithm

Getting Prize S Level Programmer at Paiza

| Comments

先日、Paizaのスキルチェック時間切れ0点を取ってしまったので、 癪だからランクS、本気で取りに行きました。 ひとりすごろくは第一次制限時間の40分を超えてしまったので、 全ケース通ったんですけど95点でSではなくA判定。 やっぱり時間が大事なんですね。 Javaで「早く」書くのは確かにキツイです。 ので、次は50点の制限時間が2時間のビリヤードの玉突きに挑戦しました。 こちらは、問題中にヒントを書いていてくれていることもあり、 60分で解答を提出、ようやっとSランクをゲットできました。 今までAランクでいっか、とか思ってて、S問題はゆっくりやって、 再チャレンジでcodeをbrush upして100点を取ってたんですけど、 それより時間が大事、なんですかね。 いや、実務では分を争う程、そこまでsevereではないので... それに、paizaでいくら頑張っても、 小さいとこばっかりであんまり行きたい先が無いので、虚しいんです。

Challenging Paiza TSP

| Comments

8/13はPaizaの日、ということで、巡回セールスマン問題を出題していました。 Paizaラーニングでも巡回セールスマン問題のさわり(貪欲法)を取り上げていて、 2-OptやSimulatedAnnealing(焼きなまし法)を学んで、 いざ書いてみたんですが、なかなかうまく行きません。 テストデータは有名ドコロがあります。 まずはatt48で2-Optでやってみたものの、 交差線が多く、全然それっぽい経路が得られません。 なんでーーー!? Javaによるまんまのコードがあったので、 読み解いていったんですけど時間かかっちゃって、 結局Paizaの締切9/12に間に合いませんでした... 何たること。

どうも、キモはswapにあるようで、 点を交換すると総延長が短くなる場合、 当然点を交換するんですが、 当該点だけを交換するだけじゃなく、 そこから真ん中へ向かってずっと点を交換していくんですね。 そうかー。

悔しいから、久し振りにPaizaのS問題やってみました。 最も簡単そうな最小辞書順列にしてみました。 けれど、問題の意味を理解するのと、JavaのStreamで書ききったために、 制限の2時間、あっという間に過ぎてしまいました。0点確定です。トホホ。 しかも、提出したコードは、2つの場合だけ通らずに、80点。 どうしてコケる時があるのか、思い当たるフシもなく、未だにわかっていません。 テストデータ、見せて欲しいです。

Magic Square

| Comments

3次魔方陣

  1. 爪のついたZ字順に1〜9を配置
  2. 2と8を入れ替える
1
2
3
4
5
6
7
2 3 4
1 5 9
6 7 8

8 3 4
1 5 9
6 7 2

4次魔方陣

  1. 1〜16を左上から右へ4列記入
  2. 縦、横の真ん中の2列の上下端を交差させて入れ替える
1
2
3
4
5
6
7
8
9
 1  2  3  4
 5  6  7  8
 9 10 11 12
13 14 15 16

 1 15 14  4
12  6  7  9
 8 10 11  5
13  2  3 16

奇数次魔方陣

ヒンドゥーの連続形式

こういうのがさらっと出てくる山口さんって、 やっぱり凄いですね。