C (gcc)Knight, 51 bytes
O?C=cB;=iP;=x*'0'256;Wi;=xSx=aAiT+1Gx aT=iSiF1""xCc This challenge was made a lot easier because inputs were length 8 maximum. That way, we could have a string of length 256, where each index is the amount of times that byte appeared in a word. Then, we can just compare them.
Ungolfed and reorganized slightly, with copious comments:
# Create a new block (ie a niladic function) named `char_counts`. ; = char_counts BLOCK # Set `i` to the input from stdin. ; = input PROMPT # Set `x` to a string of 256 `0`s. The number at each # index keeps track of how many times that ascii code # has been seen. ; = counts * '0' 256 # while `input` isn't empty ; WHILE input # Set the variable `ascii_code` to the ascii codepoint # of the first character. If `ASCII` is given a string # that's more than one character long, it uses the first. ; = ascii_code ASCII input # Set the variable `new_count` to one more than the # previous value at `ascii_code` within `counts`. This # will coerce the `GET` result to an integer, which is # a nice added bonus. ; = new_count + 1 (GET counts ascii_code 1) # Update `counts` by replacing the character at `ascii_code` # (or, more precisely, the range `ascii_code..ascii_code+1`) # with the new, updated count. : = counts SET counts ascii_code 1 new_count # The last value of a `BLOCK` is its return value. Here, # we return the occurances of each byte. : counts # Finally, print out whether calling `char_counts` twice # in a row yields the same count of characters. : OUTPUT ? (CALL char_counts) (CALL char_counts)