25L.ržf12Qže₂‹*iε…[ ]…[@])yže.SÌè]5ô»
Try it online or try it online with own specified month / day.
Explanation:
25L # Push a list in the range [1,25]
.r # Randomly shuffle it
žf # Push the current month
12Q # Check if it's equal to 12 (thus December)
že # Push the current day
₂‹ # Check if it's smaller than 26
*i # And if both are truthy:
ε # Map each value in the list to:
…[@] # Push string "[@]"
…[ ] # Push string "[ ]"
) # Wrap all three into a list: [value,"[@]","[ ]"]
y # Push the value `y`
že # Push the current day again
.S # Compare the two values (-1 if y<day; 0 if y==day; 1 if y>day)
Ì # Increase it by 2 (1 if y<day; 2 if y==day; 3 if y>day)
è # Use it to (0-based) index into the list (with wraparound,
# so the 3 results in the first item)
] # Close the map and if-statement
5ô # Split the list into sublists of size 5
» # Join each inner list by spaces, and these strings by newlines
# (after which the result is output implicitly)