diff options
8 files changed, 16 insertions, 41 deletions
diff --git a/vhosts/blog/content/posts/2025-06-14/baba-is-you.dj b/vhosts/blog/content/posts/2025-06-14/baba-is-you.dj index 5370b94f..01864679 100644 --- a/vhosts/blog/content/posts/2025-06-14/baba-is-you.dj +++ b/vhosts/blog/content/posts/2025-06-14/baba-is-you.dj @@ -192,6 +192,7 @@ Steam の場合、全実績解除と読み替えてもよい。 #### SUBMERGED RUINS、SUNKEN TEMPLE  +  ここまでスルスル解けていて初めてしばらく止まった面。 @@ -202,6 +203,7 @@ Steam の場合、全実績解除と読み替えてもよい。 #### PRISON、DUNGEON  +  高難易度面で当然のように要求されるテクニックの初出。 @@ -347,6 +349,7 @@ PRISON と DUNGEON で既出のテクニックが肝だが、ちと離れすぎ #### STARDROP、METEOR STRIKE  +  両方とも難しい面ではあったが、単文字のテキストが綺麗に活用された美しい面として印象に残っている。 diff --git a/vhosts/blog/nuldoc-src/renderers/html.ts b/vhosts/blog/nuldoc-src/renderers/html.ts index 6c8170ed..84b3ebaa 100644 --- a/vhosts/blog/nuldoc-src/renderers/html.ts +++ b/vhosts/blog/nuldoc-src/renderers/html.ts @@ -13,7 +13,7 @@ type Context = { isInPre: boolean; }; -type Dtd = { type: "block" | "inline"; auto_closing?: boolean }; +type Dtd = { type: "block" | "inline"; self_closing?: boolean }; function getDtd(name: string): Dtd { switch (name) { @@ -26,7 +26,7 @@ function getDtd(name: string): Dtd { case "body": return { type: "block" }; case "br": - return { type: "block", auto_closing: true }; + return { type: "block", self_closing: true }; case "button": return { type: "block" }; case "canvas": @@ -60,7 +60,7 @@ function getDtd(name: string): Dtd { case "header": return { type: "block" }; case "hr": - return { type: "block", auto_closing: true }; + return { type: "block", self_closing: true }; case "html": return { type: "block" }; case "i": @@ -68,9 +68,9 @@ function getDtd(name: string): Dtd { case "li": return { type: "block" }; case "link": - return { type: "block", auto_closing: true }; + return { type: "block", self_closing: true }; case "img": - return { type: "block" }; + return { type: "inline", self_closing: true }; case "ins": return { type: "block" }; case "main": @@ -78,7 +78,7 @@ function getDtd(name: string): Dtd { case "mark": return { type: "inline" }; case "meta": - return { type: "block", auto_closing: true }; + return { type: "block", self_closing: true }; case "nav": return { type: "block" }; case "noscript": @@ -237,7 +237,7 @@ function elementNodeToHtmlText(e: Element, ctx: Context): string { } ctx.indentLevel -= 1; - if (!dtd.auto_closing) { + if (!dtd.self_closing) { if (e.name !== "pre") { if (isBlockNode(e)) { if (needsLineBreak(prevChild)) { diff --git a/vhosts/blog/public/about/index.html b/vhosts/blog/public/about/index.html index a11b49b6..b19a49ed 100644 --- a/vhosts/blog/public/about/index.html +++ b/vhosts/blog/public/about/index.html @@ -44,7 +44,6 @@ <div class="my-icon"> <div id="myIcon"> <img src="/favicon.svg"> - </img> </div> <script defer src="/my-icon.js?h=206d876c67ce6596bb8a1ae16fc7634b"> </script> diff --git a/vhosts/blog/public/posts/2022-04-24/term-banner-write-tool-showing-banner-in-terminal/index.html b/vhosts/blog/public/posts/2022-04-24/term-banner-write-tool-showing-banner-in-terminal/index.html index 87bf72ba..392de62d 100644 --- a/vhosts/blog/public/posts/2022-04-24/term-banner-write-tool-showing-banner-in-terminal/index.html +++ b/vhosts/blog/public/posts/2022-04-24/term-banner-write-tool-showing-banner-in-terminal/index.html @@ -64,7 +64,6 @@ </div> <p> <img alt="term-banner が動作している様子のスクリーンショット" src="/posts/2022-04-24/term-banner-write-tool-showing-banner-in-terminal/screenshot.png"> - </img> </p> <p> コマンドライン引数として渡した文字列をターミナルに大きく表示する。 diff --git a/vhosts/blog/public/posts/2024-12-04/cohackpp-report/index.html b/vhosts/blog/public/posts/2024-12-04/cohackpp-report/index.html index c4f6d334..f8b0bce5 100644 --- a/vhosts/blog/public/posts/2024-12-04/cohackpp-report/index.html +++ b/vhosts/blog/public/posts/2024-12-04/cohackpp-report/index.html @@ -107,7 +107,6 @@ </p> <p> <img alt="asumikam「いまむらさんおつかれさまです。ぺぱ合戦で、LTタイムあることになり、技術で3人「ぺ」側を選出することになったのですが、いまむらさん、LTやりませんか。「ぺ」陣営で一緒に頂きを目指しませんか。」nsfisis「OKです!」" src="/posts/2024-12-04/cohackpp-report/lt.png"> - </img> </p> <p> 最初は直近のカンファレンスに出して落選したプロポーザルテーマを LT に編集して話そうとしていたのですが、この機会でなければ話せない・この機会で話すことに意味があるテーマにしようとネタ出しをおこない、最終的に次のテーマでの登壇となりました。 diff --git a/vhosts/blog/public/posts/2025-01-08/phperkaigi-2023-tokens-q1/index.html b/vhosts/blog/public/posts/2025-01-08/phperkaigi-2023-tokens-q1/index.html index 3e030b6d..3a153d33 100644 --- a/vhosts/blog/public/posts/2025-01-08/phperkaigi-2023-tokens-q1/index.html +++ b/vhosts/blog/public/posts/2025-01-08/phperkaigi-2023-tokens-q1/index.html @@ -118,7 +118,6 @@ </p> <p> <img alt="全体がQRコードになっており、中央には小さな文字で「Password is one of the PHPer tokens.」と書かれている" src="/posts/2025-01-08/phperkaigi-2023-tokens-q1/Q1.png"> - </img> </p> </section> <section id="section--how-to-solve"> diff --git a/vhosts/blog/public/posts/2025-04-20/trick-2025-most-ruby-on-ruby-award/index.html b/vhosts/blog/public/posts/2025-04-20/trick-2025-most-ruby-on-ruby-award/index.html index 5e1debc5..14018ff6 100644 --- a/vhosts/blog/public/posts/2025-04-20/trick-2025-most-ruby-on-ruby-award/index.html +++ b/vhosts/blog/public/posts/2025-04-20/trick-2025-most-ruby-on-ruby-award/index.html @@ -110,7 +110,6 @@ </p> <p> <img alt="ブラウザで表示された index.html のレンダリング結果。entry.rb の内容がシンタックスハイライトされて表示されており、英単語や記号に振り仮名が振られている" src="/posts/2025-04-20/trick-2025-most-ruby-on-ruby-award/screenshot.png"> - </img> </p> <p> 自身のソースコードを出力するプログラム、いわゆる quine の亜種になっている。 diff --git a/vhosts/blog/public/posts/2025-06-14/baba-is-you/index.html b/vhosts/blog/public/posts/2025-06-14/baba-is-you/index.html index 1283ee2b..e5409b73 100644 --- a/vhosts/blog/public/posts/2025-06-14/baba-is-you/index.html +++ b/vhosts/blog/public/posts/2025-06-14/baba-is-you/index.html @@ -84,7 +84,6 @@ </p> <p> <img alt="最初の面「BABA IS YOU」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_BABA_IS_YOU.jpeg"> - </img> </p> <p> ここには次のようなルールがある。 @@ -281,10 +280,9 @@ <h5><a href="#section--spoiler--impressive-levels--map--submerged-ruins-and-sunken-temple">SUBMERGED RUINS、SUNKEN TEMPLE</a></h5> <p> <img alt="「SUBMERGED RUINS」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_SUBMERGED_RUINS.jpeg"> - </img> - + </p> + <p> <img alt="「SUNKEN TEMPLE」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_SUNKEN_TEMPLE.jpeg"> - </img> </p> <p> ここまでスルスル解けていて初めてしばらく止まった面。また、苦戦して解いた次の面がその面の派生で絶望するという経験をした最初の面。この瞬間が苦しくもあり楽しくもある。 @@ -294,10 +292,9 @@ <h5><a href="#section--spoiler--impressive-levels--map--prison-and-dungeon">PRISON、DUNGEON</a></h5> <p> <img alt="「PRISON」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_PRISON.jpeg"> - </img> - + </p> + <p> <img alt="「DUNGEON」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_DUNGEON.jpeg"> - </img> </p> <p> 高難易度面で当然のように要求されるテクニックの初出。可能な行動が大きく制限されているのでマシだが、それでも初見時には困惑した。 @@ -307,7 +304,6 @@ <h5><a href="#section--spoiler--impressive-levels--map--further-fields">FURTHER FIELDS</a></h5> <p> <img alt="「FURTHER FIELDS」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_FURTHER_FIELDS.jpeg"> - </img> </p> <p> お気に入りの面。<code>MOVE</code> を活用するのも <code>YOU</code> を一時的に消すのも好きなので、両方出てくるこの面は大好き。 @@ -317,7 +313,6 @@ <h5><a href="#section--spoiler--impressive-levels--map--scenic-pond">SCENIC POND</a></h5> <p> <img alt="「SCENIC POND」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_SCENIC_POND.jpeg"> - </img> </p> <p> はい。まあこいつは後で触れることにしよう。 @@ -327,7 +322,6 @@ <h5><a href="#section--spoiler--impressive-levels--map--concrete-goals">CONCRETE GOALS</a></h5> <p> <img alt="「CONCRETE GOALS」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_CONCRETE_GOALS.jpeg"> - </img> </p> <p> これも初見時に苦戦した面。PRISON などと同様に一度理解すれば何ということのない面だが、最初に解けたときは偶然だった。<code>FLAG</code> <code>IS</code> <code>WIN</code> がギリギリ取り出せそうに「見える」のが嫌らしい。 @@ -337,7 +331,6 @@ <h5><a href="#section--spoiler--impressive-levels--map--lock-the-door">LOCK THE DOOR</a></h5> <p> <img alt="「LOCK THE DOOR」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_LOCK_THE_DOOR.jpeg"> - </img> </p> <p> <code>SHIFT</code> 重ねの初出面。このテクニックを再び使うのは終盤になってからであり、私はそのときにはもう <code>SHIFT</code> 重ねを忘れていたので大苦戦した。戯れにスロット2を使って2周目をやっていてこの面まで到達し、そこでようやく <code>SHIFT</code> 重ねが <code>MOVE</code> もどきになることを思い出した。その意味でも印象深い面。 @@ -347,7 +340,6 @@ <h5><a href="#section--spoiler--impressive-levels--map--insulation">INSULATION</a></h5> <p> <img alt="「INSULATION」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_INSULATION.jpeg"> - </img> </p> <p> MAP の前半 (~DEEP FOREST) では最も苦戦した面。<code>SWAP</code> の理解が固まっておらず、「こういう状況が作れたら解けそうだ」という勘が働かなかった。正直なところ <code>SWAP</code> は今も苦手意識がある (終盤で強制的に学ばされる <code>SHIFT</code> と違って、それほど高難度面での出番がないのも大きいと思う)。 @@ -357,7 +349,6 @@ <h5><a href="#section--spoiler--impressive-levels--map--bottleneck">BOTTLENECK</a></h5> <p> <img alt="「BOTTLENECK」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_BOTTLENECK.jpeg"> - </img> </p> <p> MAP の中で一番苦しんだ面。実は一度ここで投げて諦めたのだが、<code>EMPTY</code> を理解した今となっては脳内でも瞬殺できるくらい簡単になってしまった。最初に面を見てから解き終わるまでの時間は間違いなく最長で、半年以上かかっている (他は長くとも数日間)。 @@ -367,7 +358,6 @@ <h5><a href="#section--spoiler--impressive-levels--map--heavy-cloud">HEAVY CLOUD</a></h5> <p> <img alt="「HEAVY CLOUD」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_HEAVY_CLOUD.jpeg"> - </img> </p> <p> 難しい面ではあるのだが、それ以上に解法の美しさに感動した面。解き終わった後に思わず「美しい……」と呟いてしまったのはこの面だけだった。Baba Is You の好きな面はと聞かれれば真っ先にこれを挙げる。 @@ -377,7 +367,6 @@ <h5><a href="#section--spoiler--impressive-levels--map--adventurers">ADVENTURERS</a></h5> <p> <img alt="「ADVENTURERS」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_ADVENTURERS.jpeg"> - </img> </p> <p> 難所の多い FLOWER GARDEN の癒し。Hand が <code>MOVE</code> と <code>SHIFT</code> でガチャガチャ動くのを見るのが楽しい。 @@ -387,7 +376,6 @@ <h5><a href="#section--spoiler--impressive-levels--map--out-at-sea">OUT AT SEA</a></h5> <p> <img alt="「OUT AT SEA」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_OUT_AT_SEA.jpeg"> - </img> </p> <p> MAP の問題児。正攻法がテキスト重ねである最初の面。この面、<code>ICE/LAVA</code> <code>IS</code> <code>PUSH</code> を作ったあと重なった ice と lava を (<code>ICE</code> <code>IS</code> <code>PUSH</code> だけ作るなどして) 分離しないといけないのだが、意気揚々と ice on lava の状態で door に向かって push して push できなかったときの感情はよく覚えている。テキスト同士を重ねて <code>A</code> <code>IS</code> <code>PUSH</code> と <code>B</code> <code>IS</code> <code>PUSH</code> を両立させるというぶっ飛んだアイデアを実現してもなお解けないのか、この方針がまさか間違っているなどということがあるのか、いやそんなはずはない……。実際のところそこからのリカバリーはすぐできたが、そのときの絶望はこれまででも最大であった。 @@ -397,7 +385,6 @@ <h5><a href="#section--spoiler--impressive-levels--map--seeking-acceptance">SEEKING ACCEPTANCE</a></h5> <p> <img alt="「SEEKING ACCEPTANCE」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_SEEKING_ACCEPTANCE.jpeg"> - </img> </p> <p> ここも好きな面。FURTHER FIELDS の精神的後継のようなものなので当然かもしれない。せっせと働く bird がかわいい。 @@ -407,7 +394,6 @@ <h5><a href="#section--spoiler--impressive-levels--map--fragile-existence">FRAGILE EXISTENCE</a></h5> <p> <img alt="「FRAGILE EXISTENCE」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_FRAGILE_EXISTENCE.jpeg"> - </img> </p> <p> MAP の印象的な面と言えば、これを取り上げないわけにはいかない。<code>LEVEL</code> <code>IS</code> <code>A</code> による level の変換がおこなえる初の面である。ここまで Baba Is You を進めたプレイヤーであれば、初出のテキストが現れたらまずはその場の色々なテキストと組み合わせてみて相互作用を確認する。それを見事に利用されたというか、気付かずにはいられないように仕向けられているというか、本当によくできたゲームである。 @@ -429,7 +415,6 @@ <h5><a href="#section--spoiler--impressive-levels--triple-question--vip-area">VIP AREA</a></h5> <p> <img alt="「VIP AREA」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_VIP_AREA.jpeg"> - </img> </p> <p> ??? で大いに苦戦した面のひとつ。PRISON と DUNGEON で既出のテクニックが肝だが、ちと離れすぎじゃないのか。この面のリメイクもあるが、ここで苦しんだからかそちらはあまり苦戦しなかった。 @@ -439,7 +424,6 @@ <h5><a href="#section--spoiler--impressive-levels--triple-question--ultimate-maze">ULTIMATE MAZE</a></h5> <p> <img alt="「ULTIMATE MAZE」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_ULTIMATE_MAZE.jpeg"> - </img> </p> <p> 普通に解くだけなら大したことのない面だが、問題はこれの <code>LEVEL</code> <code>IS</code> <code>TEXT</code> 解である。出現順に書いているのでここに置いたが、解いたのはもっと後、META の後半に差しかかった頃になる。??? コンプリートの実績が取れていないことに気付き、残っているとすればここの <code>LEVEL</code> <code>IS</code> <code>TEXT</code> しかないと考えたまではよかったが、そこからが大変だった。個人的にこのゲームで一番苦しかったのがここの <code>TEXT</code> 変換解である。単純な難しさに加え、実績が取れていない原因がこの面だという確信も持てなかったので、解けるかどうかわからない状態で挑み続けることとなり疲弊した。 @@ -459,10 +443,9 @@ <h5><a href="#section--spoiler--impressive-levels--triple-question--stardrop-and-meteor-strike">STARDROP、METEOR STRIKE</a></h5> <p> <img alt="「STARDROP」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_STARDROP.jpeg"> - </img> - + </p> + <p> <img alt="「METEOR STRIKE」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_METEOR_STRIKE.jpeg"> - </img> </p> <p> 両方とも難しい面ではあったが、単文字のテキストが綺麗に活用された美しい面として印象に残っている。<code>G</code> <code>R</code> <code>A</code> <code>S</code> <code>S</code> <code>IS</code> <code>H</code> <code>O</code> <code>T</code> をこれほど無駄なく使えるとは! @@ -472,7 +455,6 @@ <h5><a href="#section--spoiler--impressive-levels--triple-question--getting-together">GETTING TOGETHER</a></h5> <p> <img alt="「GETTING TOGETHER」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_GETTING_TOGETHER.jpeg"> - </img> </p> <p> 初見のインパクト大にして難易度も相応に高い良作。この頃はまだ <code>SHIFT</code> を<em>理解</em>していなかったので大変だったが、ここを越えたことでむしろこの後の難所が楽になったと言える。 @@ -488,7 +470,6 @@ <h5><a href="#section--spoiler--impressive-levels--depths--crushers">CRUSHERS</a></h5> <p> <img alt="「CRUSHERS」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_CRUSHERS.jpeg"> - </img> </p> <p> DEPTHS の序盤で道を塞いでいる必須面であるにもかかわらず圧倒的難易度で立ちはだかる凶悪な面。大苦戦した挙句 <code>LEVEL</code> <code>IS</code> <code>BELT</code> を作ってアレ?となったのは私だけではないはず。 @@ -498,7 +479,6 @@ <h5><a href="#section--spoiler--impressive-levels--depths--parade">PARADE</a></h5> <p> <img alt="「PARADE」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_PARADE.jpeg"> - </img> </p> <p> 取れる行動が多いこと、もう少しで解けそうなルートが多いこと、そのどれもが一筋縄ではいかないこと。それらがすべて揃った高難度面。昔のバージョンでは ??? に置いてあったらしい。そんなバカな。 @@ -514,7 +494,6 @@ <h5><a href="#section--spoiler--impressive-levels--meta--booby-trap">BOOBY TRAP</a></h5> <p> <img alt="「BOOBY TRAP」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_BOOBY_TRAP.jpeg"> - </img> </p> <p> 難しいとか難しくないとかじゃなくここは触れざるをえない。<code>FLAG/TEXT</code> 解以外はそれほど苦戦しなかったが、とにもかくにもクリアの要求回数が多すぎる。もちろん最短で進められるなら別だが、META での試行錯誤のためにはこいつの形を毎回変えなければならない。しかもどの変換もそれなりにステップ数を要するのが厄介である。印象に残った面であるのは確か。 @@ -524,7 +503,6 @@ <h5><a href="#section--spoiler--impressive-levels--meta--the-box">THE BOX</a></h5> <p> <img alt="「THE BOX」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_THE_BOX.jpeg"> - </img> </p> <p> よくぞこの面を作ってくれた。外の level を参照させるギミックは、<code>LEVEL</code> <code>IS</code> <code>A</code> の変換をやりだした頃からいつかあるはずと思っていたので、そのとおりのパズルが出てきてくれて嬉しい。これぞ Baba Is You。 @@ -534,7 +512,6 @@ <h5><a href="#section--spoiler--impressive-levels--meta--the-return-of-scenic-pond">THE RETURN OF SCENIC POND</a></h5> <p> <img alt="「THE RETURN OF SCENIC POND」のスクリーンショット" src="/posts/2025-06-14/baba-is-you/LEVEL_THE_RETURN_OF_SCENIC_POND.jpeg"> - </img> </p> <p> 前半のネタバレなし感想にも書いたが、これは SCENIC POND のリメイクであり、ほとんど差異がない。たった1マス窪みが無くなっただけである。それだけでここまで難しくできるのか。 |
