2009/12/17

[Java]カード配り問題に挑戦

■ カード配り問題に挑戦

qune: プログラミングメモ - カード配り問題とか
10分で終わると聞いてやってみました。
結局20分かかりました...。

■ ソースコード

public class Cards {
 public String[] deal(int numPlayers, String deck){
  String[] playerCards = new String[numPlayers];
  int cardNum = deck.length();
  
  //配列初期化
  for(int i = 0; i < numPlayers; i++){
   playerCards[i] = "";
  }
  
  //プレイヤーに同じ数のカードを配るために、余るカードは抜けておく
  int amari = cardNum % numPlayers; 
  deck = deck.substring(0, cardNum - amari);
  cardNum = deck.length();
  
  //一人に一枚づつすら配れない場合は誰にもカードを配らない
  if(cardNum == 0){ return playerCards; }
  
  //カードを配る
  for(int i = 0; i < cardNum; i++){
   playerCards[i%numPlayers] += deck.charAt(i);
  }
  
  //結果を返す
  return playerCards;
 }
}

public class CardsTest {
 public static void main(String[] args) {
  int numPlayers;
  String deck;
  String[] results;
  
  Cards cards = new Cards();

  //例1
  numPlayers = 6;
  deck = "012345012345012345";
  //Returns: {"000", "111", "222", "333", "444", "555" }
  results = cards.deal(numPlayers, deck);
  
  for(String result : results){
   System.out.print("\""+result+"\" ");
  }
  System.out.println();

  //例2
  numPlayers = 4;
  deck = "111122223333";
  //Returns: {"123", "123", "123", "123" }

  results = cards.deal(numPlayers, deck);
  
  for(String result : results){
   System.out.print("\""+result+"\" ");
  }
  System.out.println();

  //例3  
  numPlayers = 1;
  deck = "012345012345012345";
  //Returns: {"012345012345012345" }

  results = cards.deal(numPlayers, deck);
  
  for(String result : results){
   System.out.print("\""+result+"\" ");
  }
  System.out.println();
  
  //例4
  numPlayers = 6;
  deck = "01234";
  //Returns: {"", "", "", "", "", "" }

  results = cards.deal(numPlayers, deck);
  
  for(String result : results){
   System.out.print("\""+result+"\" ");
  }
  System.out.println();
  
  //例5
  numPlayers = 2;
  deck = "";
  //Returns: {"", "" }

  results = cards.deal(numPlayers, deck);
  
  for(String result : results){
   System.out.print("\""+result+"\" ");
  }
  System.out.println();
 }
}

■ 出力結果

"000" "111" "222" "333" "444" "555" 
"123" "123" "123" "123" 
"012345012345012345" 
"" "" "" "" "" "" 
"" "" 
ソースが無駄に長かった...。
そして別にsubstringする必要が無かった...orz
//プレイヤーに同じ数のカードを配るために、余るカードは抜けておく
int amari = cardNum % numPlayers; 
deck = deck.substring(0, cardNum - amari);
cardNum = deck.length();
上記は無駄。以下でokであることを確認...orz
cardNum -= cardNum % numPlayers;
いちいち文字列を作り直さないで、for文の繰り替えし数で調整すればいいじゃない。という話。うへぇ。

2009/12/05

[普通の日記]レイアウトがひどい

ファイル名とかコマンドとかいっぱいでてくる場合は気をつけないなぁ...。

[Debian]ネットにつながらなくなりました...。

■ ネットにつながらなくなりました...。

 インストール後しばらくは普通に使えていたのですがねぇ...。
dhclient: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3
 こんな感じのがひたすら表示されていく感じ。IPを静的割当にしてもつながらない、というかルータへの ping すら通らないという...。
 取り合えず ifconfig。eth0 の認識を確認。それと同時にものすごい勢いで増えていく損失パケット(dropped)を確認。

■ 原因をさぐる

 やっぱり google 検索。「debian ifconfig 損失」で検索。 NIC のドライバがおかしいとこうなるらしい。Debian が NIC 用にロードしたモジュールが、実際はその NIC に対応していなかったって感じ?

■ NIC のドライバをインストールしよう

 今回の本題。
・このノートパソコンの NIC は何だ?
 初めのうちはきちんと動いているみたいだったから特に調べてませんよ? PC の型番で検索をかけて NIC の型番を調べる。
 NIC = Realtek RTL 8168D/8111D Family PCI-E GBE NIC
 (【NVIDIA ION】ドスパラ Prime Note Cresion NA まとめページ【Atom 330】 - スペックより)
 そういえばさっき調べたページでも蟹さんはちょっとアレという話題がでていたなぁ。
・ドライバ入手
 Realteck のホームページから r8168-8.015.00.tar.bz2 をダウンロード。解凍、READMEを読む。ふむ、ビルドにはヘッダやら何やら、新たにパッケージをインストールする必要があるらしい。
・必要なパッケージのダウンロード
 カーネルヘッダーパッケージが必要らしい。自分が使っているカーネルは 2.6.26-2-amd64(?) だから、ダウンロードするのは「linux-headers-2.6.26-2-amd64」。
 もちろん aptitude とか使えないので、別 PC にて手動ダウンロード。debian パッケージの内容を検索(http://www.debian.org/distrib/packages#search_packages) で「linux-headers-2.6.26-2」を検索し、「linux-headers-2.6.26-2-amd64」パッケージをダウンロード。芋づる式に依存パッケージ、依存パッケージの依存パッケージ...とか、全部もってくる。
 もってきたパッケージを USB 経由で debian へ。
・必要なパッケージのインストール
 もってきたパッケージがすべて揃っているディレクトリで、dpkg。
: dpkg -i *
 何か言われると思ったけれどすんなり完了しました。
・ドライバのビルド
 間違ってロードされているモジュールの削除。
: rmmod r8169
 正しいモジュールのビルド
: make clean modules
: make install
 変更の適用(?)
: depmod -a
 正しいモジュールのロード
: modprobe r8168
 確認
: ifconfig -a
・ドライバの自動ロード設定
 mkinitramfs で、起動時に r8168 をロードしてくれる initrd を作成する。
: mkinitramfs -o initrd.img-2.6.26-2-amd64 2.6.26-2-amd64
 元の initrd のバックアップをとったのち、今作った initrd を /boot に突っ込む。
: mv /boot/initrd.img-2.6.26-2-amd64 /boot/initrd.img-2.6.26-2-amd64.bkup
: mv initrd.img-2.6.26-2-amd64 /boot/
 これで、起動時に自動で r8168 をロードしてくれる。...はず。

■ ネットにつながるようになりました!

 めでたしめでたし。

2009/11/24

[電子工作]組み込みLinuxなら何でも良いわけで...

Chumbyの代わりにBeagle Boardという手もあるなぁ。Chumbyより安いし。
Digi-Key japanで約15000円也。
LM3674MF-ADJ/NOPBも250円くらいで売ってるみたい。
もう少しBeagle Boadについて調べたら注文してみましょうかね?

2009/11/20

[電子工作]Chumby修理計画?

前回の続き?
あきらめモード満点だったんですが、kinnekoさんからコメントをいただきまして、
kinneko さんのコメント...

http://tech.cerevo.com/blog/archives/50 このへん?

だそうなので、このページを真似して抵抗やら電圧やらを測ってみた。
  • R300=12V
  • J302=1.4V, 125Ω
  • J303=5.3V, 400Ω
  • J304=1.9V, 155Ω
3.3Vがだめになったせいでいろいろ不具合がおきたということかしら?
作業中にもうひとつわかったことが、U300が熱いということ。
やけどしそうになりました。
U302は指で触れる程度なのにU300は触ってたらやけどする、絶対。
これが原因か?
この場合、U300を新品交換って感じでよいのだろうか?
というかそれくらいしか思いつかないのでやってみようか。
どうせこのままでも動かないわけだし。
しかし、その辺で売ってるのか?LM3674ってやつは。

2009/11/19

[電子工作]Chumby壊れてた

シリアルコンソールケーブル作るまでもなかった。
シリアルコンソールの+3VとGNDをテスターで計ったら1.5V位しか電圧がなかった...orz
これはもう自分じゃ手に負えないわ。
さて、これからどうしようかねぇ...。

2009/11/18

[普通の日記]今週のノルマ終了(したと思いたい...)

Twitter, 気付けば13 days ago...
いやいや、P3P廃人になっていたわけではありませんよ?決して。

さて、やらねばならぬことに一区切りつけたので、あと1週間くらいは通常運行モードのはず。
そういうわけで、やりたいことを列挙してみようか。
  1. Bioroidを弄る
  2. シリアルコンソールケーブル作成
  3. 壊れた(?)Chumbyの動作確認
  4. AVRマイコン入門の続き
大威張りで「今週中にBioroidで何か組み立てますよ」
とか言っちゃったもんだからとりあえず何か組み立てねば...。
金曜までには3番まで終わらせる勢いでやっていきたいですね。

さて、それではこれからBioroidの説明書を読みますよ。

2009/11/04

[電子工作]Chumbyが壊れた

...と断言できないのがもどかしい。
タッチスクリーンの映像が微妙に乱れ、ずっとタッチしっぱなしだと認識される。
たぶんタッチスクリーンがあれになったのだと思うけれど、
タッチスクリーンを外して電源をつけてもSSHが復活しない...。
そうなってくると、なんだか基盤が熱すぎるような気がしてくる...。

そもそもタッチスクリーンを外して電源をつけたときにどういう挙動とるのか、
そこから解ってないし、自分。

うわー、基盤かね?タッチスクリーンかね?
とりあえずタッチスクリーン、SSH以外の入出力で動作確認が必要。

ということで、とりあえず秋月にレベルコンバータを注文しました。
シリアルコンソールケーブルを作って、そちらで動作確認します。
その前にシリアルコンソールケーブルの動作確認を何かで行う必要があるのか...。
(初自作、シリアルコンソールケーブル)

壊れたChumbyの画面画像ではほとんどわからないけれど、マルやら文字やらが軒並み右側へひげを出している。(うまい言葉が見つからなかった...)

いろいろと微妙な時期に壊れてくれちゃったもので、Chumbyを買いなおすかどうするか悩みどころですわ。(いや、まだ復帰不可能だと決まったわけではないですが...)

2009/11/02

[普通の日記]色々と終了

終了した後3日間位寝込んだわけですが、後は1月までは通常運行のはず。 色々お預けしていた物事を進めようかしらね。
  • ChumbyでV4L2&画像処理
  • AVRマイコン入門
  • CUDA入門
とりあえずはChumbyでV4L2してロボ制御って感じでひとつ。

2009/09/18

やっと見つかった…。

わかりにくいよ!この乗り場!
夕飯食べる時間がねいですわ。

岡山到着

回転処理が意外に面倒なようなそうでないような…。

VGA

画質的にはやっぱりVGAくらい欲しいと思った、個人的には。 ホームページとかブログとか画像サイズとか的にはどうなのだろうかね…?

特急やくも

どのくらいのサイズがよいのやら…。

松江駅

画像投稿テストがてら報告。
これから千葉に帰ります。

2009/07/09

[普通の日記][見た]「透明マント」を応用、存在しないものを見せるメタマテリアル技術

メタマテリアルを用いて不透明な物質が光を通すかのように見せる手法。「壁にとりつければ反対側が見通せる「穴」になるデバイス」という例が挙げられています。
[2009/07/09引用]「透明マント」を応用、存在しないものを見せるメタマテリアル技術(http://japanese.engadget.com/2009/07/08/illusion-device/)
これを思い出した。
http://portal.nifty.com/2009/03/10/a/

2009/07/07

[普通の日記]舌、完治

ものが普通に食べられる幸せ。プライスレス。

2009/07/01

[普通の日記]舌を噛んだ

 血こそ出なかったものの、噛んだところが窪んでしまった...。普通に口を閉じているだけでも歯にあたってものすごく痛い。さすがに我慢できなくなって、今さっき薬局で薬を探してみた。へぇー、口内用の軟膏とかあるのね。とか感心。ちょうど良さそうな薬を発見したので買ってみた。

 貼るタイプだから歯に当たった時の刺激をやわらげてくれそうということで購入。早速貼ってみたんだけれども、ものすごい違和感、ってか舌に貼るものじゃないかこれ。今にも外れそうで気が気でない。痛み自体は気にならなくなったけれど。(気が散っているだけという気もする。)

 苦痛の伴う食事というのはかなりのストレスなので、早く治ってほしいのだがどうしたものかね?

2009/06/18

[普通の日記][ロボット]自分会議

■ ちょっと体調を崩した。

ゆえに、ぼけーっと寝ていた。
寝ている間は暇なので、自分会議を開いた。
そしたら意外とやりたい事とかやらねばならぬ事とか溜まってた。
うへー。

■ やりたいこと

  1. chumbyでOpenCV
  2. ロボのモーション作成入門記事を書く
  3. フレームから作る自作ロボとか

■ chumby de OpenCV

chumbyでWebカメラ+haarDetectObjects()とか使って物体検知したい。

・現状

WebカメラもhaarDetectObjects()も一応乗った、動いた。
ただし、今一歩のところで満足いく結果に届かず。
  • Webカメラ:OpenCVで画像取得すると、画像の下半分がバグる。画像の取得速度の問題か?
  • HaarDetectObjects():セグフォ。ちょっとこの関数のソースを見てみたけれどお手上げってかんじ。どうしたものか。

■ ロボのモーション作成入門記事を書く

次の世代のためのチュートリアル文章の作成。
ロボ付属のモーションエディタ特有のチュートリアルになるのは仕方ないか。
基本の使い方と、ユーザ関数の作りどころ(?)的なTipsでも書けば良いのか?

■ フレームから作る自作ロボとか

chumbyにモータ4個と車輪、Webカメラ付けて遊びたい。
RC戦車とかのシャーシを丸々流用できるかなとか思ったらRCって高いのね。
13000円とか、タミヤの工作キット+(ベニヤ板orプラ板)で自作かな、値段的に。
いや、まぁ、そもそもOpenCVに問題があるからどうしたものかとうい状態ですがね。

■ そういえば

ミニ四駆に付属されているような歯車とか、シャフトとか、直径3から5mm位の鉄パイプ的なものとかはどんな店で売っているのかね?
ホームセンターとか模型屋とかでもみかけないのですが...。
うちの近くの店の品揃えが悪いだけ?

■ いつになく

長文。つかれた。

■ 願い

どうかやるやる詐欺になりませんよーに。
なむなむ。

[鯖]家鯖がダウンしているのでとりあえずこっちにメモ...

cupsでhttps通信をしたくないときは、
DefaultEncryption Never
/etc/cups/cupsd.confに上記記述を入れる。
いや、きちんと認証局立てて...とかやったほうがいいのはわかるよ?
でもさ、...ねぇ?

2009/06/04

[ロボット]うれしさ1割、情けなさ8割

残り1割は何だ...?

とりあえず、itoa使って変換するよりは、sprintf使って変換したほうがよいことはわかった。
itoaの使い方間違いに気づくのに約12時間かかるとかもう...orz

とりあえず、ロボット側のコマンド受付プログラムは完成。
後はコマンドを送る側を作れば見栄えはよくなるね。

.........teratermでいいんじゃね?って気持ち7割。