GolfScript (74 символа)
Эта реализация использует волшебную строку, которая имеет непечатаемые символы. В xxdформе вывода это
0000000: 7b2e 313c 5c5b 7b36 3326 2741 4c15 c252 {.1<\[{63&'AL..R
0000010: d056 4c1e 8227 3235 3662 6173 6520 3862 .VL..'256base 8b
0000020: 6173 653d 7d25 7b2e 373d 2432 243d 7b3b ase=}%{.7=$2$={;
0000030: 7d2a 7d2a 5d31 3e31 2c2d 5b30 2e2e 5d2b }*}*]1>1,-[0..]+
0000040: 333c 7b2b 7d2f 7d3a 533b 3<{+}/}:S;
Без использования базовых изменений для сжатия списка 3-битных чисел, было бы
{.1<\[{63&[1 0 1 2 3 0 1 2 7 0 2 2 4 5 5 0 1 2 6 2 3 0 1 7 2 0 2]=}%{.7=$2$={;}*}*]1>1,-[0..]+3<{+}/}:S;
Онлайн тест
Это в основном куча скучных петель, но есть один интересный трюк:
.7=$2$=
Это внутри сгиба, целью которого является обработка двойных букв. Смежные буквы с одинаковым кодом объединяются в одну единицу, даже если они разделены Hили W. Но это не может быть реализовано тривиально, удаляя все Hs и Ws из строки, потому что в (по общему признанию, маловероятно в реальной жизни, но не исключено спецификацией) случае, что первая буква является Hили, Wа вторая буква является согласной нам не нужно исключать эту согласную при удалении первой буквы. (Я добавил тестовый примерWM который должен дать, W500чтобы проверить это).
Таким образом, я справляюсь с тем, чтобы сделать сгиб и удалить каждую букву, отличную от первой (удобный побочный эффект использования сгиба), которая либо равна предыдущей, либо равна 7внутреннему коду дляH и W.
Учитывая aи bв стеке, наивный способ проверить, a == b || b == 7будет ли
.2$=1$7=+
Но есть двухсимвольное сохранение с использованием вычисленной копии из стека:
.7=$
Если bравно, 7то копирует a; в противном случае он копирует b. Таким образом, к тому времени, сравнивая с, aмы получаем гарантированное истинное значение, если оно bбыло 7независимо от значения a. (До того, как весят педанты, у GolfScript нет NaN).