裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

共通の友人数

2016年02月17日 | ブログラミング

締め切りはずいぶん先で(鬼が笑うが)2月17日(水)AM10:00
なので,この解答は 2月17日(水)AM10:01 の予約投稿とする。


Facebookなどで表示される「共通の友達」。
あなたの手元には、誰と誰が友達であるかを記したリストがあります。
このリストを元に、「共通の友達」の最大数を求めてください。

例えば、次のような友人関係の場合、共通の友達の最大数は3人になります。
1行目がこのリストに登場する友人番号の最大値、
2行目以降に友人関係がある場合に、そのペアを空白区切りでセットされています。
5
1 2
1 3
1 4
3 4
2 3
2 5
4 5

難易度が「星 4 つのうちの星 3 つ」となっているが,そんなに難しいか?

個人ごとに友達リストを作って,2 人ずつの組合せで共通の友人数を数え,その最大値を出力する(出題文まんまじゃないか)

func = function(fn) {
   con = file(fn, "r")
   n = as.integer(readLines(con, 1))
   f = vector("list", n)
   pair = readLines(con)
   for (i in seq_along(pair)) {
      p = as.integer(unlist(strsplit(pair[i], " ")))
      p1 = p[1]
      p2 = p[2]
      f[[p1]] = append(f[[p1]], p2)
      f[[p2]] = append(f[[p2]], p1)
   }
   n.max = 0
   for (i in 1:(n-1)) {
      for (j in (i+1):n) {
         n.max = max(n.max, length(intersect(f[[i]], f[[j]])))
      }
   }
   cat(n.max)
}
func("test-data1.R")
func("test-data2.R")
func("test-data3.R")

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« R の SVG ロゴを base で描い... | トップ | 成長と分裂 »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事