Swiftの抽選用プログラム

var howManyPeoplesEntried: Int = 0

FirstStep: while true {
	print("エントリー人数は合計で何人?\n→ ", terminator: "")
	howManyPeoplesEntried = Int(readLine()!)!
	
	switch howManyPeoplesEntried {
		case 1...:
			break FirstStep
		case ..<1:
			print("応募人数は最低で1名です。")
		default:
			print("入力が間違っています。")
	}
}

var listOfEntries: [String] = [""]

var useListInput: Int = 0
var useListFlag: Bool = false
SecondStep: while true {
	print("事前に入力された応募者一覧を使いますか、それともこれから直接入力しますか。\n\n1:事前入力されたものを使う\n2:これから入力する\n→ ", terminator: "")
	useListInput = Int(readLine()!)!
	
	switch useListInput {
		case 1:
			useListFlag = true
			break SecondStep
		case 2:
			useListFlag = false
			listOfEntries.removeAll()
			break SecondStep
		default:
			print("入力が間違っています。")
	}
}

var inputNameTemp: String = ""
if !useListFlag {
	for count in 1...howManyPeoplesEntried {
		print("\(count)番目のエントリー者:", terminator: "")
		inputNameTemp = readLine()!
		listOfEntries.insert(inputNameTemp, at: count - 1)
	}
	print("\n入力が完了しました。")
}

print("エントリー者は以下の通りです。")
for countPrintEntries in 1...howManyPeoplesEntried {
	print("No. \(countPrintEntries): \(listOfEntries[countPrintEntries - 1])")
}

var howManyPeoplesWin: Int = 0
ThirdStep: while true {
	print("\n当選者数は何人ですか?\n→ ", terminator: "")
	howManyPeoplesWin = Int(readLine()!)!
	switch howManyPeoplesWin {
		case 1...:
			if howManyPeoplesWin > howManyPeoplesEntried {
				print("当選人数がエントリー数より多いです。\nエントリー数より少ない数値を入力してください。")
				continue
			}
			break ThirdStep
		case ..<1:
			print("当選者数は1名以上です")
			/*
		case howManyPeoplesEntried...:
			print("当選人数がエントリー数より多いです。エントリー数より少ない数値を入力してください。")
			 */
		default:
			print("入力が間違っています")
	}
}

var winNumbersList: [Int] = []
var tempWinNumber: Int = 0

for _ in 1...howManyPeoplesWin {
	while true {
		tempWinNumber = Int.random(in: 1...howManyPeoplesEntried)
		if winNumbersList.firstIndex(of: tempWinNumber) == nil {
			winNumbersList.append(tempWinNumber)
			break
		}
		tempWinNumber = 0
	}
}

print("\n抽選が終わりました。")

//debug
/*
print(listOfEntries)
print(winNumbersList)
 */
//debugEnd
print("\n ★抽選結果★")
for countPrintWins in 1...howManyPeoplesWin {
	//debug
	/*
	print(countPrintWins)
	 */
	//debugEnd
	print("エントリーNo. \(winNumbersList[countPrintWins - 1]) | \(listOfEntries[winNumbersList[countPrintWins - 1] - 1])")
}
print("\n********* ===== *********")
print(" 以上にて抽選を終了します")
print("********* ===== *********\n\n")
print("Program Made: Rina YUZUHA 2023, License: BSD")

Program Made: Rina YUZUHA 2023, License: BSD

Swift言語で書かれた抽選アルゴリズムです。

共有

この記事を共有

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です