スポンサード && 登壇
みなさま、こんにちは!CTO のめもりーです。 本年開催の PHPerKaigi 2022 にスポンサード、また私が登壇いたします。
YAPC と同様に「PHP で NFC リーダーを実装する」で登壇させていただく予定ですが、YAPC とは異なり PHP ユーザー向けの内容に資料をアップデートしておりますので、ぜひご覧ください。
また、事前収録したトーク映像は資料で書いていないようなこともお話しておりますので、お楽しみに!
PHPer チャレンジトークン
CTO からの挑戦と題し、PHPer チャレンジトークンの入手を楽しんでいただける PHP コードをご用意しました。
各コードの実行結果がトークンとなります。
(1) 以下の空白を埋めてください。
<?php $bytes = [0x61, 0x4c, 0x45, 0x45, 0x46, 0x79, 0x61, 0x79, 0x4c, 0x5b, 0x62, 0x48, 0x40, 0x4e, 0x40, 0x7e, 0x4c, 0x68, 0x5b, 0x4c, 0x7d, 0x46, 0x5b, 0x48, 0x47, 0x48]; $string = ''; for ($i = 0; $i < count($bytes); $i++) { $string .= chr($bytes[$i] ^ <1>); } if (md5($string) !== 'a8f101dec277521c969386effb2c8397') { echo "ハズレです!"; return; } echo "#{$string}";
- <1> … ここに入る 0x00 〜 0xff までを探してください
(2) 以下の空白を埋めてください。
<?php $string = '<1>'; $sum = array_sum( array_map( static fn (string $char) => ord($char), <2>($string) ) ); $additional = implode( array_map( static fn (string $numberValue) => chr(0x63 + ((int) $numberValue)), <2>((string) $sum) ) ); $string = "{$string}-{$additional}"; if (md5($string) !== '2fa885e32bc24b26f9dff3a47efb0d08') { echo "ハズレです!"; return; } echo "#{$string}";
- <1> … シャープを除いた (1) のPHPer チャレンジトークン
- <2> … 適切な関数名を埋めてください
(3) 以下の空白を埋めてください。
<?php $string = '<1>-<2>'; [$part1, $part2, $part3] = <3>('-', $string); $calculator = fn (string $stringValue) => array_sum( array_reverse( array_map( fn (string $numberValue) => crc32($numberValue), str_split($stringValue) ) ) ); $string = substr(md5($calculator($part1) + $calculator($part2) + $calculator($part3)), 0, 10); if (md5($string) !== '8037d28b5a754eeacd1ee90fb1246610') { echo "ハズレです!"; return; } echo "#{$string}";
- <1> … シャープを除いた (2) の PHPer チャレンジトークン
- <2> … 弊社 CTO が登壇するプロポーザルに出現する PHP 以外の小文字の英字 3 文字
- <3> … 適切な関数名を埋めてください
(4) 以下の空白を埋めてください。
<?php $string = '<1>'; $string = substr(md5(str_replace(<3>('a', 'f'), '', $string)), 0, 10); if (md5($string) !== 'b310309130966447075369fb9d56b437') { echo "ハズレです!"; return; } echo "#{$string}";
- <1> … シャープを除いた (3) の PHPer チャレンジトークン
- <2> … 適切な関数名を埋めてください
(5) 以下の空白を埋めてください。
<?php $string = '<1>'; $string .= implode(array_reverse(str_split($string))) . '<2>'; $map = [ 'e971773f' => 0x7d, 'cbea68d7' => 0x46, '7f8abdb1' => 0x5b, 'a42a75c2' => 0x48, '29d01a37' => 0x47, '4a2414ee' => 0x48, '1be678b5' => 0x61, 'a347b1db' => 0x40, '00f56a27' => 0x5b, '35497491' => 0x40, '23a0dee4' => 0x47, 'baa98f5e' => 0x4e, 'cdaebfc8' => 0x08, ]; $split = str_split($string, 2); $result = ''; for ($i = 0; $i < count($split); $i++) { $result .= chr($map[<3>(<4>, crc32($split[$i]))] ^ <5>); } if (md5($result) !== 'd5ff5cec18c54a4fdc90f8ce1462e6b4') { echo "ハズレです!"; return; } echo "#{$result}";
- <1> … シャープを除いた (4) の PHPer チャレンジトークン
- <2> … 適切な 0-9a-f で作成された文字列を埋めてください (ヒント:
$map
で生成されている値の規則性) - <3> … 適切な関数名を埋めてください
- <4> … 適切な関数のパラメータを埋めてください
- <5> … ここに入る 0x00 〜 0xff までを探してください