感想

http://d.hatena.ne.jp/suzuchu/20091128/1259421947
を読んだ感想。
基本的にこの記事には完全に同意。


suzushu氏の記事の論旨は

「キモい」という言葉は、批判を意味ではなく理解の拒否を意味するので、
そんな言葉は決して使うべきではない。
お前が気軽に使ったその言葉がどれだけ人を追い詰めるのか想像してみろよ

って言うことだと理解した。


だから、ululun氏の記事は言われた側向けで、suzushu氏の記事は言う側向け。
前者は、「キモい」と言われたぐらいでへこむなといっていて、
後者は、「キモい」っていう言葉は決して使うなと言っている。
だから、ululun氏とsuzuchu氏が、どちらが正しいかで論争すると
議論がすれ違ってしまう気がする。



それとは別に、思考停止するのもしないのも完全に個人の自由だけれども、
相手への発言に関しては、自由を濫用するべきではないと思った。( c.f., 憲法第12条)

AsciiArt.py その2

昨日のスクリプト、ソースを載せるの忘れてました。
このプログラムはutf-8エンコーディングで保存してください。

# -*- coding: utf-8 -*-
import re
from zenhan import *

class AsciiArt:
	def __init__(self, filename):
		self.filename = filename
		for line in open(filename):
			if line.startswith("FONTBOUNDINGBOX") == True:
				matcher = re.compile("FONTBOUNDINGBOX (\d+) (\d+)")
				self.size = int(matcher.match(line).groups()[0])
		self.font = []

	def int2bin(self, integer):
		bin = []
		for i in range(4):
			if integer % 2 == 1:
				bin.append(1)
			else:
				bin.append(0)
			integer /= 2
		bin.reverse()
		return bin
	
	def getFont(self, encoding):
		found = False
		bitmap = False

		hex2int = "0123456789abcdef"

		for line in open(self.filename):
			if line.startswith("ENCODING") == True:
				matcher = re.compile("ENCODING (\d+)")
				enc = int ( matcher.match(line).groups()[0])
				if enc == encoding:
					found = True
			if bitmap and line.startswith("ENDCHAR"):
				break
			if bitmap:
				self.font.append( [ hex2int.index(i) for i in line[:-1]] )
			if found and line.startswith("BITMAP"):
				bitmap = True

		for i in range(len(self.font)):
			temp = []
			for j in self.font[i]:
				temp.extend( self.int2bin(j) )
			self.font[i] = temp

	def __str__(self):
		strings = ""
		for i in self.font:
			for j in i:
				if j == 1:
					strings += str(j)+str(j)
				else:
					strings += "  "
			strings += "\n"
		return strings

if __name__ == "__main__":
	import sys
	import zenhan

	teststring = sys.argv[1].decode("utf-8")

	iso = []
	for s in teststring.split("\x1b$B"):
		iso.extend(s.split("\x1b(B"))

	strings = []
	isAscii = True
	for i in range(len(iso)):
		if isAscii:
			iso[i] = zenhan.h2z(iso[i]).encode("iso-2022-jp")[3:-3]
			isAscii = False
		else:
			isAscii = True
		for j in range(0, len(iso[i]), 2):
			strings.append( ord(iso[i][j])*256 + ord(iso[i][j+1]) )
	print strings
	

	for i in strings:
		obj = AsciiArt("jiskan16-2000-1.bdf")
		obj.getFont(i)
		print obj

[プログラム]AsciiArt.py

久々の書き込み。

今日は、文字列をAAにするスクリプトpythonで書いた。

スクリプトは、コマンドライン引数で文字列を受け取る。
引数の文字列が全角半角混在でも、すべて全角に変換したうえで表示する。


半角から全角は、setomitsさんのzenhan.py (http://matatabi.homeip.net/blog/setomits/139)を、
フォントには、imamuraさんのjiskan16-2000-1.bdf(http://www12.ocn.ne.jp/~imamura/jisx0213.html)を用いた。


このフォントはISO-2022-JPエンコーディング、かつ全角文字を仮定しているので(たぶん)、
入力された文字列を全角のISO-2022-JPに変換する必要がある。
そこで、encodeメソッドでISO-2022-JPエンコードし、
エスケープシーケンス( ESC $ B と ESC ( B )を基準にして半角と全角を区切り、
半角部分をzenhan.pyで全角にすることで、全文字列を全角に変換した。


以下に動作例を示すが、引数はutf-8を仮定しているので、
他のエンコードの文字列を入力するときは、65行目の"utf-8"を適切なコーディングに変えればいいと思う。たぶん。
たとえばウィンドウズならsjisとか。

動作例
> python AsciiArt.py だが断る

          11            11  11  
          11            11  11  
          11                    
  1111111111111111              
        11                      
        11        1111111111    
        11                      
      1111                      
      11                        
      11                        
    1111                        
    11                          
    11          11              
  1111          1111            
  11              111111111111  
                                

          11              11  11
          11              11  11
          11          11        
          11          1111      
  1111111111111111      1111    
          11      11      11    
          11      11      1111  
        1111      11        11  
        11        11        11  
        11        11            
      1111        11            
      11          11            
    1111        1111            
  1111          11              
            111111              
                                

                            11  
  11      11            111111  
  11  11  11  11  11111111      
  11  11  11  11  11            
  11  11  11  11  11            
  11      11      11            
  11  1111111111  11111111111111
  11      11      11      11    
  11    111111    11      11    
  11    1111  11  11      11    
  11  11  11  11  11      11    
  11      11      11      11    
  11      11      11      11    
  11              11      11    
  111111111111111111      11    
                11        11    

                                
      111111111111111111        
                  1111          
                1111            
              1111              
            1111                
          11111111111111        
        1111          1111      
      1111              1111    
    1111                  11    
          111111          11    
        11    1111        11    
        11      11      1111    
        1111    11    1111      
          11111111111111        
                            

大学の入学式に用意したほうが良いもの

今日、サークルのビラを配りに行ってきました。
すると、いるんですね。強引な勧誘が。

「今度サークルのイベントするから、名前と電話番号教えて」
「今度花見するから、名前と電話番号教えて」

とか。

それはねーよwww 意味分からんwww 脈絡なさ杉www
っていうかイベントするならビラに書いて渡せよとか思うんです。
新入生も明らかに引いてるし。


僕も経験あります。入学式で

 「家庭教師のバイトがあるんですけど、登録だけでもしてください。
  名前と電話番号教えてください。」

バイトしませんか?とかは聞かないのがポイント。全部言ってしまう、みたいな。
そのときは偽名と嘘電話番号を書きました。
一応何か書けばたいてい他の獲物を探しに行ってくれます。

面識もない人に個人情報を与える必要はないので別に断ればいいんですが、
ちょっと前まで高校生だった人に強引な勧誘を断れというのは酷かもしれません。


そこで、ぜひ入学式には 偽名と嘘電話番号、あと嘘メールアドレスを用意していくと良いと思います。
さも自分の物のように書くor話す練習も。


・・・確認されたらどうしよう。
ま、そこまでやるヤツなら本当に無視するかだれかに助けを求めるかしたらいいんじゃないでしょうか。

渋滞シミュレータ

つい最近、渋滞学って言う本を買いました。amazon:渋滞学
で、ASEPというモデルについて書かれていたので、それで車の渋滞シミュレータを書いてみました。

道路のモデルはこんな感じ。

  1. 道路はマス目を並べて構成する。
  2. 車は1マスに1台だけ入る。
  3. 車は常に右に進む。

車の動くルールはこんな感じ。

  1. 進みたいマスに車がいれば一回休み。いなければ進む。

次のように動作します。oが車のあるマス、-が車のないマスです。
渋滞が少しずつ後ろに下がっているのが分かりますね。

道路の長さ :  60
車の数の設定
(0:割合で指定する[default], 1:数を指定する)
0
割合(0.00〜1.00): 0.6
|oooooo-o-----o--ooo-o-oo-oo-o-ooooo--ooo-o--o-oo--o-ooo-ooo-|
|ooooo-o-o-----o-oo-o-oo-oo-o-ooooo-o-oo-o-o--oo-o--ooo-ooo-o|
|ooooo--o-o-----ooo--ooo-o-o-ooooo-o-ooo--o-o-o-o-o-ooo-ooo-o|
|oooo-o--o-o----oo-o-oo-oo--ooooo-o-ooo-o--o-oo--o-ooo-ooo-oo|
|oooo--o--o-o---oo--oo-oo-o-ooooo--ooo-o-o--o-oo--ooo-ooo-ooo|
|ooo-o--o--o-o--o-o-o-ooo--ooooo-o-ooo--o-o--o-oo-ooo-ooo-ooo|
|oo-o-o--o--o-o--o-oo-oo-o-ooooo--ooo-o--o-o--o-oooo-ooo-oooo|
|o-o-o-o--o--o-o--oo-oo-o-ooooo-o-oo-o-o--o-o--ooooo-ooo-oooo|
|o--o-o-o--o--o-o-oo-o-o-oooooo--oo-o-o-o--o-o-oooo-ooo-ooooo|
|-o--o-o-o--o--o-oo-oo--oooooo-o-oo--o-o-o--o-oooo-ooo-oooooo|
|o-o--o-o-o--o--o-ooo-o-ooooo-o-oo-o--o-o-o--ooooo-ooo-ooooo-|
|-o-o--o-o-o--o--oooo--ooooo-o-ooo--o--o-o-o-oooo-ooo-oooooo-|
|--o-o--o-o-o--o-ooo-o-ooooo--ooo-o--o--o-o-oooo-oooo-ooooo-o|
|o--o-o--o-o-o--ooo-o-ooooo-o-ooo--o--o--o-ooooo-ooo-ooooo-o-|
|-o--o-o--o-o-o-oo-o-oooooo--ooo-o--o--o--ooooo-ooo-oooooo--o|
|o-o--o-o--o-o-oo-o-oooooo-o-oo-o-o--o--o-ooooo-ooo-ooooo-o--|
|-o-o--o-o--o-ooo--oooooo-o-oo-o-o-o--o--ooooo-ooo-oooooo--o-|
|--o-o--o-o--ooo-o-ooooo-o-ooo--o-o-o--o-oooo-ooo-oooooo-o--o|
|o--o-o--o-o-ooo--oooooo--ooo-o--o-o-o--ooooo-ooo-ooooo-o-o--|
|-o--o-o--o-ooo-o-ooooo-o-ooo--o--o-o-o-oooo-ooo-oooooo--o-o-|
|--o--o-o--ooo-o-oooooo--ooo-o--o--o-o-oooo-oooo-ooooo-o--o-o|
|o--o--o-o-oo-o-oooooo-o-oo-o-o--o--o-oooo-oooo-oooooo--o--o-|
|-o--o--o-ooo--oooooo-o-oo-o-o-o--o--ooooo-ooo-oooooo-o--o--o|
|o-o--o--ooo-o-ooooo-o-ooo--o-o-o--o-oooo-oooo-ooooo-o-o--o--|
|-o-o--o-oo-o-ooooo-o-ooo-o--o-o-o--ooooo-ooo-oooooo--o-o--o-|
|--o-o--ooo--oooooo--oooo--o--o-o-o-oooo-ooo-oooooo-o--o-o--o|

ソースはこんな感じ。

続きを読む

Pythonで作る経営シミュレーションゲーム

ゲーム作ってみました。
今はまってるpythonで書いた、経営シミュレーションゲームの土台(ver 0.1)です。
一応、累積販売数と人気と売り上げが相互に関係するようなモデルは簡単に作っていますが、
面白みとかそういうのは  一  切   ないです。

これで遊んで暇を潰すより、その間ボーっとしてるほうがよほど有意義だと思います。

http://adsf.web.fc2.com/shop/


ちなみに経済モデルというかゲーム内設定は、こんな感じです。

商品仕入れ値 15
商品売値 20

商品販売数 = log(人気)
人気の変化 = log(今まで売れた商品の数)