パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

Elixir探検記3 駒の反転で力尽きる

2022-05-02 | コンピュータ

もう少し迷宮をさまよってみることにします。こんな設計で開始

駒の反転まで下記のプログラムで実施、ブログの都合でソースの

タブが変更されてますが、ck.exsで保存して実行できました。

再帰で作成すると開かれたループを閉じるループに変更する

なんというか逆算のようなプログラムの作り方みたいな感じで

今ひとつ探検感がない。

 

簡単に説明すると、sが文字列pが位置cがキャラクタ、ptがパ

ターン用の文字列 dが検索方向bdがオセロ盤中央の位置に

oかxを置いた時の反転状況を表示しています。

 

テストはザルなのでバグの想定数は2

文字列の追加は<> これさえ覚えておけば大丈夫です。

 

 

 

defmodule Ot do
 def put(s,p,c) do
  (String.slice s,0,p) <> c <> (String.slice s,p+1,(String.length(s)))
 end
 def get(s,p) do
  String.slice s,p,1
 end
 def board_write(s,[n|tl]) do
  IO.puts String.slice s,n*10+11,8
  board_write(s,tl)
   end
 def board_write(_,[]) do
  IO.puts "  "
 end
 # game  先手後手 終わっていなければ再帰
 def think(s,c) do # 指し手全部さして スコア化してタプルに
  #noop
  s<>c
 end
 def turn_check(s,p,pt) do # 裏返せる 向きを返す
  for d <- [-11,-10,-9,-1,1,9,10,11], line_check(s,p,pt,d), do: d 
 end
 def line_check(s,p,pt,d) do # 裏返せる 向きを返す pt 相手の駒+自分の駒
  line=line_get(s,p,d,"")
  line=replace_n(line,"oo","o")
  line=replace_n(line,"xx","x")
  if (String.slice line,0,2)==pt, do: true, else: false
  #l=l <> if l == "x", do: "X", else: ""
 end 
 def replace_n(s,b,a) do
  ns=String.replace(s,b,a)
  if ns==s, do: s, else: replace_n(ns,b,a)  
 end
 def line_get(s,p,d,l) do
  c=get(s,p+d)
  if c=="#", do: l, else: line_get(s,p+d,d,l<>c)
 end
 def turn(s,p,c,oc) do # 裏返せる 向きから裏返す
  ds=turn_check(s,p,oc<>c)
  s=turn_lines(s,p,c,ds)
  put(s,p,c)
 end
 def turn_lines(s,p,c,[d|dl]) do
  turn_lines(turn_line(s,p,d,c),p,c,dl)
 end
 def turn_lines(s,_,_,[]) do
  s
 end
 def turn_line(s,p,d,c) do
  bc=get(s,p+d)
  if bc==c, do: s, else: turn_line(put(s,p+d,c),p+d,d,c) 
 end
 def score(s,c) do # 指し手の位置、コマ数、確定位置計算
  String.length(String.replace(s,c,"aa"))-String.length(s)
 end
 # パターンマッチに特徴がある言語らしい 使ってみたい
end
bd="##########"<>
   "#.o.o.x..#"<>
   "#..xxo...#"<>
   "#.ox.ooox#"<>
   "#..oxx...#"<>
   "#.o.x.x..#"<>
   "#...x..o.#"<>
   "#...x....#"<>
   "#...o....#"<>
   "##########"
#sb="###########91444419##11333311##43555534##43555534##43555534##43555534##11333311##91444419###########"
Ot.board_write(bd,[0,1,2,3,4,5,6,7])
#tbd="###########........##........##........##.ooox...##...xo...##o.......##........##........###########"
#IO.puts Ot.score(bd,"o")
#IO.puts Ot.score(bd,"x")
#IO.puts Ot.line_get(bd,11,1,"")
#IO.puts Ot.line_get(bd,11,11,"")
#IO.puts Ot.line_get(bd,48,-1,"")
nbd=Ot.turn(bd,34,"o","x")
Ot.board_write(nbd,[0,1,2,3,4,5,6,7])
nbd=Ot.turn(bd,34,"x","o")
Ot.board_write(nbd,[0,1,2,3,4,5,6,7])

# 課題 タプルの入ったリストのソート


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。