慶應義塾大学 学籍番号のチェックディジット計算【Excel】

お久しぶりです。SFCのれにうむです。
SA業務で学籍番号の真正性確認がひつようになりました。コード書きたいですけど、こういうときはExcelを使わなければいけません。
というわけで、メモ代わりに、その式をおいておきます

=IF(MOD(MOD(INT(A1/10000000),10)*9+MOD(INT(A1/1000000),10)*8+MOD(INT(A1/100000),10)*7+MOD(INT(A1/10000),10)*6+MOD(INT(A1/1000),10)*5+MOD(INT(A1/100),10)*4+MOD(INT(A1/10),10)*3,11)=IF(MOD(A1,10)=0,10,MOD(A1,10)),"OK","NG")

以上です。

QSLカードテンプレート

お久しぶりです。れにうむです。

アマチュア無線QSLカードを1000枚「イロドリ」という印刷業者を使って印刷しました。値段はなんと、1000枚で3085円です、QSLカード専門店ではありえない安さですね。しかし、「イロドリ」は自分で作ったpdfなどのデータを印刷してくれるだけのサービスなのでデータ面などは自作するしかありません。そこで、今回はデータ面を作成したので共有しようと思い公開することにしました。これはJARLの転送の規格にあっていると思います!

(1ページ目は使うことは無いと思いますが、8桁コールサイン宛用です)

pdf : https://re75.info/share/qsl_addr_tmp.pdf

パワポ ( pptx ) : https://re75.info/share/qsl_addr_tmp.pptx



なにかご質問・ご意見等ございましたらコメントもしくはTwitter ( @chigakuishi )まで!

正規表現テスター的な何か

 おひさしぶりです、れにうむです。
 今回は、高校の部活のコーチとして夏合宿に参加して後輩指導をすることになり、その一環としての講座として、後輩たちに実習を交えながら正規表現を教えました。
 しかし、人によってやってる言語もことなり、そもそも、今回はプログラミングの講座ではないので正規表現を簡単に試せる環境をWeb上につくり、それが

http://web.sfc.wide.ad.jp/~rhenium/reg.html

f:id:rhe:20150808083626p:plain

これです。

機能としては、おおまかに
 [1] /hogehoge/
形式の正規表現の練習用のものと
 [2] s/hogehoge/foobar/g
形式の正規表現を利用した置換の練習用のものを用意しました。

 使い方は単純で、まず、[1]は正規表現を一番上の入力欄に書いて、正規表現を適用させる対象を改行区切りで「入力」の大きい欄にいれます。それをした後、「抽出実行」ボタンを押すと正規表現がマッチする部分のある行が出力されます。ちなみに、後方参照するために()で囲うと、「出力」のほうはマッチする行において[$1 , $2 , $3 , ....]という形式で出力されます。

 つぎに[2]は2つ横にならんだ欄の左側に置換する対象を示す正規表現、右側に置換する文字列を書きます。そのあと入力に置換する文章を入力して置換実行ボタンを押すと置換後の文字列が「出力」欄にでます。
 また、置換する文字列の欄ではもちろん「$1,$2...」形式で後方参照した物の読み込みでできます。

 ごまかした点としては ¥ と \ の違いに悩んだので、結局 ¥ はすべて \ に置換しました。

 どこまで、使えるかわかりませんがご自由にお使いください(??)

【 CodeIQ 】ホリエモンからの挑戦 解いてみた

挑戦者求む!あなたが優秀なエンジニアなら必ず解けるはずです。挑戦お待ちしています。 by SNS株式会社 堀江貴文│CodeIQ
ホリエモンからの賞金問題といてみましたヾ(@⌒ー⌒@)ノ

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
	int len = 0;
	int n = 0;
	int ans = 0;
	int p = 0;
	cin >> len >> n;
	vector <int> dat(n);
	for(int i=0 ; i<n ; i++){
		cin >> dat[i];
	}
	sort( dat.begin(), dat.end(), greater<int>() );
	while(p <= n-3){
		if(dat[p] >= len){
			p++;
			continue;
		}
		int p2 = p+1;
		while(p2 <= n-2){
			if(dat[p]+dat[p2] >= len){
				p2++;
				continue;
			}
			bool f=binary_search(
				dat.begin()+p2+1, dat.end(), len-dat[p]-dat[p2], greater<int>()
			);
			if(f){
				ans++;
			}
			p2++;
		}
		p++;
	}
	cout << ans << endl;
	return 0;
}

降順ソートした後、明らかに違うの切りながら2つを選んで残り1つを二分探索しました。
おそらく想定された方法かなって感じがします。codeiq.jp

なつかしいアプリケーション

サーチランチャーの詳細情報 : Vector ソフトを探す!

最近、大学の研究会の関係でWindowsを使い始めたのを期に、むっかぁぁぁぁぁーーーーーーし(中2くらいだから5年前?)に開発した「サーチランチャー」というランチャーソフトをVectorにあげていたのを思い出したので使ってみました。
昔過ぎて、自分でも仕様を忘れていたので完全に他人の作ったソフトを使ってる感じなので、レビューしたいと思います。


まず、このランチャーの主な目的は「キーボードだけでソフトウェアを立ち上げたりウェブページを開いたりする」ということらしいです。

ランチャーを起動した後は、"CTRL+F1"を押すと、ランチャーのウィンドウが立ち上がり、そこに登録した時の(後述)名前の一部(前方一致)を入力すると下部に一覧が出てきます、そこを上下キーで操作して(しない場合は一番上)TABで決定すると、選択したものが立ち上がるというもののようです。

ここまでで、改善してほしいと昔の自分に思うのは2点で
1.CTRL+F1はすごく打ちにくい、設定ファイルでウィンドウが立ち上がるショートカットを変えれるようにしてほしい
2. なんで決定がTABなの?選択がTABで決定がEnterあたりが普通でしょ?
ってかんじです。

次に登録するのは、ウィンドウを立ち上げた状態で"CTRL+N"を押すとテキストエディタが起動して、登録ファイルが立ち上がりそこに書式に従って記入していくみたいです。
この形式は今の僕も結構好きなので、賛否はわかれるでしょうけどいいと思います。

ついでにこのランチャーに突っ込みたいのは、一度ウィンドウをたちあげたら、何かを立ち上げない限りウィンドウを消せないところです、ESCかなにかで消せるべきではないでしょうか?右上の☓を押すと、ランチャー自体が終了しますし、それは致命的だと思います。


開発者がすでにコードをなくしていて、アップデートされることがないとわかっているソフトウェアに対するレビューはこのくらいにしたいと思います。
使いたい人は是非使ってください。あ、メールアドレスに書いてあるメールアドレスはすでに使えません。www.vector.co.jp

CodeIQ バイナリカウント問題

今回、講義中暇だったので、バイナリカウント問題を解いたので、公開しておきます〜!
挑戦者求む!数学の問題をプログラミングで解こう!二進数の1の個数を数えて下さい。 by @riverplus Kawazoe│CodeIQcodeiq.jp

$n=<STDIN>;
$two=1;
$i=0;
$ans=0;
while(1){
        $i++;
        $ans+=int($n/($two*2))*$two;
        if($n % ($two*2)<$two){$ans+=($n % ($two*2))}
        else{$ans+=$two}
        $n-=$two;
        $two*=2;
        if($n<=0){last}
}
print $ans."\n";

スッキリ書けてるかな???

【Perl】緯度経度の二点間距離

http://web.sfc.wide.ad.jp/~rhenium/fx/index.php?1=36.10056&2=140.09111&3=35.65500&4=139.74472

昨日は激しい腹痛、下痢、嘔吐、発熱で病院行きおそらく盲腸と言われるも、CTしたらただの胃腸炎といわれたれにうむです。

まえから、僕は旅行が好きで、ハイキングしたりサイクリングするとき、ロガーアプリなどで位置情報をGPXファイルに保存していたので、それで遊びたいと思っていたのでとりあえず、緯度経度で表された2点の距離を表示するサブルーチンをPerlでつくってみました。

どうやったら求められるかhttp://yamadarake.jp/trdi/report000001.htmlJavaプログラムを参考にさせていただきながらPerlで書きなおしてみました。

$pi=3.1415926535897932384626433;
sub deg2rad{
 $_[0]*$pi/ 180.0;
}
sub hubeny{
 (local $lat1,local $lng1,local $lat2,local $lng2,local $a,local $e2,local $mnum)=@_;
 local $my=deg2rad(($lat1+$lat2)/2.0);
 local $dy=deg2rad($lat1-$lat2);
 local $dx=deg2rad($lng1-$lng2);
 local $sin=sin $my;
 local $w=sqrt 1.0-$e2*$sin*$sin;
 local $m=$mnum/($w*$w*$w);
 local $n=$a/$w;
 local $dym=$dy*$m;
 local $dxcos=$dx*$n*(cos $my);
 sqrt $dym*$dym+$dxcos*$dxcos;
}
sub hunbeny_{
 (local $lat1,local $lng1,local $lat2,local $lng2)=@_;
 hubeny($lat1,$lng1,$lat2,$lng2,$GRS80_A,$GRS80_E2,$GRS80_MNUM);
}
sub dis{
 (local $lat1,local $lng1,local $lat2,local $lng2)=@_;
 local $GRS80_E2 = 0.00669438002301188;
 local $GRS80_MNUM = 6335439.32708317;
 hunbeny_($lat1,$lng1,$lat2,$lng2);
}
print dis(36.10056,140.09111,35.65500,139.74472);

出力結果 58502.4589312411

具合悪いので作業時間が短くちゃんとなってる保証はないですが、おそらく、平気でしょう。
何かあったらコメントかTwitterhttp://twitter.com/chigakuishiにでも知らせてください。
できるだけ早く対処するかもしれません。
ではおやすみなさいZzzz………………………………

AVRはじめました!

前から少し気になっていて、受験が終わったら一度やってみたいと思っていたマイコンのプログラミングを始めてみました。
完全に独学で、Webで見た情報を頑張ってかき集めてやっているので、自分のやっていることが正しいのかわからない暗闇の中歩いてる感じだったので、初めてLEDが自分の書いたコード通りに光った時は、とても感激して、中1のころに、はじめてC言語で"hello world"の表示を成功させたときのことを思い出しましたね。

とりあえず、今回は秋葉原マイコン(AVR ATtiny2313 ATmega328P),ブレッドボード、ケーブル類、白色LED、抵抗、スイッチ、電源 を買ってきて、Webに上がってるソースコードの見様見真似と改変で↓のようなコードを書きとりあえずボタンを押すと数字が1増えて0x00〜0x0Fまでを数えて結果をLEDの2進数表記でそのまま返す簡単なカウンタ(?)をつくりました。
はてな記法の実験で乗っけます。

#include <avr/io.h>
#include <util/delay.h>

int main() {

    DDRD=0b00001111;
    DDRB=0b00000000;
    PORTD=0b00000101;
    PORTB=0b00000000;
    unsigned char f=0;
    while(1){
        if((PINB&0b00000001)&&f) {
            if(PORTD!=0b00001111)PORTD += 0b00000001;
            else PORTD=0b00000000;
            f=0;
            _delay_ms(10);// ※1
        }else if((PINB&0b00000001)==0&&(f==0)){
            f=1;
            _delay_ms(10);//※1

        }
    }

    return 0;
}

今回は、ボタンを買うのを忘れてスイッチにしたからか ※1 の10ミリ秒待つ動作をしないと、ON→OFFへスイッチを動かすあいだに短い時間でなんどかHighとLowを繰り替えずみたいなので、短い時間は反応しないようにしてみました、正しい対処なのか、ボタンでもそのままなのかは完全独学で開始二日目なのでしりませんが、結果うまく行ったのでいいでしょう。今度アキバ行ったらボタン買って再トライしてみたいです。

あと、スイッチをOFFにした時入力端子がどこにもつながってないとHighでもLowでもない状態になっておかしなことになるので↓のように配線してみたらうまく行きました、自分で思いついただけなんで正しいかは(ryと思ってたら電子工作入門サイトに同じような配線があったのであってるみたいです。
[PIN]---------------[抵抗]-----------(VCC)
     |________[スイッチ]________(GND)

抵抗ちっちゃ過ぎたりなかったりするとスイッチが入った時すごい電流流れるから気をつけなきゃですね(?)
回路図はPCで書くのめんどいし、すごい簡単なことしかやってないので需要がないでしょうから書きません、欲しい人いたらリプでもください♡(ぐぐったらあなたのほしい情報はあると思いますが)

親切な方が内部プルアップを使ったほうが楽と教えてくださいました
まとめてくださってるサイトを紹介して頂いたので載せておきます。
http://d.hatena.ne.jp/hijouguchi/touch/20100619/1276955729(hijouguchiの日記)

お久しぶりです

このブログを放置してなんと3年も立ちました、時が過ぎるのは早いです

3年が立つ間に僕は高校を卒業することになり無事なんとか大学生になれそうなのでこのブログを復活させようと思います。
内容は旅行のメモと、プログラミングのメモ書きその他を考えてますが何週間で力尽きるかわからないのであまり期待しないでください☆(ゝω・)vキャピ

これが最後の記事の気もする!!!!!!!!!!11

春の旅行予定ー久しぶりの更新ー

今回の春は「北海道一周」をしようとおもいます
とりあえずルートはこんな感じ

3/21
東京ー>静岡ー>名古屋ー>
この日に太平洋フェリーに乗船します!!

3/22
ー>仙台ー>
この日は一日中フェリーの中ですね、震災の関係で仙台の一時下船はできないそうです。。。><

3/23
ー>苫小牧ー>(番屋の湯)ー>札幌
やっと北海道上陸です、番屋の湯という温泉に入って札幌の仮眠処に宿泊予定です!

3/24
札幌ー>滝川ー>釧路
最長普通列車(2429D)に乗る予定です! 後この日は釧路で缶詰などの物資補給予定です

3/25
釧路ー>川湯温泉ー>摩周(コタン温泉)ー>釧路
この日は一日かけて温泉巡りします!!

3/26
釧路ー>網走ー>旭川
この日は一日移動になりそうですね、立ち寄れるおんせんないかなぁ… オスパに仮眠予定

3/27
旭川ー>稚内ー>稚内温泉童夢)ー>稚内ー>旭川
この日は日本最北温泉童夢に行きたいと思います! 宿泊は前日同様オスパ

3/28
旭川ー>札幌ー>函館ー>
この日もメインは移動ですねー・・・ 青函フェリーで一夜(といっても3時過ぎには青森付くが)過ごします

3/29
ー>青森ー>新潟ー>
この日は新潟付近の温泉入りたいですねー!!、MLえちごに乗ります!!

3/30
ー>新宿ー>塾の春期講習
新宿についたらこのまま塾の春期講習に直行予定です、丁度塾が新宿にあるんで
一気に現実に戻らされますね(涙)

という今回は僕の旅行にしてはゆったりとした行程になってます
無事実行したいところですね。。。!!!!!

ツッコミ・コメントがあったらリプなりコメントなりでお願いします!!