Комментарии 10
//словарь для цифр, так как они у нас используются, как служебные символы
private val dictionary = mutableListOf('⌂', 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'È','É')
Я правильно понимаю, что если вдруг в тесте окажется À, то кодирование/декодирование нормально работать не будет? Вы уверены, что это именно то, что хотел ваш преподаватель?
Выдь стоит попытаться скормить вашему алгоритму бинарник, то почти гарантировано он сломается.
0
Да, всё сломается. Но я исходил из расчёта, что эти символы всё-таки очень редкие и встречаться не будут. Ничего легче и быстрее в реализации не придумал на тот момент. Можно было бы экранировать цифры, но опять же какими символами. Да и выходные строки с кучей цифр идущих в разнобой получались бы длиннее исходных.
Если есть какие-то идеи, то готов выслушать.
И ещё. Готов проверить любой ваш бинарник.
Если есть какие-то идеи, то готов выслушать.
И ещё. Готов проверить любой ваш бинарник.
0
Например сделать RLE для байтовой последовательности [0..255], а для служебных символов использовать отрицательные значения. После этого задача свелась бы к переводу строки в байты и обратно. На мой взгляд статья откровенно слабовата, решение выбрано самое простое, по сути залита домашка. Вот если бы вы это же в 14 лет сделали… Однако ставлю плюс статье и в карму, ибо на хабре в последнее время не хватает программистов, на мой взгляд :)
+1
Например сделать RLE для байтовой последовательности [0..255], а для служебных символов использовать отрицательные значения.
Отрицательные значения у вас начинаются с единицы? Вот байтовое представление строки из двух букв: Пs
11010000 10011111 01110011
0
Сжимает ли утилита повторы цифр?
0
Для "красоты" можно так:
private fun assertFileContent(expectedFile: String, actualFile: String): Boolean {
val expectedList = File(expectedFile).readLines()
val actualList = File(actualFile).readLines()
if (expectedList.size != actualList.size) return false
return expectedList.asSequence().zip(actualList.asSequence()).all { (expected, actual) ->
expected == actual || expected.length < actual.length
}
}
(И мне кажется у вас там в оригинале ошибка, надо &&
вместо ||
)
0
Да, думаю можно и так.
Поэтому тут можно так оставить
А в последней строке моего кода сделать так
P.S. Код в статье обновил
(И мне кажется у вас там в оригинале ошибка, надо && вместо ||)Не помню, зачем я вообще второе условие вставил. Оно явно лишнее, так как разные по длине строки не могут быть равными.
Поэтому тут можно так оставить
if (expected[i] != actual[i]) return false
А в последней строке моего кода сделать так
return expected.size == actual.size
P.S. Код в статье обновил
0
Для консольных утилит попробуйте Spring Boot + picocli.
Эта комбинация даёт много возможностей и позволяет писать чистый код.
Вместо Spring можно взять Guice — на вкус и цвет…
-1
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Консольная утилита на Kotlin/Java с помощью библиотеки args4j