05:11:49 @Higameshi@voskey.icalo.net
icon

10分間LTLに投稿なし……
もしかしてぼ民絶滅した?

16:44:09 @Higameshi@voskey.icalo.net
icon

:: Deque {
  @init() {
    return {len: 0, offset: 0, data: []}
  }
  @at(q, i) {
    var ind = i+q.offset
    if (ind>=q.data.len) {ind-=q.data.len}
    return q.data[ind]
  }
  @push_back(q, v) {
    if (q.data.len==0) {
      q.len = 1
      q.data = [v]
      return null
    } elif (q.len==q.data.len) {
      var tmp = []
      var ind = q.offset
      for (q.len) {
        tmp.push(q.data[ind])
        ind += 1
        if (ind==q.data.len) {ind-=q.data.len}
      }
      tmp.push(v)
      for (q.len-1) {tmp.push(null)}
      q.len += 1
      q.offset = 0
      q.data = tmp
      return null
    } else {
      var ind = q.len+q.offset
      if (ind>=q.data.len) {ind-=q.data.len}
      q.len += 1
      q.data[ind] = v
      return null
    }
  }
  @pop_back(q) {
    q.len -= 1
    var ind = q.len+q.offset
    if (ind>=q.data.len) {ind-=q.data.len}
    return q.data[ind]
  }
  @push_front(q, v) {
    if (q.data.len==0) {
      q.len = 1
      q.data = [v]
      return null
    } elif (q.len==q.data.len) {
      var tmp = []
      var ind = q.offset
      tmp.push(v)
      for (q.len) {
        tmp.push(q.data[ind])
        ind += 1
        if (ind==q.data.len) {ind-=q.data.len}
      }
      for (q.len-1) {tmp.push(null)}
      q.len += 1
      q.offset = 0
      q.data = tmp
      return null
    } else {
      if (q.offset==0) {q.offset=q.data.len}
      q.offset -= 1
      q.len += 1
      q.data[q.offset] = v
      return null
    }
  }
  @pop_front(q) {
    q.len -= 1
    let v = q.data[q.offset]
    q.offset += 1
    if (q.offset==q.data.len) {q.offset=0}
    return v
  }
}

let q = Deque:init()
Deque:push_back(q,3)
Deque:push_back(q,1)
Deque:push_front(q,4)
<:Deque:at(q,1)//3
<:Deque:pop_front(q) //4
<:Deque:pop_front(q) //3
Deque:push_front(q,5)
<:q.len //2
<:Deque:pop_back(q) //1
<:Deque:pop_back(q) //5