約 5,030,095 件
https://w.atwiki.jp/c21coterie/pages/841.html
問116 Rectangular Searching http //judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0116 図の中に描ける最大の面積を持つ長方形を探す問題 解法 私はBigO(n^3)のコードしか考え付きませんでした。 osa_kさんのコードがシンプルながらBigO(n^2)なのでAOJで見ておいてください。 http //judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=496648 tab=2# 私もstackの代わりにmapをつかった解法であと一歩のところまで到達していたのであと一歩という感じでした。 mapから消すのは遅いけどstackは早い、その差が出ました。 問117 A reward for a Carpenter http //judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0117 大工が柱を買い付けて戻ってくるまでのコストを最小にする問題。 解法 点の数が少ないグラフなので計算量の多い手抜きコードでも何の問題もありません。 点の数が増えたらダイクストラ法などを使います。 #include stdio.h #include string.h int G[21][21]; int calc(int s,int e,int n){ int cost[21]; memset(cost,-1,sizeof(cost)); cost[s]=0; while(1){ bool isUpDate=false; for(int i=1;i =n;i++){ if(cost[i]==-1)continue; for(int j=1;j =n;j++){ if(G[i][j]==-1)continue; if(cost[j]==-1 || cost[j] cost[i]+G[i][j]){ cost[j]=cost[i]+G[i][j]; isUpDate=true; } } } if(isUpDate==false)break; } return cost[e]; } int main(){ int n,m,a,b,c,d; scanf("%d %d", n, m); memset(G,-1,sizeof(G)); while(m--){ scanf("%d,%d,%d,%d", a, b, c, d); G[a][b]=c; G[b][a]=d; } int x1,x2,y1,y2; scanf("%d,%d,%d,%d", x1, x2, y1, y2); printf("%d\n",y1-y2-calc(x1,x2,n)-calc(x2,x1,n)); } 問118 Property Distribution http //judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0118 この問題、数十万行*数十万列のデータになってもコードが動くように書いてみました。 BigO(行数*列数*log(列数,2))の定数倍。 列数の定数倍のメモリ使用量で動く。 sizeを列数の最大に合わせれば数十万列でも安定して動きます。 #include stdio.h #include string.h #include set #include algorithm #include queue #include map #include iostream const int SIZE=101; void calc(int h,int w){ char row[2][SIZE]; long long int memo[SIZE],next[SIZE]; long long int ansAdd=0; std map long long int,long long int noUnion; std map long long int,long long int iterator mIt; std set long long int iterator it; long long int maxNo=1; //何十万行*何十万列でも動くアルゴリズムを模索中。 for(int y=0;y h;y++){ int now=y%2; int old=(y+1)%2; scanf("%s",row[now]); std set long long int pNos,dNos; for(int x=0;x w;x++){ if(x 0 row[now][x-1]==row[now][x]){ next[x]=next[x-1]; }else{ next[x]=maxNo; noUnion[maxNo]=maxNo; maxNo++; } if(y 0 row[old][x]==row[now][x]){ long long int no1=noUnion[memo[x]]; long long int no2=noUnion[next[x]]; if(no1 no2){ noUnion[memo[x]]=no1; noUnion[next[x]]=no1; }else{ noUnion[memo[x]]=no2; noUnion[next[x]]=no2; } pNos.insert(memo[x]); } if(y 0 row[old][x]!=row[now][x]){ dNos.insert(memo[x]); } } for(int x=w-1;x =0;x--){ if(y 0 row[old][x]==row[now][x]){ long long int no1=noUnion[memo[x]]; long long int no2=noUnion[next[x]]; if(no1 no2){ noUnion[memo[x]]=no1; noUnion[next[x]]=no1; }else{ noUnion[memo[x]]=no2; noUnion[next[x]]=no2; } } } std set long long int dNos2,dNos3; for(int x=0;x w;x++){ if(pNos.find(memo[x])==pNos.end() dNos.find(memo[x])!=dNos.end()){ dNos3.insert(noUnion[memo[x]]); } } //std cout "\n "; //for(it=dNos2.begin();it!=dNos2.end();it++){ //std cout (*it) " "; //} //std cout " \n"; ansAdd+=dNos3.size(); std set long long int pNos2; for(int x=0;x w;x++){ next[x]=noUnion[next[x]]; pNos2.insert(next[x]); } noUnion.clear(); for(it=pNos2.begin();it!=pNos2.end();it++){ noUnion[(*it)]=(*it); } memcpy(memo,next,sizeof(memo)); //std cout noUnion.size() " " ansAdd "\n"; } std cout (ansAdd+noUnion.size()) "\n"; } int main(){ int h,w; while(scanf("%d %d", h, w)!=EOF){ if(w==0 h==0)break; calc(h,w); } } 問119 Taro s Obsession http //judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0119 証言から誰がどの順番で部屋に入ったかあり得る組み合わせを一つ答える問題。 解法 人数が数万人証言が数十万個程度になっても安定して動くコードで書いてみました。 BigO(証言数)です。 証言数が数千万とかになったらどんなコードを書けばいいのだろうか? #include stdio.h #include vector #include string.h #include queue const int SIZE=21; const int NIL=-1; int main(){ int m,n,count[SIZE]={0},a,b; std vector int con[SIZE]; std queue int qu; scanf("%d %d", m, n); while(n--){ scanf("%d %d", a, b); count[b]++; con[a].push_back(b); } int next[SIZE]={0}; memcpy(next,count,sizeof(next)); for(int a=1;a =m;a++){ if(count[a]==0)qu.push(a); } while(qu.empty()==false){ int a=qu.front(); qu.pop(); printf("%d\n",a); for(int i=0;i con[a].size();i++){ int b=con[a][i]; if(next[b] =0)continue; next[b]--; if(next[b]==0)qu.push(b); } memcpy(count,next,sizeof(count)); } }
https://w.atwiki.jp/vslibrary/pages/13.html
その他のTips プロパティ プロパティの作成 プロパティウインドウに説明文を記載する方法 プロパティに初期値を設定する方法 Intelli Senseで自作プロパティに説明文を付加する方法 自作プロパティで選択式に入力させる方法 プロパティでファイル選択ダイアログを表示させる方法 プロパティでフォルダ選択ダイアログを表示させる方法 自作イベントをプロパティ変更時に起動させる ビルド時、実行時に設定した初期値が戻ってしまう場合 文字列操作 文字列の置き換え 0詰め 文字の検索 入力チェック(数値チェック等) 配列 配列に初期値を設定する 画面 タイトルバーの高さを取得する タイトルバーを非表示にする マウスカーソルを変更する 動作 Tabキー以外のキーでフォーカスを移動させる 実行中にメモリがどんどん消費されてしまう プログラムを強制終了させる 複数のコントロールまとめてプロパティを設定 コントロールにフォーカスを移動させる Enabled=Falseにした時、文字色を変更させない マウス、キーボード入力を無効にする(色が変化しないEnabled) その他 共通関数の作成/呼び出し方法 Windows Apiの使用方法 リソースの一覧を取得 .
https://w.atwiki.jp/a3mi22/pages/86.html
LEFT OUTER JOIN と 文字列連結 【データ】 (1)部署マスタテーブル(busho) 部署ID(busho_id) - NOT NULL 部署名(busho_name) - NOT NULL (2)社員マスタテーブル(shain) 社員ID(shain_id) - NOT NULL 社員名(shain_name) - NOT NULL (3)所属部署テーブル(shozoku) 部署ID(busho_id) - NOT NULL 社員ID(shain_id) - NOT NULL (4)基本連絡先テーブル(renraku) 社員ID(shain_id) - NOT NULL メールアドレス(email) - NOT NULL メールアドレス2(email2) - NOT NULL (5)緊急連絡先テーブル(kinkyu_renraku) 社員ID(shain_id) - NOT NULL メールアドレス(email) - NOT NULL メールアドレス2(email2) - NOT NULL 【やりたいこと】 部署名、社員名、基本連絡先、緊急連絡先を取得する。 基本連絡先、緊急連絡先は、メールアドレスが複数登録されている場合、" "で区切って一つの項目として取得する。 【SQL】 SELECT shain.shain_name, busho.busho_name, case renraku.email2 then renraku.email else renraku.email || || renraku.email2 end as renraku_email, case kinkyu_renraku.email2 then kinkyu_renraku.email else kinkyu_renraku.email || || kinkyu_renraku.email2 end as kinkyu_email FROM busho, shozoku, shain left outer join renraku on (shain.shain_id = renraku.shain_id) left outer join kinkyu_renraku on (shain.shain_id = kinkyu_renraku.shain_id) WHERE shain.shain_id = shozoku.shain_id AND shozoku.busho_id = busho.busho_id AND ORDER BY busho.busho_id asc, shain.shain_id asc 【解説】 LEFT OUTER JOIN shain left outer join renraku on (shain.shain_id = renraku.shain_id) 基本連絡先テーブルに該当する社員の情報がなかったら、検索結果0件にするのではなく、値にNULLを設定する。 CASE文 と 文字連結 case kinkyu_renraku.email2 then kinkyu_renraku.email else kinkyu_renraku.email || || kinkyu_renraku.email2 end as kinkyu_email 緊急連絡先のメールアドレス2が空文字だったらメールアドレス1だけを表示する。 それ以外だった場合は、緊急連絡先メールアドレス1と緊急連絡先メールアドレス2を" "でつないで表示する。 INSERTするときに値に改行コードを入れたい 【SQL文】 (1)INSERT INTO a values (0000, あい || chr(13) || chr(10) || うえお ); (2)INSERT INTO a values (0001, かき || chr(10) || くけこ ); 【解説】 (1) aテーブルの2つ目の項目を「あい\r\nうえお」で登録 (2) aテーブルの2つ目の項目を「かき\nくけこ」で登録 システム日付の月だけを取得したい。(Oracle) 例)AAAテーブルのMONTHというカラムを今の月に更新したい。 UPDATE AAA SET MONTH = TO_CHAR(SYSDATE, MM ); 結果) 今日の日付 2010/06/16 AAAテーブル MONTH 6 合計: -
https://w.atwiki.jp/sm64/pages/14.html
■ 本記録リストは2019年04月30日を以って更新を停止しました。 最新情報は ⇒ 0枚RTA(speedrun.com) || 1枚RTA(speedrun.com) テンプレ 編集のやり方は編集方法を参考に。 |59 59|[[達成者 http //com.nicovideo.jp/community/co00000]]|N64orVCorEMU|2000/01/01|動画URLなど| 0枚RTA 計測開始:電源投入もしくはリセットした瞬間 計測終了:最後の大スターを取得した瞬間 制限事項:なし 一切制限なしの最小枚数でのany%最速クリア( 参考ページ ) N64記録 ■ 本記録リストは2019年04月30日を以って更新を停止しました。 最新情報は ⇒ 0枚RTA(speedrun.com) || 1枚RTA(speedrun.com) ※以下は2019年04月30日までの情報です。 タイム 達成者 ver 達成日 備考 06 39.09 KANNO N64 2019/04/28 Youtube 06 41.76 Drozdowsky N64 2018/07/09 Youtube 06 44.23 アキラ N64 2015/08/08 sm26882407 06 44.70 Xiah N64(U) 2016/10/26 Youtube 06 56 ごはん N64 2016/11/14 Youtube 07 18 みとん N64 2018/02/26 sm32805783 07 21 もっこり N64 2012/03/20 sm17306554 07 21 Funila N64(U) 2012/11/29 sm19465404 SDA(07 41) 07 23 ZEOKU N64 2017/03/13 Youtube 07 25 はちみつ N64 2012/11/30 Youtube 07 31 Taihou N64 2018/08/01 Youtube 07 52 クマ社長 N64 2013/06/30 07 53 ParadoxKarl N64 2015/02/11 Youtube 08 08 ぐとあ N64 2016/10/21 sm29879847 08 08 ふぁふえる N64 2018/7/12 Youtube 08 08 がみる N64 2018/5/25 Youtube 08 12 みゅう N64(U) 2012/03/05 sm17164013 08 17 OMUNAMU N64 2012/10/21 sm19169200 08 20 ことんび N64 2012/10/22 08 21 ゆらもふ N64 2015/**/** 08 23 わらびん N64 2012/02/13 1333890549 08 25 ryou N64 2011/11/01 sm16048604 08 38 KoBrahJer N64 2015/12/16 Twitch録画 08 43 ミタギ N64 2015/05/08 Youtube 08 45 ねくすと N64 2016/04/14 lv259440447 08 56 exe N64 2012/03/19 Youtube 09 03 Beck N64(U) 2015/09/08 Youtube 09 11 taka12352 N64 2010/11/28 sm12887548 09 18 暇リオ N64 2011/12/27 Youtube 10 35 ○(まる) N64 2011/11/12 sm16152797 11 12 YUKING N64 2016/10/12 11 33 ひらがな N64 2012/12/27 12 48 ReneBalow N64 2013/01/03 Youtube 12 58 白井 N64 2012/04/09 sm17501280 13 37 КΙЯВУ N64 2012/07/29 録画あり 14 22 GothicLogic N64 2015/10/17 Youtube 17 21 モリオ N64 2010/11/30 24 34 Drogeriehund N64 2016/01/03 Youtube VC記録 タイム 達成者 ver 達成日 備考 08 37 Paradox Karl VC(U) 2012/01/19 Youtube 参考記録 タイム 達成者 ver 達成日 備考 09 17 もっこり EMU 2010/12/12 sm13005054 10 40 No-NamE EMU 2010/03/31 sm9282173 1枚RTA 計測開始:電源投入もしくはリセットした瞬間 計測終了:最後の大スターを取得した瞬間 制限事項:DDDskip DDDskipのみを制限した最小枚数でのクリア( 参考ページ ) N64記録 タイム 達成者 ver 達成日 備考 07 21.47 Drozdowsky N64 2018/11/16 Youtube 07 21.67 Xiah N64 2016/09/19 Youtube sm29675503 07 26 アキラ N64 2016/08/18 Youtube 07 28 アッキー N64 2018/12/06 Youtube 07 33 KANNO N64 2018/08/04 Youtube 07 36 Weegee14 N64(U) 2018/04/06 Youtube 07 37 ゆらもふ N64 2018/05/29 Youtube 07 38 はちみつ N64 2013/02/13 Youtube 07 41 ごはん N64 2016/09/03 Youtube 07 41 Taihou N64 2018/07/01 Youtube 07 44 ZEOKU N64 2012/12/19 Youtube 07 48 ミタギ N64 2015/05/15 Youtube 07 50 もっこり N64 2012/03/12 sm17238002 07 51 ぐとあ N64 2016/02/15 07 55 れいる N64 2013/10/19 sm22075290 07 55 JJplaysgames N64 2018/03/30 Twitch録画 07 56 白井 N64 2012/02/15 sm16981242 07 56 メーゼ N64(U) 2014/03/25 07 56 ろりのすけ N64 2014/07/12 sm23982062 07 57 Dwhatever N64 2016/03/10 Youtube 07 57 Kyman N64 2018/06/19 Twitch録画 08 02 にこ N64 2012/11/29 sm19464685 08 03 てんちょ N64 2017/03/14 Youtube 08 04 暇リオ N64 2011/12/21 Youtube 08 04 わらびん N64 2012/02/14 sm17498781 08 04 Waterbird165 N64 08 05 ふぁふえる N64 2018/6/30 Youtube 08 11 GothicLogic N64 2015/08/07 Youtube 08 12 taka12352 N64 2011/02/03 1296661179 08 15 こあじ N64 2012/02/10 1328870839 08 17 シゲル N64 2010/05/04 Youtube 07 08 in SDA Timing 08 18 KoBrahJer N64 2015/12/16 Twitch録画 08 20 クマ社長 N64 08 20 Luke994 N64(U) 2014/11/02 Youtube 08 23 RED N64 2012/01/28 08 24 ことんび N64 2012/12/23 08 31 (。きωよ)ノ゙ N64 2011/04/10 sm14121363 08 32 Hampern N64 Twitch録画 08 32 JustinDT N64 2015/01/19 Youtube 08 35 kyreu N64 2015/12/29 Twitch録画 08 36 Toufool31 N64 08 37 タピオカ N64 2010/10/10 08 37 srb N64 2015/02/21 Youtube 08 38 わたあめ N64 08 39 ○(まる) N64 2011/10/04 sm15788078 08 46 ミント N64 2016/12/27 sm30310912 08 48 おーる N64 08 48 がみる N64 2016/10/03 Youtube 08 49 メーヴェ N64 2011/03/29 08 49 OMUNAMU N64 2011/11/04 08 50 マサムネ N64 2013/04/28 08 51 レバ天 N64 2014/09/17 sm24491769 08 52 Area(エアリア) N64 08 54 みゅう N64 2011/07/05 sm14940590 08 56 TRV N64 09 00 ねくすと N64 2011/06/02 09 03 ひす N64 2010/07/10 09 14 コブレッティ N64 2010/11/25 09 14 ぐろ N64 2014/10/11 09 25 Beck N64(U) 2015/08/08 Youtube 09 26 かずしボンバー N64 09 34 モリオ N64 2011/01/08 09 37 DennisBalow N64 09 44 Dash N64 2010/08/12 sm11726538 09 50 RetroRuns N64 2014/04/14 Twtich録画 09 51 わたぱち N64 2017/06/29 Youtube 10 22 h紳士乙 N64 2013/03/10 sm20345726 10 30 akat0ra88 N64(E) 2011/04/21 Youtube PAL版世界記録NTSC版換算08 45 10 31 Flippy_o N64 2015/01/30 Youtube 10 45 まこちゃん N64 2011/01/03 12 14 YUKING N64 13 23 wwfriesen N64 13 37 コルポ N64 26 19 loltama N64(U) 2016/01/29 Youtube 3 08 12 ポリエ N64 2010/07/06 4 06 33 カリィ N64 2012/12/16 VC記録 タイム 達成者 ver 達成日 備考 08 06 Paradox Karl VC(U) 2011/03/25 Youtube 08 29 Noktem VC(U) 2012/03/20 Youtube 08 45 Jiano VC(U) 2010/12/08 Ust録画 参考記録 タイム 達成者 ver 達成日 備考 08 25 もっこり EMU 2010/07/11 09 54 No-NamE EMU 2009/11/22 10 35 Asran EMU 2010/05/30 sm10900554 10 59 sojiro EMU 2010/04/16 11 59 あまね EMU
https://w.atwiki.jp/opengles/pages/19.html
Shader programs use Special Variables to communicate with fixed-function parts of the pipeline. Output Special Variables may be read back after writing. Input Special Variables are read-only. All Special Variables have global scope. Vertex Shader Special Variables [7.1] Outputs Variable Description Units or coordinate system highp vec4 gl_Position; transformed vertex position clip coordinates mediump float gl_PointSize; transformed point size (point rasterization only) pixels Fragment Shader Special Variables [7.2] Fragment shaders may write to gl_FragColor or to one or more elements of gl_FragData[], but not both. The size of the gl_FragData array is given by the built-in constant gl_MaxDrawBuffers. Inputs Variable Description Units or coordinate system mediump vec4 gl_FragCoord; fragment position within frame buffer window coordinates bool gl_FrontFacing; fragment belongs to a front-facing primitive Boolean mediump int gl_PointCoord; fragment position within a point (point rasterization only) 0.0 to 1.0 for each component Outputs Variable Description Units or coordinate system mediump vec4 gl_FragColor; fragment color RGBA color mediump vec4 gl_FragData[n] fragment color for color attachment n RGBA color Built-In Constants With Minimum Values [7.4] Built-in Constant Minimum value const mediump int gl_MaxVertexAttribs 8 const mediump int gl_MaxVertexUniformVectors 128 const mediump int gl_MaxVaryingVectors 8 const mediump int gl_MaxVertexTextureImageUnits 0 const mediump int gl_MaxCombinedTextureImageUnits 8 const mediump int gl_MaxTextureImageUnits 8 const mediump int gl_MaxFragmentUniformVectors 16 const mediump int gl_MaxDrawBuffers 1 Built-In Uniform State [7.5] Specifies depth range in window coordinates. If an implementation does not support highp precision in the fragment language, and state is listed as highp, then that state will only be available as mediump in the fragment language. struct gl_DepthRangeParameters {highp float near; // nhighp float far; // fhighp float diff; // f - n};uniform gl_DepthRangeParameters gl_DepthRange;
https://w.atwiki.jp/ellark-sisyamo/pages/17.html
更新メールを送信しない マイページにスナップショットを表示 チェックボックスが入ってる場合はスナップショット、入ってない場合は現在の装備が表示される。 ■画像非表示 アイテムアイコンを非表示 現在地の画像を非表示 パーティメンバーの画像を非表示 戦闘の画像を非表示 挿絵を非表示 挿絵フラッシュを非表示 ■戦闘フラッシュ 戦闘のフラッシュを非表示 再生速度 速い1~20遅い デフォルトは10
https://w.atwiki.jp/styleshare/pages/118.html
[を]で始まるサイト StyleShare 概要 このWiki内の各ページに現れるGoogle Adsense広告およびフッタに現れるWiki関連タグクラウド表示やWiki宣伝用エリア、さらには編集画面の邪魔な広告画像を非表示[display none]にします author:StyleShareOwner user.styleをインストール 広告非表示系:CSSリデザイン系 [を]で始まるサイトなんて・・・あるのかな?
https://w.atwiki.jp/hmiku/pages/30765.html
【登録タグ 曖昧さ回避】 曖昧さ回避のためのページ ずどどんPの曲desert/ずどどんP Shaun the Slothの曲Desert/鈴木将太 曖昧さ回避について 曖昧さ回避は、同名のページが複数存在してしまう場合にのみ行います。同名のページは同時に存在できないため、当該名は「曖昧さ回避」という入口にして個々のページはページ名を少し変えて両立させることになります。 【既存のページ】は「ページ名の変更」で移動してください。曖昧さ回避を【既存のページ】に上書きするのはやめてください。「〇〇」という曲のページを「〇〇/作り手」等に移動する場合にコピペはしないでください。 曖昧さ回避作成時は「曖昧さ回避の追加の仕方」を参照してください。 曖昧さ回避依頼はこちら→修正依頼/曖昧さ回避追加依頼
https://w.atwiki.jp/naobe/pages/158.html
ソフトウェア製品に戻る 使用したインストールファイル PyQt4-4.10.1-gpl-Py3.3-Qt5.0.2-x32.exe 名前から見ると、PyQtは4-4.10.1、Pyrthonは、3.3、Qtは5.0.2 PyQtとは QtのPythonラッパー。PythonでQtを使ったGUIアプリケーションを作成できる。Linuxでも同じソースで動作する(Python,Qtのバージョンが同じであれば)。ドキュメントは、 Python /Lib/site-packages/PyQt4/doc下にある。 QtDesighner 画面作成ツール。左側にある部品を選択してWindow上に配置して、外見を確認しながら画面を作成するツール。慣れれば、コーディングするより早く画面を作成できる。 作成したファイルは、*.uicという名前になる。 Python /Lib/site-packages/PyQt4/pyuic4.batを起動して、*.pyに変換して使う。 プログラムサンプル httpd.conf簡易表示画面 httpd.confをTreeViewを使って表示する画面。ディレクティブを指定してポップアップメニューを表示するとディレクティブ説明ダイアログを表示する。httpd.confはファイルダイアログを使って選択する。以前使用したhttpd.confはメニューに履歴として残す。履歴を選択するとファイルを開く。 【起動時】 【メニューを開く】 【ファイルダイアログ】 【TreeViewにhttpd.confを表示】 【ディレクティブを選択して説明ダイアログを表示】 【メニューから以前使用したhttpd.confを選択】 プログラム 【httpdconfmain.py 本体】 PyQtのサンプルプログラム(editabletreemodel.py)を修正して作成。TreeViewのリフレッシュで苦労した。Google検索して試行錯誤のうえTreeModelのmodelresetシグナルを発行して動いた。TreeWidgetを使えば簡単らしい。 # -*- coding utf-8 -*- """ httpd.conf管理画面 httpd.confを読み込み表示する。 """ import sys from PyQt4.QtCore import QAbstractItemModel,QModelIndex,Qt,pyqtSlot,QPoint from PyQt4.QtGui import QWidget,QMenu,QApplication,QAction,QFileDialog,QMainWindow from gui.httpdconfmainui import * from dirDescDialog import DirDescDialog from util.HistoryFile import HistoryFile import json """ ツリーアイテム TreeViewの行に相当する """ class TreeItem(object) def __init__(self, data, parent=None) self.parentItem = parent self.itemData = data self.childItems = [] def child(self, row) return self.childItems[row] def childCount(self) return len(self.childItems) def childNumber(self) if self.parentItem != None return self.parentItem.childItems.index(self) return 0 def columnCount(self) return len(self.itemData) def data(self, column) return self.itemData[column] """ 子領域を作成する @param psition 子配列の追加する子領域位置 @param count 行数 @param columns 列数 """ def insertChildren(self, position, count, columns) if position 0 or position len(self.childItems) return False for row in range(count) data = [None for v in range(columns)] item = TreeItem(data, self) self.childItems.insert(position, item) return True def insertColumns(self, position, columns) if position 0 or position len(self.itemData) return False for column in range(columns) self.itemData.insert(position, None) for child in self.childItems child.insertColumns(position, columns) return True def parent(self) return self.parentItem def removeChildren(self, position, count) if position 0 or position + count len(self.childItems) return False for row in range(count) self.childItems.pop(position) return True def removeColumns(self, position, columns) if position 0 or position + columns len(self.itemData) return False for column in range(columns) self.itemData.pop(position) for child in self.childItems child.removeColumns(position, columns) return True def setData(self, column, value) if column 0 or column = len(self.itemData) return False self.itemData[column] = value return True """ ツリーモデル """ class TreeModel(QAbstractItemModel) def __init__(self, headers, parent=None) super(TreeModel, self).__init__(parent) self.rootData = [header for header in headers] self.rootItem = TreeItem(self.rootData) # 親スタック self.parents = [self.rootItem] #self.setupModelData(data.split("\n"), self.rootItem) """ ヘッダ以外のデータをクリア """ def clearData(self) self.rootItem = TreeItem(self.rootData) self.parents = [self.rootItem] pass def columnCount(self, parent=QModelIndex()) return self.rootItem.columnCount() def data(self, index, role) if not index.isValid() return None if role != Qt.DisplayRole and role != Qt.EditRole return None item = self.getItem(index) return item.data(index.column()) def flags(self, index) if not index.isValid() return 0 return Qt.ItemIsEditable | Qt.ItemIsEnabled | Qt.ItemIsSelectable def getItem(self, index) if index.isValid() item = index.internalPointer() if item return item return self.rootItem def headerData(self, section, orientation, role=Qt.DisplayRole) if orientation == Qt.Horizontal and role == Qt.DisplayRole return self.rootItem.data(section) return None def index(self, row, column, parent=QModelIndex()) if parent.isValid() and parent.column() != 0 return QModelIndex() parentItem = self.getItem(parent) childItem = parentItem.child(row) if childItem return self.createIndex(row, column, childItem) else return QModelIndex() def insertColumns(self, position, columns, parent=QModelIndex()) self.beginInsertColumns(parent, position, position + columns - 1) success = self.rootItem.insertColumns(position, columns) self.endInsertColumns() return success def insertRows(self, position, rows, parent=QModelIndex()) parentItem = self.getItem(parent) self.beginInsertRows(parent, position, position + rows - 1) success = parentItem.insertChildren(position, rows, self.rootItem.columnCount()) self.endInsertRows() return success def parent(self, index) if not index.isValid() return QModelIndex() childItem = self.getItem(index) parentItem = childItem.parent() if parentItem == self.rootItem return QModelIndex() return self.createIndex(parentItem.childNumber(), 0, parentItem) def removeColumns(self, position, columns, parent=QModelIndex()) self.beginRemoveColumns(parent, position, position + columns - 1) success = self.rootItem.removeColumns(position, columns) self.endRemoveColumns() if self.rootItem.columnCount() == 0 self.removeRows(0, self.rowCount()) return success def removeRows(self, position, rows, parent=QModelIndex()) parentItem = self.getItem(parent) self.beginRemoveRows(parent, position, position + rows - 1) success = parentItem.removeChildren(position, rows) self.endRemoveRows() return success def rowCount(self, parent=QModelIndex()) parentItem = self.getItem(parent) return parentItem.childCount() def setData(self, index, value, role=Qt.EditRole) if role != Qt.EditRole return False item = self.getItem(index) result = item.setData(index.column(), value) if result self.dataChanged.emit(index, index) return result def setHeaderData(self, section, orientation, value, role=Qt.EditRole) if role != Qt.EditRole or orientation != Qt.Horizontal return False result = self.rootItem.setData(section, value) if result self.headerDataChanged.emit(orientation, section, section) return result """ TreeModelセットアップ @param lineData 設定ファイル行 """ def setupModelData(self, lineData) # " /"が見つかったら親をpop if lineData[0 2] == " /" self.parents.pop() # " "が見つかったら親ノード作成 elif lineData[0 1] == " " # ' ',' 'を削除 lineData = lineData[1 -1] columnData = lineData.split(" ", 1) self.insertChild(columnData) # 追加した子を親として追加 self.insertParent() else #最初のブランクで2列に分解 columnData = lineData.split(" ", 1) # 親にノード登録 self.insertChild(columnData) """ TreeModelに子ノードを登録する @param columnData 列データ(配列) """ def insertChild(self, columnData) parentItem = self.parents[-1] # 親ノードに子供の領域を作成する parentItem.insertChildren(parentItem.childCount(), 1, self.rootItem.columnCount()) # 子供の領域にデータを設定 for column in range(len(columnData)) parentItem.child(parentItem.childCount() -1).setData(column, columnData[column]) """ TreeModelに親ノード登録 """ def insertParent(self) parents = self.parents # 最後に登録した親 parent = parents[-1] parents.append( parent.child( parent.childCount() - 1) ) """ httpd.conf GUIクラス """ class HttpdConfMain(Ui_MainWindow, QMainWindow) # 計算機のクラス(上のGUIクラスを継承) """ コンストラクタ """ def __init__(self) super(QWidget, self ).__init__() self.setupUi(self) # GUIを設定(これがないとボタンなどが配置されない) # メニューバー設定 #-- アクション rfAction = QAction("開く( o)", self) # 設定ファイル読み込み exitAction = QAction("終了( x)", self) #-- ファイルメニュー self.fileMenu = self.menubar.addMenu("ファイル( F)") self.fileMenu.addAction(rfAction) rmenu = self.fileMenu.addMenu("最近開いたファイル( r)") self.fileMenu.addAction(exitAction) #-- 最近開いたファイル self.hfile = HistoryFile("hist.dat", 5) for f in self.hfile.fileArray rcAction = QAction(f, self) rcAction.triggered.connect(self.readMenuFile) rmenu.addAction(rcAction) # TreeModel作成 headers = ("ディレクティブ", "属性") self.treeModel = TreeModel(headers) # TreeViewにモデルをセット self.treeView.setModel(self.treeModel) # 1列目の幅を設定 self.treeView.setColumnWidth(0, 200) # ポップアップメニュー作成用設定 self.treeView.setContextMenuPolicy(Qt.CustomContextMenu) # ヘッダをセンタリング self.treeView.header().setDefaultAlignment(Qt.AlignHCenter) # ディレクティブ説明ファイル読み込み self.dirDescMap = self.readDirDesc() # シグナル・スロット #-- ファイルメニュー選択でファイル選択ダイアログ表示 rfAction.triggered.connect(self.selectFile) #-- 終了選択でアプリケーション終了 exitAction.triggered.connect(self.exitWin) #-- 右クリックによるポップアップメニュー起動シグナル用スロット self.treeView.customContextMenuRequested.connect(self.showPopUpMenu) """ ポップアップメニュー起動 @param pos シグナル発生位置(QPoint) """ @pyqtSlot(QPoint) def showPopUpMenu(self, pos) # 選択したディレクティブ selectDetective = self.treeView.indexAt(pos).internalPointer().data(0) # スクロールエリア内だとposは、エリア内の相対位置になるためグローバルポジションに変換する。 globalPos = self.treeView.mapToGlobal(pos); myMenu = QMenu(self) action = myMenu.addAction("説明") action.setData(selectDetective) # 選択が終了するまで待つ? selectedItem = myMenu.exec(globalPos) # 選択されていたら説明ダイアログを起動する if selectedItem dialog = DirDescDialog() if not selectedItem.data() in self.dirDescMap dialog.textEdit.setText("設定なし") else dialog.textEdit.setText(self.dirDescMap[selectedItem.data()]) # ダイアログの応答結果 result = dialog.exec() #print("result %d" % result) """ ファイルダイアログを表示してファイルを選択する。 選択したファイルを読み込む """ @pyqtSlot() def selectFile(self) fd = QFileDialog(self) self.fileName = fd.getOpenFileName() if self.fileName == '' return # ファイル履歴にファイル名を保管 self.hfile.insert(self.fileName) self.readConf() """ メニューの「最近開いたファイル」で選択したファイルを読み込む """ @pyqtSlot() def readMenuFile(self) # 送り元のアクションを取得する rcAction = self.sender() print("rcAction text %s" % rcAction.text()) self.fileName = rcAction.text() if self.fileName == '' return self.readConf() """ httpd.confを読み込む """ def readConf(self) # データクリア self.treeModel.clearData() # TreeViewリフレッシュのため self.treeModel.modelReset.emit() # 読み込み f = open(self.fileName, "r") while True line = f.readline() # EOFに到達したら終了 if not line break; # 改行を削除 line = line[ -1] line = line.strip().rstrip() # コメントスキップ if line[0 1] == "#" continue # 空行スキップ if len(line) == 0 continue # 設定行をモデルへ挿入 self.treeModel.setupModelData(line) f.close() """ ウィンドウを終了する """ def exitWin(self) # ファイル名を保管する self.hfile.close() app.quit() win.close() # 不要なはずだが?? """ ディレクティブ設定ファイル読み込み """ def readDirDesc(self) f = open("../conf/dirDesc.conf", "r", encoding="utf8") fullText = "" while True # ファイルから1行読み込み line = f.readline() # コメントは飛ばす if line[0 1] == "#" continue # EOFに到達したら終了 if not line break; fullText = fullText + line f.close() return json.loads(fullText) if __name__ == "__main__" app = QApplication(sys.argv) win = HttpdConfMain() win.show() sys.exit(app.exec_()) 【httpdconfmainui.py UIクラス】 QtDesignerを使って作成 # -*- coding utf-8 -*- # Form implementation generated from reading ui file 'httpdconfmain.ui' # # Created Tue Jun 11 23 56 11 2013 # by PyQt4 UI code generator 4.10.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError def _fromUtf8(s) return s try _encoding = QtGui.QApplication.UnicodeUTF8 def _translate(context, text, disambig) return QtGui.QApplication.translate(context, text, disambig, _encoding) except AttributeError def _translate(context, text, disambig) return QtGui.QApplication.translate(context, text, disambig) class Ui_MainWindow(object) def setupUi(self, MainWindow) MainWindow.setObjectName(_fromUtf8("MainWindow")) MainWindow.resize(660, 582) self.centralwidget = QtGui.QWidget(MainWindow) self.centralwidget.setObjectName(_fromUtf8("centralwidget")) self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget) self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) self.treeView = QtGui.QTreeView(self.centralwidget) self.treeView.setObjectName(_fromUtf8("treeView")) self.verticalLayout.addWidget(self.treeView) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtGui.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 660, 21)) self.menubar.setObjectName(_fromUtf8("menubar")) MainWindow.setMenuBar(self.menubar) self.statusbar = QtGui.QStatusBar(MainWindow) self.statusbar.setObjectName(_fromUtf8("statusbar")) MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow) MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None)) 【dirDescDialogui.py ダイアログUI】 # -*- coding utf-8 -*- # Form implementation generated from reading ui file 'dirDescDialog.ui' # # Created Sat Jun 1 10 11 59 2013 # by PyQt4 UI code generator 4.10.1 # # WARNING! All changes made in this file will be lost! """ ディレクティブ説明ダイアログ """ from PyQt4 import QtCore, QtGui def _fromUtf8(s) return s try _encoding = QtGui.QApplication.UnicodeUTF8 def _translate(context, text, disambig) return QtGui.QApplication.translate(context, text, disambig, _encoding) except AttributeError def _translate(context, text, disambig) return QtGui.QApplication.translate(context, text, disambig) class Ui_dirDesc(object) def setupUi(self, dirDesc) dirDesc.setObjectName(_fromUtf8("dirDesc")) dirDesc.resize(331, 178) dirDesc.setModal(True) self.verticalLayout = QtGui.QVBoxLayout(dirDesc) self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) self.textEdit = QtGui.QTextEdit(dirDesc) self.textEdit.setObjectName(_fromUtf8("textEdit")) self.verticalLayout.addWidget(self.textEdit) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) self.closeButton = QtGui.QPushButton(dirDesc) self.closeButton.setObjectName(_fromUtf8("close")) self.horizontalLayout.addWidget(self.closeButton) self.verticalLayout.addLayout(self.horizontalLayout) self.retranslateUi(dirDesc) QtCore.QMetaObject.connectSlotsByName(dirDesc) def retranslateUi(self, dirDesc) dirDesc.setWindowTitle(_translate("dirDesc", "Dialog", None)) self.closeButton.setText(_translate("dirDesc", "閉じる", None)) 【HistoryFile.py 履歴ファイルユーティリティ】 # -*- coding utf-8 -*- """ Created on 2013/06/14 @author """ """ 履歴ファイルユーティリティ 履歴ファイルを作成し、履歴を追加する。 履歴は保管個数を持ち、古い履歴から削除する。 """ from os.path import isfile class HistoryFile """ コンストラクタ @param fileName 履歴ファイル名 @param cnt 保管ファイル個数 """ def __init__(self, fileName, cnt) self.fileName = fileName # 履歴ファイル名 self.cnt = cnt # 保管ファイル個数 self.fileArray = [] # ファイル履歴 # 履歴ファイル有無を確認 if isfile(self.fileName) # ファイル履歴に保管 file = open(self.fileName, "r", encoding="utf-8") while True # ファイルから1行読み込み line = file.readline() # EOFに到達したら終了 if not line break; # 改行を削除 line = line[ -1] # ファイル名を保管 self.fileArray.append(line) file.close() """ ファイル履歴にファイル名を追加する @param fileName 追加するファイル名 """ def insert(self, fileName) # ファイル履歴から指定したファイル名を除く self.fileArray = [ f for f in self.fileArray if f != fileName] # 指定個数なら先頭を削除 if len(self.fileArray) == self.cnt self.fileArray = self.fileArray[1 ] # 指定したファイル名を追加 self.fileArray.append(fileName) """ ファイル履歴を取得する """ def getFileArray(self) return self.fileArray """ 履歴ファイルにファイル履歴を書き込んで閉じる """ def close(self) # 履歴ファイルを作成する file = open(self.fileName, "w", encoding="utf-8") for fname in self.fileArray print(fname, file=file) file.close() if __name__ == "__main__" hist = HistoryFile("hist.dat", 5) hist.insert("a1") hist.insert("a2") hist.insert("a3") hist.insert("a4") hist.insert("a5") hist.insert("a6") hist.close() 【dirDesc.conf ディレクティブ説明ファイル】 # # Apache 2.4.7 ディレクティブ説明 # { "ServerRoot" "ServerRoot directory-path\n\nインストールしたサーバのベースディレクトリ", "Listen" "Listen [IP-address ]portnumber [protocol]\n\nサーバが listen するIP アドレスと ポート番号", "LoadModule" "LoadModule module filename\n\nオブジェクトファイルやライブラリをリンクし、使用モジュー ルの リストに追加する", "IfModule" " IfModule [!]module-file|module-identifier ... /IfModule \n\nモジュールの存在 するかしないかに応じて処理される ディレクティブを囲む。\n\nmodule-fileはServerRootからの相対ディレクトリで示す。module -identifierは、モジュールソースファイルのmod_を除いた部分に_moduleを追加したもの。\n【例】mod_auth_basic.c == auth_ba sic_module" }
https://w.atwiki.jp/becomefumo/pages/57.html
Scuffed BecomeFumoのアイテムを解説するページです。 ロケットランチャー ロケットランチャー。BecomeFumoのものと同じようにロケットジャンプに使える。insert logo hereの店においてある。 重力銃 ハーフライフ2に登場する重力銃。ビームのようなもので他のプレイヤーを捕まえて遊べる。どちらかといえばGarry's MOD(やHalf-life 2 Beta)のPhysGunに近い挙動。insert logo hereの店においてある。 ポータルガン Portalシリーズに登場するポータルガン。クリックするたびに、指している方向の壁に青とオレンジのポータルを設置できる。触れることでそれぞれの間を行き来することができる。insert logo hereの店においてある。 ちくわ? 巨大なカルパスに穴が空いたような見た目の棒。なんなのかわからない。クリックすると振り回す。insert logo hereの店においてある。 ラジオガン ラジオが組み込まれた巨大な銃。クリック押しっぱなしで連射できる。反動が強烈で、連射しているとふもがどんどん後ずさりする。insert logo hereの店においてある。 ピザ ピザ。クリックで食べる。ピザ屋さんにおいてある。 電子レンジ 電子レンジ。クリックで設置。一定時間後に爆発する。巨大な電子レンジが置かれているところの下の層にある。 ルンバ ルンバ。クリックで設置。上に乗ることで操作可能。ピザ屋さんの中と、レーストラックのそばの机の上に置いてある。 ボート Minecraftのものによく似たボート。水辺でクリックして設置。上に乗ることで操作可能。