cover

js1024に参加しました

初めてjs1024に参加しました。

js1024 は年次JavaScriptゴルフィングコンペティションです。参加者は15日間で、1024バイト以下のクールなJavaScriptまたはGLSLプログラムを作成します。

HTMLで簡単なライフゲームプログラムを作りました。

https://js1024.fun/demos/2024/17/readme

以下のコードが私のコードの最良の部分だと思います。

!c ? (L == 3 ? 1 : 0) : L < 2 || L > 3 ? 0 : 1;

これは条件演算子によって次世代のセルの状態を表しています。

これは最小化された全体のコードです。HTML MinifierJavaScript Minifierを使いました。

<body><style>h1,p{text-align:center}table{margin:auto}td{width:1em;height:1em}</style><h1>Life Game</h1><div id=$></div><script>let A=_=>Array.from({length:_}),f=0,t=A(30).map(()=>A(30).fill(0)),d=(_,e)=>(t[_][e]=!t[_][e],u()),L=0,l=(_,e)=>[[_-1,e-1],[_-1,e],[_-1,e+1],[_,e-1],[_,e+1],[_+1,e-1],[_+1,e],[_+1,e+1],].reduce((_,[e,c])=>_+(t[e]?.[c]??0),0),n=()=>(t=t.map((_,e)=>_.map((_,c)=>(L=l(e,c),_?L<2||L>3?0:1:3==L?1:0))),u()),u=()=>{$.innerHTML=`<p><button onclick="r()">${f?"Stop":"Run"}</button></p><table>${t.reduce((_,e,c)=>_+`<tr>${e.reduce((_,e,o)=>_+`<td style="background: ${e?"#111":"#ccc"}" onclick="d(${c}, ${o})"></td>`,"")}</tr>`,"")}</table>`},a=_=>setTimeout(_,500),z=()=>f&&(n(),a(z)),r=()=>f?(f=0,u()):(f=1,z());u();</script>