Задача взята отсюда.
Условие
Зашифруйте текст из входного потока, заменяя каждый символ результатом сложения по модулю 2 его кода и кода предыдущего зашифрованного символа. Первый символ шифруется инверсией бит.
Входные данные
Символьная последовательность.
Выходные данные
Зашифрованная символьная последовательность.
Тесты :
Входные данные | Выходные данные |
Where is the table? | a8 c0 a5 d7 b2 92 fb 88 a8 dc b4 d1 f1 85 e4 86 ea 8f b0 |
What a nice day! | a8 c0 a1 d5 f5 94 b4 da b3 d0 b5 95 f1 90 e9 c8 |
Glad to see you! | b8 d4 b5 d1 f1 85 ea ca b9 dc b9 99 e0 8f fa db |
Код на Haxe:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
package; import cpp.Int8; import cpp.Lib; import haxe.io.Bytes; class Main { static function main() { var c:Int8 = Sys.stdin().readInt8(); c = ~c; var out:Bytes = Bytes.alloc(1); out.setUInt16(0, c); Sys.stdout().writeString(out.toHex()); var c1:Int8; while (true) { c1 = Sys.stdin().readInt8(); if (c1 == "\n".charCodeAt(0)) break; c1 = c ^ c1; out.setUInt16(0, c1); Sys.stdout().writeString(" " + out.toHex()); c = c1; } Sys.stdout().writeString("\n"); } } |
Ход решения:
Считываем код первого символа, инвертируем его и выводим в шестнадцатеричной системе счисления:
12 13 14 15 16 |
var c:Int8 = Sys.stdin().readInt8(); c = ~c; var out:Bytes = Bytes.alloc(1); out.setUInt16(0, c); Sys.stdout().writeString(out.toHex()); |
Вводим вторую переменную и запускаем цикл, который будет работать, пока считывание не дойдет до переноса строки. Здесь мы считываем код очередного символа, складываем его по модулю 2 с шифром предыдущего символа, выводим через пробел шестнадцатеричное представление полученного кода и записываем этот код в первую переменную:
17 18 19 20 21 22 23 24 25 26 |
var c1:Int8; while (true) { c1 = Sys.stdin().readInt8(); if (c1 == "\n".charCodeAt(0)) break; c1 = c ^ c1; out.setUInt16(0, c1); Sys.stdout().writeString(" " + out.toHex()); c = c1; } |
После окончания цикла выводим перенос строки и завершаем программу.
27 |
Sys.stdout().writeString("\n"); |
Ссылки:
Рабочий код для тестирования на try.haxe.org: Try Haxe !
- e-olimp 3966. An ardent collector of butterflies - 13.06.2017
- e-olymp 1078. The line degree - 12.06.2017
- A704 - 11.06.2017