Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ----------------------------------------
- -- beginning of touhou character data
- -- data taken from http://tohosort.comoj.com/src/fnc_data_v2.js
- -- sets converted to arrays
- ----------------------------------------
- local CHAR = {
- -- main gals
- {"Reimu Hakurei", {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20}, {4}},
- {"Marisa Kirisame", {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}, {4, 7}},
- -- eosd
- {"Rumia", {1, 6, 15, 20}, {1}},
- {"Daiyousei", {1, 20}, {2, 7}},
- {"Cirno", {1, 2, 5, 6, 10, 13, 15, 16, 17, 20}, {2}},
- {"Hong Meiling", {1, 3, 6, 10, 20}, {3}},
- {"Koakuma", {1, 20}, {4}},
- {"Patchouli Knowledge", {1, 3, 6, 8, 10, 15, 20}, {4, 7}},
- {"Sakuya Izayoi", {1, 2, 3, 4, 5, 6, 8, 10, 15, 16, 17, 20}, {5, 6}},
- {"Remilia Scarlet", {1, 3, 4, 6, 8, 10, 15, 17, 20}, {6}},
- {"Flandre Scarlet", {1, 6, 20}, {7}},
- -- pcb
- {"Letty Whiterock", {2, 6, 15, 20}, {1}},
- {"Chen", {2, 3, 6, 8, 10, 15, 20}, {2, 7}},
- {"Alice Margatroid", {2, 3, 4, 6, 8, 10, 15, 20}, {3}},
- {"Lily White", {2, 5, 15, 20}, {4, 7}},
- {"Lunasa Prismriver", {2, 5, 15, 20}, {4}},
- {"Merlin Prismriver", {2, 5, 15, 20}, {4}},
- {"Lyrica Prismriver", {2, 5, 15, 20}, {4}},
- {"Youmu Konpaku", {2, 3, 4, 5, 6, 8, 10, 14, 15, 17, 20}, {5, 6}},
- {"Yuyuko Saigyouji", {2, 3, 4, 6, 8, 10, 14, 15, 17, 20}, {1, 6}},
- {"Ran Yakumo", {2, 3, 4, 6, 8, 10, 15, 20}, {7}},
- {"Yukari Yakumo", {2, 3, 4, 6, 8, 10, 15, 17, 20}, {7}},
- -- iamp
- {"Suika Ibuki", {3, 6, 8, 10, 12, 15, 17, 20}, {6}},
- -- in
- {"Wriggle Nightbug", {4, 6, 15, 20}, {1}},
- {"Mystia Lorelei", {4, 5, 6, 15, 20}, {2}},
- {"Keine Kamishirasawa", {4, 6, 15, 17, 20}, {3, 7}},
- {"Tewi Inaba", {4, 5, 6, 15, 20}, {5}},
- {"Reisen Udongein Inaba", {4, 5, 6, 10, 15, 19, 20}, {5}},
- {"Eirin Yagokoro", {4, 6, 15, 20}, {6}},
- {"Kaguya Houraisan", {4, 6, 15, 20}, {6}},
- {"Fujiwara no Mokou", {4, 6, 15, 17, 18, 20}, {7}},
- -- pofv
- {"Aya Shameimaru", {5, 6, 7, 8, 10, 15, 17, 20}, {4}},
- {"Medicine Melancholy", {5, 6, 15, 20}, {4}},
- {"Yuuka Kazami", {5, 6, 15, 20}, {5}},
- {"Komachi Onozuka", {5, 6, 8, 10, 15, 20}, {5}},
- {"Eiki Shiki, Yamaxanadu", {5, 6, 15, 20}, {6}},
- -- mof
- {"Shizuha Aki", {7, 12, 15}, {1}},
- {"Minoriko Aki", {7, 12, 15}, {1}},
- {"Hina Kagiyama", {7, 12, 15}, {2}},
- {"Nitori Kawashiro", {7, 12, 15, 17, 18}, {3}},
- {"Momiji Inubashiri", {7, 12, 17}, {4}},
- {"Sanae Kochiya", {7, 9, 10, 11, 12, 14, 15, 17, 19}, {5, 7}},
- {"Kanako Yasaka", {7, 10, 12, 15, 17}, {6, 7}},
- {"Suwako Moriya", {7, 9, 10, 12, 15, 17}, {7}},
- -- swr
- {"Iku Nagae", {8, 10, 12, 15}, {5}},
- {"Tenshi Hinanawi", {8, 10, 12, 15, 17}, {6}},
- -- sa
- {"Kisume", {9, 12}, {1}},
- {"Yamame Kurodani", {9, 12, 15}, {1}},
- {"Parsee Mizuhashi", {9, 12, 15}, {2}},
- {"Yuugi Hoshiguma", {9, 12, 15}, {3}},
- {"Satori Komeiji", {9, 12, 15}, {4}},
- {"Rin Kaenbyou (Orin)", {9, 12, 15}, {4, 5, 6}},
- {"Utsuho Reiuji (Okuu)", {9, 10, 12, 15}, {6}},
- {"Koishi Komeiji", {9, 12, 15, 18}, {7}},
- -- soku
- {"Great Catfish", {10}, {6}},
- -- ufo
- {"Nazrin", {11, 12, 15}, {1, 5}},
- {"Kogasa Tatara", {11, 12, 15}, {2, 7}},
- {"Ichirin Kumoi", {11, 12, 15, 18}, {3}},
- {"Unzan", {11, 12, 15, 18}, {3}},
- {"Minamitsu Murasa", {11, 12, 15}, {4}},
- {"Shou Toramaru", {11, 12, 15}, {5}},
- {"Byakuren Hijiri", {11, 12, 15, 17, 18}, {6}},
- {"Nue Houjuu", {11, 12, 14, 15}, {4, 6, 7}},
- -- ds
- {"Hatate Himekaidou", {12, 15, 17}, {7}},
- -- gfw
- {"Sunny Milk", {13, 15, 20}, {1, 2, 3}},
- {"Luna Child", {13, 15, 20}, {1, 2, 3}},
- {"Star Sapphire", {13, 15, 20}, {1, 2, 3}},
- -- td
- {"Kyouko Kasodani", {14, 15, 17}, {2}},
- {"Yoshika Miyako", {14, 15, 17}, {3, 4}},
- {"Seiga Kaku", {14, 15, 17}, {4}},
- {"Soga no Tojiko", {14, 15}, {5}},
- {"Mononobe no Futo", {14, 15, 17, 18}, {5}},
- {"Toyosatomimi no Miko", {14, 15, 17, 18}, {6}},
- {"Mamizou Futatsuiwa", {14, 15, 17, 18}, {7}},
- -- hm
- {"Hata no Kokoro", {15, 18}, {6}},
- -- ddc
- {"Wakasagihime", {16, 17}, {1}},
- {"Sekibanki", {16, 17}, {2}},
- {"Kagerou Imaizumi", {16, 17}, {3}},
- {"Benben Tsukumo", {16, 17}, {4, 7}},
- {"Yatsuhashi Tsukumo", {16, 17}, {4, 7}},
- {"Seija Kijin", {16, 17}, {5, 6}},
- {"Shinmyoumaru Sukuna", {16, 17, 18}, {6}},
- {"Raiko Horikawa", {16, 17}, {7}},
- -- ulil
- {"Sumireko Usami", {18}, {6}},
- -- lolk
- {"Seiran", {19}, {1}},
- {"Ringo", {19}, {2}},
- {"Doremy Sweet", {19}, {3, 7}},
- {"Sagume Kishin", {19}, {4}},
- {"Clownpiece", {19}, {5}},
- {"Junko", {19}, {6, 7}},
- {"Hecatia Lapislazuli", {19}, {7}},
- -- peeps
- {"Rinnosuke Morichika", {15, 20}, {}},
- {"Hieda no Akyuu", {20}, {}},
- {"Tokiko", {20}, {}},
- {"Reisen (Manga)", {20}, {}},
- {"Watatsuki no Toyohime", {20}, {}},
- {"Watatsuki no Yorihime", {20}, {}},
- {"Maribel Hearn", {20}, {}},
- {"Renko Usami", {20}, {}},
- {"Kasen Ibaraki", {18, 20}, {5}},
- {"Kosuzu Motoori", {15, 20}, {}},
- -- hrtp
- {"Reimu Hakurei (PC-98)", {21, 22, 23, 24, 25}, {4}},
- {"Genji", {21, 22, 23, 24, 25}, {}},
- {"Shingyoku (Male)", {21}, {1}},
- {"Shingyoku (Female)", {21}, {1}},
- {"YuugenMagan", {21}, {3}},
- {"Mima", {21, 22, 23, 25}, {3, 5, 6}},
- {"Elis", {21}, {5}},
- {"Kikuri", {21}, {5}},
- {"Sariel", {21}, {6}},
- {"Konngara", {21}, {6}},
- -- soew
- {"Rika", {22}, {1, 7}},
- {"Evil Eye Sigma", {22}, {7}},
- {"Meira", {22}, {2}},
- {"Marisa Kirisame (PC-98)", {22, 23, 24, 25}, {4}},
- -- podd
- {"Ellen", {23}, {}},
- {"Kotohime", {23}, {}},
- {"Kana Anaberal", {23}, {}},
- {"Rikako Asakura", {23}, {}},
- {"Chiyuri Kitashirakawa", {23}, {5}},
- {"Yumemi Okazaki", {23}, {6}},
- {"Ruukoto", {23}, {}},
- -- lls
- {"Orange", {24}, {1}},
- {"Kurumi", {24}, {2}},
- {"Elly", {24}, {3}},
- {"Yuuka (PC-98)", {24, 25}, {5, 6}},
- {"Mugetsu", {24}, {7}},
- {"Gengetsu", {24}, {7}},
- -- ms
- {"Sara", {25}, {1}},
- {"Louise", {25}, {2, 4}},
- {"Alice (PC-98)", {25}, {3, 7}},
- {"Yuki", {25}, {4}},
- {"Mai", {25}, {4}},
- {"Yumeko", {25}, {5}},
- {"Shinki", {25}, {6}},
- -- more peeps
- {"Layla Prismriver", {26}, {}},
- {"Youki Konpaku", {26}, {}},
- {"Myouren Hijiri", {26}, {}},
- }
- local SERIES = {
- "Embodiment of Scarlet Devil",
- "Perfect Cherry Blossom",
- "Immaterial and Missing Power",
- "Imperishable Night",
- "Phantasmagoria of Flower View",
- "Shoot the Bullet",
- "Mountain of Faith",
- "Scarlet Weather Rhapsody",
- "Subterranean Animism",
- "Touhou Hisoutensoku",
- "Undefined Fantastic Object",
- "Double Spoiler",
- "Great Fairy Wars",
- "Ten Desires",
- "Hopeless Masquerade",
- "Double Dealing Character",
- "Impossible Spell Card",
- "Urban Legend in Limbo",
- "Legacy of Lunatic Kingdom",
- "Books and CDs",
- "The Highly Responsive to Prayers",
- "The Story of Eastern Wonderland",
- "Phantasmagoria of Dim.Dream",
- "Lotus Land Story",
- "Mystic Square",
- "Others",
- }
- local STAGE = {"Stage 1", "Stage 2", "Stage 3", "Stage 4", "Stage 5", "Final Stage", "EX/Phantasm"}
- local function makeTable ()
- local sel = {}
- for i = 1, 20 --[[#SERIES]] do sel[i] = true end
- while true do
- for i, v in ipairs(SERIES) do
- print(string.format(" %s %2d - %s", sel[i] and "X" or " ", i, v))
- end
- local n = tonumber(io.read())
- if not n or not SERIES[n] then break end
- sel[n] = not sel[n]
- end
- local stg = {}
- for i = 1, #STAGE do stg[i] = true end
- local filter = false
- while true do
- print(" " .. (filter and "X" or " ") .. " 0 - Filter by stage")
- for i, v in ipairs(STAGE) do
- print(string.format(" %s %2d - %s", not filter and "-" or stg[i] and "X" or " ", i, v))
- end
- local n = tonumber(io.read())
- if n == 0 then
- filter = not filter
- elseif n and STAGE[n] then
- if filter then stg[n] = not stg[n] end
- else break end
- end
- local t = {}
- for _, v in ipairs(CHAR) do
- local use = not filter
- if filter then for _, s in ipairs(v[3]) do
- if stg[s] then use = true end
- end end
- if use then for _, game in ipairs(v[2]) do if sel[game] then
- t[#t + 1] = v[1]
- break
- end end end
- end
- if #t >= 2 then return t end
- print("Not enough entries!")
- os.execute("pause")
- return makeTable()
- end
- ----------------------------------------
- -- end of touhou character data
- ----------------------------------------
- local HELP = [[
- Y - Left wins
- N - Right wins
- T - Tie]]
- local GREATER = 3
- local EQUAL = 2
- local LESS = 1
- local rank = function (entry)
- local rel = {}
- local d = 0
- local count = 0
- local battle = {}
- local pool = {}
- for i = 1, #entry do
- rel[i] = {[i] = EQUAL}
- battle[i] = 1
- pool[i] = i
- end
- local showHelp = true
- local disp = function ()
- local ch = {[GREATER] = ">", [LESS] = "<", [EQUAL] = "="}
- print(" " .. table.concat(entry, " "))
- for i, v in ipairs(entry) do
- io.write(v)
- for j = 1, #entry do io.write(" ", ch[rel[i][j]] or " ") end
- io.write(" ", tostring(battle[i]))
- io.write("\n")
- end
- end
- local OPTION = {Y = GREATER, N = LESS, T = EQUAL}
- math.randomseed(os.time())
- while #pool > 0 do
- local left, right, result
- repeat
- left = math.random(#pool)
- right = math.random(#pool - 1)
- if right == left then right = right + 1 end
- left, right = pool[left], pool[right]
- until not rel[left][right]
- d = d + 1
- repeat
- print("Battle No. " .. d .. " (" .. math.floor(count * 100 / #entry / (#entry - 1)) .. "% complete)")
- print(entry[left] .. " > " .. entry[right])
- if showHelp then print(HELP) end
- local str = io.read()
- result = OPTION[str:upper()]
- showHelp = not result
- until result ~= nil
- showHelp = false
- local closure = {}
- local set = {{}, {}, {}}
- local function step (x, res)
- closure[x] = res
- set[res][x] = true
- for i = 1, #entry do if rel[i][x] and not closure[i] then
- if res == GREATER then
- if rel[i][x] == GREATER or rel[i][x] == EQUAL then step(i, GREATER) end
- elseif res == LESS then
- if rel[i][x] == LESS or rel[i][x] == EQUAL then step(i, LESS) end
- elseif res == EQUAL then
- step(i, rel[i][x])
- end
- end end
- end
- step(left, result)
- step(right, 4 - result)
- for _, a in ipairs {GREATER, EQUAL} do for _, b in ipairs {EQUAL, LESS} do
- for i in pairs(set[a]) do for j in pairs(set[b]) do if not rel[i][j] then
- count = count + 2
- rel[i][j] = a == b and EQUAL or GREATER
- rel[j][i] = a == b and EQUAL or LESS
- battle[i] = battle[i] + 1
- battle[j] = battle[j] + 1
- print(string.format("%s %s %s", entry[i], a == b and "ties with" or "defeats", entry[j]))
- end end end
- end end
- for i in pairs(closure) do if battle[i] == #entry then
- for p, v in ipairs(pool) do if v == i then
- table.remove(pool, p)
- break
- end end
- end end
- -- disp()
- end
- local t = {}
- for i = 1, #entry do t[i] = {} end
- for i = 1, #entry do
- local c = 0
- for j = 1, #entry do
- if rel[i][j] == LESS then c = c + 1 end
- end
- t[c + 1][#t[c + 1] + 1] = entry[i]
- end
- return t
- end
- local main = function ()
- local t = rank(makeTable())
- local str = {}
- for i, v in ipairs(t) do for _, s in ipairs(v) do str[#str + 1] = i .. "\t" .. s .. "\n" end end
- str = table.concat(str)
- print("Save to:")
- local fname = io.read()
- if fname == "" then
- print(str)
- else
- local f = io.open(fname, "w")
- f:write(str)
- f:close()
- end
- os.execute("pause")
- end
- main(arg)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement