' 第一引数に 1-26 の数字を指定するとトーナメント表を作ってくれる
' 第二引数に何か入れると縦表示にしてくれる
' 二分木ツリーを作るまでもないので作ってない
' クラスを作るまでもないので作ってない
' 勝ち上がり等の入力が可能な対話型コマンドにしたければ基本構造は流用できるように作ってある
Option Explicit
Dim oArgs, NumberOfTeams, IsVertical
Set oArgs = WScript.Arguments
NumberOfTeams = CInt(oArgs(0))
If (oArgs.Count > 1) Then
IsVertical = True
Else
IsVertical = False
End If
Dim TeamNames
TeamNames = Array( _
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", _
"N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" _
)
Dim TeamIndex, Height
TeamIndex = 0
Height = 1
Do While ((2 ^ Height) < NumberOfTeams)
Height = Height + 1
Loop
Dim Lines()
ReDim Lines(Height + 1)
TeamIndex = GoDown(Height, NumberOfTeams, TeamIndex)
Dim I, J, Tmp
If (IsVertical) Then
' 90度回転
For I = 1 To Len(Lines(0))
Tmp = ""
For J = Height To 0 Step -1
Tmp = Tmp + Mid(Lines(J), I, 1)
Next
Call WScript.Echo(Tmp)
Next
Else
' 下から作ってるからひっくり返して表示
For I = Height To 0 Step -1
Call WScript.Echo(Lines(I))
Next
End If
Function GoDown(ByVal Height, ByVal NumberOfTeams, ByVal TeamIndex)
If (Height = 1) Then
If (NumberOfTeams = 1) Then
Lines(0) = Lines(0) & " " & TeamNames(TeamIndex) & " "
If (IsVertical) Then
Lines(1) = Lines(1) & " ─ "
Else
Lines(1) = Lines(1) & " │ "
End If
TeamIndex = TeamIndex + 1
Else
Lines(0) = Lines(0) & TeamNames(TeamIndex) & " " & TeamNames(TeamIndex + 1) & " "
If (IsVertical) Then
Lines(1) = Lines(1) & "┌┤└ "
Else
Lines(1) = Lines(1) & "┌┴┐ "
End If
TeamIndex = TeamIndex + 2
End If
GoDown = TeamIndex
Exit Function
End If
Dim LeftTeams, RightTeams
LeftTeams = NumberOfTeams \ 2
RightTeams = NumberOfTeams - LeftTeams
TeamIndex = GoDown(Height - 1, LeftTeams , TeamIndex)
TeamIndex = GoDown(Height - 1, RightTeams, TeamIndex)
Dim P
P = 2 ^ (Height - 1) - 1
If (IsVertical) Then
Lines(Height) = Lines(Height) & String(P, " ") & "┌" & String(P, "│") & _
"┤" & String(P, "│") & "└" & String(P + 1, " ")
Else
Lines(Height) = Lines(Height) & String(P, " ") & "┌" & String(P, "─") & _
"┴" & String(P, "─") & "┐" & String(P + 1, " ")
End If
GoDown = TeamIndex
End Function
JyDnrKzkuIDlvJXmlbDjgasgMS0yNiDjga7mlbDlrZfjgpLmjIflrprjgZnjgovjgajjg4jjg7zjg4rjg6Hjg7Pjg4jooajjgpLkvZzjgaPjgabjgY/jgozjgosKJyDnrKzkuozlvJXmlbDjgavkvZXjgYvlhaXjgozjgovjgajnuKbooajnpLrjgavjgZfjgabjgY/jgozjgosKJyDkuozliIbmnKjjg4Tjg6rjg7zjgpLkvZzjgovjgb7jgafjgoLjgarjgYTjga7jgafkvZzjgaPjgabjgarjgYQKJyDjgq/jg6njgrnjgpLkvZzjgovjgb7jgafjgoLjgarjgYTjga7jgafkvZzjgaPjgabjgarjgYQKJyDli53jgaHkuIrjgYzjgornrYnjga7lhaXlipvjgYzlj6/og73jgarlr77oqbHlnovjgrPjg57jg7Pjg4njgavjgZfjgZ/jgZHjgozjgbDln7rmnKzmp4vpgKDjga/mtYHnlKjjgafjgY3jgovjgojjgYbjgavkvZzjgaPjgabjgYLjgosKT3B0aW9uIEV4cGxpY2l0CgpEaW0gb0FyZ3MsIE51bWJlck9mVGVhbXMsIElzVmVydGljYWwKU2V0IG9BcmdzID0gV1NjcmlwdC5Bcmd1bWVudHMKTnVtYmVyT2ZUZWFtcyA9IENJbnQob0FyZ3MoMCkpCklmIChvQXJncy5Db3VudCA+IDEpIFRoZW4KCUlzVmVydGljYWwgPSBUcnVlCkVsc2UKCUlzVmVydGljYWwgPSBGYWxzZQpFbmQgSWYKCkRpbSBUZWFtTmFtZXMKVGVhbU5hbWVzID0gQXJyYXkoIF8KCSLvvKEiLCAi77yiIiwgIu+8oyIsICLvvKQiLCAi77ylIiwgIu+8piIsICLvvKciLCAi77yoIiwgIu+8qSIsICLvvKoiLCAi77yrIiwgIu+8rCIsICLvvK0iLCBfCgki77yuIiwgIu+8ryIsICLvvLAiLCAi77yxIiwgIu+8siIsICLvvLMiLCAi77y0IiwgIu+8tSIsICLvvLYiLCAi77y3IiwgIu+8uCIsICLvvLkiLCAi77y6IiAgXwopCgpEaW0gVGVhbUluZGV4LCBIZWlnaHQKVGVhbUluZGV4ID0gMApIZWlnaHQgPSAxCkRvIFdoaWxlICgoMiBeIEhlaWdodCkgPCBOdW1iZXJPZlRlYW1zKQoJSGVpZ2h0ID0gSGVpZ2h0ICsgMQpMb29wCgpEaW0gTGluZXMoKQpSZURpbSBMaW5lcyhIZWlnaHQgKyAxKQoKVGVhbUluZGV4ID0gR29Eb3duKEhlaWdodCwgTnVtYmVyT2ZUZWFtcywgVGVhbUluZGV4KQoKRGltIEksIEosIFRtcApJZiAoSXNWZXJ0aWNhbCkgVGhlbgoJJyA5MOW6puWbnui7ogoJRm9yIEkgPSAxIFRvIExlbihMaW5lcygwKSkKCQlUbXAgPSAiIgogCQlGb3IgSiA9IEhlaWdodCBUbyAwIFN0ZXAgLTEKCQkJVG1wID0gVG1wICsgTWlkKExpbmVzKEopLCBJLCAxKQoJCU5leHQKCQlDYWxsIFdTY3JpcHQuRWNobyhUbXApCglOZXh0CkVsc2UKCScg5LiL44GL44KJ5L2c44Gj44Gm44KL44GL44KJ44Gy44Gj44GP44KK6L+U44GX44Gm6KGo56S6CglGb3IgSSA9IEhlaWdodCBUbyAwIFN0ZXAgLTEKCQlDYWxsIFdTY3JpcHQuRWNobyhMaW5lcyhJKSkKCU5leHQKRW5kIElmCgpGdW5jdGlvbiBHb0Rvd24oQnlWYWwgSGVpZ2h0LCBCeVZhbCBOdW1iZXJPZlRlYW1zLCBCeVZhbCBUZWFtSW5kZXgpCglJZiAoSGVpZ2h0ID0gMSkgVGhlbgoJCUlmIChOdW1iZXJPZlRlYW1zID0gMSkgVGhlbgoJCQlMaW5lcygwKSA9IExpbmVzKDApICYgIuOAgCIgJiBUZWFtTmFtZXMoVGVhbUluZGV4KSAmICLjgIDjgIAiCgkJCUlmIChJc1ZlcnRpY2FsKSBUaGVuCgkJCQlMaW5lcygxKSA9IExpbmVzKDEpICYgIuOAgOKUgOOAgOOAgCIKCQkJRWxzZQoJCQkJTGluZXMoMSkgPSBMaW5lcygxKSAmICLjgIDilILjgIDjgIAiCgkJCUVuZCBJZgoJCQlUZWFtSW5kZXggPSBUZWFtSW5kZXggKyAxCgkJRWxzZQoJCQlMaW5lcygwKSA9IExpbmVzKDApICYgVGVhbU5hbWVzKFRlYW1JbmRleCkgJiAi44CAIiAmIFRlYW1OYW1lcyhUZWFtSW5kZXggKyAxKSAmICLjgIAiCgkJCUlmIChJc1ZlcnRpY2FsKSBUaGVuCgkJCQlMaW5lcygxKSA9IExpbmVzKDEpICYgIuKUjOKUpOKUlOOAgCIKCQkJRWxzZQoJCQkJTGluZXMoMSkgPSBMaW5lcygxKSAmICLilIzilLTilJDjgIAiCgkJCUVuZCBJZgoJCQlUZWFtSW5kZXggPSBUZWFtSW5kZXggKyAyCgkJRW5kIElmCgkJR29Eb3duID0gVGVhbUluZGV4CgkJRXhpdCBGdW5jdGlvbgoJRW5kIElmCgoJRGltIExlZnRUZWFtcywgUmlnaHRUZWFtcwoJTGVmdFRlYW1zICA9IE51bWJlck9mVGVhbXMgXCAyCglSaWdodFRlYW1zID0gTnVtYmVyT2ZUZWFtcyAtIExlZnRUZWFtcwoKCVRlYW1JbmRleCA9IEdvRG93bihIZWlnaHQgLSAxLCBMZWZ0VGVhbXMgLCBUZWFtSW5kZXgpCglUZWFtSW5kZXggPSBHb0Rvd24oSGVpZ2h0IC0gMSwgUmlnaHRUZWFtcywgVGVhbUluZGV4KQoJRGltIFAKCVAgPSAyIF4gKEhlaWdodCAtIDEpIC0gMQoJSWYgKElzVmVydGljYWwpIFRoZW4KCQlMaW5lcyhIZWlnaHQpID0gTGluZXMoSGVpZ2h0KSAmIFN0cmluZyhQLCAi44CAIikgJiAi4pSMIiAmIFN0cmluZyhQLCAi4pSCIikgJiBfCgkJCSLilKQiICYgU3RyaW5nKFAsICLilIIiKSAmICLilJQiICYgU3RyaW5nKFAgKyAxLCAi44CAIikKCUVsc2UKCQlMaW5lcyhIZWlnaHQpID0gTGluZXMoSGVpZ2h0KSAmIFN0cmluZyhQLCAi44CAIikgJiAi4pSMIiAmIFN0cmluZyhQLCAi4pSAIikgJiBfCgkJCSLilLQiICYgU3RyaW5nKFAsICLilIAiKSAmICLilJAiICYgU3RyaW5nKFAgKyAxLCAi44CAIikKCUVuZCBJZgoJR29Eb3duID0gVGVhbUluZGV4CkVuZCBGdW5jdGlvbgo=