DevFest
DevFest審査通ったー!ので,書いたコードとか晒してみるw
暗号通信
メールアドレスをシーザー暗号で暗号化して送りつける問題
小文字しかなかったので大文字は無視!
phpって1文字ごとに処理するのめんどくさいなぁーと思った.
っていうかphpで書く必要はなかったのではないかと書いてから思う.
<?php $addr = 'アドレス'; $arr = array(); for($i = 0; $i < strlen($addr); $i++) { if($addr[$i] != '.' && $addr[$i] != '@') { $ch = (ord($addr[$i]) - ord('a') + 3) % 26; $addr[$i] = chr(ord('a') + $ch); } } echo $addr . "\n"; $url = 'http://devquiz.appspot.com/personalpost'; $data = array( 'key' => "キー", 'pass' => $addr, ); $json = json_encode($data); echo $json . "\n"; $options = array('http' => array( 'method' => 'POST', 'content' => $json, )); $contents = file_get_contents($url, false, stream_context_create($options)); echo $contents . "\n"; ?>
パッチワーク
A,Bからなるマップを読み込んで,上下左右に同じ文字のつながっている部分のうち一番大きいもの(複数あればすべて)を'-'で書き換えたときに,行ごとの'-'の数を答える問題.
2回DFSして塗り塗りした.
#include<iostream> #include<vector> #include<algorithm> #include<string> using namespace std; #define rep(i,s,e) for(int i=(s),___e=(e);i<___e;++i) #define REP(i,n) rep(i,0,n) vector<string> s; int R, C; int components[1000][1000]; bool visited[1000][1000]; const int dr[] = {0,0,1,-1}; const int dc[] = {1,-1,0,0}; inline bool ok(int r, int c) { return 0 <= r && r < R && 0 <= c && c < C; } int dfs(int r, int c, char ch, bool rewrite) { if(!ok(r, c) || s[r][c] != ch || visited[r][c]) return 0; if(rewrite) s[r][c] = '_'; visited[r][c] = true; int ret = 1; REP(k, 4) ret += dfs(r + dr[k], c + dc[k], ch, rewrite); return ret; } int main() { for(string t; cin >> t; ) s.push_back(t); R = s.size(), C = s[0].size(); int maximum = 0; REP(i, R) REP(j, C) if(!visited[i][j]) { components[i][j] = dfs(i, j, s[i][j], false); maximum = max(maximum, components[i][j]); } REP(i, R) fill(visited[i], visited[i] + C, false); REP(i, R) REP(j, C) if(components[i][j] == maximum) dfs(i, j, s[i][j], true); REP(i, R) { int cnt = 0; REP(j, C) if(s[i][j] == '_') ++cnt; cout << cnt << endl; } return 0; }
漢字変換サーバ
数字をゲットパラメータで渡して,漢字表記に変換するウェブアプリを作る問題.
数字を桁が4の倍数になるように左に'0'を増やして4桁ごとに変換して万とか憶とかをつける方針でやった.
こういう問題苦手ー...phpが苦手以前の問題かも...
htmlspecialcharsとかしてないけどいいや(^p^)
<?php $a = array('B', 'Y', 'Z', 'L', 'S', 'Q', 'R', 'T', 'P', 'D'); $b = array('N', 'C', 'A', ''); $c = array('', 'G', 'M', 'K'); function to_str($num) { global $a, $b; if($num == '0000') return ''; $ret = ''; for($i = 0; $i < 4; $i++) if($num[$i] != '0') if($num[$i] != '1' || $i == 3) $ret .= $a[$num[$i]] . $b[$i]; else $ret .= $b[$i]; return $ret; } $str = $_GET['n']; $len = strlen($str); $r = $len % 4; if($r != 0) for($i = $r; $i < 4; $i++) $str = '0' . $str; $unit = $q = strlen($str) / 4; $arr = array(); for($i = 0; $i < $q; $i++) $arr[] = substr($str, $i * 4, 4); $ret = ''; for($i = 0; $i < count($arr); $i++) { if($arr[$i] != '0000') { $s = to_str($arr[$i]); if($s != '') $ret .= $s . $c[count($arr) - 1 - $i]; } } if($ret == '') $ret = $a[0]; echo $ret; echo "\n"; ?>
ぼくこのイベント行ってもいいんでしょうか((((;゜Д゜)))