easy_wordle题目及附件
This commit is contained in:
		
							
								
								
									
										99
									
								
								misc/easy_wordle/easy_wordle.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								misc/easy_wordle/easy_wordle.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,99 @@ | |||||||
|  | from fileinput import filename | ||||||
|  | import socketserver | ||||||
|  | import signal | ||||||
|  | import random | ||||||
|  | import os | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Task(socketserver.BaseRequestHandler): | ||||||
|  |     def _recvall(self): | ||||||
|  |         BUFF_SIZE = 2048 | ||||||
|  |         data = b'' | ||||||
|  |         while True: | ||||||
|  |             part = self.request.recv(BUFF_SIZE) | ||||||
|  |             data += part | ||||||
|  |             if len(part) < BUFF_SIZE: | ||||||
|  |                 break | ||||||
|  |         return data.strip() | ||||||
|  |  | ||||||
|  |     def send(self, msg, newline=True): | ||||||
|  |         try: | ||||||
|  |             if newline: | ||||||
|  |                 msg += b'\n' | ||||||
|  |             self.request.sendall(msg) | ||||||
|  |         except: | ||||||
|  |             pass | ||||||
|  |  | ||||||
|  |     def recv(self, prompt=b'[-] '): | ||||||
|  |         self.send(prompt, newline=False) | ||||||
|  |         return self._recvall() | ||||||
|  |  | ||||||
|  |     def wordle_game(self, word_list): | ||||||
|  |         target = random.choice(word_list) | ||||||
|  |         attempts = 6 | ||||||
|  |  | ||||||
|  |         self.send("欢迎来到Wordle!".encode()) | ||||||
|  |         self.send("你有6次机会猜出一个5个字母的单词。".encode()) | ||||||
|  |  | ||||||
|  |         while attempts > 0: | ||||||
|  |             guess = self.recv(f"尝试{7 - attempts}: ".encode()) | ||||||
|  |             guess = guess.decode().lower() | ||||||
|  |             if len(guess) != 5: | ||||||
|  |                 self.send("请输入一个5个字母的单词!") | ||||||
|  |                 continue | ||||||
|  |  | ||||||
|  |             feedback = self.get_feedback(target, guess) | ||||||
|  |             feedback = " ".join(feedback) | ||||||
|  |             feedback = feedback.encode() | ||||||
|  |             self.send(feedback) | ||||||
|  |  | ||||||
|  |             if guess == target: | ||||||
|  |                 self.send("恭喜你猜对了!".encode()) | ||||||
|  |                 return True | ||||||
|  |             else: | ||||||
|  |                 attempts -= 1 | ||||||
|  |  | ||||||
|  |         print(f"很遗憾,你没有猜出来。正确答案是{target}。") | ||||||
|  |          | ||||||
|  |         return False | ||||||
|  |          | ||||||
|  |      | ||||||
|  |     def get_feedback(self, target, guess): | ||||||
|  |         feedback = [] | ||||||
|  |         for t, g in zip(target, guess): | ||||||
|  |             if t == g: | ||||||
|  |                 feedback.append('绿') | ||||||
|  |             elif g in target: | ||||||
|  |                 feedback.append('黄') | ||||||
|  |             else: | ||||||
|  |                 feedback.append('灰') | ||||||
|  |         return feedback | ||||||
|  |  | ||||||
|  |     def handle(self): | ||||||
|  |         signal.alarm(60) # type: ignore | ||||||
|  |         if not self.wordle_game(word_list): | ||||||
|  |             self.send(b'[!] Wrong!') | ||||||
|  |             return | ||||||
|  |  | ||||||
|  |         self.send(b'here is your flag') | ||||||
|  |         self.send(flag) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ThreadedServer(socketserver.ThreadingMixIn, socketserver.TCPServer): | ||||||
|  |     pass | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ForkedServer(socketserver.ForkingMixIn, socketserver.TCPServer):# type: ignore | ||||||
|  |     pass | ||||||
|  |  | ||||||
|  |  | ||||||
|  | if __name__ == "__main__": | ||||||
|  |     # flag = bytes(os.getenv("FLAG"),"utf-8") | ||||||
|  |     flag = b'flagis123' | ||||||
|  |     with open('wordlist.txt', 'r') as file: | ||||||
|  |         word_list = [line.strip() for line in file] | ||||||
|  |     HOST, PORT = '0.0.0.0', 10001 | ||||||
|  |     server = ForkedServer((HOST, PORT), Task) | ||||||
|  |     server.allow_reuse_address = True | ||||||
|  |     print(HOST, PORT) | ||||||
|  |     server.serve_forever() | ||||||
							
								
								
									
										2309
									
								
								misc/easy_wordle/wordlist.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2309
									
								
								misc/easy_wordle/wordlist.txt
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user