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$=
Це всередині складки, мета якої - обробка подвійних літер. Суміжні літери з одним і тим же кодом об'єднуються в одну одиницю, навіть якщо вони розділені символом a Hабо a W. Але це не може бути реалізовано тривіально, видаляючи всі рядки Hі 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).