だいら
文字列型日時ののN秒後時間取得
(Nested
Flatten)
1 2 3 4 | <?php
function DateEx($time, $diff){
echo echo date('YmdHis',strtotime($time)+$diff);
}
|
LL Golf Hole 8 - 横向きのピラミッドを作る
(Nested
Flatten)
1 2 | for($c=2*fgets(STDIN);$i++<$c;)echo str_repeat('*',($i>$c/2)?$c-$i:$i)."
";
|
LL Golf Hole 6 - 10進数を2進数に基数変換する
(Nested
Flatten)
変換先指定対応版
1 | <?$a=split(' ',fgets(STDIN));echo base_convert($a[0],10,$a[1]>0?$a[1]:2);
|
短くする楽しみが全く無いな。
1 | <?=decbin(fgets(STDIN));
|
LL Golf Hole 5 - 最上位の桁を数え上げる
(Nested
Flatten)
素直に書いた方が短いんですけどね。71byte
1 2 | <?$m=fgets(STDIN);for($a=0;$a<=$m;$a+=pow(10,strlen($a)-print$a.'
'));
|
80byte
1 2 | <?$m=fgets(STDIN);for($a=0;$a<=$m;eval('$a+=1e'.(strlen($a)-1).';'))echo$a,'
';
|
LL Golf Hole 3 - 13日の金曜日を数え上げる
(Nested
Flatten)
1 2 | <?for(;1388415600>$t=strtotime($i++."day");$c+=date(dw,$t)-135?0:print date("Y-m-d
",$t));echo$c;
|
LL Golf Hole 2 - 文字列に含まれる単語の最初の文字を大文字にする
(Nested
Flatten)
処理が終わらないですね。 golf的にはタイムアウト扱いになるのでは?
Cygwin gcc3.4.4で確認
1 | main(a,b){for(;(b=getchar())>0;)a=putchar(b>96&a<33?b-32:b);}
|
1 | <?=ucwords(fgets(STDIN));
|
憂鬱な勇者
(Nested
Flatten)
階乗計算をどうするかがポイントですかね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?php
//モンスターリスト
$monster = array("焼きたてパン","強いシャチホコ","もんじゃ焼き一年生","怪人ホタテ男","ニセ勇者","逃げ足の早いアレ","睡魔","煩悩","愛らしい子犬の中の人","恋するスズメバチ","勇敢なクマンバチ","信じられない物","勇者の師匠","浮遊する鎧","怪盗ドボン","闇の招き猫","誘惑のカスタードクリーム","しょっぱすぎる籠手","カレー味の兜","光沢だけは一流の盾","若葉マークのモンスター","新緑の季節","梅雨時の車両のニオイ","暑すぎる夏","新宿らしき何か","やたら発達したドーナツ","育ちすぎたクマー","なごやかな雰囲気","凍り付いた気配","忍び寄る恐怖");
//スキルリスト
$skill = array("お豆腐の買い方","鉛筆の買い方","消しゴムの使い方","メモの取り方","攻撃に使えないこともない呪文","裏町の歩き方","森林浴","珈琲の味","しじみのみそ汁の作り方","回覧板の回し方","郵便物の投函方法","立ち話のコツ","猫の呼び方","犬の呼び方","カラスの呼び方","鳩専用豆鉄砲","秘密の趣味","速く走るコツ","剣の使い方","斧の使い方","まきわりで、まっきわりわり","聖なる祈り","孤独","涼しく過ごすコツ","お洒落のコツ","卵をふわっと焼く方法","ごはんの研ぎ方","油汚れの対応方法","大人の振るまい","Suicaの使い方",);
for($i = 0; $i < 30; $i++){
echo "*-----\n";
shuffle($monster);
echo array_pop($monster) . "を倒した!\n";
echo fact($i + 1) . "の経験値を得た。\n";
if(count($monster) == 0)
break;
echo "勇者は" . ($i + 1) . "にレベルが上がった!\n";
shuffle($skill);
echo "勇者は、" . array_pop($skill) . "を覚えた。\n\n\n";
echo "そして、\nかくかくしかじかで、山あり谷ありの冒険が続いたが割愛。\n\n";
}
echo "勇者は、また、レベルが上がった!\n";
echo "勇者は、ふと空しさを覚えた。";
//階乗計算
function fact($x){
return bcmul($x ,($x <= 1 ? 1 : fact(bcsub($x, 1))));
}
|
リストを逆順に表示
(Nested
Flatten)
副作用を破壊的であるととりました。
1 2 3 4 5 6 7 8 9 | <?php
// 配列へ整形
$given_list = "1,2,3,4,5";
$array = explode(',', $given_list);
// 出力
while(count($array)){
echo array_pop($array)."\n";
}
|
循環関数
(Nested
Flatten)
特にひねりも無く。
1 2 3 4 5 | <?php
function modular($n, $low, $high){
$a = $n % ($high - $low + 1);
return $a < 0 ? $high + $a + 1 : $low + $a;
}
|
コメントの削除
(Nested
Flatten)
token_get_all関数を使うと楽が出来ます。
see: PHP:token_get_all
1 2 3 4 5 6 7 8 9 10 11 12 13 | function decomment($sorce){
$out = '';
foreach(token_get_all($sorce) as $token){
if(is_array($token)){
if($token[0] != T_COMMENT){
$out .= $token[1];
}
}else{
$out .= $token;
}
}
return $out;
}
|
文字変換表に基く文字列の変換
(Nested
Flatten)
(1)です。
PHPではstrtrとして実装されています。
PHPではstrtrとして実装されています。
1 2 3 4 5 | <?php
$str = 'typewriter';
$from = 'qwertyuiop';
$to = 'QWERTYUIOP';
echo strtr($str, $from, $to);
|
2次元ランダムウォーク
(Nested
Flatten)
こんな感じでしょうか。
移動距離は1固定です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php
//移動回数
define('LOOP', 10);
//初期位置
$pos[0] = array('x' => 0, 'y' => 0);
for($time = 1; $time <= LOOP; $time++){
$rad = deg2rad(mt_rand()%360);
$x = $pos[$time-1]['x'] + cos($rad);
$y = $pos[$time-1]['y'] + sin($rad);
$pos[$time] = array('x' => $x, 'y' => $y);
}
foreach($pos as $key => $val){
echo $key . " " . $val['x'] . " " . $val['y'] . " " . "\n";
}
|
比較しないソートの作成
(Nested
Flatten)
バケツで。
see: バケットソート
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php
$min = -1;
$max = 10;
$input = array(-1, 9, 4, 8, 9, 6, 3, 9, 5, 2);
$sorted = bucketsort($min, $max, $input);
function bucketsort($min, $max, $input){
for($i = $min; $i <= $max; $i++)
$temp[$i] = 0;
foreach($input as $v)
$temp[$v]++;
foreach($temp as $k => $v)
for($i = 0; $i < $v; $i++)
$sorted[] = $k;
return $sorted;
}
|
コラッツ・角谷の問題
(Nested
Flatten)
愚直に。 答えが出るまで数十分かかります。 PHP遅すぎる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?php
$max = array(1,0);
$maxValue = pow(2,20);
for($i=1;$i<=$maxValue;$i++){
$deep = collatz($i);
if($max[1] < $deep){
$max[0] = $i;
$max[1] = $deep;
}
}
echo "n=" . $max[0] . " f(n)=" . $max[1];
function collatz($value, $deep = 0){
if($value == 1){
return $deep;
}elseif($value%2 == 0){
$deep = collatz($value/2, $deep);
}else{
$deep = collatz($value*3+1, $deep);
}
return $deep + 1;
}
|
マルバツゲーム
(Nested
Flatten)
next >>
判定おかしかったですね。 修正しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 79c79
< for ($i = 0; $i < 2; $i++) {
---
> for ($i = 0; $i < 3; $i++) {
92,95c92,95
< ($this->field[0][0] == $player &&
< $this->field[2][2] == $player) ||
< ($this->field[0][2] == $player &&
< $this->field[2][0] == $player)) {
---
> (($this->field[0][0] == $player &&
> $this->field[2][2] == $player) ||
> ($this->field[0][2] == $player &&
> $this->field[2][0] == $player))) {
|



だいら
#7509()
Rating0/0=0.00
echoが2つになってしまった・・・。片方いらないです。