箱入りドロップス3 津留崎 優
☆☆☆☆☆
本当に神だったわ。
脳も蕩ける最高傑作。
こいつはあかん、俺にはもう客観的評価など無理だ。
雫が可愛すぎて死ぬ。
主人公以外の登場人物もそれぞれ生きているのもいい。
理不尽にひどい目に遭う親友枠とかそういうものがなく、サブキャラにもきちんとドラマがあります。
ただくっつくのがあまりに急だった気がしないでもない。
ああなった直後なわけだし少し考えさせて期間があった方がいい気がしたんだがどうだろう。
P49のおわーが気になります!
そして後書きひでえ。
ぱわーおぶすまいる3 ウロ
☆☆☆☆
なんか序盤微妙でどうしたものかなあと思ったんだけど後半一気に盛り返した。
正直いいかげんはっきりしてほしいと思ってたらはっきりしやがった。
今後はきっとそのままとは行かないだろうし果たしてどうなる。
しかし女装ネタはなあ、女装だけならわかるが人相がわからないほど似合うとかあるかーい。
あと理不尽な親友枠の景佑と当て馬枠の優白はどうにかしてあげて。
ふぃっとねす1 ストロマ
ふぃっとねす2
☆☆☆
よくあるゆる百合もの。
男は一切出てきません。
いまいちキャラがつかみきれないというか区別が付かないうちに終わってしまった感。
少々いまいちかなあという印象でした。
ところでふぃっとねすでアフィリンクを作ろうとしたらマッスル・アンド・フィットネスなるものが出てきた。
興味深い。
シアトリズム ファイナルファンタジー カーテンコール スクウェア・エニックス
発売から一ヶ月も経ってようやく購入。
いやあ、正直mirai2に半年もハマり続けるとは思いもしなかったわ。
というか未だに飽きてはいないのだが、2014/05/28にようやくインビシブルのボタントコトンをパーフェクトして一区切り付いたので、シアトリズムにも手を出すことに決めた。
リリアと骸骨楽団?
ありゃ無理だ。
SAFE1とか何かの奇跡ですよ。
何故か今やSAFE5とかそのあたりまでしかいけなくなった。
まだほんの少しプレイしただけなのだが、プレイ中の音量に対してクリア後のファンファーレの音量が大きすぎる。
なんだこれ。
初見感想は微妙そう…だったんだけど、評判はかなりよさそうなのでしばらくはプレイしてみよう。
とりあえず収録曲200曲以上って時点で異常だ。
PR
http://qiita.com/Nabetani/items/0b56395d4c9e7c64b230
http://nabetani.sakura.ne.jp/hena/ord15subpalin/
回文の発掘
最初=最後の分岐については、こちらの解説を見てから追加しました。
これが無い場合の実行時間は1.2秒、ある場合は実行時間0.12秒です。
PHPはやい。
http://nabetani.sakura.ne.jp/hena/ord15subpalin/
回文の発掘
<?php
class SUBPLAIN{
/**
* 回文の発掘
* @param String 「I_believe_you_can_solve」みたいな文字列
* @param int 現在の回文長
* @return int 「9」みたいな数値
*/
public function get($input, $length=0){
// 1文字以下であれば終了
if(( $iLength = strlen($input)) < 2){ return $length+$iLength; }
// 最初=最後だった場合問答無用でそれが正解
if($input[0] === $input[strlen($input)-1]){
return $this->get(substr($input, 1, -1), $length+2);
}
// それ以外の場合は全探査が必要
$maxLength = [];
// 全文字でくるくる
for($i=0;$i<$iLength-1; $i++){
// 該当文字と同じものを後ろからみつける
$b = strrpos($input, $input[$i]);
if( $b > $i){
// 該当文字と同じものが後ろにある場合、その間の文字で再度回文発掘
$maxLength[] = $this->get(substr($input, $i+1, $b-$i-1), $length+2);
}elseif($b === $i){
// 前後から見て同じなので終了
$maxLength[] = $length+1;
}
}
// 探索した中で最大長のものを返す
return max($maxLength);
}
}
// 以下はテスト
$test = [
['1234567890987654321', '19'],
['a', '1'],
['aa', '2'],
['aaa', '3'],
['ab', '1'],
['aabb', '2'],
['ABBA', '4'],
['Abba', '2'],
['1234567890', '1'],
['1234567890987654321', '19'],
['abcdcba', '7'],
['0a1b2c3d4c5b6a7', '7'],
['abcdcba0123210', '7'],
['abcdcba_123210', '7'],
['_bcdcba0123210', '7'],
['abcddcba0123210', '8'],
['abcdcba01233210', '8'],
['a0bc1dc2ba3210a', '9'],
['a0bc1ddc2ba3210', '8'],
['3a0bc1ddc2ba3210', '10'],
['11oooo1111o1oo1o111ooooooooooo', '20'],
['11o1111o1111oo11ooo11111ooo1oo', '20'],
['111111oo11o111ooo1o1ooo11ooo1o', '21'],
['11o1o1o11oo11o11oo111o1o1o11oo', '27'],
['oo111o1o11o1oo1ooo11o1o11o1o1o', '27'],
['1o1oo11111o1o1oo1o1o1111oo1o1o', '28'],
['QQooooQooooQQyQoyQQQyyyyQQoyoy', '15'],
['oQoooQooooQyoyQoyoyyyQQyQQQQoQ', '16'],
['yyyyyooyQyyyoyyQyyooyQoQoQQoQy', '17'],
['yyQoyQoyyQyQQoyooooyyQQyQyooQy', '24'],
['oQQooQoQyQQoyoQQoQyQyQyQoQoooo', '24'],
['oQQyQQyyQyQQoooyQQyyyQQQyyQQoy', '25'],
['WAk9iHI4jVDlStyudwTNqE138kwan2', '3'],
['c43fIu1Mlz0K9hEVOgGcUdbeB5ksa7', '3'],
['CAbYcW5VqHjzFdIkH_61PM0TsyRuie', '3'],
['jInQnUvSayrJTsQWujovbbqW0STvoj', '10'],
['iZDrvpUKgtj3FrZsZ4CLjrEgUdZzQG', '11'],
['ROgYUOu6er_DA7nB6UGquO1GUHC62R', '11'],
['Oh_be_a_fine_girl_kiss_me', '9'],
['8086_6502_6809_Z80', '11'],
['xcode_visualstudio_eclipse', '11'],
['word_excel_powerpoint_outlook', '9'],
['abcdefghijklmnopqrstuvwxyz0123', '1'],
];
$subpalin = new SUBPLAIN();
foreach($test as $key=>$data){
$answer = $subpalin->get($data[0]);
if($answer !== (int)$data[1]){
print('えらー');
}
}
どう作ろうか相当考えあぐねていたのですが、全探査でいいやと思い立ったら1時間で終わった。最初=最後の分岐については、こちらの解説を見てから追加しました。
これが無い場合の実行時間は1.2秒、ある場合は実行時間0.12秒です。
PHPはやい。
http://qiita.com/Nabetani/items/6a9f5593d0f3d7e0568c
http://nabetani.sakura.ne.jp/hena/ord16boseg/
方眼紙を白と黒で塗り分けたとき、境界の線分の長さを求める。
極めて順当に実装。
横向きと縦向きで思いっきり同じことをしているので、まとめればもっと記述を減らせますがもういいや。
http://nabetani.sakura.ne.jp/hena/ord16boseg/
方眼紙を白と黒で塗り分けたとき、境界の線分の長さを求める。
極めて順当に実装。
<?php
class BOSEG{
/**
* 境界線分
* @param String 「060276724276」みたいな文字列
* @return String 「6,2,1,1,0,1」みたいな文字列
*/
public function get($input){
$boseg = array_fill(1, 6, 0);
// 入力値をパース
$input = array_map(function($input){
return sprintf('%03d%03d', base_convert($input[0], 8, 2),base_convert($input[1], 8, 2));
}, str_split($input, 2));
// 横向きにチェック
for($i=0;$i<5;$i++){
$length=0;
for($j=0;$j<=5;$j++){
if($input[$i][$j] === $input[$i+1][$j]){
// 上下が同じなら
if($length > 0){
// 違いがあったらそこで途切れる
$boseg[$length]++;
$length=0;
}
}elseif($j===5){
// 最後だけ少し特殊
if($input[$i][$j] !== $input[$i+1][$j]){
$boseg[$length+1]++;
}
}else{
// 違ってるのが続く
$length++;
}
}
}
// 縦向きにチェック
for($i=0;$i<5;$i++){
$length=0;
for($j=0;$j<=5;$j++){
if($input[$j][$i] === $input[$j][$i+1]){
if($length > 0){
$boseg[$length]++;
$length=0;
}
}elseif($j===5){
if($input[$j][$i] !== $input[$j][$i+1]){
$boseg[$length+1]++;
}
}else{
$length++;
}
}
}
// 終了
return implode(',',$boseg);
}
}
// 以下はテスト
$test = [
['060276724276','6,2,1,1,0,1'],
['770175454177','2,3,0,3,1,0'],
['743733377170','9,3,1,0,0,0'],
['724212121273','5,2,1,1,1,1'],
['100000000000','3,0,0,0,0,0'],
['000002000000','4,0,0,0,0,0'],
['003622223600','0,4,0,4,0,0'],
['520073737070','8,3,1,1,0,0'],
['770077007700','0,0,0,0,0,5'],
['555555555514','2,0,0,0,2,2'],
['764252427600','4,0,4,0,2,0'],
['774555554177','3,3,1,3,0,0'],
['674574754557','11,5,0,1,0,0'],
['000000000000','0,0,0,0,0,0'],
['777777777777','0,0,0,0,0,0'],
['774377777577','6,0,2,0,0,0'],
['070777777777','0,1,1,0,0,0'],
['373737373737','0,0,0,0,0,1'],
['603260327725','30,0,0,0,0,0'],
['466331144663','30,0,0,0,0,0'],
['000000000242','3,2,0,0,0,0'],
['567656043772','18,2,1,0,0,0'],
['200763012420','15,4,1,0,0,0'],
['400101140052','14,3,0,0,0,0'],
['764767476476','13,2,0,1,0,0'],
['001110140110','12,2,1,0,0,0'],
['765405076527','16,3,0,1,0,0'],
['377323370373','8,4,2,0,0,0'],
['250541131216','11,5,2,0,0,0'],
['744165741476','12,3,2,0,0,0'],
['042101000300','10,3,0,0,0,0'],
['002004554101','11,3,1,0,0,0'],
['371707762706','15,1,1,0,0,0'],
['130371310175','7,3,1,2,0,0'],
['212537003613','13,2,1,1,1,0'],
['157700063411','15,3,0,0,0,1'],
['011500036007','6,7,1,0,0,0'],
['743113313517','17,2,1,0,0,0'],
['174105270405','13,3,1,1,0,0'],
['427272200311','13,3,2,0,0,0'],
['725370332237','12,5,1,1,0,0'],
['005640420046','12,1,3,0,0,0'],
['700350001101','14,3,1,0,0,0'],
['577627744076','16,1,1,1,0,0'],
['620332232007','10,4,2,1,0,0'],
['260406401000','15,1,1,0,0,0'],
['737272723276','5,0,0,0,3,0'],
['000400040444','7,0,2,0,0,0'],
['370222002177','13,2,2,0,0,0'],
['372236024656','9,3,2,0,1,0'],
['276131137003','11,6,2,0,0,0'],
['742134007240','13,4,2,0,0,0'],
['777721775571','13,1,2,0,0,0'],
['700301232233','11,2,3,0,0,0'],
];
$boseg = new BOSEG();
foreach($test as $key=>$data){
$answer = $boseg->get($data[0]);
if($answer !== $data[1]){
print('えらー');
}
}
ループ最後のところだけ少し処理を追加してますが、それ以外は普通に順番に見ていってるだけです。横向きと縦向きで思いっきり同じことをしているので、まとめればもっと記述を減らせますがもういいや。
げんつき 相模大野女子高校原付部1 アキヨシカズタカ
げんつき 相模大野女子高校原付部2
げんつき 相模大野女子高校原付部3
☆☆☆
パクリのパクリとは恐れ入る。
といっても作風は全く違い、キャラを中心としたコメディであるばくおんに対し、本作は走行風景や観光がメインの爽やかな作風です。
また3巻には来夢先輩も出てくるくらいなので、特にパクリと言うわけでもなさそうです。
原付と言っても普通自動車免許のおまけについてくるやつではなく、原付二種です。
原付二種は排気量125ccまでのバイクを指し、免許取得可能年齢16歳、制限速度が時速60キロ、二段階右折不要、二人乗り可能と、原付とか言いつつ排気量以外は普通自動二輪とほとんど変わらない内容です。
正直原付二種取るくらいならそのまま普通自動二輪でええやん、と思うのですが、そうするとばくおんと差別化できないから困るか。
本作は実在する場所が実名で登場しており、地形とかほぼそのまんまです。
舞台の相模大野女子高校こそ実在しませんが、どこからどう見ても相模女子大学です。
ただスカートに短いスパッツでの運転はいただけぬ。
バイクウェアとまでは言わないからせめて長袖長ズボンにしてください。
まあそんなこと言ってたら見た目が残念になるのであえてそうしているのでしょうが、完全にファンタジーのばくおんと違い、現実の地名を使っている作品だけに非現実的な格好が気になりました。
北斗の拳イチゴ味2 行徒妹
☆☆☆
原作のストーリーぶつ切りで適当にエピソードが羅列という形式なので、どうにも続けて読めない。
特にネタが聖帝十字陵のあたりに固まっていてカイオウとか赤鯱とか全く出てこないんですが。
個々のギャグには面白いものもあるんですが、バランスがなんか微妙なんだよね。
今のままだと次買うかどうか怪しいかな。
弾幕アマノジャク 上海アリス幻楽団
この時期に完全版発売とか珍しいな。
コミックZINに行ってみたらなんか置いてあったのでうっかり購入。
ちょっとだけやってみたが2日目からいきなり難易度高い。
まあキーボードでプレイしているからかもしれないけど。
コントローラ買ってこよう。
ところで公式サイトが全く更新されてないのは何故だ。
http://qiita.com/Nabetani/items/5791f8ae1bb5d069a49b
http://nabetani.sakura.ne.jp/hena/ord20meetime/
会議に都合のいい時間を探します。
暇な時間は1、用事があれば0を入れたビット列を作り、1が60回続くところを探しています。
発想は簡単ですが、文字列に対して論理演算を使うと想定外の結果になるのでビット操作が面倒なことになっていたり、日付を文字列にするところが妙にややこしかったり、あと最後の三項演算子は絶対もっと簡単な書き方があるだろ。
なんともすっきりしない解答。
時間も無駄にかかっていて3時間くらい。
何故か日時をDateTimeにしようとしたり文字列のまま処理しようとしたりで大混乱。
http://nabetani.sakura.ne.jp/hena/ord20meetime/
会議に都合のいい時間を探します。
<?php
class MEETING{
/**
* ミーティングの時間
* @param String 「A1000-1130,B1230-1800,Z0800-2200」みたいな文字列
* @return String 「1130-1230」みたいな文字列
*/
public function get($input){
// 初期値
$all1 = str_repeat('1', 480);
$freetime = ['A'=>$all1, 'B'=>$all1, 'I'=>$all1, 'J'=>$all1, 'Z'=>$all1];
$starttime = mktime(10, 0, 0);
// 入力値を整形
$input = explode(',', $input);
// 都合の悪い時間帯は0にする
foreach($input as $val){
$start = (mktime(substr($val, 1, 2), substr($val, 3, 2), 0) - $starttime)/60;
$end = (mktime(substr($val, 6, 2), substr($val, 8, 2), 0) - $starttime)/60;
if($start < 0){ $start = 0; }elseif($start>480){ $start=480; }
if($end < 0){ $end = 0; }elseif($end>480){ $end=480; }
for($i=$start; $i<$end; $i++){
$freetime[$val[0]][$i] = 0;
}
}
// GMPにする
foreach($freetime as $key=>$val){
$freetime[$key] = gmp_init($val, 2);
// Zのみビット反転
if($key==='Z'){
$freetime[$key] = gmp_xor($freetime[$key], gmp_init($all1, 2));
}
}
// 全員'1'が60回続く箇所を見つける
// ABIZで一番早い時間
$andi = sprintf('%0480s', gmp_strval(gmp_and(
gmp_and($freetime['A'], $freetime['B']),
gmp_and($freetime['I'], $freetime['Z']) ), 2));
$starti = strpos($andi, str_repeat('1', 60));
// ABJZで一番早い時間
$andj = sprintf('%0480s', gmp_strval(gmp_and(
gmp_and($freetime['A'], $freetime['B']),
gmp_and($freetime['J'], $freetime['Z']) ), 2));
$startj = strpos($andj, str_repeat('1', 60));
// どっちも無ければ解なし
if($starti === false && $startj === false){ return '-'; }
// 整形して返却
$start = $starti===false ? $startj : ( $startj===false ? $starti : min($starti, $startj));
$return date('Hi', $starttime + $start*60) . '-' . date('Hi', $starttime + $start*60+3600);
}
}
// 以下はテスト
$test = [
['A1050-1130,B1400-1415,I1000-1400,I1600-1800,J1100-1745,Z1400-1421,Z1425-1800', '1425-1525'],
['A1000-1200,B1300-1800,Z1000-1215,Z1230-1800', '-'],
/* 省略 */
];
$meeting = new MEETING();
foreach($test as $key=>$data){
$answer = $meeting->get($data[0]);
if($answer !== $data[1]){
print('えらー');
}
}
暇な時間は1、用事があれば0を入れたビット列を作り、1が60回続くところを探しています。
発想は簡単ですが、文字列に対して論理演算を使うと想定外の結果になるのでビット操作が面倒なことになっていたり、日付を文字列にするところが妙にややこしかったり、あと最後の三項演算子は絶対もっと簡単な書き方があるだろ。
なんともすっきりしない解答。
時間も無駄にかかっていて3時間くらい。
何故か日時をDateTimeにしようとしたり文字列のまま処理しようとしたりで大混乱。
http://qiita.com/torazuka/items/cbdb6b581a57e4754dd4
http://d.hatena.ne.jp/torazuka/20140509/yhpg
希望日を出して優先順に振り分けるという、現実でもよくある問題です。
今回は受講対象がひとつで、曜日を分けるだけなのでさほど難しくありません。
特に整形のあたりはもうちょっとどうにかならなかったものか。
かかった時間は1時間くらい。
http://d.hatena.ne.jp/torazuka/20140509/yhpg
希望日を出して優先順に振り分けるという、現実でもよくある問題です。
今回は受講対象がひとつで、曜日を分けるだけなのでさほど難しくありません。
<?php
class LESSON{
/**
* レッスンを振り分け
* @param String 「1_12345|2_12345」みたいな文字列
* @return String 「1_1:2」みたいな文字列
*/
public function get($input){
// 入力を分解
foreach(explode('|', $input) as $val){
$tmp = explode('_', $val);
$arr[$tmp[0]] = $tmp[1];
}
// レッスンを埋める
$list = $this->fillLesson([], $arr, 0);
// 整形して返す
ksort($list);
$list = array_map(function($tmp){
sort($tmp);
return implode(':', $tmp);
}, $list);
$ret = '';
foreach($list as $key=>$val){
$ret .= $key . '_' . $val . '|';
}
return substr($ret, 0, -1);
}
/**
* レッスンを埋める
* @param array [希望番号=>[社員]]
* @param array [社員番号=>希望番号リスト]
* @param int 第x-1希望
* @return array $list
*/
private function fillLesson($list, $arr, $hope = 0){
// くるくる
$nextArr = [];
foreach($arr as $key=>$val){
if(!isset($list[$val[$hope]]) || count($list[$val[$hope]]) < 4){
// 余裕があれば埋める
$list[$val[$hope]][] = $key;
}else{
// 埋まっていれば第二希望に持ち越し
$nextArr[$key] = $val;
}
}
// 次の希望に持ち越して埋める。希望がなくなれば打ち切り
if($nextArr && $hope<4){
return $this->fillLesson($list, $nextArr, $hope+1);
}
return $list;
}
}
// 以下はテスト
$test = [
['1_12345', '1_1'],
['30_32451', '3_30'],
/* 省略 */
];
$lesson = new LESSON();
foreach($test as $key=>$data){
$answer = $lesson->get($data[0]);
if($answer !== $data[1]){
print('えらー');
}
}
簡単とか言いながら色々と微妙。特に整形のあたりはもうちょっとどうにかならなかったものか。
かかった時間は1時間くらい。
ちょっと!そこの男子! 津留崎 優
☆☆☆☆
え、これ本当にあの箱入りドロップスと同じ作者なの?
作者買いを決めていなければ絶対に誰も購入したいとは思わない絶望的表紙を乗り越えると、中身もやっぱり絶望だった。
作者曰く箱入りドロップスみたいなのばっかり書いていると口から砂が出てくるのでバランスを取るためだそうです。
こりゃもう箱入りドロップス3巻は神作品で間違いないな。
コドクの中のワタシ1 華々 つぼみ
コドクの中のワタシ2
☆☆☆☆
この作者の本を買うたびに、完って書かれてないか不安になる。
本作はまあ面白いんだけど登場人物が多いわりに、描き切れていないキャラがいたりしてまだまだ不安なところがあります。
それはそれとして放課後アトリエといろ引き取ってくださいいやほんとお願いします。
くらまちゃんにグイってしたらピシャってされた1 ストロマ
☆☆☆☆
タイトルはDQNそのものですが、中身は思ったよりいいかんじです。
とにかく人を近づけたがらないくらま、そんなガードもこじあけて無理矢理近付く尋夢。
そして回りを固めるサブキャラまで個性があり、誰一人欠けてもこの物語は成立しませ…もしかしたらカナメはいなくてもいいかも。
ちょっとくらまひどすぎじゃね、って思うところもないでもないですがそういう原因ならまあ仕方ないね。
4コママンガのススメ2013
☆☆☆
薄い。
執筆陣4人もいるのに、たった一人で書いてるきらら系4コマレビュー120に全く及ばない分量ってどういうことだ。
あと座談会みたいなページ埋めはいらないです。
巻末の2013年発売4コマ本リストだけは資料性がとても高いです。
専門誌だけではなく生徒会役員共や4コマアンソロジーあたりも入ってるのはポイント高い。
こっち目的なら購入の価値はあるかも。
ただ▲コンプレックス(1)が2行入ってます。
というかこのタイトル検索しようがないな。
http://golf.shinh.org/p.rb?FizzBuzz#PHP
PHPのFizzBuzzで最短56バイトを投稿、9位になりました。
以下を読み進める前に、とりあえず前提知識
・php変態文法最速マスター
http://d.hatena.ne.jp/milieu/20100203
・可変変数
http://www.php.net/manual/ja/language.variables.variable.php
・文字列のビット演算
http://perl-users.jp/articles/advent-calendar/2010/sym/2
を見といてください。
PHPでは現状56バイトが最高記録ですが、何故か何処にも公開されていません。
公開されているものでは59バイトが最短のようです。
http://d.hatena.ne.jp/milieu/20100204/1265305089
http://oflow.me/archives/110
http://d.hatena.ne.jp/ts_asano/20130320/1363791538
よく見たら最後のは改行ではなくスペースになってるので間違ってるな。
私はずっと58バイトで詰まっていたのですが、このたびようやく56バイトに成功しました。
私も当初はこの方向性で考えていたのですが、結局こちらでは58バイト止まりでした。
60バイトまでは、普通に三項演算子とかをいじっていれば減らせます。
そこから"\n"を直接LFにすると1バイト減って59バイトになります。
さて、~の後ろの空白は普通の文字ではないのでたぶん正しくアップできてませんが、chr()でASCIIコード245になる文字です。
この文字を~でビット反転するとASCIIコード10、つまりLFになるので『~ 』は『"\n"』と同じ意味です。
直接LFを書くよりさらに1バイト減らすことができ、該当部分を差し替えるだけで58バイトになります。
しかしこっちはこれで行き止まりなので、!$$iとか書かれてるよくわからんのを見ていきましょう。
とりあえずコードをわかりやすく分解。
まず1行目。
3の倍数だった場合は単にFizzを表示して終わりです。
3の倍数でなかった場合、「$$i=$i」で、$$iに$iを代入しています。
例として$i=4だった場合、$$i = ${4} = 4、つまり${4}という変数に4が代入されます。
これはただの代入なので、「$$i=$i」全体の値は$iになります。
ところで数値を!するとfalseになります。
結果として「!$$i=$i」全体の値はfalseとなり、echoでは何も表示されません。
1行目のまとめは、
・$iが3の倍数であれば「Fizz」を表示する。
・$iが3の倍数でなければ${$i}に$iを代入する。何も表示しない。
です。
次に2行目ですが、
・$iが5の倍数であれば「Buzz」を表示する。
・$iが5の倍数でなければ${$i}を表示する。
です。
5の倍数であれば単にBuzzを表示して終了なので問題ありません。
5の倍数ではない時を見てみましょう。
${$i}は、$iが3の倍数でないときは1行目によって$iが代入されているので、結果として$iが表示されます。
$iが3の倍数だった場合、${$i}は未定義なのでNULLとなり、結果としてなにも表示されません。
例として$i=4の場合、1行目により$$i = ${4} = 4が代入されていたので4となります。
$i=6だった場合、$$i = ${6}は何も代入されていないのでNULLです。
以上をまとめると、
・$iが15の倍数である場合、1行目でFizzが表示され、2行目でBuzzが表示される
・$iが3の倍数であり5の倍数ではない場合、1行目でFizzが表示され、2行目で$$i=NULLなので何も表示されない
・$iが3の倍数ではなく5の倍数である場合、1行目で$$i=$iが実行され、2行目でBuzzが表示される
・$iが3の倍数でも5の倍数でもない場合、1行目で$$i=$iが実行され、2行目で$$i=$iが表示される
となりFizzBuzzの定義を満たしました。
めでたし。
ということで次は55バイトなわけですが、さすがに世界中誰も成功してないから無理かな?
PHPのFizzBuzzで最短56バイトを投稿、9位になりました。
以下を読み進める前に、とりあえず前提知識
・php変態文法最速マスター
http://d.hatena.ne.jp/milieu/20100203
・可変変数
http://www.php.net/manual/ja/language.variables.variable.php
・文字列のビット演算
http://perl-users.jp/articles/advent-calendar/2010/sym/2
を見といてください。
PHPでは現状56バイトが最高記録ですが、何故か何処にも公開されていません。
公開されているものでは59バイトが最短のようです。
http://d.hatena.ne.jp/milieu/20100204/1265305089
http://oflow.me/archives/110
http://d.hatena.ne.jp/ts_asano/20130320/1363791538
よく見たら最後のは改行ではなくスペースになってるので間違ってるな。
私はずっと58バイトで詰まっていたのですが、このたびようやく56バイトに成功しました。
<?while($i++<100)echo$i%3?!$$i=$i:Fizz,$i%5?$$i:Buzz,~ ; <?for(;$i++<100;)echo$i%3?!$$i=$i:Fizz,$i%5?$$i:Buzz,~ ;まず公開されている59バイトのから始めてみます。
私も当初はこの方向性で考えていたのですが、結局こちらでは58バイト止まりでした。
60バイトまでは、普通に三項演算子とかをいじっていれば減らせます。
そこから"\n"を直接LFにすると1バイト減って59バイトになります。
さて、~の後ろの空白は普通の文字ではないのでたぶん正しくアップできてませんが、chr()でASCIIコード245になる文字です。
この文字を~でビット反転するとASCIIコード10、つまりLFになるので『~ 』は『"\n"』と同じ意味です。
直接LFを書くよりさらに1バイト減らすことができ、該当部分を差し替えるだけで58バイトになります。
しかしこっちはこれで行き止まりなので、!$$iとか書かれてるよくわからんのを見ていきましょう。
とりあえずコードをわかりやすく分解。
<?php
while($i++<100){
// $iが3の倍数であれば「Fizz」を表示、倍数でなければ「!$$i=$i」を表示
echo $i%3 ? !$$i=$i : 'Fizz';
// $iが5の倍数であれば「Buzz」を表示、倍数でなければ「$$i」を表示
echo $i%5 ? $$i : 'Buzz';
echo "\n";
}
「!$$i=$i」ってなんだよ。まず1行目。
3の倍数だった場合は単にFizzを表示して終わりです。
3の倍数でなかった場合、「$$i=$i」で、$$iに$iを代入しています。
例として$i=4だった場合、$$i = ${4} = 4、つまり${4}という変数に4が代入されます。
これはただの代入なので、「$$i=$i」全体の値は$iになります。
ところで数値を!するとfalseになります。
結果として「!$$i=$i」全体の値はfalseとなり、echoでは何も表示されません。
1行目のまとめは、
・$iが3の倍数であれば「Fizz」を表示する。
・$iが3の倍数でなければ${$i}に$iを代入する。何も表示しない。
です。
次に2行目ですが、
・$iが5の倍数であれば「Buzz」を表示する。
・$iが5の倍数でなければ${$i}を表示する。
です。
5の倍数であれば単にBuzzを表示して終了なので問題ありません。
5の倍数ではない時を見てみましょう。
${$i}は、$iが3の倍数でないときは1行目によって$iが代入されているので、結果として$iが表示されます。
$iが3の倍数だった場合、${$i}は未定義なのでNULLとなり、結果としてなにも表示されません。
例として$i=4の場合、1行目により$$i = ${4} = 4が代入されていたので4となります。
$i=6だった場合、$$i = ${6}は何も代入されていないのでNULLです。
以上をまとめると、
・$iが15の倍数である場合、1行目でFizzが表示され、2行目でBuzzが表示される
・$iが3の倍数であり5の倍数ではない場合、1行目でFizzが表示され、2行目で$$i=NULLなので何も表示されない
・$iが3の倍数ではなく5の倍数である場合、1行目で$$i=$iが実行され、2行目でBuzzが表示される
・$iが3の倍数でも5の倍数でもない場合、1行目で$$i=$iが実行され、2行目で$$i=$iが表示される
となりFizzBuzzの定義を満たしました。
めでたし。
ということで次は55バイトなわけですが、さすがに世界中誰も成功してないから無理かな?
日本では栽培・所有が禁止されているケシですが、一部の研究機関や大学などでは特別に許可を得て栽培されています。
今回はそのひとつ、東京都小平市にある東京都薬用植物園に行ってきました。
道に迷って適当にうろついてたらたまたま目に入ったとかそういうことは秘密だ。
場所は西武拝島線東大和市駅すぐそば。
どうでもいいが西武の路線ってややこしいな。
普段は二重の柵で厳重に封印されているケシですが、開花のこの時期は外側の柵の封印が解かれ、内側のひとつの柵から間近にケシを見ることが可能です。
ところでなんか今日は、その内側の柵すらも突破して直接鑑賞していたグループがあったんですがあれはなんだったんだろう。
園芸品種の八重咲きケシ。
園芸品種といっても海外での話で、日本ではなんにしろ駄目です。
今年は2月の雪のせいであまり大きくならなかったとか。
それでもかなりの大輪で、有効成分なんぞが含まれていなければ花卉市場でも有力な地位を築いていたと思います。
青いケシの花。
とてもきれい。
http://ja.wikipedia.org/wiki/ケシ
> 色は基本色として紅、白、紫があり青と黄はない。
お、おう。
この薬用植物園、他にもたくさんの植物が植えられており、適当に眺めてるだけでも数時間かかり、よい暇潰しになります。
外側の柵は2014年は5月23日まで解放されているそうなので、日差しが強くなる前に行ってみるのはどうでしょう。
ところで毒草園もあってハシリドコロやらイヌサフランやらが普通に手に届く場所に植わってるんだが、こっちは大丈夫なのか。
BTOOOM10 井上 淳哉
BTOOOM11
BTOOOM12
BTOOOM13
BTOOOM14
☆☆☆
なんかオカルトな方向に向かってるんだが大丈夫かこれ。
これまでとことん極限状態を、あくまでリアルに描いてきたのにいきなりこれだから、14巻だけちょっとあれー?な感じ
今回はそのひとつ、東京都小平市にある東京都薬用植物園に行ってきました。
道に迷って適当にうろついてたらたまたま目に入ったとかそういうことは秘密だ。
場所は西武拝島線東大和市駅すぐそば。
どうでもいいが西武の路線ってややこしいな。
普段は二重の柵で厳重に封印されているケシですが、開花のこの時期は外側の柵の封印が解かれ、内側のひとつの柵から間近にケシを見ることが可能です。
ところでなんか今日は、その内側の柵すらも突破して直接鑑賞していたグループがあったんですがあれはなんだったんだろう。
園芸品種の八重咲きケシ。
園芸品種といっても海外での話で、日本ではなんにしろ駄目です。
今年は2月の雪のせいであまり大きくならなかったとか。
それでもかなりの大輪で、有効成分なんぞが含まれていなければ花卉市場でも有力な地位を築いていたと思います。
青いケシの花。
とてもきれい。
http://ja.wikipedia.org/wiki/ケシ
> 色は基本色として紅、白、紫があり青と黄はない。
お、おう。
この薬用植物園、他にもたくさんの植物が植えられており、適当に眺めてるだけでも数時間かかり、よい暇潰しになります。
外側の柵は2014年は5月23日まで解放されているそうなので、日差しが強くなる前に行ってみるのはどうでしょう。
ところで毒草園もあってハシリドコロやらイヌサフランやらが普通に手に届く場所に植わってるんだが、こっちは大丈夫なのか。
BTOOOM10 井上 淳哉
BTOOOM11
BTOOOM12
BTOOOM13
BTOOOM14
☆☆☆
なんかオカルトな方向に向かってるんだが大丈夫かこれ。
これまでとことん極限状態を、あくまでリアルに描いてきたのにいきなりこれだから、14巻だけちょっとあれー?な感じ
地球防衛軍4ノーダメージ攻略、完結しました。
魔女の心臓3 matoba
魔女の心臓4
☆☆☆☆
内臓がないそうです。
基本は短編集で、まだまだ全然核心が現われてこないですが、何かが心にしみる作品。
ちゃんと打ち切られずに続いてくれるんだろうな。
あと毎回撮影舞台裏が無駄に面白い。
ANDOL -えんどる-1 八色
ANDOL -えんどる-2
☆☆☆☆
天使がカラオケに舞い降りたのでアイドルデビューだ、
と思ったらようやく話が始まろうかってところでなんかものすごいあっさり打ち切られた。
こっちはきものなでしこと違って名前と内容の不一致もない、そのまんまの内容なのに。
私が気になった4コマはどうしてこうも打ち切られるんだろうか。
ほめよめ1 黒渕 かしこ
☆☆☆
うーん、なんというかどうというか、その、どうでもいい。
魔女の心臓3 matoba
魔女の心臓4
☆☆☆☆
内臓がないそうです。
基本は短編集で、まだまだ全然核心が現われてこないですが、何かが心にしみる作品。
ちゃんと打ち切られずに続いてくれるんだろうな。
あと毎回撮影舞台裏が無駄に面白い。
ANDOL -えんどる-1 八色
ANDOL -えんどる-2
☆☆☆☆
天使がカラオケに舞い降りたのでアイドルデビューだ、
と思ったらようやく話が始まろうかってところでなんかものすごいあっさり打ち切られた。
こっちはきものなでしこと違って名前と内容の不一致もない、そのまんまの内容なのに。
私が気になった4コマはどうしてこうも打ち切られるんだろうか。
ほめよめ1 黒渕 かしこ
☆☆☆
うーん、なんというかどうというか、その、どうでもいい。