Сборка 8088, IBM PC DOS, 25 байтов
разобранное:
BA 0110 MOV DX, OFFSET GB ; point DX to 'Good','Bad' string
D1 EE SHR SI, 1 ; point SI to DOS PSP (80H)
02 04 ADD AL, [SI] ; add input string length to AL, set parity flag
7B 02 JNP DISP ; if odd parity, input was 'Bad' so jump to display 'Good'
02 D0 ADD DL, AL ; otherwise add string length as offset for 'Bad' string
DISP:
B4 09 MOV AH, 9 ; DOS display string function
CD 21 INT 21H ; call DOS API, write string to console
C3 RET ; return to DOS
GB DB 'Good$','Bad$'
Объяснение:
Просматривает длину входной строки (плюс начальный пробел), которую DOS хранит по адресу памяти 80H, и добавляет ее AL(изначально 0 в DOS ). Если 1в двоичном представлении длины строки присутствует нечетное число битов, флаг четности ЦП устанавливается на нечетное, и наоборот. Таким образом , входной строки ' Bad'длины 4( 0000 0100), является нечетность и входная строка ' Good'является 5( 0000 0101) даже на четность.
DXизначально установлен для указания на строку 'Good$Bad$', и если четность четна (что означает, что ввод был ' Good'), передвиньте указатель строки на эту длину ( 5), так что теперь он указывает на 'Bad$'. Если четность нечетна, ничего не делайте, поскольку она уже указывает на 'Good$'. Затем используйте DOS API для отображения $завершенной строки на консоли.
Пример:

Скачайте и протестируйте GOODBAD.COM или соберите из xxdдампа:
0000000: ba10 01d1 ee02 047b 0202 d0b4 09cd 21c3 .......{......!.
0000010: 476f 6f64 2442 6164 24 Good$Bad$