From: Shin-ichiro Hara Date: 1999-08-10T00:05:47+09:00 Subject: [ruby-list:15994] String.completion (Re: debug.rb in Ruby 1.3.7) 原です。 In message "[ruby-list:15986] Re: debug.rb in Ruby 1.3.7" on 99/08/09, OHARA Shigeki writes: | |大原です。 |というか、NcFTP とかみたく、 |最小限の文字列長でコマンドを unique に特定したい(?)、 |ということなんですよね? | |たとえば、有効なコマンドとして、 |["when", "which", "what", "where", "who"] があるとき、 |"wha" だけで "what" と認識(あるいは補完)してくれる、みたいな。 私も前にこれを考えたことがあったんですが、結局どうしたか 思い出せない。で、改めて書いてみました。 ---------------- class String def &(other) return self unless other i = 0 each_byte { |c| break if c != other[i] i += 1 } self[0, i] end def String.completion(array) t = nil array.each do |u| t = u & t end loop do a = array.grep(/^#{yield(t)}/) return a unless a.empty? end end end list = ["when", "which", "what", "where", "who"] while list.size > 1 list = String.completion(list) { |s| printf(">%s (%s)\n", s, list.join(', ')) s + gets.chomp } end puts list[0] ---------------- 効率を考えてないですが、とことん補完するタイプです。