電話とネットコードシェアみたいなサービスをつかったインタビューを受けていた。課題はメモリアロケーションをしないリストの回転。いろいろ考えて大分力尽きた感じであった。さすがに残念である。
っで、 そのまま放っておくのももったいないと思い、調べてみたりした。
std::rotate を読んでみた - d.v.d
C++のSTLにはそのようなアルゴリズムがあるらしく、上記のサイトに解説があった。ということでSchemeで写経。swap部分は適当。
(define (rotete-left vec m)
(define (itr s m e)
(if (or (= s m) (= e m))
vec
(let loop ((s s) (mm m))
(if (or (= s m) (= mm e))
(if (= s m)
(itr s mm e)
(itr s m e))
(let ((v1 (vector-ref vec s))
(v2 (vector-ref vec mm)))
(vector-set! vec s v2)
(vector-set! vec mm v1)
(loop (+ s 1) (+ mm 1)))))))
(let ((len (vector-length vec)))
(itr 0 m len)))
なにをやっているか分かるし、知っていれば直ぐに解けるんだろうなぁとは思うけど、正直知らなきゃ無理って感じのものだ。特に30分とかで解けるようなものではないと信じたい。凡才では閃かないよこんなの・・・入れ替え、入れ替えでいけるよなぁとか考えてたけど違う路線で考えていた。基本的なアルゴリズムの知識が足りない。
あきら~めまっしょお~、あきらめまっしょお~♪
何がどうなったのか知らないけど、3度目の電話インタビューが行われることになりそうである。
首の皮一枚で繋がったのだろうか?
正直電話インタビューって結構しんどいので、ほっとしていたのだが・・・
No comments:
Post a Comment