« 3月1日のトレーニング | トップページ | 3月3日のトレーニング »

2010年3月 2日 (火)

DevFest2010のQuizに合格しました!

先日、DevFest2010 Japan
応募したのですが、参加するためのQuizが出題されました。

で、以下の通知がありましたので、なんとか合格できたようです。

このたびは、DevFest 2010 Japan にご応募いただきまして、まことにありがとうございます。

クイズの解答を厳正に審査した結果、見事、参加の基準点をクリアされました。おめでとうございます。

後日、参加証をご登録いただいたメールアドレス宛に送付いたしますので、今しばらくお待ちください。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
配点詳細

ウォーミングアップ : 0.0 点
HTTP ステータスコード : 2.0 点
Google Code Discussion Group : 3.0 点
暗号通信 : 0.0 点
パッチワーク : 0.0 点
Issue Tracker : 0.0 点
Hackathon : 0.0 点
Android アプリケーション : 1.0 点
Chrome Extensions : 0.0 点
漢字変換サーバ : 7.0 点


合計 : 13.0 点

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
会場で皆様にお会いできることを楽しみにしております。

そこで、私が回答したのはAndroidアプリケーションと漢字変換サーバなのですが、
結構苦労しまして、暗号通信とパッチワークの問題に着手できませんでした。
(ちなみに、Androidアプリケーションは健康日記2を提出。)

作戦は、とりあえず、最大の16桁に埋めて4桁ずつ処理して、0を消去、
兆、億、万を付加。
という作戦で攻めてみました。苦労したのは0100010001000100みたいな数字の
パターンを思いつくまでに時間がかかったことでしょうか。。

久しぶりにソースコードを貼ります。

package jp.iEvolution.DevQuizCharConv;

import java.io.IOException;
import java.io.PrintWriter;
import java.math.BigDecimal;

import javax.servlet.http.*;

@SuppressWarnings("serial")
public class DevQuizCharConvServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
// パラメータ取得
String strN = req.getParameter("n");
String strResult = "";
String strErr = "";
boolean bErr = false;

try
{
BigDecimal dec = null;

try
{
dec = new BigDecimal(strN);
} catch(Exception e) {
// 変換エラーの場合は、数値以外の文字列を除去して変換
String strReplace = strN.replaceAll("[^0-9]", "");
dec = new BigDecimal(strReplace);
}

String strWork = "0000000000000000" + dec.toString();
strWork = strWork.substring(strWork.length() - 16, strWork.length());

if(dec.signum() > 0)
{
String[] strSubValues = new String[4];
for(int i = 0; i < strSubValues.length; i++)
{
strSubValues[i] = "";
}
// 文字列部品生成
for(int i = 0; i < strWork.length(); i++)
{
int iColumn = (int)Math.floor((double)i / 4);

strSubValues[iColumn] = strSubValues[iColumn] + strWork.substring(i, i + 1);
}

// 各部品の編集
String[] strEdit = new String[4];
for(int i = 0; i < strSubValues.length;i++)
{
strEdit[i] = "";
for(int j = strSubValues[i].length(); j > 0;j--)
{
String strChar = strSubValues[i].substring(j - 1, j);
String strSelect = "";
if(strChar.equals("0")) {
strSelect = "Y";
} else if(strChar.equals("1")) {
if(j != 4)
{
strSelect = "";
} else {
strSelect = "J";
}
} else if(strChar.equals("2")) {
strSelect = "Q";
} else if(strChar.equals("3")) {
strSelect = "G";
} else if(strChar.equals("4")) {
strSelect = "D";
} else if(strChar.equals("5")) {
strSelect = "R";
} else if(strChar.equals("6")) {
strSelect = "F";
} else if(strChar.equals("7")) {
strSelect = "P";
} else if(strChar.equals("8")) {
strSelect = "N";
} else if(strChar.equals("9")) {
strSelect = "B";
}

if(j == 1) {
// 千
if(!strChar.equals("0"))
{
strEdit[i] = "A" + strEdit[i];
}
} else if(j == 2) {
// 百
if(!strChar.equals("0"))
{
strEdit[i] = "U" + strEdit[i];
}
} else if(j== 3) {
// 十
if(!strChar.equals("0"))
{
strEdit[i] = "E" + strEdit[i];
}
}
strEdit[i] = strSelect + strEdit[i];
}
strEdit[i] = strEdit[i].replace("YYYY", "");
strEdit[i] = strEdit[i].replace("YYY", "");
strEdit[i] = strEdit[i].replace("YY", "");
strEdit[i] = strEdit[i].replace("EY", "E");
strEdit[i] = strEdit[i].replace("JE", "E");
strEdit[i] = strEdit[i].replace("UY", "U");
strEdit[i] = strEdit[i].replace("YU", "U");
strEdit[i] = strEdit[i].replace("JU", "U");
strEdit[i] = strEdit[i].replace("AY", "A");
strEdit[i] = strEdit[i].replaceAll("^Y+", "");
}

// 各部品の連結
for(int i = strEdit.length - 1; i >= 0 ;i--)
{
if(strEdit[i].length() > 0)
{
switch(i)
{
case 0:
strResult = strEdit[i] + "K" + strResult;
strResult = strResult.replace("YK", "K");
break;
case 1:
strResult = strEdit[i] + "Z" + strResult;
strResult = strResult.replace("YZ", "Z");
break;
case 2:
strResult = strEdit[i] + "S" + strResult;
strResult = strResult.replace("YS", "S");
break;
default:
strResult = strEdit[i] + strResult;
break;
}
}
}
} else if(dec.signum() == 0) {
strResult = "Y";
} else {
bErr = true;
strErr = "マイナスは変換できません。";
}
} catch(Exception e) {
strErr = e.getMessage();
bErr = true;
}

resp.setContentType("text/plain");
PrintWriter out = resp.getWriter();

if(bErr)
{
out.println("Error:" + strErr);
} else {
out.println(strResult);
}
}
}

|

« 3月1日のトレーニング | トップページ | 3月3日のトレーニング »

Java」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: DevFest2010のQuizに合格しました!:

« 3月1日のトレーニング | トップページ | 3月3日のトレーニング »