痔録

おしりいたい

実績『勝利を讃えよ』を解除した

年末年始で時間あるしせっかくだから挑戦しよ~~~~って思ったらそのままクリアできました。 なので記事書きます。

前提条件など

Civ6のDLCが充実してきたこの年にCiv5をやっている物好きなんぞほぼいない(いたとしても熟練の人や挑戦中の人)と思うので、特別ルールなどの解説はしません。 wikiなどを見てね。

なお本プレイでは以下のサイトを参考にしています。

なおプレイにあたって60ターンくらいまでを何度かやり直し、結局は48ターンのセーブから継続というアホのようなプレイをしているため、50ターンあたりまでの記述は記憶とログメッセージに頼っています。間違ってたらごめんなさい。

おおまかな流れ

おおまかにはこんな感じだったと思います。

  1. マップを厳選する
  2. 気合でケープタウンポートエリザベス・モンバサを落とす
  3. 落とした都市のHPを殿軍にしつつ遅滞戦闘し、落とされるギリギリでエジプトに売却して壁にする
  4. 遅滞戦闘している隙に、前線を保てるようユニットを生産しつつ文化施設を揃える
  5. ポルトガルのユニットをひたすらライフル砲で撃ち続けて終了

マップ厳選は先駆者が大事と言っているのでしましたが、クリアしてから思うと必須だなと思います。

というわけで今回の立地です。

という感じで、かなり防衛しやすい立地でした。 南側を首都プレトリアにしています。 なんでかは忘れたけど、タイルが広く使えそう(人口伸ばしたときに配置できそう)と思ったからじゃないか。多分。

特にブロームフォンティン左上の丘陵でライフル砲の射線が切れていて、これが無かったらブロームフォンティンはとっくに落ちていたと思います。 後半では湖を渡ろうとするユニットがライフル砲でツーパン(平地昇進3ならたまにワンパン)で落とせるのでかなり構成に貢献してくれました。

このマップ出すまでに10分ぐらいガチャした気がしますが、2年くらい前にも30分くらい厳選して3つくらい山岳地形を引いていたはずなので、合計したら40分くらいかかってるんですかね?昔の記憶が曖昧なのでわかりません。

内政と外交はよくわかりません。 隊商を作る余裕なんかなかったので常時国庫は空の赤字だったし、フランス・イタリア以外のヨーロッパ列強とは最初から最後まで戦争しっぱなしでした。 強いて言うなら、ズールーがポルトガルから侵攻されるのを遅らせるために早めにポルトガルに宣戦布告しておくことくらいでしょうか。 山岳と湖の壁ありきの戦略ですけども。

あとイタリアが大国化した末にエチオピアを食ってましたが、イタリアに宣戦しておけばそもそもエチオピアが宣戦されるのを避けられたんですかね? エジプト本土が滅ぼされるとは思ってなかったのでやってませんが、次回があったらやってもいいかも(無い)。

さて本編です。

ケープタウン攻城戦を始めるまでは都市砲撃の射程外をうろうろして偵察していたと思います。 自国領内ならHP回復が早いので、できるだけすぐ戻れる位置だといい気がします。

ケープタウンは気合で落とします。 大将軍で城塞を2つ立ててケープタウン横までのタイルを確保、視界をとり、ライフル砲3体で殴って落としたと思います。 確かライフル砲1つは一斉射撃(守りを固めたユニット・都市に対し戦闘力+50%)を付けた気がします。 ちょっと削りが早くなった気もしますがわかりません。確か3体で2ターン殴って削り切った気がするので、付けないで3ターン以上かかるなら早いんですかね。 占領後に外国人義勇兵は2体まで減っていました。尊い犠牲だった。

ケープタウンを落とせた直後の様子です。 確か戦列艦ケープタウンのタイルにいた1体だけだったと思います。 本当に少ないな。なんで?

無事落とせたらそのままポートエリザベスを落としに向かいます。 義勇兵を盾にしつつライフル砲を打ち込みます。 2, 3ターンくらいで削りきれたと思います。 都市ボーナスの昇進が効いている気もしますがよくわからん。 ポートエリザベスケープタウンと比べて北側が開けているので、ケープタウンと比べると楽でした。

ちなみにケープタウン攻城戦は何回かリセットしてやってみたんですが、1回目に落とせた以降は全然落とせませんでした。 戦列艦が2, 3体いてライフル砲が倒され、そのままグダグダと攻城戦が終わらずリセットしてました。 AIの標的が外国人義勇兵に向くのを祈るといいんですかね。

攻略はじめはポートエリザベスも死守するつもりでしたが、何度かやってみてポルトガル海軍を捌ける気がしなかったため、燃やして内陸都市を建てる計画に変更しました。 しかし結局ズールーが先に建てた&宣戦してきたので奪い取る形になりました。 というわけでポートエリザベス代理はノンゴマです。 後から考えると開拓者分のハンマーが浮いて特ですね。

その後は奪った都市で遅滞戦闘をしつつ、ユニット生産するなり文化系施設を建てるなりしていました。 各都市が敵ユニットの圧力(主にポルトガル)に耐えられなるあたりでエジプトに売ります。 都市を売って壁にする発想は[4]の動画を参考にしました。 正直半分は諦める気持ちで、とりあえず1回くらい最後(100ターン)までプレイしきろうと思い悔しさ半分で売り飛ばしたのですが、結局そのままクリアできてしまいました。拍子抜けでした。

なお当初は死守するつもりだったのでケープタウンでも国立博物館を立て直したんですが、結局売ったのでライフル砲などユニットを生産していた方が良かったかもしれません。

各都市の売却先はエジプトじゃなくても良い気がしますが、今回はイタリアに阻まれたのでモロッコには出会えませんでした。 エチオピアに渡すのはスコアになるので論外です。 オスマンは大体滅んでます。 なので消去法でエジプトしかありませんね。 このタイミングでエジプト本国はイタリアに侵攻されて滅びかけていたので、ほぼ無償で譲渡した形になりましたが。

48ターンにモンバサ・ケープタウンを売却する直前です。 モンバサ周辺の敵兵を文化に変えてから売却していました。 ケープタウンはまだ耐えられそうですが、せっかく拿捕できたブランデンブルク級が瀕死だったので、そのまま一緒に売却して安地にして延命を図った気がします。

ケープタウンでは売却までに私掠船を作って、ライフル砲と協力して敵艦を拿捕しつつ壁にしていました。 ケープタウン売却までの寿命が延びます。

今回のプレイでは都市売却までに 私掠船x1・ブランデンブルク級x2 が残りましたが、後から考えるとフリゲートを1体生産して置くのもありな気がします。 もっともケープタウンを売却して安地確保まで生き延びられるかが分かりませんが。 ケープタウンのタイルに配置すれば敵艦の体当たりは避けられますが、代わりに私掠船を外に出さなければいけないのでそちらが耐えられない気がします。

都市売却後はエジプト文化圏内に艦隊を配置しておくと、(エジプトと敵文明が非戦争状態なら)敵の海軍白兵ユニットからの攻撃を不可能にできるので、これでかなりユニットが延命されたと思います。 敵の私掠船が隣タイルまで来たらブランデンブルク級→私掠船の体当たりで何度か拿捕しましたが、大体次のターンには海の底でした。合掌。 ライフル砲が余ってたら1体くらいは配備しておくと、艦をエジプト文化圏内から出さずに敵ユニットを沈められるので文化に貢献しやすいです。

あとは都市が落とされないように戦線を維持しつつ、敵のユニット倒して文化に変えていきます。 ブロームフォンティンの北側、プレトリアの東側(の湖)、に外国人義勇兵を壁にしつつライフル砲を配置し、ポルトガルのユニットを文化に変えていきます。 ケープタウンを売ったあたりではライフル砲が足りていなかったので若干焦りつつリセットしつつやっていましたが、70ターンを過ぎたあたりからライフル砲が2回攻撃や射程+1の昇進を取得でき、かなり戦線が安定しました。 防戦一方だけど。

ロームフォンティンの北側では終了までに1, 2回ほどユニットが引いていくのを見ましたが、前線を上げるまでもなく1ターン後に山のようなユニットが返ってくるので陣形は崩さないのが正解でした。 敵ユニットは渡河して攻撃までに1ターンかかるので、本当に地形が良かったなとこのあたりで実感しました。

プレトリア東側では湖を渡ろうとするユニットをひたすら沈めていました。 手が足りなかったらブロームフォンティン側の都市砲撃とライフル砲が一部射程内なので、そちらと調整しつつ沈めていました。 こっちは義勇兵で壁を作る必要(というか手間)が無かったので、湖上のユニットを全部沈めることを意識してなかった頃にライフル砲が上陸攻撃を食らって殉職していました。リセットして回避。

ライフル砲が余りしだい南岸にも配備していました。 敵艦を沈めるペースが上がって良いです。 1ターンに私掠船3隻くらいを沈めていたと思います。

58ターンのブロームフォンティン周辺です。メチャクチャ多いですが耐えていますね。

78ターンには都市がHPを削られて瀕死になっていたようです。 落ち着いてライフル砲で処理。 陣形はそのまま維持されていますね。

そのまま潰し続けて88ターンに遂にエチオピアのスコアを抜きました。

なおエチオピアのスコアの増加量も結構激しく、抜き返されていたため油断はできないなと思っていたんですが、数ターン後に一気にエチオピアのスコアが下がりました。 イタリアと停戦とすると同時に、エチオピア4都市を残して割譲していました。 一気にエチオピアの勢いが弱まって、そのまま勝ち確でした。 ありがとうイタリア。

95ターン頃に大音楽家と大芸術家が誕生してそれぞれ傑作・黄金時代にしましたが、効果はよく分かりませんでした。 一応ターン毎の文化力+37でしたが、残り5ターンでそれだけ増えてもな。 敵ユニット1体分とちょっとの文化力でしかないので焼け石に水です。

そのままポルトガルのユニットを潰し続けて最終ターン後。勝利です。

ちなみにマップのターン経過はこんな感じ。 最終的に南アフリカ以外はヨーロッパ列強が支配してますね。

ターン経過

実際のターン経過です。

0ターン 初期立地

忘れずにランツクネヒトを購入して北に向かわせます。エジプトに会いに行ってもらいます。

2都市生産はもちろんライフル砲です。

ヨーロッパ組に非難声明して回った気もしますがよく憶えていません。

2ターン

ドイツとイギリスから宣戦布告されました。挨拶ですね。

6ターン

ポルトガルに宣戦布告。

なるべくズールーへ矛先が向かないようにする処置でしょうが、なぜ0ターンにしなかったのか分からん。

9ターン

イギリスがモンバサを建てていました。 ブロームフォンティンとスワコプムントの間。

あんまりユニットは出てこなかったので、特に実害はなかった気がします。

裏でイタリアがオスマンを滅ぼしてました。いつもの。

27ターン

ケープタウン陥落。

31ターン

ポートエリザベス陥落。 そのまま焼きます。

このあたりで若干余裕ができたので、プレトリア・ブロームフォンティンでユニット生産の合間を縫って文化系施設を建て始めていました。

40ターン

モンバサ陥落。

東側が平原で開けているため、いいライフル砲の的でした。

このあたりからケープタウンポートエリザベスに山のようなイギリス・ドイツ・ポルトガル海軍が押し寄せてきます。 私掠戦で敵艦を拿捕し、ライフル砲でなんとか処理しつつギリギリ耐えていました。

42ターン

ポートエリザベス跡地の右上にズールーがノンゴマを建設。

内陸だったのでそのまま餌になりました。

43ターン

ズールーからの宣戦布告。

ウルンディからポートエリザベス、ウムグングンドロヴからブロームフォンティンをそれぞれ狙われます。 といってもズールーのユニットは一世代遅れているので、ライフル砲2, 3体と都市砲撃があれば文化の素材だと思います。

なお戦力の割り振りが不適切で、ブロームフォンティンを落とされてリセットした記憶があります。

44ターン

ポルトガルポルトアメリア建設。

裏でイタリアがエチオピアに宣戦布告していました。 最終的にエチオピアのスコアを減らしていましたが、この時はかなり緊張しました。

48ターン

モンバサ・ケープタウンをエジプトに売却、もとい譲渡。

ここまでにブランデンブルク級2体を拿捕できていたようです。

50ターン

ウムグングンドロヴがポルトガルに落とされていました。

53ターン

ノンゴマ陥落。

55ターン

イタリアから宣戦布告。

エジプトに会いに行ったランツクネヒトが餌食になりました。 その後は何もなし。空気。

60ターン

ウルンディがポルトガルにより陥落。

65ターン

ノンゴマをエジプトに譲渡。 この頃にはエジプトが北アフリカを追放されて、首都がケープタウンになっていた気がします。 ログを見たら62ターン頃に追い出されていたようです。

ターンを進めたらノンゴマがイタリア領になりました。なんでやねん!!!!!

エジプトがイタリアと和平し、その際に割譲したようでした。

66ターン

ノンゴマを先程まで防衛していた部隊がすぐそばに残っていたので、即占領してエジプトに再度譲渡。

なぜかいた文化圏内にいたランツクネヒトをノンゴマに配置していたので、そのまま1ターンで占領できました。 買ってないのになんでいるんだと思いましたが、後から見たら50ターンあたりで軍事都市国家ブンケヤの文化力ミッションを達成できて友好状態になっていたようで、それで貰えたのかな。

このあたりからゲーム終了まで、ポルトガルのユニットを必死にライフル砲で潰すのに明け暮れた気がします。

80ターンあたり

この辺で陣形が整いユニットにも余裕ができたので、隊商や遺産を生産していました。 ずっと国庫が空かつ赤字だったのが解消できたんですが、あんまり影響もなかった気がします。 ローマの没落と違ってユニット解体もされないし。

遺産(英雄叙事詩)はスコアになるかなと思って建てた記憶がありますが、ユニット倒しての文化から得られるスコアと比べると屁みたいなもんだと思います。

またエルミタージュが残り1ターンで残っていたのでこのタイミングで立てました。 おそらく遅滞戦闘中に建ててたけど前線が危うくなって、焦ってユニット生産に切り替えたんだと思います。 もうちょっと早めに建ててればスコア伸ばせたと思う。

88ターン

ポルトガルのユニットを潰し続けてついにエチオピアのスコアを抜きました。 僅差なので油断をできませんでしたが、先述の通りイタリアに都市を落とされたので大差がつきました。

それでも最終スコアが5600を超えているので、やはりラスボスですね。

この少しあとにブロームフォンティンの防衛線を上げたのですが(ブロームフォンティンと同じ横一列から上の列へ移動)、騎士が突っ込んできて外国人義勇兵が2体ほど殉職しました。 まあその頃にはスコアは引き離していたので、最悪プレトリア残ってれば勝ちだし問題なしですね。

100ターン

そのまま何も変わらずポルトガルのユニットを潰し続けてゲーム終了です。スコアは6477でした。 エチオピアは5670でした。

完走した感想

というわけで実績解除です。 1月1日にやることがこれかよ。

感想ですが、いかに少ない外国人義勇兵とライフル砲で戦線整えるまで耐えるか、というゲームだなと感じました。 モンバサ・ケープタウンで遅滞戦闘していたのが地味にスコアに良かったんじゃないか? この頃にプレトリア・ブロームフォンティン双方で国立博物館・オペラハウスまでを揃えることができており、かなりスコアに貢献できたと思います。 1人目の大著述家も50ターン頃に誕生しており、文化力の支えになりました。

ポルトガルは大国化したため、反攻する余地とか無かったです。 というかヨーロッパ列強勢が大概大国化して手に負えなくなってましたけどね。 ポルトガルのターン処理中とか馬鹿みたいに長かったです。 冗談じゃなく10秒以上かかってたんじゃないか?計測してないけど。

そんなこんなで最後までずっとポルトガルのユニットをすり潰して終わりました。 結果これで文化を稼げていたので良かったんですけどね。 やってる最中は探検家や騎士が突撃してライフル砲が倒されるたびにリセットとかしてたので虚無を感じました。 オスマンの拿捕失敗リロードよりはマシだけど。

重い女とCTFをした話

BCACTF2.0

f:id:leno3s:20210614124505p:plain

AizawaAyakaでソロ参加していました。
2175ptで170位でした。

反省会

  • Cryptoが典型しか解けていない
  • 論理回路の先端に丸がついてたらNOTなのを2日間ずっと見逃していた
  • 行列なんもわからん

ctf4bもそうだったと思っているんですが、Cryptoのハードル高くないですか。 初心者向けを語っているctfで1発目から現代暗号だと何も信じられなくなる。俺達の古典暗号はどこへ。

代わりにpwnが本当に初心者向けで良かったです。BOFとROP辺りが分かっていると解けるのは楽しかった。

AizawaAyakaって誰だよ

以下の小説で主人公を努めている重い女です 読んでね❤

忘れえぬ魔女の物語【電子特装版】 (GA文庫) 宇佐 楢春
忘れえぬ魔女の物語2 (GA文庫) 宇佐 楢春

1日が平均5回くり返されるけど周りの皆はそのうち1回についてしか憶えていない、そんな不思議な送っている女の子のお話です。 先述の通り重い女な訳ですが、1巻では何でもしてくれます(ネタバレはできないので抽象的な書き方をしている)。 2巻では未散にそれを言われてショック受けてる場面があり、いやあ、とても良かったですね... それでも仲良く百合していて本当に笑顔になりました。ごちそうさまでした。濃すぎて味覚狂いそうだ。助けてくれ。

ところで作中で精神年齢75歳のババアを自称しているわけですが、身体年齢は15歳なのは実質ロリババアなのでは?(アホ)

あとトゥイッターで重い女の話をしてたら友人氏が現れて以下のツイートを残していきました。 最近で一番ギャグセンス高いと思う。

クソ

Gerald's new jobでbinwalkでGeraldFlag.pngを出すまではすぐだったんですが、画像中のフラグが手書きだったせいで3日間ずっとincorrectを出され続けました。許さんからな 2日目辺りで文法的にma5terの前がqじゃなくてaじゃないとおかしいのに気付いて修正したけどそれでもincorrectでした。本当にありがとうございました。

f:id:leno3s:20210614124628p:plain
bcactf{g3ra1d_15_a_ma5ter_p01yg1ot_0769398} ← incorrect

はい

重い女はいいぞ

「ローマよ、永遠であれ」の実績を獲得した

はい

Civ5のシナリオ実績最難関の一角と名高い「ローマよ、永遠であれ」を解除したので記事書きます。こんな場末のブログを見に来る人でルールを知らない人はいないと思うので、その辺は書きません。Civ5を知ってる人はwikiの解説を見るのが分かりやすいと思います。知らない人は憶える事が多すぎるのでまずCiv5を買ってみるところから始めるのをオススメします。

ちなみに戦略は先駆者(参考文献[1][2])のを丸パクリです。でもって楽なパターンを引いています。でもササン朝滅亡まではできてません。 具体的には、ゴートにナイススしか落とされず、フンに2都市とササンに2都市取られ、かつフンがササン方面に行ったために、双方中盤であまり戦力を感じませんでした。フンに落とされた北東部の2都市に至っては、ササン1都市落としてから攻勢に入って数ターンで落ちてます。ドロモン最高。 というわけで大分運に恵まれたプレイをしていたので、参考にはならないかもしれません。

ところどころ画像を混ぜていますが、基本的にはセーブを掘り起こして撮っています。なので欲しいタイミングの画像では無い場合が多いです。もっと言うと65のオートセーブ以降でセーブをしなかったため、65ターン以降の展開は微妙に実プレイ時と食い違っている可能性があります。

初動

何回かやってたところ、セレウキア防衛は首都のレギオン・戦闘弓射手(以下、弓兵)だと間に合わない場合が多いです(主に斧兵のせい)。 なのでメリテネからレギオンを移動させてくると斧兵対応が早くなって間に合います。連れてきましょう。

最初の生産はセレウキア・キレネだけドロモン、後は適当に1体だけカタクラフトにします。防衛を最優先で。 労働者は適当に城塞作ったりしましょう。市民配置済みのタイルの改善とかしましょう。 アレクサンドリア-キレネ間の道路撤去は先駆者の通りです。

西部

コンスタンティノープルのレギオンはアドリアノープルへ。弓兵はセレウキア防衛へ回す。 ドロモンはミストラ防衛へ。 シルミウムのレギオンはディラキウム左上、ナイススのはアドリアノープル左で城塞を作る。 ミストラのドロモンはセレウキア防衛へ向かわせる。

中部

セレウキアです。駆け付けたレギオンで上陸している斧兵を殴り、弓兵とドロモンで海上の敵を蹴散らします。以上です。

東部

テオドシポリスのレギオンはアマスィヤ右上で城塞。 メリテネのはセレウキアへ。 エデッサのはアンティオキア右で城塞。

耐えた後

防衛できる分の軍ができたら、生産にカタクラフトとカタパルト、市場を混ぜつつ前線を押し上げます。

西部

f:id:leno3s:20210303115228j:plain 画像は17ターンの様子です。今回西部ではなんとナイススとミストラしか陥落しませんでした。 大体シルミウムかナイススどちらかの弓兵は間に合うのですが、その後落とされるのを覚悟して生産をゴールドにしています。が、シルミウムが落ちる気配が無かったので拍子抜けつつ弓兵に戻しました。

ゴート軍がなぜかシルミウムを無視しつつゆっくりディラキウムに向かってきました。白兵と弓兵の攻撃で都市HPは黒まで減りましたが、丁度ユニットの生産が終わったので防衛に向けます。ギリギリ間に合いました。1体いたガドロートは何故か出航していたので都市砲撃+弓兵でツーパンでした。今思えばZOCを避けたのでしょう。

ミストラは弓兵1とドロモン4とカタクラフト1で奪還しました。

ちなみにシルミウム左下の道路が略奪されて交易路が途切れていますが、これはゲーム終了2ターン前まで放置されます。理由はうっかり忘れていたからです。

東部

東部ではフン族トレビゾンド・テオドシポリスを、ササンがメリテネ・エデッサを占領しました。 また、ササンのアンティウムがフン族に落とされているのが見えました。

メリテネとエデッサどちらから奪還するか迷いましたが、エデッサは攻めやすいのでメリテネから行こうと思いました。 普通に考えたら攻めやすい方から行くのでは?と思うかもしれませんが、これ以上フン族に勢いづかれるとマズいと思ったのだと思います。今考えたらどっちでもあんまり変わらない気がします。

一転攻勢

もどして(都市)。

西部

特に言う事もなくシルミウムとアドリアノープル両側からユニットを詰めてナイススを奪還しました。アドリアノープル側は付近まで平原多めなので進みやすいです。 本シナリオのボスはササンorフン族なので、最低限防衛できる弓兵だけ残して東部戦線のために注力します。 ナイスス奪還時に大将軍をひきつれていましたが、東に回してよかったでしょう。 あまり同時に建物(市場、サーカス)を作りすぎると前線が崩壊しかねませんが、西部に兵力を割かなくて良いので市場を作ってヌクヌクします。

暇なら余ったドロモン数体と白兵1体で東ローマの都市解放すると良いと思います。 ついでにラベンナ付近のフランク族を退治していましたが、間に合わずにラベンナが占領されます。 ドロモンが全滅しかねないので、諦めてドロモン4+剣士でガラ空きだったサロナエを解放しました。

ここで悲報がありまして、ゴートが社会制度の左ルートを直行しました。

東部

メリテネを奪還します。物量で押す作戦ができますが、ちゃんと傷ついたユニットは下げます。 そこそこ硬いのでカタパルト2体くらいで砲撃できるとスムーズだと思います。 しかし東西ともにユニットが死なないので財政を圧迫しています。市場を急ぎます。

f:id:leno3s:20210303115613j:plain 画像は28ターンの様子です。カタパルト2体が丘陵に載っています。

メリテネを奪還したら再占領されないようユニットを一掃します。できたら軍をエデッサに向けます。 メリテネから直行すると丘陵+川で進軍が遅いので、前もってアンティオキア付近に数体待機させておくとよいでしょう。都市防御力が低いので戦闘弓でも平気でしょうが、カタパルトを向かわせました。2ターンキルでした。

f:id:leno3s:20210303115631j:plain 画像は36ターンの様子です。カタパルトさまさまです。

中盤戦

西部

ゴートがシルミウムを襲いに来て泣いています。必死に弓兵でチクチクしますがガドロートが絶望的に硬いです。カタパルトも出てきてマジで焦ります。本当に焦ったのでシルミウム、ナイススで防壁を作ります。

f:id:leno3s:20210303115825j:plain 画像は45ターンの様子です。このあとシルミウムが黄HPまで減って絶望しかけます。カタパルトだけでも倒して時間を稼ぎます。

東部

アミダを落とします。進路が丘陵と川でゴミカスなので、大将軍で要塞を建てて少しでも安全かつ確実に進軍します。 こちらもカタパルトが2, 3体くらいで砲撃できるとスムーズだと思います。メリテネから右下へ、丘陵上のユニットを弓兵で倒しつつ進軍し、同時にエデッサ側からも進軍して砲撃できると良いと思います。ただしあまりニシビスに寄りすぎると都市砲撃を食らうので注意です。

f:id:leno3s:20210303115852j:plain 画像は45ターンの様子です。レギオンを壁にしてアミダを北部から攻めています。南部は川だらけなので直接弓兵を向けています。

割とユニット余裕ないとキツイ気もしますが、やってる際にはユニット余ってたから西部戦線が普通の激しさなら問題ない気もする。もう1回やれば分かるかもしれません。でも通しで10時間くらいかかるので嫌です。というか正直アミダ落とした時点でスコア勝利できる余裕があったので無理して攻める理由がありませんでした。

f:id:leno3s:20210303115917j:plain 51ターンの様子です。ササンの伸びが悪く、既に東西合計スコアでは勝っています。

また、アミダから右に1ヘクス開けて要塞を作りましたが、これは微妙でした。都市に近寄り難くはなりますが、普通に兵が来て略奪していきました。防衛戦力を配備しないと意味がありません。しょうがないので周りに弓兵を配置しておきましたが、トスピアからクリバナリウスが突撃してきて弓兵が1体殉職しました。そもそもアミダの真右に都市は無い。 要塞にするなら敵地の道路タイル奪うのが一番攻めやすくなると思います。

終盤

西部

ゴートがヤバいので必死に弓兵を生産して配備します。幸いユニットの壁ができる頃には敵が引いてくれました。

f:id:leno3s:20210303120452j:plain 55ターンの様子です。防壁は間に合いました。が、カタパルトはヤバいので死に物狂いで倒します。

f:id:leno3s:20210303120010j:plain 61ターンの様子です。必死に弓兵を増産して配備しています。この後アドリアノープルにいるカタクラフトをナイスス東部に出したところ、引いてくれました。 できれば防衛のために大将軍で要塞を建てたいですね。そろそろ大将軍が生まれるころです。 f:id:leno3s:20210303120746j:plain 画像では移動済みですが、アンティオキアで誕生しました。勘弁してくれ。

このあとちょくちょく兵を出してきますが、丘陵ばかりで進軍は遅く、弓兵の的でした。

東部

トレビゾンド、テオドシポリスを奪還します。幸いな事にフンは社会制度で右ルートを進めている上、ササンと喧嘩を続けているようです。 トレビゾンドではドロモンを数体用意しておくと便利です。テオドリポリスはユニットを詰めつつカタパルトを当てるしかありません。

f:id:leno3s:20210303120836j:plain 画像は55ターンの様子です。トスピアからの兵を弓兵で落としつつカタパルトで砲撃します。都市防御が25ありますが、カタパルト3体で攻撃しているので柔らかいものです。占領役のレギオンが倒されない事を祈りつつこの後占領しました。その後1ターン置いて再度占領されましたが、弓兵の斜線確保とレギオンの殉職を避けるためにスワップしたのが効きました。再度占領します。

f:id:leno3s:20210303120931j:plain 61ターンの様子です。完全に勝利を確信したので守りに入っています。

f:id:leno3s:20210303121022j:plain 66ターンの様子です。勝ちを確信しましたが暇なのでトスピアを攻めに入りました。大将軍で道を奪ったので進軍はかなり楽でした。カタパルト3体で攻めれているので瞬殺でした。

終了

f:id:leno3s:20210303121046j:plain ゲーム終了です。スコアは東西合わせて3819+2413=6232でした。ササンは5316です。前回のプレイではササンは6000以上出していたので、フンがいい感じに邪魔をしてくれたのだなという感じです。実際、アンティウム及びアルタクサタがフンに占領されていました。

終盤で東部進行の手を緩めましたが、かなり余裕があったのでちゃんとやればササン滅亡で勝利画面を見ることができていたのかもしれません。また中盤では後方でユニットが余っていたので、複数都市を同時に攻めた方が効率が良かったと思います(特にトスピアとニシビス)。

実際の流れは以下です。左の数字はターン数です。

2 トレビゾンド陥落(フン) 4 ミストラ陥落(ヴァンダル) 5 ナイスス陥落(ゴート) 6 テオドシポリス陥落(ササン) 6 テオドシポリス陥落(フン) 7 メリテネ陥落(ササン) 9 エデッサ陥落(ササン) 9 テオドシポリス陥落(ササン) 14 アンティウム占領(フン) 17 ミストラ奪還 21 ナイスス奪還 30 メリテネ奪還 36 エデッサ奪還 36 エデッサ陥落(ササン) 37 エデッサ奪還 45 アミダ占領 45 アミダ陥落(ササン) 46 アミダ占領 54 トレビゾンド奪還 55 テオドシポリス奪還 56 テオドシポリス陥落(フン) 57 テオドシポリス奪還 64 アルタクサタ占領(フン) 67 トスピア占領

やはりフンがずっとササンと喧嘩していたぽいです。アマスィヤにちょくちょく顔を出してはいましたが、あまりユニットは見えませんでした。アルタクサタ方面に戦力を向けていたのでしょう。おかげでトレビゾンドとテオドシポリスは大した苦労も無く終わりました。ちなみにリザルトのマップは以下でした。 f:id:leno3s:20210303121204j:plain 一番幸運な展開だった思います。先も言った通り、中盤からやり直せばササン滅亡もワンチャンあるかもしれません。また10時間も向き合う事を考えるとやりたくありませんが。

参考文献

[1] 実績解除: ローマよ、永遠であれ - paraphrohn’s diary
[2] プレイレポ/シナリオ/実績解除レポ01【ローマよ、永遠であれ】 - Civilization5(Civ5 シヴィライゼーション5) 攻略Wiki

Cookie ClickerのStock Marketがちょっとだけ楽になるやつを作った

Cookie ClickerのアップデートでStock Marketが追加され, それに伴う実績も追加されましたね. Gardenのようにセーブリロードで楽ちんちん, という訳にはいかず, 皆様苦労されているかと思います. なので, ちょっとだけ値動きの予測が楽になる物を作りました.

具体的にはこんな感じ(下図参照)

f:id:leno3s:20201106143005p:plain

機能の説明

個人的な話が入りますが, Cookie Clickerで取得できる情報を利用するのは構わないが, 直接の変数の書き換えはNG, というスタンスでプレイしています. なのでこのツールも表示する情報の追加のみです. 自動で売買などはしません.
で, 機能としては

  • CustomModeの表示
  • CustomModeの残りtick数の表示

の2点になります. 上の図みたいな感じ.

使い方

他のプラグインと同様に, アドレスバーで以下を実行すると勝手に入ります.
javascript:(function(){Game.LoadMod('https://leno3s.github.io/smutil.js');}());

あとは自分で判断して取引しよう!良い株ライフを!

諸注意とか

文字の色がstock数に応じている

無理矢理DOMを弄って, value/stockの欄にmode/tickの表示を足しているためです. html/cssへの理解が浅い事, 私が既にGaseous Assetsを取得済みである事から, おそらくそのまま放置されます.

URI見ればわかる通りGitHubにあるから, プルリク来れば対応します.

傾向通りの値動きをしない

当然ですが, いくらfast riseが続こうがCerealsが$100を超えることは滅多にありません. どこかで天井に到達して上がらなくなります. rise/fallも同様です. そのうち天井か底に当たって這うような値動きをします. 天井で買ってもほぼ動かないので儲けにはなりません. またfast riseはtick毎に3%の確率でfast fallに変化します. 気をつけましょう.

そんなこんなで, いくらCustom modeを把握しようが値動きの癖はあるので, これに頼るだけでは安定した儲けは出せません. ちゃんと癖を把握して安く買い, 高く売りましょう. Resting valueについて把握しておくだけでも, 相当安定して稼げるようになると思います. 但しもちろん時間はかかる.

値動きのアルゴリズムについてはソース(minigameMarket.js)を読むか, wiki(下記)を読むといいでしょう. 特に日本語の方はいい感じに計算方法が説明されています. そこまで詳細に把握する必要はない気もするが...

Sugar lump・minigame(砂糖の塊・ミニゲーム) > StockMarket - cookie clicker 日本語wiki - アットウィキ
Stock Market | Cookie Clicker Wiki | Fandom

はい

それでは良い株ライフを!

ErgoDash作った

ErgoDashを作った

はい.

ただの日記なので, 作る人はちゃんと公式のビルドガイドを読むこと.

構成

  • ErgoDash 親指あり
  • Zealios Purple 62g
  • MDA Big bang

f:id:leno3s:20200610163235j:plain

全部遊舎工房で手に入る.

LEDは付けず, アンダーグロウもしない. 経験的に要らないと思っているため. 具体的には以下の物を用意した.

必須のもの

  • 上で書いたやつ3つ
  • USB TypeAオス - MicroUSB TypeBオスのケーブル
  • TPRSケーブル
  • 半田ごて
  • はんだ
  • ファームウェア書き込むパソコン
  • やっていく気持ち

あった方がいい物

  • はんだ吸い取り線
  • マスキングテープ
  • ニッパ
  • ドライバ
  • 使うパソコン

用意したけど使わなかったもの

  • リードベンダ

ケーブル類は全て遊舎工房で手に入る. マスキングテープは今回新しく用意したが正解だった. 素子が固定できるので想像以上に便利. リードベンダは使わなかった. ダイオードiPhone使って曲げてしまったので...

半田ごては詳しい事は知らんがC型のこて先使っておけば間違いないと思う.

やっていき

MogeMicro対策

ProMicroのUSB端子がモゲる場合が多いらしいので対策をしておく. 接着剤で端子を補強する.

f:id:leno3s:20200610163542j:plain

した.

組立

やっていきの時間です. 組み立てましょう. 公式のビルドガイドのオプションを飛ばしてやっていく.

ダイオード刺す

まず曲げる

f:id:leno3s:20200610163915j:plain

刺した ダイオード1つ余ったんだけどなんで?

f:id:leno3s:20200610163728j:plain

リセットスイッチとTPRSジャック指す

刺した 写真撮り忘れたけど上とほぼ変わらんしええだろ

はんだ付けする1

はんだ付けした1

f:id:leno3s:20200610163812j:plain

スタビライザ・上側の板・スイッチつける

つけた これも写真撮ってなかった

ところでこのアクリル板の保護フィルムがアホほど剥がしづらい. 泣いた

角のところを爪でそぎ落とすようにしてやると角の部分が剥がれるのでそうするといいかもしれない. アクリル板が傷つくかもしれない点に注意.

はんだ付けする2

はんだ付けした2 写真だと何故かもうProMicroがついてるが気にしない.

f:id:leno3s:20200610164011j:plain

ちなみにここで1回PCBの裏表を間違えたりした. スイッチ5個くらい付けたところで謎に浮いてて違和感があり、i got kotonaki. 吸い取り線があってよかった.

Pro Micro つける

刺した

下側のアクリル板つける

保護フィルム剥がしバトル2

f:id:leno3s:20200610164124j:plain

動作の確認

ここで一度動作を確認しておいた方がよい. というかPro Microを付ける前にファームウェアが焼けることを確認しておいた方が よい. 僕はした.

ファームウェア焼く

公式ビルドマニュアルに解説が無い鬼門. 泣いた.

QMK Firmwareを clone したあと qmk\_firmware/util/qmk\_install.sh を実行すると, 環境を勝手に判断して 必要な諸々をインストールしてくれる. よかったですね.

僕は普段Windows使っているのでWSLからどうにかしたかったが, ファームウェアのビルドはできても書き込みができない. 泣いた.

とりあえずGUIのQMK Toolboxも試したがよくわからなかったので偶然メイン機の上にあったUbuntu機でやった. ヘッドレス運用だから書き込むごとにメイン機との間で差し直すという. 面倒臭いね.

なにはともあれ qmk\_firmware/$ make ergodash:default を実行するとデフォルトキーマップでビルドして hexファイルを吐いてくれる. よかったですね.

ちなみにここで $ make clean しても qmk\_firmware/build/\* を削除してくれるだけで, qmk_firmware/*.hex は削除してくれない. $ make distclean でhexを消してくれる. 詳細はMakefile見ればいいと思う.

無事出来たら $ sudo make ergodash:default:avrdude で書き込める. 実行してからProMicroをリセットすると 勝手に認識してやってくれる. 5秒くらい口を開けてホゲーっと待っていると終わっている. ライフゴーズオン

/dev/ の誰かに書き込むわけなのでsudoする. しないと書き込めずに進まない.

ところで当たり前だがmakeたんは賢いので書き込むhexファイルがなければ勝手にビルドしてくれる. しかし $ make ergodash:default する前に $ sudo make ergodash:default または $ sudo make ergodash:default すると各種オブジェクトファイルの owner が root の状態で生成されるのでオススメしない. $ make clean が root 権限無いと動かず泣く.

これでできなくても最悪QMK Firmwareの Tutorial あたりを読めばどうにかなるんじゃないかしら. 知らんけど.

キーキャップ付ける

ぺちぺち嵌めていく

完成

完成. よかったですね.

f:id:leno3s:20200610164610j:plain

あとは配列のカスタマイズをしていく.

配列のカスタマイズ

qmk\_firmware/keyboards/ergodash/rev1/default/ を適当に ergodash/rev1/ 以下にコピーし, leno3sとでもリネームしておく. コピー先のrules.mkを適当に編集し, あとはひたすらkeymap.cを書いていく.

ここで問題発生. defaultのkeymap.cは親指無しの想定. 僕は親指ありの70キーで作ったので例がない. 困った.

しょうがないので親指あたりを適当に弄って結果を見つつ修正を繰り返す. 何回かやってたらうまくいった. 出来上がったものはここ にある. あとは $ make ergodash:leno3s とかするとできる.

ちなみに実際にこれを書いているとき, 親指のキーが余ってしまい圧倒的計画性の🚀NASA🚀を披露した. 最終的には公式のキーマップリストを見ながら なんとか埋めた.

キーキャプの方は今のところこんな並び.

f:id:leno3s:20200610164730j:plain

感想とか

分割式キーボードを始めて使ったが, 肩の力が抜けてとても良い. しかし問題もあって, キーボード中央あたりのキーが片方の指でしか押せない. y, bに関しては結構両方の指で共有している状態だったのでこれは結構困った.

あとこのergodashはいわゆるlinear staggered配列だが, zxcvあたりがasdfに対して右にズレていないのが思っていたより辛い. 特にxを親指で押す癖があったが, このキーボードでやると大体cが押される. 泣いた.

また今日1日LaTeX文書を書いて, 角括弧/波括弧があの位置にあるとShiftと同時に押すのが非常につらく, 左手が破滅した. (RShiftは使っていない.) 結果として「,.」のLower layerに「[]」を割り当てることとした. そこそこ押しやすくなった.

まあここら辺は慣れですね.

あとキーボードの間に物が置けるのはとても良い. (当方大学生なので)オンライン講義とかでノート取るときも, キーボードを移動せずに画面に対して正面に置ける. 姿勢が良い.

こうして共通規格に対する反逆をし, 今日も社会性を失っていくのでした. 完. (ちょっとErgodashに慣れてからUS配列触ったらアホみたいな量のタイポが出ました)

この記事はErgodashで書きました.

SECCON Beginners CTF 2019 write up

チームsproutsで参加しました. 1221pts/80thでした. 僕はうち216ptsでした.
言い訳をすると, バイトで開始が遅れてる間にOLIETくんが解けるReversing全部解いてました. f:id:leno3s:20190526202342p:plain

OLIETくんのWriteup

oliet.hatenablog.jp

[Web] katsudon

Rails 5.2.1で作られたサイトです。 https://katsudon.quals.beginners.seccon.jp クーポンコードを復号するコードは以下の通りですが、まだ実装されてないようです。 フラグは以下にあります。 https://katsudon.quals.beginners.seccon.jp/flag

以下のサイトへアクセスするとフラグがあるらしい. 実際にアクセスするとbaes64+hashのような何かがある.
BAhJIiVjdGY0YntLMzNQX1kwVVJfNTNDUjM3X0szWV9CNDUzfQY6BkVU--0def7fcd357f759fe8da819edd081a3a73b6052a

base64部分をデコードしてみる.

$ echo BAhJIiVjdGY0YntLMzNQX1kwVVJfNTNDUjM3X0szWV9CNDUzfQY6BkVU | base64 -d
I%ctf4b{K33P_Y0UR_53CR37_K3Y_B453}:ET

これWebか...?
(追記: 識者いわくkatsudon okawariの方が想定解だったらしい)

[Reversing] seccompare

https://score.beginners.seccon.jp/files/seccompare_44d43f6a4d247e65c712d7379157d6a9.tar.gz

実行ファイルが落ちてくる. 第一引数とフラグの文字列をstrcmp()に渡しているが, そのその際rdiにフラグがセットされている. gdbかltraceで見ればいいと思う. 僕はgdbで見た.
ctf4b{5tr1ngs_1s_n0t_en0ugh}

[Reversing] Leakage

https://score.beginners.seccon.jp/files/leakage_80a8c3c2bd63254a033ea21093944b1e.tar.gz

gdbで見ると, 入力した文字列について, is_correctで比較している事がわかる. is_correctの動作を観察してみると, 入力文字長が0x22 = 34であることを確認したのち, call 0x4006d0 <convert>の後にraxに比較する文字を1文字入れ(というかconvertの返り値がraxに入っている), 入力のn文字目と比較, を繰り返している事がわかる. ので, ctf4b{aaaa...}というような文字列を入力しておいて, 1文字ずつ修正, 入力する事でフラグを得られた.

ctf4b{le4k1ng_th3_f1lag_0ne_by_0ne}

[Crypto] So Tired

最強の暗号を作りました。 暗号よくわからないけどきっと大丈夫!
File: so_tired.tar.gz

問題のファイルを展開するとbase64っぽいテキストがある. 実際にデコードするとzlib compressed dataらしい.

$ cat encrypted.txt | base64 -d | file -
/dev/stdin: zlib compressed data

このzlibを展開したところまたbase64テキストが出てきたので, デコードするとまたzlib compressed dataだった. (手作業で8回くらいやった)

#!/usr/bin/env·python3  
import zlib  
import base64  
  
b = open('encrypted.txt').read()  
for i in range(500):  
    z = base64.b64decode(b)  
    b = zlib.decompress(z)  
print(b)  

b'ctf4b{very_l0ng_l0ng_BASE64_3nc0ding}'
はい. (実際にはREPL上でやっていて, エラーが起きたタイミングでprint(b)した. ので上の回数が合ってるかは知らん.)

[Misc] Containers

Let's extract files from the container. https://score.beginners.seccon.jp/files/e35860e49ca3fa367e456207ebc9ff2f_containers

バイトから帰る前にチームメイトが既に解いていた. $ fileしてもよくわからないので$ binwalkとか$ foremostしてみると, ASCII文字1文字が書かれた連番のpngファイルがいっぱい出てくる. ので繋げて読むとフラグ. f:id:leno3s:20190526202635p:plain

僕が解いてないやつとか

[Web] Ramen

チームメイトのWeb担当が解いた. 単純なSQLiらしい.
'or'' union SELECT last_insert_id(),last_insert_id() -- を入れるとテーブルの一覧が出るので, その中からunion使ってflagのあるテーブル連結すればいいらしい.

[Pwnable] *

Pwnなんもわからん事がわかった. shellcoderはcall rdx, OneLineはcall raxしている箇所があり, 怪しいなぁとは思ったが何も分からなかった. OneLineは実際に指定したアドレスに飛ばす事は出来たが, 多分そうじゃない. ので諦めた.

[Reversing] Linear Operation

is_correct関数長すぎィ!自分、草いいすか?
最初の方で入力がctf4b{(56文字入る)}な事を確認しているのは分かったが, その後の処理長すぎて何を見たら良いのか 何も分からなかった.

[Crypto] Go RSA

cdから復元できる攻撃あったか...?
ncの接続後に整数入れるとなんか出力されるけどこれがよく分からなかった.

[Crypto] Bit Flip

ncするたび, mのランダムな1ビットだけ反転してRSAで暗号化したものが得られる. また, この反転されるビットはmのビット長の1/4より下位である. 実際の処理はbitflip.pyにあり, その内容からe=3, n=(長いので略)である事がわかる.
eが小さいので最初Low public-exponent attackか?と思ったが, どうやらmが十分に大きいようで, 適用できなかった.
その後適当にRSAの攻撃を調べていたら, Coppersmith's short pad attackという物が見つかった. これは, mの上位ビットがlen(bin(n))//pow(e, 2)程度合致している(c1, c2, n, e)の組に適用できる.
この問題のnは1024bitsなので適用できると考えたが, 拾ってきた実装が上手く動かなかった. 悲しいね.

(というのは, https://betit0919.hatenablog.com/entry/2019/05/26/165827を読んでいて気付いたのだが, 異なるビットの位置の差異がe^2 = 9より小さい必要がある. 後でやります...)

[Misc] Dump

ネットワークパケットが渡される. webshellに向かってls -alした結果のような物(と/home/ctf4b/flag)が見えたが 肝心のwebshellどこやねんという気持ちになって分からなかった.

最終的にチームメイトが解いていたが, 上手くやるとパケットから画像が取り出せるらしい.

[Misc] Sliding puzzle

競プロ. ソケット通信の部分のコードだけ書いて, あとは競プロの民が解いた.

追記(19/05/26)

Bit Flip解けた.

f:id:leno3s:20190526235330p:plain
図1. コピペに頼るせいで変数名統一されておらずにエラーが出る図
方針は上記で合っていて, ちなみに使った実装も上のブログで出した物と同様だった. inaz2.hatenablog.com

反転したbit位置が偶然9桁以内収まるのを待つ必要があるので, 繰り返す部分にはEnter押すだけでいいようにした. 具体的には以下のようなシェルスクリプトを置いておき, 失敗するたびに上の図1のように実行していた. (これでシェルスクリプトって言っていいのかは謎)

nc 133.242.17.175 > nc.log
nc 133.242.17.175 >> nc.log

あとは$ sh ./nc.sh && sage solover.py < nc.logとかやればよい. (上の画像を見るとどうせしばらく使わんからとsageをpathに追加してないのがバレる)
上の図1で失敗しているprintを修正して実行すると, ctf4b{b1tfl1pp1ng_1s_r3lated_m3ss4ge} DUMMYDUMMYDUMMYDUMMYDUMMYDUMMYDUMMYDUMMYDUMMYDUMMYDUMMYDUMMYDUMMYDUMMYDUMMYDUMMYDUMIYが得られる.

追記 (19/05/28)

Go RSA解けた. f:id:leno3s:20190527235622p:plain

問題だが, Nを失くしちゃった, という旨と共に$ nc 133.242.17.175 1337が与えられる.
実際に接続してみると, 暗号文cが表示された後, プロンプトの待機状態になり, 整数を入力できる(3回まで, 非整数値を入力すると"Bye."). 最後に, dが渡される.
ここからが自力では分からなかったが, この入出力は暗号化オラクルであるらしい. 実際に適切な値を入力すると, 入力値を平文mとしてRSAの暗号化処理c := m^{e} (\mathrm{mod}\ n)をし, cを出力している事が確認できる. f:id:leno3s:20190528000115p:plain 上の画像では, 0, 1を入力したときにそのままの値が出てくるが, 2の時には入力値とは異なる値が出力されている事が確認できる.

ここで, m=-1の場合を考えてみる.

    \begin{align}
      (-1)^{e} \equiv -1 \equiv -1 + n\ (\mathrm{mod}\ n)
    \end{align}
  と変形できるが, この時の出力されるc-1+nである事が確認できる. (RSA公開鍵暗号において, eは必ず奇数である, 特に素数を用いる場合が多い. e\phi (n)が互いに素である必要があるが, \phi (n)は必ず偶数であるため.)
よって, -1を入力し, 出力されたcに1を足す事でnが求まる. これにより(c, d, n)の組が揃い, 単純に復号する事ができる.

実際にやってみる. f:id:leno3s:20190528004100p:plain

#!/usr/bin/env python3
import codecs

c = 18115525754707139247737911291079251015437886046824081894326069879183338686386831965083944455490302856924438972804102557211914041415916695525483840160263376766064903718826749107093832967322507099851575610601875351034662417918548789355304620557795980960827104773522234489047031012850613853078629790754912822386123877893152687558377470454221776300175235717030894742931132275324623086858960614138894594750435302300599934845888263775524718824690321411581765233365101101343228441540927101936040730136899922703915755085690801429962855693535554144212753599517289073383827310737516704869686779546066216528686774284182800149367
n = 19230413236215593516981780036574340206180267968093886508442679292227379103152261902186410411818746662353389048895399615967667936194946498523967201987872797073747338298250295774005218990597010562236430347595668174278928218368912660995360034411350013181586257644115577004816499030775983961763620429362792687334191628151347050130895017287615792312965309996415680670873547471696399932010453146246904838448703974001663916780692600806141083869194806679430239004402405243275582385242550855157742276686882808084128732672972274717521904626041479613981471591527671085541293993692942750129915766979565141263349085528159778380258 + 1
d = 12657324951666933822856189078805418910444360270865280504572736224568109998833879631547263370679363657586947678611348670741433451267302625392218887421592092628182022137621874033103271836953059304097390168513766915874938548111164938045620801140851643630329505618758404102717007220219919193350863341944144916014395151363006132944262569929025851874958157434330682759963932480480287216517053266529733255160619504067036647400774703853620408067897800287140150785773850414527502599792758669985621522683934608508643995372589652968559263833779114329202057205549519905314114334589390027687281982112791551360035436465610719511553

m = pow(c, d, n)
print(codecs.decode('%0512x'%m, 'hex_codec'))

実行すると, b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00ctf4b{f1nd_7he_p4ramet3rs}'が得られた.

終了後に作問者のツイートをを見て-1解法を考え, 理解した瞬間は感動した. すごい. ちなみにe=\mathrm{0x}10001=65537だったらしい.

Surface Pro4のタイプカバーが壊れた

壊れた

火曜, 水曜とSurfaceを使っていたら, Surfaceのタイプカバーが反応しなくなってしまった. とてもつらい. ちなみに使用期間は2年と3ヶ月程度である.

ネットで探して出てくるような処置(再接続, 再起動, ファームウェア入れ直し, Surfaceの完全な再起動)は 一通り試したのだが, 全く改善しなかった. 接触部を強く押し込んだら1回だけ繋がったので接触かなぁ, と思いつつコネクタ部分をむにむにしていたら

は?「俺」

いや, 結局この部分マグネットでしかないし, どっちにしろ反応はしないからまあいいんだが. いやでもこんな簡単に 壊れてええんかお前.

買う

本体の状況と比較してタイプカバーが原因の可能性が高いだろうと思い, しょうがないと秋葉原に走る. 定価で2万ってアホちゃうんか. もう少しマシなもん作ってくれ. 3年前に買った謎メーカーの 4000円の光る青軸キーボードだってまだピンピン動いとるぞ. (持ち運びしない物と比べてはいけない(戒め))

はい.

というわけで無事動作確認ができて, 今日はめでたしめでたし. いや2万吹っ飛んだんだが. 何もめでたくないね.

余の談

壊れた原因の推察.

普段Surfaceを使うとき, 体育座りをして膝の上に本体を載せ, 大腿部にタイプカバーを当てるようにして(=180度ほど開いて) 使用している. この時, Surface天板(画面の面)にタイプカバーがマグネットで一部くっ付いているが, 勿論それを外してはいなかった. これによって可動域が300度以上曲がるのだが, これによって内部で断線が起きたりしたと思われる. 分解すればわかりそうだけど面倒くさいからしない.

余談のおまけ

バカ.