大学生の雑記

色々なものを書いています 旧:旧帝大生の雑記ブログ

Processingでセルオートマトン①: ライフゲームのパターンを総当たりする

次の記事
coronene.hatenablog.com


Conwayのライフゲームとはセルオートマトンの一種です。ゲームは、2次元のセルのグリッドから成り立ち、それぞれのセルは生きているか死んでいるかの2つの状態のいずれかにあります。各セルの状態は、その周りの8つのセルの状態によって決まり、一連のルールに従っています。

ライフゲームのルールは次のとおりです。

周りに生きているセルが2つ未満の場合、そのセルは過疎により死滅します。
周りに生きているセルが2つか3つの場合、そのセルは次の世代に生き続けます。
周りに生きているセルが3つ以上の場合、そのセルは過密により死滅します。
死んでいるセルが正確に3つの生きているセルに囲まれている場合、そのセルは再生によって生き返ります。



ところでこれよりも簡単な一次元セルオートマトンというものがあるのですが、それの規則は二進数コードで記述できます。これを拡張してライフゲームの規則も二進数コードで記述できるようにしてみました。

周囲の生きているセルが何個あるかで次の生死を決定するので、周囲の生きているセルの個数ごとに生死を対応付けしてそれを順番に並べると二進数になります。それを利用して書いたのが以下のコードです。一次元版とそう変わらないものになりました。

int[] rule = new int[9];
int[] rule2 = new int[9];

int len;
int col, row;
int[][] c;
boolean pause = false;
int n = 0;


void setup(){
    frameRate(6);
    size(600, 600);
    
    len = 6; 
    col = width/len;
    row = height/len;
    
    c = new int[col][row];

    //最初の配置
    for(int i = 0; i < col-1; i ++){
    for(int j = 0; j < row-1; j ++){
        //c[i][j] = 0; //生命無し
        float r = random(1);
                    if(r <= 0.3){ 
                    c[i][j] = 1;
                    
        //c[i][j] = floor(random(2)); //ランダム
                    
                    }
    }
    
     int ruleNumber = 32;//規則の指定(0~512) Born 
     int ruleNumber2 = 96; //規則の指定(0~512)Survives
    
     
   
    
    //数字から規則へ変換
    String b = binary(ruleNumber); //二進数に変換
    String b2 = binary(ruleNumber2);
    
    String[] r = b.split("", b.length()); //1文字ずつに分ける
    String[] r2 = b2.split("", b2.length());
    
    
    for(int l = 0; l <= 8; l ++){
        rule[l] = int(r[l+23]); //最後の8文字だけ取り出す
        
        rule2[l] = int(r2[l+23]);
    }
  
    
}
}

void draw(){
    background(255);
    
    //セルの描画
    for(int i = 0; i < col; i ++){
    for(int j = 0; j < row; j ++){
        noStroke();
        fill((1-c[i][j] % col)*255, 255, 200);
        rect(i*len, j*len, len, len);
    }
    }
    
    
    
    
   

  
   
        int[][] next = new int[col][row];
        for(int i = 1; i <= col+1; i ++){
        for(int j = 1; j <= row+1; j ++){
            //周囲8マスの生きているセルの数を計算
            
            int neighbors =    c[(i-1) % col][(j-1) % col] + c[(i) % col][(j-1) % col] + c[(i+1) % col][(j-1) % col]
                             + c[(i-1) % col][(j) % col]                               + c[(i+1) % col][(j) % col]
                             + c[(i-1) % col][(j+1) % col] + c[(i) % col][(j+1) % col] + c[(i+1) % col][(j+1) % col];
            
            
            
            else
              for(int k = 0; k <= 8; k ++){
                if(neighbors == k){
                  if(c[i % col][j % col] == 0){
                    next[i % col][j % col] = rule[k];
                  }
                  if(c[i % col][j % col] == 1){
                    next[i % col][j % col] = rule2[k];
                  }
                }
              }
                
        }
        }
            
      

        
        
        c = next; //次のステップの配置を適用
    }
    

| |<

nuleNumber = 32でruleNumber2 = 96のときが通常のライフゲームとなっています。

【python】抽象化学反応系でヨウ素時計反応をシミュレーションする

  • ARMSについて
  • ヨウ素時計反応について
  • コード
  • 結果
  • 【参考文献】


ARMS(Abstract Rewriting System on Multisets)[1]というものを用いてヨウ素時計反応(説明は後述)をシミュレートしてみます。

続きを読む

地理Bまとめ⑫ - オーストラリアの地形、気候、資源、農牧業

地形

大部分が安定陸塊で東側だけ古期造山帯なので地震も火山もほとんどない。

環太平洋造山帯と誤認しないよう注意

この古期造山帯の延長線上にあるタスマニア島も古期造山帯

東海岸沿いにはグレートバリアリーフサンゴ礁)がある。

気候

内陸部がBWでその周りをBSに囲われている。

北部はほとんどAwでケアンズあたりがわずかにAm、そのケアンズ熱帯雨林がある(世界最古の熱帯雨林世界遺産)。主な都市はダーウィンケアンズ

東西の南端はCs

農牧業

北のほうでは牧牛で南のほうでは牧羊が盛ん。

南東部で小麦の栽培

Cs気候では果樹栽培をしている。

また北東沿岸部でサトウキビ栽培もおこなわれている。

資源

オーストラリアの資源分布

古期造山帯のある東部に石炭(■)、安定陸塊である西部に鉄鉱石(▲)が分布している。
 
西部のビルバラ地区から鉄鉱石を日・中へ輸出する。
これと関連付けて、石炭・鉄鉱石・液化天然ガスは日本の輸入先においてオーストラリアが1位である。

北部の熱帯ではボーキサイト(△)が多く採れる。なおオーストラリアはアルミニウム生産量世界6位(2020)である。

他にウラン()、金()(2位)、石油や天然ガスなど

ウラン産出国だが原発はない。


資源国だが工業国ではない。
→エネルギー輸入量が少なく輸出量が多い。

石炭産出国なので石炭使用量が多く、その結果工業が発展していない割には二酸化硫黄排出量がとても多い(3位、2011)。

地理Bまとめ⑨ - 世界の鉱山資源の分布と特徴1 エネルギー編

石油

最も使用量の多い化石燃料

新期造山帯周辺に分布

主な産地は中東、アフリカの北部とギニア湾岸、アメリカ、ブラジル + イギリス、ノルウェー、ロシア

新期造山帯周辺でない場所で有名なところは北海油田(イギリスの東側に広がる海)とロシア。
北海油田ではほとんどイギリスとノルウェーだけが採っている。
ロシアはパイプラインを通してヨーロッパに原油を輸出している。

天然ガス田もそばにあることが多い。つまり石油と天然ガスの生産地域は似たものとなる。

石炭

窒素酸化物や硫黄酸化物が石油よりも多く排出されるので環境負荷が高い。

古期造山帯周辺に分布

古期造山帯は散在しているためそれぞれ覚えるしかない。

主な産地は中国、アメリカ東部のアパラチア山脈、オーストラリアのグレードディバイディング山脈、イギリスのペニン山脈、南アフリカのドラケンスバーグ山脈、ロシア、など

例外的に、ベトナムや特にインドネシアでは新期造山帯なのに石炭が多く採れる。
インドネシアの石炭産出量は世界3位。


中国、インド、南アフリカ共和国ポーランド、オーストラリア(頭文字とってCISPA)の五つの国は石炭の消費、供給割合が高い。

このうちオーストラリアは工業が発達してるとかではなく単に石炭産出国だから使用率が高いだけ。むしろ工業はあまり発展していない。

他の4カ国は石炭産出国であるとともに工業国でもあるため。

天然ガス

化石燃料の中ではクリーンな燃料という位置付け。しかし設備が高価になりがちなので先進国でしか使用されない。

冷却して液化天然ガスとして輸出する。

石油のところにも書いたが油田のそばに天然ガス田があることが多い。まとめて覚えておこう。

主な産地は石油産地と同じような場所+オランダ、イタリア ロシアも産出量がかなり多い。

ウラン

CO2などを一切排出しないのでクリーンなエネルギー(放射性廃棄物除く)。

主な産地はカザフスタン、カナダ、オーストラリアなど

オーストラリアには原発はなく輸出だけしている。



鉱石編はそのうち書きます。

【高校化学】平衡定数を使ったルシャトリエの原理の考え方

  • ルシャトリエの原理とは
    • ➀濃度を変化させる場合
    • ➁圧力を変化させる場合
    • ➂温度を変化させる場合
    • 希ガスを加えた場合
  • おまけ 平衡定数で固体の存在を無視する理由
続きを読む