ブログ第10回目(anagol,tekken6)

あなごる Reapeated Printing FIXED 終了

あなごる Reapeated Printing FIXED が post mortem となった。自分の回答は、JS も C も、ユニークなロジックだった。JS では分割代入を使って解いたのだが、他の満点勢は、slice などを使って、終了文字と長さを切り出していた。なんと、開始文字については、readline() まんまを使っていた。abcdef.. と変化していく c について、c+c<readline() が false になるとき、c のバイトは開始文字のバイトより大きい。(この記述わかりにくっ!)

  • "b" + "b" < "h h 7" は、「開始文字 "h" より "b" は小さい」
  • "h" + "h" < "h h 7" は、「開始文字 "h" より "h" は小さくない」

もし "h" < "h h 7" としていると、「開始文字 "h" より "h" は小さくない」という意味にはならない。c+c とし、後者の c で、半角スペースのバイトとの比較を無意味化する。

やっぱ、この文章、わかりにくっ!! うう~~~っ!!!!

C の 81B は意味がわからなかった。やっぱ nu さんは頭がおかしい。完全に C の仕様を把握してる。

int s;
gets(&s); /* "k m 7" */
putchar(s); /* 'k' */

putchar(s) すると先頭の文字 'k' が表示される。よく分からない。

ただ、一つ、分かっていることは、int 型 s で gets(&s) すると、s に入る数値は以下となる。ただし 2 進法で表記する。

0100000011011010010000001101011

この数値を分析すると、以下のようになる。

' ':0100000 0 'm':1101101 0 ' ':0100000 0 'k':1101011

バイト最下位に、先頭文字 'k' が格納されている。バイト上位にいくにしたがって、' ' と 'm' と ' ' が現れる。すなわち、最初の 4 文字が、数値として入っているのだ。

putchar に渡す数値として、4 文字分のこれを渡すのは、通常、ありえないことだ。ふつうにやるなら、putchar には 1 バイトの例えば 'k':1101011 だけを渡す。が、4 バイト分、しかも 0 で区切られたこの数値を渡した場合、putchar は、最下位の 1 バイトだけを読んでくれる、ということのようだ。きっと、char 型にキャストしている、というようなことなのだろう。

鉄拳6日誌

鉄拳6オンラインで、3 対 0 で圧勝した。しかも 3 ラウンド目はパーフェクツ! そこそこコンボしてくる人だったけど、守りが全くなってなかった。僕もガード超下手だけど、この人は、攻めすぎだったし、中距離でパンチやキックをしすぎており、隙がありすぎた。それでも勝率 40% くらいあったから、不思議だった。今までどんな人と勝負をしてきたんだろう。こんな僕に負けるなんて、弱すぎる。

相性といえば、同じく今日、ものすごくやりづらい人がいた。0 勝 0 敗の人に 2 勝を捧げる結果となった。その人のトロフィーを参照したところ、何も表示されなかった。そんなことってふつうないのだが。特殊なロボットなのだろうか。よく分からない。とにかく、そいつは、強すぎた。こっちの攻撃は全部ガードされたりかわされたりで、大技が全く当たらない。ガードしてるところに、いつか当たるはずと期待して、10連コンボを叩き込んでいったのだけど、途中で返し技を使われてしまった。強すぎる。ありえない。こんなことしてきたのあんただけだ。誰なんだ。何も分からない。データがなさすぎる。強い。いやだ。もう二度と会いたくない。