HertzDevil icon

sorter.lua

HertzDevil | PRO | 08/17/15 07:03:45 PM UTC | 0 ⭐ | 648 👁️ | Never ⏰ | []
Lua |

13.03 KB

|

None

|

0 👍

/

0 👎

----------------------------------------
-- 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)

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  • Syizuxtrn icon
    05/15/26 01:36:48 PM UTC
    text |

    0 B

    |

    0 👍

    /

    0 👎

    Best Pastebin.com alternatives paste sites list
     Copy and paste the link in a new browser tab and then hit enter!
     https://crazyporn.xxx/members/157354/?asgtbndr=1&play=true&spon=adworld&zone=400