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


沒有留言:

張貼留言

Basic Blind Chess的兩大問題

 Basic Blind Chess已經好久沒更新了, Windows版可以獲得最好的遊戲体驗, 但是Android版的,不只是比較舊, 它其實存在兩大問題: 1. 拿子移動時,顯示怪怪的,只顯示前幾個移動的殘影。 這個只有在最早的版本,沒有這個問題, 但是最早的版本實機測試時,...