http://articles.org.ru/cfaq/index.php?qid=2520
ИМХО, чушь полная.
Я бы сделал наверное так (не знаю pl/2, и не знаю, есть ли там такой оператор):
i = (i == 1 ? 2 : 1);
Так как по условию задача может имееть всего два ответа и это решение очень легко в данном случае читается. ИМХО

.
Если бы были шансы, что будут другие варианты входных данных и/или вариантов ответа, переделал бы через if/else if или switch для облегчения поддержки кода.
Плюс лишняя проверка не нужна (о которой говорится в 10м решении), хотя это уже некорректно, т.к. задано, что "i принимает значения 1 либо 2".