fork download
  1. ' 第一引数に 1-26 の数字を指定するとトーナメント表を作ってくれる
  2. ' 第二引数に何か入れると縦表示にしてくれる
  3. ' 二分木ツリーを作るまでもないので作ってない
  4. ' クラスを作るまでもないので作ってない
  5. ' 勝ち上がり等の入力が可能な対話型コマンドにしたければ基本構造は流用できるように作ってある
  6. Option Explicit
  7.  
  8. Dim oArgs, NumberOfTeams, IsVertical
  9. Set oArgs = WScript.Arguments
  10. NumberOfTeams = CInt(oArgs(0))
  11. If (oArgs.Count > 1) Then
  12. IsVertical = True
  13. Else
  14. IsVertical = False
  15. End If
  16.  
  17. Dim TeamNames
  18. TeamNames = Array( _
  19. "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", _
  20. "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" _
  21. )
  22.  
  23. Dim TeamIndex, Height
  24. TeamIndex = 0
  25. Height = 1
  26. Do While ((2 ^ Height) < NumberOfTeams)
  27. Height = Height + 1
  28. Loop
  29.  
  30. Dim Lines()
  31. ReDim Lines(Height + 1)
  32.  
  33. TeamIndex = GoDown(Height, NumberOfTeams, TeamIndex)
  34.  
  35. Dim I, J, Tmp
  36. If (IsVertical) Then
  37. ' 90度回転
  38. For I = 1 To Len(Lines(0))
  39. Tmp = ""
  40. For J = Height To 0 Step -1
  41. Tmp = Tmp + Mid(Lines(J), I, 1)
  42. Next
  43. Call WScript.Echo(Tmp)
  44. Next
  45. Else
  46. ' 下から作ってるからひっくり返して表示
  47. For I = Height To 0 Step -1
  48. Call WScript.Echo(Lines(I))
  49. Next
  50. End If
  51.  
  52. Function GoDown(ByVal Height, ByVal NumberOfTeams, ByVal TeamIndex)
  53. If (Height = 1) Then
  54. If (NumberOfTeams = 1) Then
  55. Lines(0) = Lines(0) & " " & TeamNames(TeamIndex) & "  "
  56. If (IsVertical) Then
  57. Lines(1) = Lines(1) & " ─  "
  58. Else
  59. Lines(1) = Lines(1) & " │  "
  60. End If
  61. TeamIndex = TeamIndex + 1
  62. Else
  63. Lines(0) = Lines(0) & TeamNames(TeamIndex) & " " & TeamNames(TeamIndex + 1) & " "
  64. If (IsVertical) Then
  65. Lines(1) = Lines(1) & "┌┤└ "
  66. Else
  67. Lines(1) = Lines(1) & "┌┴┐ "
  68. End If
  69. TeamIndex = TeamIndex + 2
  70. End If
  71. GoDown = TeamIndex
  72. Exit Function
  73. End If
  74.  
  75. Dim LeftTeams, RightTeams
  76. LeftTeams = NumberOfTeams \ 2
  77. RightTeams = NumberOfTeams - LeftTeams
  78.  
  79. TeamIndex = GoDown(Height - 1, LeftTeams , TeamIndex)
  80. TeamIndex = GoDown(Height - 1, RightTeams, TeamIndex)
  81. Dim P
  82. P = 2 ^ (Height - 1) - 1
  83. If (IsVertical) Then
  84. Lines(Height) = Lines(Height) & String(P, " ") & "┌" & String(P, "│") & _
  85. "┤" & String(P, "│") & "└" & String(P + 1, " ")
  86. Else
  87. Lines(Height) = Lines(Height) & String(P, " ") & "┌" & String(P, "─") & _
  88. "┴" & String(P, "─") & "┐" & String(P + 1, " ")
  89. End If
  90. GoDown = TeamIndex
  91. End Function
  92.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty