Movatterモバイル変換


[0]ホーム

URL:


はてラボはてな匿名ダイアリー
ようこそ ゲスト さんログインユーザー登録

「ARGV」を含む日記RSS

はてなキーワード:ARGVとは

次の25件>

2024-10-12

清原ネットキャッシュ比率決算短信からpython自動で求めるソフト

気が付くと朝4時になっていた。

なんか動くところまで出来たので貼っておく。

NYSLなので、バグがあったら治しといて。

importpdfplumberimport re#クリーンアップdef cleanuptext(text):    #決算書の合計値を太字にしたことpdfplumberが暴走するケースへの対処    #例流動資産 -> 流流流流流動動動動動資資資資資産産産産産    #誤爆が怖いので、これが起きている時だけ補正します    if "流流流流流動動動動動資資資資資産産産産産" intext:text = re.sub(r'(.)\1{4,}', r'\1',text)    #△をマイナスに。数字中のカンマを消して結合するtext = re.sub(r'△([0-9])', r'-\1',text)text = re.sub(r'▲([0-9])', r'-\1',text)text = re.sub(r'([0-9]),([0-9])', r'\1\2',text)        #たまに、煽り屋みたいに文字の後にスペースが入る嫌がらせ修正する    #例: 投 資 有 価 証 券 ->投資有価証券text = re.sub(r'(?<=[\u4E00-\u9FFF\u3040-\u30FF])\s(?=[\u4E00-\u9FFF\u3040-\u30FF])', '',text)    returntext#今期の勘定科目数字を取得def get_AccountName(text,need):    pattern =rf'^{need} -?[0-9]+ (-?[0-9]+)'    r = re.search(pattern,text, re.MULTILINE)    if ris not None:        return float(r[1])    return 0#清原ネットキャッシュ計算する。def calc_KiyoharaNetCash(text):    total_current_assets = get_AccountName(text,'流動資産合計')    if total_current_assets == 0:        #要約財政状態計算書しか公開していない、楽天のような素敵な会社様への対処        total_assets = get_AccountName(text,'資産合計')        if total_assets != 0:            #とりあえず、資産の部の6割を流動資産とみなす            total_current_assets = total_assets * 0.6        else:            #流動資産合計ではなく、流動資産という単語を使っている我が道を行く東北電力への対処            total_current_assets = get_AccountName(text,'流動資産')            if total_current_assets == 0:                raise Exception("流動資産合計の勘定科目が見つかりませんでした。"+text)    total_liabilities = get_AccountName(text,'負債合計')    if total_liabilities == 0:        #負債合計ではなく、負債の部合計に拘るオムロンの嬉しい決算書への対策。なんでや・・・        total_liabilities = get_AccountName(text,'負債の部合計')        if total_liabilities == 0:            raise Exception("負債合計の勘定科目が見つかりませんでした。"+text)    #負債をご丁寧にマイナス表記で書いてくれる中外製薬の親切な決算書への対策。いい加減にしろ・・・    if total_liabilities < 0:        total_liabilities = total_liabilities * -1    #投資有価証券はないこともあるので、0を容認する    marketable_securities = get_AccountName(text,'投資有価証券')    #print(total_current_assets,marketable_securities,total_liabilities)    netcash = total_current_assets + (marketable_securities*0.7) - total_liabilities    #たまに単位を1000円にしている銘柄があるので補正する    ifis_tanni_senyen(text):        netcash = netcash / 1000    return netcash# "流動資産合計" と "負債合計" の間に "単位:千円" があるかをチェックdefis_tanni_senyen(text):    if "単位:千円" intext:        returnTrue    if "単位: 千円" intext:        returnTrue    if "単位 : 千円" intext:        returnTrue    if "単位 :千円" intext:        returnTrue    returnFalsedefpdf_to_kiyohara_netcash(pdfpath):    withpdfplumber.open(pdfpath)aspdf:text = ''.join(page.extract_text() for page inpdf.pages)text = cleanuptext(text)    #print(text)    kiyohara_netcash = calc_KiyoharaNetCash(text)    #print(kiyohara_netcash)    return kiyohara_netcashdef mymain():    import sys    args = sys.argv    argc =len(args)    if argc <= 1:print('''これは、清原達郎氏のネットキャッシュ比率(以下、清原ネットキャッシュ比率)を決算短信pdfから求めるソフトです。清原ネットキャッシュ=流動資産合計+(投資有価証券*0.7)-負債合計清原ネットキャッシュ比率=清原ネットキャッシュ/時価総額*100遊び方1.決算短信pdfから清原ネットキャッシュを求めるpython calc_kiyohara_netcash.py 140120240514594985.pdf結果: 30757.0決算書には、100万円単位数字が書かれているはずなので、この数字単位は100万円です。つまり、3075700万円。2.時価総額を億円単位で追加することで、清原ネットキャッシュ比率を求める時価総額が146億円なら146と書いてください。python calc_kiyohara_netcash.py 140120240514594985.pdf 146結果: 210.66%このコードNYSLライセンスです。無保証自己責任ですが、ご自由に。かぶ探とかとつなげるといいかもね。       ''')       return    if argc <= 2:       kiyohara_netcash =pdf_to_kiyohara_netcash(args[1])print(kiyohara_netcash)       return    if argc <= 3:       market_cap=float(args[2])*100 #億円から百万円表記に       kiyohara_netcash =pdf_to_kiyohara_netcash(args[1])       ratio = round(kiyohara_netcash/market_cap*100,2)print(f"{ratio}%")       returnif __name__ == '__main__':    mymain()

Permalink |記事への反応(1) | 04:10

このエントリーをはてなブックマークに追加ツイートシェア

2024-01-22

ブコメダブスタをチェックするためのスクリプト適当Pythonで書いた

エラーハンドリングは省略。標準ライブラリのみで動く。

importjsonimporturllib.request#True にするとユーザー名を隠すhide_user =False# 以下を書き換える。sys.argv 使ってもいいんだけどurl1 = "https://www.cygames.co.jp/news/id-23172/"url2 = "https://mtg60.com/archives/palworlddoujinsi.html"def get_bookmarks(url:str):    req =urllib.request.Request(f"https://b.hatena.ne.jp/entry/json/{url}")    withurllib.request.urlopen(req)as res:        dict =json.loads(res.read())user_comments = {}    forbookmark in dict["bookmarks"]:        ifbookmark["comment"]:user_comments[bookmark["user"]] =bookmark["comment"]    returnuser_commentsb1 = get_bookmarks(url1)b2 = get_bookmarks(url2)common =set(b1.keys()).intersection(b2.keys())print(f"[1] {url1}")print(f"[2] {url2}")print()foruser in sorted(common):    if hide_user:print(user[0] + "*" * (len(user) - 1))    else:print(user)print(f"[1] {b1[user]}")print(f"[2] {b2[user]}")print()

Permalink |記事への反応(0) | 21:19

このエントリーをはてなブックマークに追加ツイートシェア

2023-12-17

プログラミング初心者です。以下のコードの誤りはなんですか

僕はプログラミング歴2週間の初心者です。キーと値を入力できるデータベースを作っています

以下のコードを実行してデータを追加し続けると、一定サイズを超えるとエラーが出てしまうみたいです。

理想は、データが追加された後にサイズが足りなくなったら動的に自動拡大されることです。

もし詳しい人がいたらご教示お願い致します。

import sysimportosimportmmapimport hashlibdef h(x):    return int(hashlib.sha512(x.encode()).hexdigest(), 16)def create_db(filename):    withopen(filename, 'wb')as f:        f.write(b'\0' * 1024 * 1024)  # 1MBの空ファイル作成defset_key(filename,key,value):    withopen(filename, 'r+b')as f:mm =mmap.mmap(f.fileno(), 0)pos = h(key) %mm.size()        whilemm[pos:pos+1] != b'\0':pos = (pos + 1) %mm.size()            ifpos == h(key) %mm.size():f.seek(0,os.SEEK_END)                f.write(b'\0' *mm.size())  #ファイルサイズを2倍にするmm =mmap.mmap(f.fileno(), f.tell())  #ファイルサイズを反映させるpos = h(key) %mm.size()  #ハッシュ値を再計算する        data =key + '\0' +value + '\0'        data = data.encode()mm[pos:pos+len(data)] = datamm.close()  #mmapオブジェクトを閉じるdefget_key(filename,key):    withopen(filename, 'r+b')as f:mm =mmap.mmap(f.fileno(), 0)pos = h(key) %mm.size()        whilemm[pos:pos+1] != b'\0':            end =mm.find(b'\0',pos,mm.size())  # 第2引数と第3引数指定する            if end == -1:                end =mm.size()            ifmm[pos:end].decode() ==key:pos = end + 1                end =mm.find(b'\0',pos,mm.size())  # 第2引数と第3引数指定する                if end == -1:                    end =mm.size()value =mm[pos:end].decode()mm.close()  #mmapオブジェクトを閉じる                returnvaluepos = (pos + 1) %mm.size()            ifpos == h(key) %mm.size():                breakmm.close()  #mmapオブジェクトを閉じる        return Nonedefmain():    cmd = sys.argv[1]    if cmd == 'create':        create_db(sys.argv[2])    elif cmd == 'set':set_key(sys.argv[2], sys.argv[3], sys.argv[4])    elif cmd == 'get':print(get_key(sys.argv[2], sys.argv[3]))if __name__ == '__main__':main()

Permalink |記事への反応(0) | 12:13

このエントリーをはてなブックマークに追加ツイートシェア

2021-05-31

https://github.com/kokorohamoe/OpenProfile/blob/master/700_sample/Java/Jurina/reader.cpp

とてもシンプルコード

intmain(int argc,constchar*argv[]){

int v;

char buffer[1024];

while(1){

printf("input\n");

scanf("%s%d",buffer,&v);

if(strcmp(buffer,"print")==0)

fprintf(stderr, "public classbase{\n"

"public staticvoidmain(String[] args){\n"

"int i = %d;\n"

"System.out.println(i);}}\n",v);

}

return 0;

}

Permalink |記事への反応(0) | 23:30

このエントリーをはてなブックマークに追加ツイートシェア

2021-05-25

昔の職場は、Cで引数を見るときargv[]にNULLが入ってるかどうかで引数の数を判定してたりした。

intmain(int argc,char*argv[])

{

for (・・・) {

 if (argv[i] == NULL) //引数の終わりの判定

}

}

それがバグることがあったので、普通にargcを見るようにして「デバッグしました、原因はコレコレです」と報告したら「よくそんなの分かったな」と感心されたことがあった。

個人的には、それまで本やコードで、引数の数をargc以外で判定してるコードを見たことなかったから、その職場コードを見て新鮮な驚きがあったんだけど。

「独学でかじってるやつは変な癖がついてダメだ。使えない。なにも知らない新人のほうが素直で延びる」とか言ってる人をたまに見るけど、ネットや本で勉強しないで、職場で教えてもらうだけのほうがむしろ変な癖がつきやすいと思うわ。

Permalink |記事への反応(0) | 13:13

このエントリーをはてなブックマークに追加ツイートシェア

intmain(int argc,char*argv[])

{ return argc+1; }

Permalink |記事への反応(0) | 12:48

このエントリーをはてなブックマークに追加ツイートシェア

intmain(int argc,char*argv[])

{ return argc+1; }

Permalink |記事への反応(0) | 12:48

このエントリーをはてなブックマークに追加ツイートシェア

2020-09-01

anond:20200901231613

newMain.main(argv);

でいいのかな?

Permalink |記事への反応(0) | 23:18

このエントリーをはてなブックマークに追加ツイートシェア

2020-07-05

C++C++C++インタプリタ

int moin(int argc.char*argv[]){

  std::cout<<"Hello world\n"<<std::flush;

  __asm__("movax,0");

}

Permalink |記事への反応(1) | 21:09

このエントリーをはてなブックマークに追加ツイートシェア

2020-06-10

anond:20200610060955

たすけてね☆ このままだと ころされちゃう あいてにそんなつもりがなくても

あいてがやることは はなしかけるだけ ただし 不用意なタイミングで 何年も

それだけで 殺せるかの 実験でも しているんだろう

そんなものをうけたつもりはないし 顔合わせもしていない

また、そういう事故とまちがえられないよう 最近AKBイベントなども すべて自粛しているこ

相談する でも 相手を殺せるから

困りぬいた人に

溺れるものはわらをもつかむ で 殺されかけたことがある

こっちが 入院になった

そういうことしかない

から、助けももとめにくいけど

国に助けてもらいたい だれもいないから 天涯孤独 それもだめなら どこがいいか

周囲の人から理由特にないけど なぜか いじめられることはおおい

めんどくさい

っておもしろ

いままで、誰かの準備を食ってきたからかんたんだったんじゃない?

よく食われるからそうおもう

くうこと(きがつかずにもらっちゃう)もあるけどね

からない

どうしたらいいか

いまのたんとうが過去の中ではけっこういい

はなしかけられる ということがどれだけ苦痛を伴うかは だいぶまえから知ってる

がいきちの話を聞くのは苦痛だろう

それがわかるから、なるべくしないようにしている

でも限界なんだ

ここにひたすらかいていると すこしだけおちつく。

コロナからこっちは

基本書き込んでいる間はプログラムを組んでいることが大多数

つのアルゴリズムでもいろいろ書き方があるから

きぬき 10分かそこらやすんで

またさぎょう。

ずっといえだから、気がつくと寝ている。

あさおきると作業再開

ひたすら作業

AKBコロナ

みーんななくなっちゃうね

あそぶまえに とられて おわる まぁ コロナしょうがないけど

自粛 しているあいだにおわるかな どうしたらいいんだろう

AKBのお父さんの世代なんだなぁとおもって

としくったなぁとおもった

調子に乗るな!って

ヒット作もない

簡単にクビになる

いらねー人材

そんなもん、じぶんが、いちばんよくしってる

調子に乗れるようなものなどなにもない

いっしょけんめいがんばって

ねたみ そねみ 誹謗中傷はやまもど

ちょうしになどのれない

いじめられこそすれ いいことなどないのは自分が一番良く知っている。

くつなめましょうか?

 

それこそ、けぶべん血尿 大怪我 入院

反吐は吐いてないけど

苦労して、苦労して つくってる

自分の実力が ねーから くずやろう といわれることはあるし

そうだろうなとおもう

調子に乗ることなど無い

 

こんな恨みこそあれ みたいな状況で どうやったら 調子に乗れるのか というのと

あいての言い分を聞いて それこそ おれが 死んでりゃよかったんだろうなと思った

せめても がんばったか

がんばったといっただけだけど

ちょうしにのるな というのなら のらないし 乗る理由など無い

タバコ

あるいみ労災だよな なきゃ 仕事できない自分が悪いけど

まりにもAKB

イラッとしたかAKBCDでも買って送りつけてやりたい もちろん持ってるやつを

https://online.d-school.co/

https://codecamp.jp/

http://paiza.io/

http://techacademy.jp/

https://tech-camp.in/

ハローワーク

あとでいく

Hello world

#include <iostream>#include <stdio.h>intmain(int argc,char *argv[]){    for(int i=0;i<3;++i){        int j = i;printf("Hello world%d\r\n",j);    }    for(int i=0;i<0;++i){printf("Helloagain\r\n");    }    return 0;};

むかしっから あたまは わるかった

もうすこし、大学進学率がちがったら 高卒だっただろう

それで十分だった

 

300万ポッチもない 男性 あほでしょ

がんばったんだ。貯金500万

あっというまに、なくなっちゃった。

 

もう戻らない僕の幸せ

小学校ぐらいか

呪われていて

親が転校してくれたけど

だめだった ばかだったんだ

 

がんばっても だめなら

それはそれでいい

かかわっちゃだめなら もっとはやくにちゃんとおしえてね

Permalink |記事への反応(1) | 10:12

このエントリーをはてなブックマークに追加ツイートシェア

2020-03-20

anond:20200320104602

className *Param = NULL;

intmain(int argc,constchar *argv)

{

Param = new className();

return 0:

}

 

こういうコードのほうが実は合理的

というか、より簡単にかけるように言語を工夫してるんだから

難しく書いている方が間違い 理屈ちゃんとある

この場合プログラム内部にはかかれておらずカーネル側が処理してくれるから しらないとわからねいけど

カーネルの動きを知ってる場合メモリリークではなく こうしたほうがよいとちゃんとわかる

Permalink |記事への反応(1) | 10:54

このエントリーをはてなブックマークに追加ツイートシェア

2019-01-01

Graphviz を使ってPython抽象構文木を生成する。



1. こんな感じで使います


1.1.スクリプトとして使用する。

$pythonparser.py sample.py


1.2.モジュールとして使用する。

importparsercode ='''a  = 1 + 1print(a)'''graph =parser.create_graph(code)graph.render("sample")


2.ソースコードparser.py はこんな感じです。

importastimport sysimportgraphvizdefcreate_graph(lines):    graph =graphviz.Graph(format='png')root =ast.parse(lines)    node_list = [root]    _setup(graph, node_list)return graphdef_setup(graph, node_list):# node    node = node_list[-1]    node_identity =str(len(node_list))    node_name =type(node).__name__    graph.node(node_identity, node_name)# childrenfor childinast.iter_child_nodes(node):        node_list.append(child)        child_identity =str(len(node_list))        graph.edge(node_identity, child_identity)        _setup(graph, node_list)if __name__ =='__main__':    file_name = sys.argv[1]withopen(file_name)asfile:        lines =file.read()    graph = create_graph(lines)    graph.render(file_name)

Permalink |記事への反応(0) | 02:12

このエントリーをはてなブックマークに追加ツイートシェア

2018-04-11

PyQt5でクリップボード画像を送る

相変わらず投稿するような場を持ってないのでここに。

PyQt5のアプリ上で外部から取得したPNG/JPEGクリップボードに送りたかったが、

期待するサンプルが見当たらなかったのでメモ

期待する動作は、Officeに元の形式として貼り付け可能であること。

失敗1

web上のいろんな情報から再構成してみた。

QClipboardなのかclipboardなのかで相当手間取った。

というかQApplicationがいまいちわからん。これでいいのだろうか。

ともあれ、クリップボードはいろいろ格納されたようだが、Office上ではビットマップとしてしか貼り付けられなかった。

import sysfrom PyQt5.Qtimport QApplication, QImageimg = QImage('test.png')app = QApplication(sys.argv)app.clipboard().setImage(img)


失敗2

失敗1から一回QMimeDataを経由してみた。結果何も変わらず。

# -*- coding:utf-8 -*-import sysfrom PyQt5.Qtimport QApplication, QImage, QMimeDataimg = QImage('test.png')data = QMimeData()data.setImageData(img)app = QApplication(sys.argv)app.clipboard().setMimeData(data)


結局

以前C#にて、画像生成してクリップボードに送るアプリを作ろうとしていたときの残骸を参考にトライ

無事期待する動作が得られた。

JPEG場合はsetData('JFIF', img)になる。

# -*- coding:utf-8 -*-import sysfrom PyQt5.Qtimport QApplication, QMimeDatawithopen('test.png','rb')asfo:    img =fo.read()data = QMimeData()data.setData('PNG', img)app = QApplication(sys.argv)app.clipboard().setMimeData(data)


今回はPyQt5ベースだったので試さなかったが、pywin32のwin32clipboardとかいうのも使えたのだろうか。

ただ画像を送るとなると結局情報が少ないので、どのみち手間取りそう。

Permalink |記事への反応(0) | 21:33

このエントリーをはてなブックマークに追加ツイートシェア

2018-03-17

anond:20180316232605

Excelを持っているならはてブJSONデータをそのまま取り込めるそうだからそのデータを使ってブクマが付いた時間グラフが描けそう。

例えばこんな感じでJSONデータが取れる。http://b.hatena.ne.jp/entry/jsonlite/https://anond.hatelabo.jp/20180315232737

Excel持ってないならスクリプトCSVにしてしまえばいい。

rubyスクリプトだとこんな感じ。(Mechanize無し版に差し替え。なぜMechanizeを使っていたかと言うとはてブUser-Agentが空だと値を返してくれないから。ちょっと長くなるが自前でUAを渡すようにした。)

#!/usr/bin/ruby

require 'uri'

require 'net/http'

require 'json'

require 'csv'

site =ARGV[0]

json_uri =URI.parse("http://b.hatena.ne.jp/entry/jsonlite/%s" % [site])

response =Net::HTTP.start(json_uri.host,json_uri.port) do |http|

http.get(json_uri.path, "User-Agent" => "Mozilla/5.0")

end

json_data =JSON.parse(response.body)

json_data['bookmarks'].each do |bookmark|

puts [bookmark['user'],bookmark['timestamp'],bookmark['comment'],bookmark['tags'].to_s].to_csv

end

引数に取得したいページのURLを入れる。hatebuapi-csv.rbという名前で保存したとしたらこんな感じで実行。

% hatebuapi-csv.rbhttps://anond.hatelabo.jp/20180315######## > 結果.csv

このケースでは朝の7時から爆発的にブクマが付き始める様子が分かる。

https://imgur.com/66FlJIB

Permalink |記事への反応(0) | 00:28

このエントリーをはてなブックマークに追加ツイートシェア

2014-02-15

Python無名関数っぽいUnixコマンド作った。

GitHubとかブログやってないからここに書いておく。

使い方

標準入力を使いまわしたいとき

... |fun x:: cmd1 x : cmd2 x : ... : cmdn x | ...

ただしcmdにはサブシェルパイプなどは使用できない。

標準入力をそのまま利用する場合と一行毎に処理する場合

一行毎に処理する場合はxargs -Iを利用する。

$ls *txta.txt b.txt$ cat a.txt1$ cat b.txt2$ls *txt|fun x::echo x : cat xa.txt b.txt12$ls *txt| xargs -Ixfun _::echo x : cat xa.txt1b.txt2

コード(fun)

>と<はそれぞれ大小の不等号で置き換えてくださいな

#!/usr/bin/envpythonimport sysfrom subprocessimport *deftake_variable(var):# check the syntax of variable (http://www.gnu.org/software/bash/manual/bash.html)# variable ::= (_|[A-z])(_|[A-z]|[0-9])*# variable contained spaceiflen(var.split()) > 1:raise Exception('fail: the variable contained space')# check headifnot (var[0].isalpha()or var[0] == '_'):raise Exception('fail: the variable contained wrong character')# check thebody of variableb = Truei = 0for cin var[1:]:i += 1# is variable contained invalid character?ifnot (c.isalpha()or c.isdigit()or c == '_'):b = Falsebreak# no exception if thre are onlyspaces after variableifnot bandnot var[i:].isspace():raise Exception('fail: the variable contained wrong character')elif b:return var[0]else:return var[:i]defparse(var_to_cmds):# check theposition of '::'try:pos = var_to_cmds.index('::')except Exception:raise Exception('not exists "::"')var = var_to_cmds[:pos]cmd_str = var_to_cmds[pos+2:]# check the format of variable andcommandsif var ==  '':raise Exception('fail: no variable before "::"')elif cmd_str == '':raise Exception('fail: nocommands after "::"')return (take_variable(var),cmd_str)if __name__ == '__main__':# parse variable andcommandstry:var,cmd_str = parse(''.join(sys.argv[1:]))except Exception, e:print >>sys.stderr, esys.exit(1)# var -> valval = sys.stdin.read().replace('\n','')#mapping and splitby ':'againcommands =map((lambda cmd: cmd.replace(''+var+'',''+val+'')),cmd_str.split(':'))# execcommandfor cmdincommands:try:#need split for removespacescheck_call(cmd.split())except Exception,e:#print >>sys.stderr, esys.exit(1)

本当はfunじゃなくて\(バックスラッシュ)で、:: じゃなくて→にしたかったんだけど、シェルが置き換えちゃうからしかたない

シェルの改造は禁断の手段だし

Permalink |記事への反応(1) | 14:56

このエントリーをはてなブックマークに追加ツイートシェア

2011-03-04

http://anond.hatelabo.jp/20110303225320

じゃぁ、問1をやってみた。

unsigned int f(unsigned int x) {    x = x - 1;    x = x | (x >> 1);    x = x | (x >> 2);    x = x | (x >> 4);    x = x | (x >> 8);    x = x | (x >>16);    return x + 1;}int main(int argc,constchar *argv[]){int check = 1;intcnt=0;if(0!=f(0)){cnt++;}for(unsigned int i=1;i!=0;i++){if(check < i){check <<=1;}if(check != f(i)){cnt++;}if(i%0x10000==0){printf("%x\n",i);}}printf("cnt=%d\n",cnt);return 0;}

iよりも等しいか大きい最小の2の乗数 

とunsigne int 全域において等しいプログラムcnt=0であることを確認するプログラム

Permalink |記事への反応(0) | 01:37

このエントリーをはてなブックマークに追加ツイートシェア

2011-01-23

http://anond.hatelabo.jp/20110123003228

書いてみたけどぜんぜん面白くならんわ。このサイズ面白さを競ってもなあ。

どうやったら面白くなる?

#include "stdafx.h"#include "windows.h"int _tmain(int argc, _TCHAR*argv[]){int i=2;int j=0;while(1){i++;for(j=2;j<i;j++){if((i % j)==0){//printf("%d は素数はない\n",i);break;}}if(j==i){//printf("%d は素数\n",i);printf("%d\n",i);}//Sleep(1000);}return 0;}

Permalink |記事への反応(1) | 01:12

このエントリーをはてなブックマークに追加ツイートシェア

2011-01-14

int main(int argc,char*argv[]){void **dpj;dpj = (void**)calloc(411 +1,sizeof(void*));return1;}

Permalink |記事への反応(1) | 18:54

このエントリーをはてなブックマークに追加ツイートシェア

2010-08-16

if も 3項演算子も for も do whileすらもない ifなしの FizzBuzz

だから、プログラム記法がなくても<>が無いから化けないぜ

#include "stdio.h"#include "stdlib.h"int cnumber=0;void fizz(){    printf("fizz");    cnumber++;};void nonfizz(){};voidbuzz(){    printf("buzz");    cnumber++;};void nonbuzz(){};voidnumber(int i){    printf("%d",i);    cnumber = 0;}void nonnumber(int i){    cnumber = 0;}void myexit(void){    printf("\n Hit returnkey toexit\n");    getchar();exit(1);}void noexit(void){}void (*pfizz[3])() = {fizz,nonfizz,nonfizz};void (*pbuzz[5])() = {buzz,nonbuzz,nonbuzz,nonbuzz,nonbuzz};void (*pnumber[3])(int) = {number,nonnumber,nonnumber};void (*pmyexit[2])() = {noexit,myexit};int main(int argc,char*argv[]){    int loopmax = (111+222+333)*10;    int i = 1;    head:    (*pfizz[i%3])();    (*pbuzz[i%5])();    (*pnumber[cnumber])(i);    (*pmyexit[!(loopmax-i)])();    printf(",");    i++;goto head;    return 0;}

includeが<>を使ってないので必要ならパスは各自で通してねw

Permalink |記事への反応(1) | 01:30

このエントリーをはてなブックマークに追加ツイートシェア

2009-12-31

配列だめなのかよ

perl -e "printatan2(1,2)"

0.463647609000806

perl -e "printatan2(@ARGV[0,1])" 1 2

Not enough arguments foratan2at -e line 1,at end of line

Execution of -e aborted due to compilation errors.

えー

Permalink |記事への反応(1) | 11:09

このエントリーをはてなブックマークに追加ツイートシェア

2009-10-04

グーグルマップ壁紙にしてみる

10/18 改訂

グーグルマップ航空写真をつなげて一枚にするスクリプト

なお、取得した画像著作権グーグル他各社が保持しています。

ご利用は計画的に私的範囲でどうぞご利用ください。

#!/usr/bin/perluse strict;use warnings;use Getopt::Long;use LWP::UserAgent;useGD;my $cmdline = join(" ", $0, @ARGV);my $usage = "usage: $0 -sx=116423 -sy=51603 -ex=116426 -ey=51605 -dx=4 -dy=3 -z=17 -size=300 -get=30 -dir=cache -output=output.jpg -nodebug";my ($sx, $sy) = (0, 0);my ($ex, $ey) = (0, 0);my ($dx, $dy) = (4, 3);my $z = 17;my $size = 300;my $get = 30;my $dir = "cache";my $output = "output.jpg";my $debug = 0;GetOptions("sx=i" => \$sx, "sy=i" => \$sy,   "ex=i" => \$ex, "ey=i" => \$ey,   "dx=i" => \$dx, "dy=i" => \$dy,   "z=i" => \$z,   "size=i" => \$size, "get=i" => $get,   "dir=s" => \$dir, "output=s" => \$output,   "debug!" => \$debug) or die "$usage\nDied";if ($ex == 0) {    $ex = $sx + $dx;} else {    $ex++;    $dx = $ex - $sx;}if ($ey == 0) {    $ey = $sy + $dy;} else {    $ey++;    $dy = $ey - $sy;}$sx>0 and $dx>0 and $sy>0 and $dy>0 and $z>0 and $dir and $output    or die "$usage\nBad arguments";$dx*$dy > $size and die "Getting too large.";$debug andprint "debug: mkdir $dir\n";mkdir $dir;-d $dir or die "can'tmakedir $dir: $!";my $base = sprintf("http://khm%d.google.co.jp/kh/v=46&z=%d", int(rand(4)), $z);my $ua = LWP::UserAgent->new;printf "now get %dimages...\n", $dx*$dy;for (my $x=$sx; $x < $ex; $x++) {    for (my $y=$sy; $y < $ey; $y++) {my $file = sprintf("%s/%02dz%06dx%06d.jpg", $dir, $z, $x, $y);$debug andprint "debug: check of $file\n";-s $file andnext;--$get < 0 and last;my $req =HTTP::Request->new(GET=>+"$base&x=$x&y=$y");$debug andprint "debug: fetch from ".$req->uri."\n";my $res = $ua->request($req);unless ($res->is_success) {print "fail fetch from $file: ", $res->status_line, "\n";next;}if (open(my $fh, ">", $file)) {    $debug andprint "debug: write of $file\n";    binmode $fh;print $fh $res->content;    close $fh;} else {print "failopen in $file: $!\n";}    }}$get < 0 andprint "reach the getting limit,skip after all.\n";printf "creating %dX%dimage...\n", 256*$dx, 256*$dy;my $image = newGD::Image(256*$dx, 256*$dy);for (my $x=$sx; $x < $ex; $x++) {    for (my $y=$sy; $y < $ey; $y++) {my $file = sprintf("%s/%02dz%06dx%06d.jpg", $dir, $z, $x, $y);$debug andprint "debug: check of $file\n";-s $file ornext;$debug andprint "debug: read of $file\n";my $part =GD::Image->newFromJpeg($file);$debug andprint "debug:image copy\n";$image->copy($part, 256*($x-$sx), 256*($y-$sy), 0, 0, 256, 256);    }}#$image->string(gdSmallFont, 0, 0, $cmdline, $image->colorAllocate(255, 255, 255));open(my $fh, ">", $output) or die "failopen $output: $!";$debug andprint "debug: write of $output\n";binmode $fh;print $fh $image->jpeg();close $fh;

例えば秋葉原とか

perl gmwall.pl -sx=116423 -sy=51603 -ex=116427 -ey=51606

駅だけとか

perl gmwall.pl -sx=465701 -sy=206420 -ex=465705 -ey=206423 -z=19

使う数値はfirebugなどで拾ってください。

Permalink |記事への反応(0) | 00:06

このエントリーをはてなブックマークに追加ツイートシェア

2009-09-13

void Maimiku(int argc,char *argv[]){

 int mymk = args[1];

nakayoshi(mymk);

}

int nakayoshi(int n){

nakayoshi(n);

}

仲良しマイミクってこんな感じですか?そのうち親友マイミクとかできちゃったりするんですか?よくわかりません。

Permalink |記事への反応(0) | 22:49

このエントリーをはてなブックマークに追加ツイートシェア

2009-03-26

ハッシュ関数を調べる

セキュリティ目的ではない。ハッシュテーブルで使うような奴でキャッシュで使いたい。

手軽なほうが良い。軽いほうが良い。推測可能でよい。数十バイトくらいの文字列にしたい。

md5が一番汎用っぽいけど、無駄に重い気がする。crc32は軽そうだしそれなりに汎用っぽいけど、ハッシュ長が短いのがめんどい

ベターはなんだろう。セオリーはなんだろう。

調べた→http://anond.hatelabo.jp/20090327015620

ベンチ用スクリプト

#!/usr/local/bin/pythonfrom sysimportargv, stderrfromtimeimporttimefromstringimport ascii_letters, joinfrom randomimport choicefrom hashlibimportmd5from binasciiimport crc32from itertoolsimport iziptime_fmt = '%10s: %5dms'shift = int(argv[1])iflen(argv)&gt;1andargv[1].isdigit()else 2length = 0x100 << shiftcycle = 0x10000 &gt;&gt; shiftprint &gt;&gt; stderr, 'stringlength: 0x%x, cycle: 0x%x' % (length, cycle)data = tuple(''.join(choice(ascii_letters)for iin xrange(length))for jin xrange(cycle))start =time()md5hex = tuple(md5(s).hexdigest()for sin data)print &gt;&gt; stderr,time_fmt % ('md5hex', (time() - start) * 1000)start =time()crc32x4 = tuple(''.join('%08x' %abs(crc32(s[i::4]))for iin (0, 1, 2, 3))for sin data)print &gt;&gt; stderr,time_fmt % ('crc32x4', (time() - start) * 1000)start =time()startend = tuple(s[:16]+s[-16:]for sin data)print &gt;&gt; stderr,time_fmt % ('headtail', (time() - start) * 1000)start =time()skip = tuple(s[::(len(s)/32+1)]for sin data)print &gt;&gt; stderr,time_fmt % ('skipover', (time() - start) * 1000)for sin izip(data,md5hex, crc32x4, startend,skip):print join(s)

実行結果

%python hashbench.py 0 &gt; hash0.txtstringlength: 0x100, cycle: 0x10000md5hex:   199ms   crc32x4:  1081ms  headtail:    30msskipover:    41ms%python hashbench.py 2 &gt; hash1.txtstringlength: 0x400, cycle: 0x4000md5hex:    83ms   crc32x4:   363ms  headtail:    10msskipover:    20ms%python hashbench.py 4 &gt; hash2.txtstringlength: 0x1000, cycle: 0x1000md5hex:    52ms   crc32x4:   170ms  headtail:     2msskipover:     5ms

Permalink |記事への反応(3) | 12:39

このエントリーをはてなブックマークに追加ツイートシェア

2008-10-30

http://anond.hatelabo.jp/20081025202001

いまさらだがFizzBuzz

1から100まで、3の倍数5の倍数云々って、全部定数の計算じゃね?

というところに気付き、自称メタプログラマー(略してメタグラマー)俺の血が騒いだ。

定数計算なら、それは実行時ではなくコンパイル時に行なわれるべきだ……。

というわけでC++テンプレートメタプログラミング召喚。

#include<iostream>constint FIZZ_NUM =3;constint BUZZ_NUM =5;constint BEGIN_NUM =1;constint END_NUM =101;template<int N>struct Fizz {enum {PRINT =0,NEXT = N +1};staticvoidprint() {}};template<int N>structBuzz {enum {PRINT =0,NEXT = N +1};staticvoidprint() {}};template<int N,bool ForB>structNumber {staticvoidprint() {std::cout << N;}};template<>struct Fizz<FIZZ_NUM> {enum {PRINT =1,NEXT =1};staticvoidprint() {std::cout <<"Fizz";}};template<>structBuzz<BUZZ_NUM> {enum {PRINT =1,NEXT =1};staticvoidprint() {std::cout <<"Buzz";}};template<int N>structNumber<N,true> {staticvoidprint() {}};template<int N,int F,int B>structFizzBuzz {staticvoidprint() {typedef ::Fizz<F> Fizz;typedef ::Buzz<B>Buzz;                Fizz::print();Buzz::print();Number<N, Fizz::PRINT ||Buzz::PRINT>::print();        std::cout << std::endl;FizzBuzz<N +1, Fizz::NEXT,Buzz::NEXT>::print();    }};template<int F,int B>structFizzBuzz<END_NUM, F, B> {staticvoidprint() {}};int main(int argc,char **argv){FizzBuzz<BEGIN_NUM,1,1>::print();return0;}

ifなし%なしループ系なし、しかも実行時オーバーヘッドなし!(多分)

あ、これを見て理解する人間オーバーヘッドは無視ね。

ああ、久しぶりにC++を触ったけど、やっぱC++テンプレートってダメダメだな。20世紀の遺物といわざるを得ない。

君がもし21世紀モテイケメンメタグラマーなら、21世紀プログラミング言語D言語を使うべきだ!

驚くべきことに、D言語コンパイル時に関数が実行でき、その結果をソースコードとして取り込める!

ただし実行できるのは簡単な関数だけだけど……。

以下、それを使ったD言語によるメタプログラミング的実装。

import std.stdio;// これでFizzBuzzを全部出力するコードを作るぜ!string makeFizzBuzzCode() {string code;for(int i =1; i <=100; ++i) {// 効率? コンパイル時にそんな配慮は要らん!if(i %3 ==0 &amp;&amp; i %5 ==0) {            code ~="writefln(\"FizzBuzz\");\n";        }elseif(i %3 ==0) {            code ~="writefln(\"Fizz\");\n";        }elseif(i %5 ==0) {            code ~="writefln(\"Buzz\");\n";        }else {            code ~="writefln(" ~ static_itoa(i) ~");\n";        }    }return code;}int main(string[] args) {// おまけで生成されたコードも見せるよ。pragma(msg, makeFizzBuzzCode());// 生成したコードを埋め込む。コピペみたいな感覚mixin(makeFizzBuzzCode);return0;}// 以下ユーティリティ。このぐらい標準で欲しいな……。///整数文字列変換(コンパイル時)string static_itoa(int n) {if(n ==0) {return"0";    }// 10で割りながら余りを文字にして追加。桁が逆転した文字列になる。string s;for(; n; n /=10) {        s ~= ("0123456789")[n %10];    }// 桁位置を正常にする。相変わらず効率無視。return static_reverse(s);}///配列リバースコンパイル時)/// 実行時ならarray.reverseが使えるんだけどね……。T[] static_reverse(T)(T[] s) {    T[] result;    foreach_reverse(c; s) {        result ~= c;    }return result;}// 心配なので静的ユニットテスト(笑)unittest {staticassert(static_itoa(0) =="0");staticassert(static_itoa(10) =="10");staticassert(static_itoa(999) =="999");staticassert(static_itoa(9999) =="9999");staticassert(static_itoa(12345) =="12345");staticassert(static_itoa(314159265) =="314159265");}

コンパイル結果

$dmd -unittest fizz_buzz.dwritefln(1);writefln(2);writefln("Fizz");writefln(4);writefln("Buzz");writefln("Fizz");writefln(7);writefln(8);writefln("Fizz");writefln("Buzz");writefln(11);writefln("Fizz");writefln(13);writefln(14);writefln("FizzBu(ry

出力結果は略。

さすがD言語C++JavaC#にできない事を平然とやってのけるッ

そこにシビれる!あこがれるゥ!

というか、

writefln(1);writefln(2);writefln("Fizz");writefln(4);

もうwritefln(出力関数)要らなくね?

修正。

// これでFizzBuzzを全部出力するぜ!string makeFizzBuzzCode() {string code;for(int i =1; i <=100; ++i) {// 効率? コンパイル時にそんな配慮は要らん!if(i %3 ==0 &amp;&amp; i %5 ==0) {            code ~="FizzBuzz\n";        }elseif(i %3 ==0) {            code ~="Fizz\n";        }elseif(i %5 ==0) {            code ~="Buzz\n";        }else {            code ~= static_itoa(i) ~"\n";        }    }return code;}int main(string[] args) {// もうコンパイル時のメッセージしか出さない。(笑)pragma(msg, makeFizzBuzzCode());return0;}

コンパイル結果。

$dmd -unittest fizz_buzz.d12Fizz4BuzzFizz78FizzBuzz11Fizz1314FizzBu(ry

実行するまでもなく結果が出力された。つまり実行時間ゼロ、ということは……

世 界 最 速

以上、世界最速なD言語宣伝でした。

みんな使おうD言語

D言語リファレンス日本語

http://www.kmonos.net/alang/d/1.0/index.html(1.0。こっちの方が安定してる?)

http://www.kmonos.net/alang/d/2.0/index.html(もっと凄い2.0)

D言語本家配布元(無料コンパイラが入手できます)

http://www.digitalmars.com/

それにしても、ちゃんとD言語シンタックスハイライトを実装しているはてなは偉い。(笑)

Permalink |記事への反応(1) | 22:45

このエントリーをはてなブックマークに追加ツイートシェア

2008-04-16

http://anond.hatelabo.jp/20080415182703

実行してみたら出力に変化がなかった。アルェー?

おっと、バグが。ちゃんとテストしてなかった。すんまそん。

#tree -pugs |perl -e '@line=<>; $max=(sort {$b<=>$a}map {/^(.*?)\[/; length($1)} @line)[0];map {s/^(.*?)\[/$1 . " "x($max-length($1))."\["/e} @line;print @line'

毎回正規表現考えるのも面倒かなーとかとか。

理想を語ると出力形式指定できれば最強だなーとか妄想してた。

この辺は、ファイルにして ~/bin に放りこんで、自分好みに育て上げる、ってのがエロゲ^H^H^Hギーク楽しみ方かと。

雛型的には↓かなぁ。どうだろ。弾・monger・コーガイ氏が登場したら……滅多切りさるかもw

#!/usr/bin/perluse strict;use warnings;use Getopt::Std;use vars qw($opt_t);#オプション処理getopts('t');# $opt_tがセットされていたらタブ処理、ということにする。#コマンド起動#引数処理とかシグナルとか面倒なところは……openTREE, "tree -pugs ".join(" ",@ARGV,"|") or die;my @line = <TREE>; #富豪的にいくcloseTREE; # ここで子プロセスの処理だっけ?# それともwaitするんだっけ?# ツリー表示部分の最大長を求める。my $max=(sort {$b<=>$a}map {/^(.*?)\[/; length($1)} @line)[0];# 色々やる時はユーザ名とかグループ名とかファイル名とかの最大長がいるかもforeach (@line) {        if ($opt_t) {                # タブ(\t)で位置をそろえるとか……        } else {                s/^(.*?)\[/$1 . " "x($max-length($1))."\["/e;        }print;}

treeへのオプションの与え方とか、それによる出力の変化とか考えると、結構面倒だけど、自分用に決め打ちしとけば何とかなるでしょう。

あと、「[%p<>%u<>%g<>%s]」みたいなのはCPANに転がってたりしそうな気もするので、それを使うとか。

そんなところでなかろうか。

[追記]

http://search.cpan.org/~darren/String-Format-1.14/Format.pm というのがあった。

Permalink |記事への反応(3) | 07:15

このエントリーをはてなブックマークに追加ツイートシェア

次の25件>
ログインユーザー登録
ようこそ ゲスト さん
Copyright (C) 2001-2025 hatena. All Rights Reserved.

[8]ページ先頭

©2009-2025 Movatter.jp