«" „“ „„„“““ „“ „“ „„„“ „„„“ „“ „“““ „„„“““ „“““ „“ „“ „“ „“ "» " «» «» «» «» «„“„“„“„“„„„“„“„“““„“» «» «» «» «» «„“„“„“„“» «» «» «» «» «„“„“„“„“» «» «» «» «» «„“„“„“„“» «» «» «» «» "„“»«» «» «„„“ „“ „“ „““» «» «» «» «„„“ „“ „“ „““» «» «» «» "" „“ „“ „“ „“ «" „“ „“ „“»«»«»«»«»«„“ „“ „“ „“»«»«»«»«»«„“ „“ „“ „“»«»«» «» «» «„“„“„“„“» «» «» «» «» «„“„“„“„“» «» «» «» «» "„“„“»«» «„„“ „“ „“ „““» «» «» «» «„„“ „“ „“ „““» «» «» «» «„„“ „“ „“ „““» «» «» «» «„„“ „“ „“ „““» «» «» «» «„„“ „“ „“ „““» «» «» «» "" „“ „“ „“ «» «„“„“„“„“» «» «» «» «» «„“„“„“„“» «» «» «» «» "„“„“„“»«„„“ „“ „“ „““» «» «» «» «„„“ „“ „“ „““» «» «» «» «„„“ „“ „“ „““» «» «» «» «„„“ „“ „“ „““» «» «» «» «„„“ „“ „“ „““» «» «» «» "" „“ „“ „“ „“ «" „“ „“ „“»«»«»«»«»«„“ „“ „“ „“»«»«»«»«»«„“ „“ „“ „“»«» «» «» «» «„“„“„“„“» «» «» «» «» «„“„“„“„“» «» «» «» «» "„“„“» «» «„„“ „“ „“ „““» «» «» «» «„„“ „“ „“ „““» «» «» «» «„“"»„“„“„“" «» «„“„“„“» «» «„„“ „“ „“ „““» «» «» «» «„„“ „“ „“ „““» «» «»«» «" „“ „“ „“»«„“ „„„“ „“ „“ „“ „„„“ „“ „“““ „“““ „“ „“ „“ "» „“ „“ «» «» «„“„“„“„“» «» «» «» «» «„“„“„“"»„“«"„“„“„“„“» "„“„“" «" „“ „„„“ „“ „“ „“““ „“ „“ „“ „„„“ „“ „“ „“““ „“ „“ „“»" „“ „“«» «» «„“„“„“„“» «» «» «» "" „“ „„„“ „“ „“ „“ „„„“ „“ „“““ „“““ „“ «» «» «„„“ „“ „“ „““» «» «» «» «„„“ „“ „“ „““» «» «» «» "" „“ „“ „“ „“ «" „“ „“ "» „“ „„„“ „“ „“ „“ „„„“ „“ „“““ „“““ „“ „“ „“ «" „“»«» «» «„„“ „“ „“ „““» «» «» «» «„„“ „“ „“ „““» «» «» «» "" „“ „“ „“ „“ «" „“ „“ „“»«»«»«»«»«„“ „“ „“ „“»«»«»«»«»«„“ „“ „“ „“»«»«» «» «" „“ „„„“ „“ „“ „“ „„„“ „“ „“““ „“““ „“ „“ „“»" „“ „“ „“ „“«" „“ „“ „“»«»«»«»«»«„“ „“ „“ "» „“ «" „“ „“ „“ „“ „„„“ „“ „“““» «„„“ „“ „“ „““» «» «» «» «„„“ „“ „“ „““» «» «» «» «" „“ „“ „“»«„“ "» «» «» «» «» «„„“ „“ „““» «» «„“„“„“„“» «» «» «» «» "„“„“„“»«„„“ „“ „“ „““» «» «» «» «„„“ „“ „“ „““» «» «» «» «„“"»„“„“„“„“" «" „“ „“ „“»«»«»«»«»«„“ „“ „“ „“»«»«»«»«»«„“ „“ „“ „“»«»«» «» «» «„“„“„“„„„“„„„“„“„“„“““„“““„“» «» «" „“»«„“ "»«» «" „“»«„“ "» „“ «" „“»«„“ "» „“ „“ „“ „“ „„„“““ „„„“““ "" „“ „“ «» «„“» «» «„„“ „“ „“ „““» «» «» «» «„“» «» «"»«„“ „“ „“ „„„“““ "» «» «„„“ „“ „““» «„„“ „„„“““ „“ „“ „““» «„„“ „„„“ „““““» «» «»«» «„“» «» «„“„„„“„“„“““"»„“„„„“„“„“„“““„“
объяснение
Эта программа эквивалентна псевдокоду, например:
while (cp = (ch = read)) + 1 {
(
(cp -= 65) ? // A
(cp -= 4) ? // E
(cp -= 4) ? // I
(cp -= 6) ? // O
(cp -= 6) ? // U
(cp -= 12) ? // a
(cp -= 4) ? // e
(cp -= 4) ? // i
(cp -= 6) ? // o
(cp - 6) ? // u
0
: 1
: 1
: 1
: 1
: 1
: 1
: 1
: 1
: 1
: 1
) ? ((--vs)+4) ? print(ch) : (++vs) : {
print(ch)
vs = 0
}
}
со следующими назначениями переменных:
0 (unused) (13 bytes)
1 cp ( 4 bytes; occurs 20× in the code)
2 vs ( 7 bytes; occurs 5× in the code)
3 ch (10 bytes; occurs 3× in the code)
Как видите, я избежал переменной slot 0, потому что 0
такая длинная константа для записи.
Поэтому мы читаем каждый символ и сохраняем значение в обоих cp
и ch
. Мы будем вносить изменения, cp
но будем держать их ch
так, чтобы при необходимости их можно было распечатать. Мы последовательно вычитаем числа 65, 4, 4, 6 и т. Д., cp
Чтобы проверить, является ли это каждый из 10 возможных гласных символов в ASCII (обратите внимание, что самый последний из них не должен быть назначением).
vs
всегда содержит на 3 меньше, чем количество гласных, которые еще могут быть напечатаны. Начинается с 0
3 гласных. Когда он достигает -3
, мы перестаем печатать гласные.
Если мы сталкиваемся с не гласным (включая пробел), мы выполняем, print(ch)
а затем vs = 0
. Как вы, наверное, догадались, это сбрасывает счетчик гласных.
Если мы встречаемся с гласным , мы исполняем ((--vs)+4) ? print(ch) : (++vs)
. Давайте разберем это:
- декремент
vs
;
- если значение сейчас
-4
, мы зашли слишком далеко, поэтому не печатайте ничего, а увеличивайте vs
обратно, -3
чтобы мы по- прежнему отказывались печатать гласные;
- в противном случае напечатайте символ.
aaYYAAaaaAERGH
.