Language agnostic 高尔夫代码:康威';人生的游戏

Language agnostic 高尔夫代码:康威';人生的游戏,language-agnostic,code-golf,rosetta-stone,conways-game-of-life,Language Agnostic,Code Golf,Rosetta Stone,Conways Game Of Life,挑战:编写实现约翰·H·康韦生命元胞自动机游戏的最短程序。[] 编辑:经过大约一周的竞争,我选择了一位胜利者:pdehaan,用perl以一个字符的优势击败Matlab解决方案 对于那些没听说过《生命游戏》的人来说,你可以选择一个正方形网格(理想情况下是无限的)。细胞可以是活的(充满的)或死的(空的)。我们通过应用以下规则来确定下一步时间中哪些细胞是活的: 任何少于两个活邻居的活细胞都会死亡,就好像是由于人口不足造成的一样 任何一个有三个以上邻居的活细胞都会死亡,就好像过度拥挤一样 任何有两个或

挑战:编写实现约翰·H·康韦生命元胞自动机游戏的最短程序。[]

编辑:经过大约一周的竞争,我选择了一位胜利者:pdehaan,用perl以一个字符的优势击败Matlab解决方案

对于那些没听说过《生命游戏》的人来说,你可以选择一个正方形网格(理想情况下是无限的)。细胞可以是活的(充满的)或死的(空的)。我们通过应用以下规则来确定下一步时间中哪些细胞是活的:

  • 任何少于两个活邻居的活细胞都会死亡,就好像是由于人口不足造成的一样
  • 任何一个有三个以上邻居的活细胞都会死亡,就好像过度拥挤一样
  • 任何有两个或三个活邻居的活细胞都会延续到下一代
  • 任何有三个活邻居的死细胞都会变成活细胞,就像通过繁殖一样
  • 您的程序将读取指定为命令行参数的40x80字符ASCII文本文件,以及要执行的迭代次数(N)。最后,它会将N次迭代后的系统状态输出到ASCII文件out.txt

    以下是使用相关文件运行的示例:

    in.txt:

    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ..................................XX............................................
    ..................................X.............................................
    .......................................X........................................
    ................................XXXXXX.X........................................
    ................................X...............................................
    .................................XX.XX...XX.....................................
    ..................................X.X....X.X....................................
    ..................................X.X......X....................................
    ...................................X.......XX...................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    
    迭代100次:

    Q:\>life in.txt 100
    
    结果输出(out.txt)

    规则:

    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ..................................XX............................................
    ..................................X.............................................
    .......................................X........................................
    ................................XXXXXX.X........................................
    ................................X...............................................
    .................................XX.XX...XX.....................................
    ..................................X.X....X.X....................................
    ..................................X.X......X....................................
    ...................................X.......XX...................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    ................................................................................
    
    • 您需要使用文件I/O来读取/写入文件
    • 您需要接受输入文件和迭代次数作为参数
    • 您需要以指定格式生成out.txt(如果存在则覆盖)
    • 您不需要处理电路板的边缘(环绕、无限网格等)
    • 编辑:您需要在输出文件中添加换行符
    获胜者将由角色数决定

    祝你好运

    Python-282字符 不如让球滚起来

    import sys
    _,I,N=sys.argv;R=range(3e3);B=open(I).read();B=set(k for k in R if'A'<B[k])
    for k in R*int(N):
     if k<1:b,B=B,set()
     c=sum(len(set((k+o,k-o))&b)for o in(1,80,81,82))
     if(c==3)+(c==2)*(k in b):B.add(k)
    open('out.txt','w').write(''.join('.X\n'[(k in B)-(k%81<1)]for k in R))
    
    导入系统 _,I,N=sys.argv;R=范围(3e3);B=打开(I).读取();B=设置(如果'A'Scala-467 364 339个字符,则k代表R中的k

    object G{def main(a:Array[String]){val l=io.Source.fromFile(new java.io.File(a(0)))getLines("\n")map(_.toSeq)toSeq
    val f=new java.io.FileWriter("out.txt")
    f.write((1 to a(1).toInt).foldLeft(l){(t,_)=>(for(y<-0 to 39)yield(for(x<-0 to 79)yield{if(x%79==0|y%39==0)'.'else{val m=t(y-1)
    val p=t(y+1);val s=Seq(m(x-1),m(x),m(x+1),t(y)(x-1),t(y)(x+1),p(x-1),p(x),p(x+1)).count('X'==_)
    if(s==3|(s==2&t(y)(x)=='X'))'X'else'.'}})toSeq)toSeq}map(_.mkString)mkString("\n"))
    f.close}}
    
    f,n=$*;b=IO.read f
    n.to_i.times{s=b.dup
    s.size.times{|i|t=([82,1,-80].map{|o|b[i-o,3]||''}*'').count 'X'
    s[i]=t==3||b[i]-t==?T??X:?.if s[i]>13};b=s}
    File.new('out.txt','w')<<b
    
    cgc<-function(i="in.txt",x=100){
        require(simecol)
        z<-file("in.txt", "rb")
        y<-matrix(data=NA,nrow=40,ncol=80)
        for(i in seq(40)){
            for(j in seq(80)){
                y[i,j]<-ifelse(readChar(z,1) == "X",1,0)
            }
            readChar(z,3)
        }
        close(z)
        init(conway) <- y
        times(conway)<-1:x
        o<-as.data.frame(out(sim(conway))[[100]])
        write.table(o, "out.txt", sep="", row.names=FALSE, col.names=FALSE)
    }
    cgc()
    
    class L{public static void main(final String[]a)throws Exception{new java.io.RandomAccessFile("out.txt","rw"){{int e=88,p[]={-1,1,-80,80,-81,81,-82,82},s=3240,l=0,i=new Byte(a[1])*s+s,c;char[]b=new char[s];for(new java.io.FileReader(a[0]).read(b);i>0;seek(l=++l%s),i--){c=b[l];for(int n:p)c+=l+n>=0&l+n<s?b[l+n]/e:0;write(c>13?(c==49|(c|1)==91?e:46):10);}}};}}
    
    object G{def main(a:Array[String]){val l=io.Source.fromFile(new java.io.File(a(0)))getLines(“\n”)映射(u.toSeq)toSeq
    val f=new java.io.FileWriter(“out.txt”)
    f、 write((1 to a(1).toInt.foldLeft(l){(t,))=>(for(yif(c='\n'))'\n'else{val s=Seq(-83,-82,-81,-1,1,81,82,83).map()+n).filter(k=>k>=0&km.zipWithIndex.map{case(c,n)=>
    val s=Seq(-83,-82,-81,-1,1,81,82,83)计数(k=>k+n>=0&k+nRuby 1.9-189 178 159 155 153个字符
    
    f,n=$*
    c=IO.read f
    n、 to|i.乘以{i=0;c=c.chars.map{v|i+=1
    vF#,496
    我可以减少很多,但我喜欢这个,因为它仍然在大致范围内,可读性很好

    open System.IO
    let mutable a:_[,]=null
    let N y x=
     [-1,-1;-1,0;-1,1;0,-1;0,1;1,-1;1,0;1,1]
     |>Seq.sumBy(fun(i,j)->try if a.[y+i,x+j]='X' then 1 else 0 with _->0)
    [<EntryPoint>]
    let M(r)=
     let b=File.ReadAllLines(r.[0])
     a<-Array2D.init 40 80(fun y x->b.[y].[x])
     for i=1 to int r.[1] do 
      a<-Array2D.init 40 80(fun y x->
       match N y x with|3->'X'|2 when a.[y,x]='X'->'X'|_->'.')
     File.WriteAllLines("out.txt",Array.init 40(fun y->
      System.String(Array.init 80(fun x->a.[y,x]))))
     0
    
    opensystem.IO
    设可变a:[,]=null
    让nyx=
    [-1,-1;-1,0;-1,1;0,-1;0,1;1,-1;1,0;1,1]
    |>Seq.sumBy(fun(i,j)->如果a.[y+i,x+j]='x',那么用->0尝试其他1个0)
    []
    设M(r)=
    设b=File.ReadAllLines(r[0])
    ab[y][x])
    对于i=1到int r[1]do
    A.
    当a[y,x]='x'->'x'| | | | 3->'x'| 2时,将nyx与| 3->'x'| 2匹配。)
    File.writeAllines(“out.txt”,Array.init 40(fun y->
    字符串(Array.init 80(funx->a[y,x]))
    0
    
    编辑

    428 根据要求,我的下一个尝试是:

    open System
    let mutable a,k=null,Array2D.init 40 80
    [<EntryPoint>]
    let M r=
     a<-k(fun y x->IO.File.ReadAllLines(r.[0]).[y].[x])
     for i=1 to int r.[1] do a<-k(fun y x->match Seq.sumBy(fun(i,j)->try if a.[y+i,x+j]='X'then 1 else 0 with _->0)[-1,-1;-1,0;-1,1;0,-1;0,1;1,-1;1,0;1,1]with|3->'X'|2 when a.[y,x]='X'->'X'|_->'.')
     IO.File.WriteAllLines("out.txt",Array.init 40(fun y->String(Array.init 80(fun x->a.[y,x]))))
     0
    
    开放系统
    设可变a,k=null,Array2D.init 40 80
    []
    让M r=
    aIO.File.ReadAllLines(r[0])[y][x])
    对于i=1到int r[1],在a[y,x]='x'>2的情况下,如果a[y+i,x+j]='x',[1,-1;-1,0;-1,1;0,-1;0;0,1;1,-1;1,0;1,1]与.[y,x]='x'>'x'>2进行匹配
    IO.File.writeAllines(“out.txt”,Array.init 40(fun y->String(Array.init 80(fun x->a[y,x]))
    0
    
    使用一些基本的高尔夫游戏可以减少14%。我忍不住觉得使用2D数组/字符串数组而不是1D数组会让我有所损失,但现在不想进行这种转换。请注意,我是如何优雅地读取文件3200次来初始化我的数组的:)

    Javascript/Node.js-233 236个字符
    a=process.argv
    f=要求('fs')
    m=46
    t=f.readFileSync(a[2])
    而(a[3]--)t=[].map.call(t,函数(c,i){for(n=g=0;e=[-82,-81,-80,-1,1,80,81,82][g++];)t[i+e]>m&&n++
    返回cm&&n>1&&n Mathematica-179 163 154 151个字符
    
    
    动画:

    您还可以获得随时间变化的平均人口图:

    一个很好的模式生成滑翔机从

    使用Ruby 1.8:178175个字符的AFAIK

    object G{def main(a:Array[String]){val l=io.Source.fromFile(new java.io.File(a(0)))getLines("\n")map(_.toSeq)toSeq
    val f=new java.io.FileWriter("out.txt")
    f.write((1 to a(1).toInt).foldLeft(l){(t,_)=>(for(y<-0 to 39)yield(for(x<-0 to 79)yield{if(x%79==0|y%39==0)'.'else{val m=t(y-1)
    val p=t(y+1);val s=Seq(m(x-1),m(x),m(x+1),t(y)(x-1),t(y)(x+1),p(x-1),p(x),p(x+1)).count('X'==_)
    if(s==3|(s==2&t(y)(x)=='X'))'X'else'.'}})toSeq)toSeq}map(_.mkString)mkString("\n"))
    f.close}}
    
    f,n=$*;b=IO.read f
    n.to_i.times{s=b.dup
    s.size.times{|i|t=([82,1,-80].map{|o|b[i-o,3]||''}*'').count 'X'
    s[i]=t==3||b[i]-t==?T??X:?.if s[i]>13};b=s}
    File.new('out.txt','w')<<b
    
    cgc<-function(i="in.txt",x=100){
        require(simecol)
        z<-file("in.txt", "rb")
        y<-matrix(data=NA,nrow=40,ncol=80)
        for(i in seq(40)){
            for(j in seq(80)){
                y[i,j]<-ifelse(readChar(z,1) == "X",1,0)
            }
            readChar(z,3)
        }
        close(z)
        init(conway) <- y
        times(conway)<-1:x
        o<-as.data.frame(out(sim(conway))[[100]])
        write.table(o, "out.txt", sep="", row.names=FALSE, col.names=FALSE)
    }
    cgc()
    
    class L{public static void main(final String[]a)throws Exception{new java.io.RandomAccessFile("out.txt","rw"){{int e=88,p[]={-1,1,-80,80,-81,81,-82,82},s=3240,l=0,i=new Byte(a[1])*s+s,c;char[]b=new char[s];for(new java.io.FileReader(a[0]).read(b);i>0;seek(l=++l%s),i--){c=b[l];for(int n:p)c+=l+n>=0&l+n<s?b[l+n]/e:0;write(c>13?(c==49|(c|1)==91?e:46):10);}}};}}
    
    f,n=$*;b=IO.read f
    n、 to_i.乘以{s=b.dup
    s、 size.times{i | t=([82,1,-80])。map{o | b[i-o,3]| |''''}*''。计算'X'
    s[i]=t==3 | | b[i]-t==t??X:?。如果s[i]>13};b=s}
    File.new('out.txt','w')Java,556 532 517 496 472 433 428 420 418 381个字符
    
    • 更新1:将第一个
      StringBuffer
      替换为
      appendeable
      ,将第二个替换为
      char[]
      。保存了24个字符

    • 更新2:找到了将文件读入
      char[]
      的较短方法。保存了15个字符

    • 更新3:将一个
      if/else
      替换为
      ?:
      并合并了
      char[]
      int
      声明。保存了21个字符

    • 更新4:
      (int)f.length()
      c.length
      替换为
      s
      。保存了24个字符

    • 更新5:根据Molehill的提示进行了改进。主要的改进是硬编码字符长度,这样我就可以摆脱
      文件
      。节省了39个字符

    • 更新6:小重构。保存了6个字符

    • 更新7:
      Integer#valueOf()
      替换为
      new Integer()
      ,并对循环进行重构。保存了8个字符

    • 更新8:改进了邻居计算。节省了2个字符

    • 更新9:优化了文件读取,因为文件长度已硬编码。保存了37个字符


    import java.io.*;类L{public static void main(String[]a)抛出异常{int i=new Integer(a[1]),j,L,s=3240;int[]p={-82
    
     import java.io.*;class L{public static void main(String[]a)throws Exception{int i=new Integer(a[1]),j,l,s=3240;int[]p={-82,-81,-80,-1,1,80,81,82};char[]o,c=new char[s];for(new FileReader(a[0]).read(c);i-->0;c=o)for(o=new char[j=s];j-->0;){l=0;for(int n:p)l+=n+j>-1&n+j<s?c[n+j]/88:0;o[j]=c[j]>13?l==3|l+c[j]==90?88:'.':10;}Writer w=new FileWriter("out.txt");w.write(c);w.close();}}
    
    import java.io.*;
    class L{
     public static void main(String[]a)throws Exception{
      int i=new Integer(a[1]),j,l,s=3240;
      int[]p={-82,-81,-80,-1,1,80,81,82};
      char[]o,c=new char[s];
      for(new FileReader(a[0]).read(c);i-->0;c=o)for(o=new char[j=s];j-->0;){
       l=0;for(int n:p)l+=n+j>-1&n+j<s?c[n+j]/88:0;
       o[j]=c[j]>10?l==3|l+c[j]==90?88:'.':10;
      }
      Writer w=new FileWriter("out.txt");w.write(c);w.close();
     }
    }
    
    class M{public static void main(String[]a)throws Exception{int t=3240,j=t,i=new Integer(a[1])*t+t;char[]b=new char[i+t],p={1,80,81,82};for(new java.io.FileReader(a[0]).read(b,t,t);j<i;){char c=b[j],l=0;for(int n:p)l+=b[j+n]/88+b[j-n]/88;b[j+++t]=c>10?(l==3|l+c==90?88:'.'):c;}new java.io.FileWriter("out.txt").append(new String(b,j,t)).close();}}
    
    class M{
     public static void main(String[]a)throws Exception{
      int t=3240,j=t,i=new Integer(a[1])*t+t;
      char[]b=new char[i+t],p={1,80,81,82};
      for(new java.io.FileReader(a[0]).read(b,t,t);j<i;){
        char c=b[j],l=0;
        for(int n:p)l+=b[j+n]/88+b[j-n]/88;
        b[j+++t]=c>10?(l==3|l+c==90?88:'.'):c;
      }
      new java.io.FileWriter("out.txt").append(new String(b,j,t)).close();
     }
    }
    
    function l(f,N),
      b=char(importdata(f))>46;
      for c=1:N,
        b=~fix(filter2(ones(3),b)-b/2-3);
      end;
      dlmwrite('out.txt',char(b*42+46),'')
    
    l('in.txt',100)
    
    function l(f,N),
      b=char(importdata(f))>46;
      for c=1:eval(N),
        b=~fix(filter2(ones(3),b)-b/2-3);
      end;
      dlmwrite('out.txt',char(b*42+46),'')
    
    l in.txt 100
    
    function l(f,N),
      b=char(importdata(f))>46;
      k=ones(3);
      for c=1:N+1,
        a(:,:,:,c)=kron(b,k);
        b=~fix(filter2(k,b)-b/2-3);
      end;
      imwrite(~a,'out.gif')
    
    import System
    main=do f:n:_<-getArgs;s<-readFile f;writeFile"out.txt"$t s$read n
    p '\n'_='\n'
    p 'X'2='X'
    p _ 3='X'
    p _ _='.'
    t r 0=r
    t r n=t[p(r!!m)$sum[1|d<-1:[80..82],s<-[1,-1],-m<=d*s,m+d*s<3240,'X'==r!!(m+d*s)]|m<-[0..3239]]$n-1
    
    3499538
    
    ***
    ..*
    .*
    
    #D Thanks to my daughter Natalie
    #D Try at cell size of 1
    #R 8/1
    #P -29 -29
    .*********************************************************
    *.*******************************************************.*
    **.*****************************************************.**
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ****************************.*.****************************
    ***********************************************************
    ****************************.*.****************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    ***********************************************************
    **.*****************************************************.**
    *.*******************************************************.*
    .*********************************************************
    
    **********
    .
    ................*
    .................**
    ................**.......**********
    
    ........................*...........
    ......................*.*...........
    ............**......**............**
    ...........*...*....**............**
    **........*.....*...**..............
    **........*...*.**....*.*...........
    ..........*.....*.......*...........
    ...........*...*....................
    ............**......................
    
    #include<fstream>
    #define B(i,j)(b[i][j]=='X')
    int main(int i,char**v){for(int n=0;n<atoi(v[2]);++n){std::ifstream f(v[1]);v[1]="out.txt";char b[40][83];for(i=0;i<40;++i)f.getline(b[i],83);std::ofstream g("out.txt");g<<b[0]<<'\n';for(i=1;i<39;++i){g<<'.';for(int j=1;j<79;++j){int k=B(i-1,j)+B(i+1,j)+B(i,j-1)+B(i,j+1)+B(i-1,j-1)+B(i+1,j+1)+B(i+1,j-1)+B(i-1,j+1);(B(i,j)&&(k<2||k>3))?g<<'.':(!B(i,j)&&k==3)?g<<'X':g<<b[i][j];}g<<".\n";}g<<b[0]<<'\n';}}
    
    #include<fstream>
    #define B(x,y)(b[i+x][j+y]=='X')
    int main(int i,char**v){for(int n=0;n<atoi(v[2]);++n){std::ifstream f(v[1]);*v="out.txt";char b[40][83], O[]="...X.....";for(i=0;i<40;++i)f>>b[i];std::ofstream g(*v);g<<b[0]<<'\n';for(i=1;i<39;++i){g<<'.';for(int j=1;j<79;++j){O[2]=b[i][j];g<<O[B(-1,0)+B(1,0)+B(0,-1)+B(0,1)+B(-1,-1)+B(1,1)+B(1,-1)+B(-1,1)];}g<<".\n";}g<<b[0]<<'\n';}}
    
    #include<stdio.h>
    #include<stdlib.h>
    #define A(N)j[-N]/88+j[N]/88
    
    int main(int l,char**a){
      int t=3240,i=atoi(a[2])*t+t;
      char*b=malloc(i+t),*j;
      FILE*f;
      fread(j=b+t,1,t,fopen(a[1],"r"));
      for(;j-b-i;j++[t]=*j>10?l==3|l+*j==90?88:46:10)
          l=A(1)+A(80)+A(81)+A(82);
      fwrite(j,1,t,f=fopen("out.txt","w"));
      fclose(f);
    }
    
    cgc<-function(i="in.txt",x=100){
        require(simecol)
        z<-file("in.txt", "rb")
        y<-matrix(data=NA,nrow=40,ncol=80)
        for(i in seq(40)){
            for(j in seq(80)){
                y[i,j]<-ifelse(readChar(z,1) == "X",1,0)
            }
            readChar(z,3)
        }
        close(z)
        init(conway) <- y
        times(conway)<-1:x
        o<-as.data.frame(out(sim(conway))[[100]])
        write.table(o, "out.txt", sep="", row.names=FALSE, col.names=FALSE)
    }
    cgc()
    
    list(,$n,$l) = $_SERVER["argv"];
    $f = file( $n );
    for($j=0;$j<$l;$j++){   
        foreach($f as $k=>$v){  
            $a[$k]="";      
            for($i=0;$i < strlen( $v );$i++ ){
                $t = 0;
                for($m=-1;$m<2;$m++){
                    for($h=-1;$h<2;$h++){
                        $t+=ord($f[$k + $m][$i + $h]);
                    }
                }
                $t-=ord($v[$i]);          
                $a[$k] .= ( $t == 494 || ($t == 452 && ord($v[$i])==88)) ?  "X" : "." ;
            }
        }
        $f = $a;
    }       
    file_put_contents("out.txt", implode("\n", $a )); 
    
    $i=pop;@c=<>;@c=map{$r=$_;$u='';for(0..79)
    {$K=$_-1;$R=$r-1;$u.=((&N.(&N^"\0\W\0").&N)=~y/X//
    |(substr$c[$r],$_,1)eq'X')==3?'X':'.';}$u}keys@c for(1..$i);
    sub N{substr$c[$R++],$K,3}open P,'>','out.txt';$,=$/;print P@c
    
    conway.pl infile #times
    $/=pop;@b=split'',<>;map{$n=-1;@b=map{++$n;/
    /?$_:($t=grep/X/,@b[map{$n+$_,$n-$_}1,80..82])==3|$t+/X/==3?X:'.'}@b}1..$/;print@b
    
    class L{public static void main(final String[]a)throws Exception{new java.io.RandomAccessFile("out.txt","rw"){{int e=88,p[]={-1,1,-80,80,-81,81,-82,82},s=3240,l=0,i=new Byte(a[1])*s+s,c;char[]b=new char[s];for(new java.io.FileReader(a[0]).read(b);i>0;seek(l=++l%s),i--){c=b[l];for(int n:p)c+=l+n>=0&l+n<s?b[l+n]/e:0;write(c>13?(c==49|(c|1)==91?e:46):10);}}};}}
    
    class L {
        public static void main(final String[]a) throws Exception {
            new java.io.RandomAccessFile("out.txt","rw"){{
                int e=88, p[]={-1,1,-80,80,-81,81,-82,82},s=3240,l=0,i=new Byte(a[1])*s+s,c;
                char[] b = new char[s];
                for (new java.io.FileReader(a[0]).read(b);i>0;seek(l=++l%s),i--) {
                    c=b[l];
                    for (int n:p)
                        c+=l+n>=0&l+n<s?b[l+n]/e:0;
                    write(c>13?(c==49|(c|1)==91?e:46):10);
                }
            }};
        }
    }
    
    L(F,N,R=40,C=80)
        N (F,N,R,C)
        O F:"RS" U F D  C F
        .F I=1:1:R R L F J=1:1:C S G(0,I,J)=($E(L,J)="X")
        F A=0:1:N-1 F I=1:1:R F J=1:1:C D  S G(A+1,I,J)=$S(X=2:G(A,I,J),X=3:1,1:0)
        .S X=0 F i=-1:1:1 F j=-1:1:1 I i!j S X=X+$G(G(A,I+i,J+j))
        S F="OUT.TXT" O F:"WNS" U F D  C F
        .F I=1:1:R F J=1:1:C W $S(G(N,I,J):"X",1:".") W:J=C !
        Q
    
    use std::io::fs::File;fn main(){
    let mut c=File::open(&Path::new(std::os::args()[1])).read_to_end();
    for _ in range(0,from_str::<int>(std::os::args()[2]).unwrap()){
    let mut b=c.clone();for y in range(0,40){for x in range(0,80){let mut s=0;
    for z in range(x-1,x+2){for t in range(y-1,y+2){
    if z>=0&&t>=0&&z<80&&t<40&&(x !=z||y !=t)&&c[t*81+z]==88u8{s +=1;}}}
    b[y*81+x]=if s==3||(s==2&&c[y*81+x]==88u8){88u8} else {46u8};}}c = b;}
    File::create(&Path::new("out.txt")).write(c);}
    
    use std::io::fs::File;
    fn main() {
        let f = std::os::args()[1];
        let mut c = File::open(&Path::new(f)).read_to_end();    
        let n = from_str::<int>(std::os::args()[2]).unwrap();   
        for _ in range(0,n)
        {
            let mut new = c.clone();
            for y in range(0,40) {
                for x in range(0,80) {
                    let mut sum = 0;
                    for xx in range(x-1,x+2){
                        for yy in range(y-1,y+2) {
                            if xx >= 0 && yy >= 0 && xx <80 && yy <40 && (x != xx || y != yy) && c[yy*81+xx] == 88u8
                            { sum = sum + 1; }
                        }
                    }
                    new[y*81+x] = if sum == 3 || (sum == 2 && c[y*81+x] == 88u8) {88u8} else {46u8};                    
                }
            }
            c = new;
        }
        File::create(&Path::new("out.txt")).write(c);
    }
    
    <!DOCTYPE html>
    <html><body><textarea id="t" style="width:600px;height:600px;font-family:Courier">
    </textarea></body><script type="text/javascript">var o,c,m=new Array(3200),
    k=new Array(3200),y,v,l,p;o=document.getElementById("t");for(y=0;y<3200;y++)
    {m[y]=Math.random()<0.5;}setInterval(function(){p="";for(y=0;y<3200;y++){c=0;
    for(v=-1;v<2;v+=2){c+=m[y-1*v]?1:0;for(l=79;l<82;l++)c+=m[y-l*v]?1:0;}
    k[y]=c==3||m[y]&&c==2;}p="";for(y=0;y<3200;y++){p+=(y>0&&y%80==0)?"\n":"";
    m[y]=k[y];p+=(m[y]?"O":"-");}o.innerHTML=p;},100);</script></html>