2025年11月16日 星期日

Lua, 7 kyu, 排隊問題

 7 kyu, Lost Lineup

這題很簡單,我一開始實作的方法是:

local function find_lineup(distances)
  local a, d = {}, #distances
  for i = 1, d do
    a[i] = -1
  end
  for i = 1, d do
    local n = distances[i] + 1
    if -1 == a[n] then
      a[n] = i
    else
      return {}
    end
  end
  for i = 1, d do
    if -1 == a[i] then
      return {}
    end
  end
  return a
end

return find_lineup

很來看了別人的方法,

主要有兩點,會比我簡潔:

1. 利用a = {}時,空的table, 裡面的元素預設值是nil

例如 a[2] = nil

2. 利用排隊正常時,會排完,且每個人只佔住一個號碼,

因此排隊號碼,不可能大於總人數。

由以上兩點,我改寫如下:

local function find_lineup(distances)
  local a, d = {}, #distances
  for i = 1, d do
    local n = distances[i] + 1
    if nil == a[n] and n <= d then
      a[n] = i
    else
      return {}
    end
  end
  return a
end

return find_lineup


沒有留言:

張貼留言

Lua, 7 kyu, 排隊問題

 7 kyu,  Lost Lineup 這題很簡單,我一開始實作的方法是: local function find_lineup ( distances ) local a , d = {}, # distances for i = 1 , d do ...