投稿

C#でお釣り計算

イメージ
先日ATMでお金を下ろしたら千円札が9枚も出て来まして… ばっきゃろー!5000円ってもんを知らないのかっ!!って思いましてねw 前々から思ってましたけどその日はなんか許せなくて。プログラムにしちゃいました。 ただ、文字列使ったら面白くないじゃないですか。 1234.ToString()[0]とかしたら面白み全く無いですw ってことでアルゴリズム部分に文字列を使うのは禁止ってことで。 問題をまとめると 入力された数値をお釣りとして計算する。 同じ硬貨や紙幣が重なる場合は一つ上の値段の硬貨や紙幣を使うこと。 アルゴリズムに文字列の使用は禁止。 お釣りは無制限にあるものとする(←制限つけようと思ったけどめんどくさくなった 私の解答は ideone.comのこちからから。 もし皆さん回答作ったらコメントでもツイッターでもいいので教えてくれると私が楽しいです←

カスタム404ページ

イメージ
最近 Bloggerでカスタム404ページが作れる ことを知って全部1から作ったんですよ。 こんな感じで。でも実際には記事相当のところにしか表示できないようで当然bodyタグとかそのへんも使えず。外部cssを読み込むためのlinkタグも禁止されていました。幸い1万文字使えたのでstyleタグで直接埋め込みました。スクリプト使っても良かったんですけれども、こっちのほうがまだスマートかなと思いまして。 ということで実際にはこんな感じになりました。だいぶ変わってしまいました。

3次元配列を1次元配列で表現

int hoge[][][]では足りないぐらい大きい三次元配列を確保したい方へ。 C/C++でポインタによる多次元配列を連続したメモリ領域に作成する でもforで回してやる方法が書かれているけどこれだと確保が遅い。この方式のほうがまとまった領域を一気に確保してそのまま使えるので早い。ただアクセスするたびに若干の計算が必要になるけど。微妙ではある。 #include <stdio.h> #include <stdlib.h> #define WIDTH 1000 #define HEIGHT 1000 #define OFFSET(x,y,z) ((WIDTH + HEIGHT * (z)) + ((x) + WIDTH * (y))) int main(){ int *tmp = NULL; tmp = ( int *) malloc( 1000*WIDTH *HEIGHT ); if (tmp == NULL){ exit(1); } tmp[OFFSET(1,1,1)] = 1; printf( "%d" ,tmp[OFFSET(1,1,1)]); free(tmp); return 0; }

変数を一つだけ使って1~100まで足す

「1から100までの和を表示するプログラムを作れ」という問題を鼻で笑う諸君、「但し変数は宣言済の int x 以外は使わないこと」 という条件を付けても鼻で笑っていられるかな? — 自作中毒ぢぢぃ、GATAROさん (@duo6750) 3月 25, 2012 というのを見かけたのでintを16bitと8bitに区切って使って計算してみた。 using System; public class Program { public static void Main() { //0xFFFF00(5050) + 0xFF(100) int x = 100; for (; (x & 0xFF) > 0; x= x & 0xFFFF00 | ((x & 0xFF) -1)) { x = ((x >> 8) + (x & 0xFF)) << 8 | (x & 0xFF); } Console.WriteLine(x>>8); } } 実行結果はこちら/ideone.com

Javaにおいて引数付でスレッドを走らせる

C#なら色々引数を渡す手段を知っているのですがJavaでは引数を持てるAPIが見つかりませんでした。そこで調べてみたところ クラスのフィールドにセットしておけ とのことだったので頑張ってみましたが、うまく行くまで時間がかかってしまったのでブログに投稿しました。 [実行部(使い方)] new Thread( new ParameterizedRunner<Integer>( new Runnable1<Integer>() { @Override public void run(Integer ags) { try { Thread.sleep(ags); } catch (InterruptedException e) {} } }, 1234)).run(); [パラメータを受け取るRunbaleの実装クラス] private class ParameterizedRunner<TArg> implements Runnable{ private Runnable1<TArg> task; private TArg arg; public ParameterizedTRunner(Runnable1<TArg> task,TArg arg){ this .task =task; this .arg = arg; } @Override public void run() { task.run(arg); } } [引数をひとつ受け取って実行するインターフェス] public interface Runnable1<TAgs> { void run(TAgs ags); }

新年おめでとうございます!

新年おめでとうございます。今年もどうぞこんなくだらないブログですがどうぞよろしくお付き合いお願いします。 今年の年賀状は干支は辰ということで燃え上がる雰囲気を想像して こんなもの を作りました。最初は印刷用に作ったものだったのですがブログ用のも作らなきゃと作業していたらこんな感じのまったく違うものが生まれましたw 今年はできるだけアクティブにいろんな人と関わっていろんな経験をする年にしたいと思います。今年も一年がんばりますっ!

プログラミングを上達するための5つのポイント

イメージ
プログラミングの上達のために何かやったほうがいいことってありますか?できれば千晶さん自身どのようにそのような技術を学んだのかも知りたいです。(しがない初心者C#erからの少々ぶしつけな質問でなんか申し訳ないですが…。) というザ・インタビューズに寄せられた質問を受けて少し思い返しながら記事を書きます。長めな記事ですがご了承ください。