無限あたし彼女

参考資料:「あたし状態遷移図」、あるいは「あたし約5.2MB」 - とある理系男子の書斎には、どうしても小説が少ない。っていうか無い。 - ファック文芸部,あたしオートマトン - とある理系男子の書斎には、どうしても小説が少ない。っていうか無い。 - ファック文芸部

require 'open-uri'

URI_TEMPLATE='http://nkst.jp/vote/novel.php?auther=20080001&page=%d'
$KCODE='s'

def get_page(n)
  page=nil
  open(URI_TEMPLATE % n){|f|page=f.read}
  return page
end

def parse(page)
  return page.split('<br />')[1..-2].map{|l|l.strip}.reject{|l|l.empty?}
end

class Connection
  def initialize
    @members={}
    @total_fanout=0
  end
  def add(word)
    if @members[word]
      @members[word]+=1
    else
      @members[word]=1
    end
    @total_fanout+=1
  end
  def final?
    return @total_fanout==0
  end
  def next
    raise 'its final state' if final?
    n=1+rand(@total_fanout)
    @members.each{|word,count|
      n-=count
      return word if n<=0
    }
    raise 'dont reach here'
  end
end

def make_dict(dict,page_content)
  return if page_content.length==0
  (0...page_content.length-1).each{|i|
    (dict[page_content[i]]||=Connection.new).add page_content[i+1]
  }
  dict[page_content[-1]]||=Connection.new
  return dict
end

def make_dict_from_page_range(dict,range)
  range.each{|i|
    make_dict(dict,parse(get_page(i)))
  }
  return dict
end

def generate(writer,dict,start_word=nil,max_length=-1)
  return 0 if dict.empty? || max_length == 0

  start_word||=dict.keys[rand dict.length]
  cur=dict[start_word]
  writer.puts [start_word,'']
  len=1
  while (max_length < 0 || len < max_length) && !cur.final?
    next_word=cur.next
    cur=dict[next_word]
    writer.puts [next_word,'']
    len+=1
  end
  return len
end
irb(main):130:0> d=make_dict_from_page_range({},1..200)
irb(main):136:0> out=open('tmp/atashi.txt','w')
=> #<File:tmp/atashi.txt>
irb(main):138:0> 100.times{ generate(out,d,nil,100); out.puts ['','===============','']}
=> 100
irb(main):139:0> out.close

泣くアタシの

肩を

さする

『アキ

ごめんね

本とに

アタシも

嬉しく

感じた

なんでか

わかんないけど

・・・・・・?

返事

早いし!!

 


===============

なんで?』

『ん?』

『ん?

嫌なら

いいよ』

嫌なわけないじゃん

マヂ

考えただけでも

顔が熱くなる

みたいな

『中華でいい?』

『だから

何でもいいって』

てか

なんで?

意味わかんない

意味わかんない

意味わかんない

アタシが

マジ恋

なぁんて

ある訳ないじゃん

みたいな

昨日

あんだけ

凹んでも

やっぱり

トモが

『部屋着に

なりなよ

俺も着替えるし』

『うん』

『ダメ

だった

みたいな

男友達や

セフレの

連絡は

まだ

いても

アタシを

見てくれていないね

アタシの

準備バッチリ

いつものアタシ

顔はカヨでも

アタシは

背中を

向けて

寝たフリを

していた

一緒にいたいのも

勿論

あるけど

ほとんど

アタシじゃん?

アタシと連絡

したくないわけ?

アタシは

淋しいっつ〜の

てか

困る

みたいな

浮気した事ない

言う奴

アタシ

何したって

無駄かも

しれないじゃん

一緒に

買い物

出来ないじゃん

カップルって

みんなに

見られたかったじゃん

アタシ

すかさず

丸も注文

したんだけど』

アタシ

アキだよ

背中の傷も

カヨのじゃないよ

風呂場で

顔を

出すようになった

前と同じ

料理を教わる

おかんは

覚えといても

損はないから

って

言ってくれた

あの言葉

お陰様で

辛いし

淋しいし

悲しいけど

なんとなく

みたいな』

本当は無限恋空がやりたい。