2025年10月8日 星期三

B494B trace code for fixture

1.

Common.lua裡,

function Common.State_retry(paraTab)

  ...

  for i=1,4 do 

    ...

    if i==5  then 

跟Kenny確認,目前是不可能跑到 i == 5的情況,

可以視做對未來的擴充,必要時也可mark as comment


2.

看起來QT1的治具Fixture,

經由group.lua的

local fixture = Atlas.loadPlugin("FixturePort")

宣告。


FixturePort = dutConfig.FixturePort

fixture.SetPath(FixturePort)

--fixture.SetPath(stationConfig.FixturePort)

fixture.Open(115200)

打開。


但是

function fixture_start(devicePlugins)

  devicePlugins['Fixture'] = fixture

  while true do

  ...

才是正式產生Fixture的地方,此時Fixture很快被hold住,

需要按治具左右兩邊按鈕,才能再跑下去。

Reference:

local userPluginModule = require("Station/Plugins")


function deviceStart(deviceName, groupPluginTable)

  ...

  local devicePlugins = userPluginModule.loadPlugins(deviceName, groupPluginTable)

  fixture_start(devicePlugins)

  ...


之後,可參考Common.lua的用法,

由local fixture = Device.getPlugin("Fixture")來呼叫

2025年10月7日 星期二

Lua, 7 kyu:Circle cipher

 7 kyu:Circle cipher

這題我的寫法是:
local kata = {}

function kata.encode(s)
  local a, j = {}, 1
  for i = 1, (#s + 1) /2 do
    a[j] = string.sub(s, i, i)
    j = j + 2
  end
  j = 2
  for i = #s, #s/2 + 1, -1 do
    a[j] = string.sub(s, i, i)
    j = j + 2
  end
  return table.concat(a, "")
end

function kata.decode(s)
  local a, i = {}, 1
  for j = 1, #s, 2 do
    a[i] = string.sub(s, j, j)
    i = i + 1
  end
    i = #s
  for j = 2, #s, 2 do
    a[i] = string.sub(s, j, j)
    i = i - 1
  end
  return table.concat(a, "")
end

return kata
其中function kata.encode(s)
我想了很久,經過不斷try and error,
終於成功了,
不過function kata.decode(s)
就機乎不用想,很直覺就寫出來了。
因此我看了一下,別人function kata.encode(s)的寫法,
發現別人寫的比較直覺如下:
function kata.encode(s)
  local res = ""
  while #s > 0 do
    -- use first char
    res = res .. s:sub(1,1)
    s = s:sub(2)
    if #s > 0 then
      -- use last char
      res = res .. s:sub(-1)
      s = s:sub(1,-2)
    end
  end
  return res
end
語法說明:
s:sub(2)是返回第1個以外的字串,相當於s:sub(2, #s)
s:sub(-1)是返回最後一個字元
另外s:sub(-2)是返回倒數第2個字元和倒數第1個字元,所成的字串
s:sub(1, -2)是返回除了最後一個字元以外的字串

2025年10月6日 星期一

Lua預設的 table.insert 是屬於全域的 table 模組,不是附在每個表(table)上的方法

 7 kyu: Sliding windows

題目很難懂是在做什麼?
尤期是length等於0到底是什麼?
因此嘗試了有點多次,
最後是length = 0的情況,
當做是list table多了一個0的值在一開始,
來解決。
另外就是有關Lua的table,
用insert加入元素,如下code:

> a = {}

> a:insert(123)

stdin:1: attempt to call a nil value (method 'insert')

stack traceback:

stdin:1: in main chunk

[C]: in ?

> table.insert(a, 123)

不能用a:insert(123),
查ChatGPT是說:

預設的 table.insert 是屬於全域的 table 模組,不是附在每個表(table)上的方法。

也就是說,除非你自己把 insert 方法掛到 a 表上,否則 a:insert(123) 會報錯。

要用table.insert(a, 123)
或者

✅ 正確寫法示範:

a = {} a.insert = table.insert -- 將全域的 table.insert 方法掛到 a 上 a:insert("k")

執行後:

print(a[1]) --> k

我Pass的code如下:
local function window(length, offset, list)
  local a, temp, l = {}, {}, {}
  if 0 == length then
    for ii = 0, #list do
      if 0 == ii then
        l[1] = 0
      else
        l[ii + 1] = list[ii]
      end
    end
  else
    l = list
  end
  for i = 1, #l, offset do
      if i + length - 1 <= #l then
        for j = i, i + length - 1 do
          table.insert(temp, l[j])
        end
        table.insert(a, temp)
        temp = {}
      end
  end
  return a
end

return window

Lua, 使用string:gsub("%b()", "")

7kyu, Valid Parentheses  7kyu的題目,一樣不難。 是求Parentheses是否balanced? 我採用最基本的解法,如下: local function valid_parentheses ( paren_str ) local s =...