programing

C言語でKaratsuba開平を利用して整数の平方根と余りを求める

math.hのsqrt(f)を使わずに整数の平方根を求めてみた。(intが4byteであるマシンでのみ動作) sqrtmod0はアルゴリズム上0x40000000以上の値の平方根を計算でようなので、0x40000000以上の値はKaratsuba開平を利用して求めている。↓は乱数で平方根と余りを求め…

ASCIIコード表見て今頃気づいたこと

toupperとtolowerって、cが英字であることが担保されていればこれでいい #define TOUPPER(c) ((c) & ~0x20) #define TOLOWER(c) ((c) | 0x20)

Brainfuckインタプリタを作った

Brainfuckという難解言語はご存じだろうか? '>', ' チューリング完全なチューリングマシンである。 Brainfuckの言語仕様 > ポインタをインクリメントする。ポインタをptrとすると、C言語の「ptr++;」に相当する。 C言語の「ptr--;」に相当。 + ポインタが指…

Rubyで2^x以上で最小の素数

ちょと必要だったので、そのときのプログラムをメモ。 なぜ計算したかったのか? xが1〜32までの時の2^x以上で最小の素数が欲しかったんです ハッシュテーブルの大きさとかによく使うでしょ(そうそれ! ソース require 'mathn' (1..32).each{|x| puts lambd…

setjmpを呼びたすための関数を作ってはならない!

以前に「C言語でJavaと同等程度の例外処理をやってみる - ほんまの走り書き技術メモ」でC言語でも例外処理っぽいこと出来るんやぞってのを書きました。今日その辺をいじっていて気付いたことがあったのでメモ。 jmp_bufとはなんぞや? 以前にも説明したが、j…

Perlで累乗計算の速度計測〜二乗を計算するなら?〜

Perlで二乗の計算をするなら $i ** 2 よりも $i * $i の方が約2倍早い。 実験 0〜1000000までの二乗を計算する速度 ソース pow1.pl(*で計算) #!/usr/bin/perl use strict; for (my $i = 0; $i < 1000000; $i++) { my $p = $i * $i; } pow2.pl(**で計算) …

JavaでBase64のエンコード・デコード

1年以上前に作ったJavaでのBase64のエンコード、デコードのクラスです。 ソース MyBase64.java class MyBase64 { final static char[] base64 = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U…

2007年アジア予選B問題(Prime Gap)(2007/11/15(木) 00:49:27)

2007年アジア予選B問題を解いてみた 解法 エラトステネスの篩で素数配列を生成し、素数以外の数字なら素数間の距離を数えて出力するだけ。 ソース (目標10分以内) #include #include using namespace std; #define MAX_LEN 1299800//>1299709 int main(){ …

2007年アジア予選H問題(Bug Hunt)(2007/11/14(水) 00:05:05)

2007年アジア予選H問題を解いてみた。以下のBNFのプログラムのインタプリタを作成し、何行目にバグがあるかを見つける問題。 <program> ::= <declaration> | <program><declaration> | <program><assignment> <declaration> ::= <array name>[<number>]<new line> <assignment> ::= <array name>[<expression>]=<expression><new line> <expression> ::= <number> | <array name>[<…</array></number></expression></new></expression></expression></array></assignment></new></number></array></declaration></assignment></program></declaration></program></declaration></program>

2007年アジア予選A問題(And Then There Was One)(2007/11/13(火) 23:36:42)

2007年アジア予選A問題を解いてみた。 解法 最大の石の数10000よりも大きい配列を用意する。 必要な配列数だけ0で埋めて初期化。 消した石は1を代入しいく。(石数-1回繰り返す) 高速化 上記の解法でも普通に答えは得られるが、少し速度的に遅いので、 for(…

JDK6の新機能(2007/08/13(月) 01:42:59)

凄い(?)!! こんな新機能が出たんや!!ってことで φ(*'д'* )メモメモ JDK6でのコンソール入力(文字列) Console console = System.console(); String line = console.readLine("文字列:"); JDK6でのコンソール入力(パスワード) 標準入力からの入力がコンソー…

2007年国内予選C問題(Cut the Cake)(2007/07/30(月) 01:10:47)

2007年国内予選C問題のCut the Cake(ケーキカット)をやってみました。 解法 1つ1つのピースを切られた順番、大きさ(縦・横)で管理する。 切られたピースは削除し、新たに2つ新しいピースを追加する。ソートは、切られた順番にソートするless()オペレー…

2007年国内予選B(Analyzing Login/Logout Records)(2007/07/30(月) 00:44:10)

2007年国内予選B問題のAnalyzing Login/Logout Records(ログイン/ログアウト記録の解析)をやってみました。 解法 3600のboolean配列を用意すればよい感じ? ソース (目標10分以内) #include <iostream> using namespace std; typedef struct LOG{ bool t[3601]; </iostream>…

2007年国内予選A問題(ICPC Score Totalizer Software)(2007/07/30(月) 00:37:45)

include 2007年国内予選A問題のICPC Score Totalizer Software(ICPC 得点集計ソフトウェア)をやってみました。 解法1 Vectorに入れてソートしたものを、先頭データ+1から末尾データ−1までで平均値を出す。 解法2 入力で最小値と最大値、合計を求めて…

何も見ないで書いてみた(マージソート)(2007/07/23(月) 23:57:46)

何も見ないでマージソートを書いてみた。 初め int *tmp = new int[num]; で、マージするための領域用意したのに if(j >= num || (i < left && array[i] < array[j]))array[k++] = array[i++]; else array[k++] = array[j++]; と書いていて、tmpのコピーも開…

何も見ないで書いてみた(クイックソート)(2007/07/23(月) 23:55:28)

何も見ないでクイックソートを書いてみた(汗 while(i < num && array[i] < s)i++; while(j >= 0 && array[j] >= s)j--; の、各whileの1つ目の条件抜けてて、結構ハマった。。。。 ソース void quickSort(int *array, int num){ if(num < 2)return; int i = …

優先順位付き待ち行列(Priority queue)(2007/07/23(月) 22:58:42)

優先順位付き待ち行列(Priority queue)とは、普通の待ち行列(キュー)と少し違い、デキュー(取り出す)ときに優先順位の高い(低い)ものから取り出す待ち行列。順次にデータが出てくる場合においてデータをソートしたい場合において、並び替えを行う時…

JSPでセッションを使ったログイン(2007/07/15(日) 17:13:36)

最近JSPをいじっているので、JSPメモ。JSPの基礎と、セッション管理のサンプル。 1つのJSPファイルでログイン、ログアウト、ホーム画面を表示できる。 各画面は「sc」というパラメータで制御される。 sc 画面 なし ホーム、ログイン login ログイン処理 logo…

Rubyのyieldの使い方(my_eachを持つ簡易MyArrayクラスを作ってみた)

yieldでブロックパラメータを含むメソッド(?)を定義できることを知ったのでメモ。 #!/usr/local/ruby/bin/ruby class MyArray def initialize @array = [1, 2, 3, 4, 5, 6, 7] end def my_each @array.each{|a| yield a } end end a = MyArray.new a.my_e…

Windows+Objective-Cで「Hello Objective-C World」

結構Windows Objective-Cで検索して頂いているので「Hello Objective-C World」を書いておきます。 (今頃かよ!) ソース hello.m #import "hello.h" @implementation TestClass - (void) getMessage { printf("Hello Objective-C World\n"); } @end int ma…

C言語でJavaと同等程度の例外処理をやってみる

ご存じの通りC言語には例外処理という立派なものは搭載されていない。 そこで、C言語でsetjmpという関数を使ってJavaと同等の例外処理をやってみる。 JavaとCでmy_divという関数を作って例外処理をする int型の引数を2つ持つ関数(メソッド)を定義して割り…

C言語のプログラム終了時に呼ばれる関数

atexitを使うとプログラム終了時に呼ばれる関数を登録できる。(void (*)()の関数) atexitは複数登録(スタックとして積まれる?)できるようで、後入れ先出しで実行される。 また、終了時の関数は少なくともATEXIT_MAX個(32個?)登録できるらしい。 使い…