79 lines
2.2 KiB
Nim
79 lines
2.2 KiB
Nim
import random
|
|
import terminal
|
|
import strutils
|
|
import osproc
|
|
import base64
|
|
|
|
const WORDBANK = ["SHELL", "VIRUS", "TOKEN", "SPOOF", "PROXY", "CHMOD", "PORTS", "BYTES", "LOGIN"]
|
|
const BACKDOOR = "aW1zb2V2aWw="
|
|
|
|
type
|
|
Board = array[6, array[5, char]]
|
|
|
|
proc printBoard(board: Board, answer: string): void =
|
|
var answerChars = cast[seq[char]](answer)
|
|
|
|
for row in 0..5:
|
|
stdout.write("\n---------------------\n")
|
|
|
|
for letter in 0..4:
|
|
if board[row][letter] == '\0':
|
|
stdout.write("| ")
|
|
else:
|
|
stdout.write("| ")
|
|
|
|
if board[row][letter] == answerChars[letter]:
|
|
stdout.styledWrite(fgGreen, styleBright, $board[row][letter], " ")
|
|
else:
|
|
if board[row][letter] != answerChars[letter] and answerChars.contains(board[row][letter]):
|
|
stdout.styledWrite(fgYellow, styleBright, $board[row][letter], " ")
|
|
else:
|
|
if board[row][letter] != answerChars[letter]:
|
|
stdout.styledWrite(fgRed, styleBright, $board[row][letter], " ")
|
|
|
|
stdout.write("|")
|
|
|
|
stdout.write("\n---------------------\n\n")
|
|
|
|
proc main(): void =
|
|
var win: bool = false
|
|
|
|
while win == false:
|
|
randomize()
|
|
|
|
var board: Board
|
|
var guess: string
|
|
var round: int = 0
|
|
var word = sample(WORDBANK)
|
|
|
|
while round <= 5:
|
|
printBoard(board, word)
|
|
|
|
stdout.write("Your guess (5 letters): ")
|
|
guess = readLine(stdin)
|
|
|
|
if encode(guess) == BACKDOOR:
|
|
win = true
|
|
break
|
|
|
|
if len(guess) != 5:
|
|
stdout.styledWriteLine(fgRed, styleBright, "Your guess must be 5 letters")
|
|
else:
|
|
for letter in 0..4:
|
|
board[round][letter] = guess.toUpper()[letter]
|
|
|
|
round += 1
|
|
|
|
if guess.toUpper() == word:
|
|
printBoard(board, word)
|
|
stdout.styledWriteLine(fgGreen, styleBright, "You got it in ", $round, " tries!")
|
|
|
|
win = true
|
|
break
|
|
|
|
echo "Launching shell..."
|
|
|
|
discard execCmd("/bin/bash")
|
|
|
|
if isMainModule:
|
|
main() |