какая-то интервьюшная задачка
Aug. 18th, 2024 03:12 pmНадо было написать base62. Только начал было писать, как мне бот навалял. Ну думаю, спасибо, Петрушка. Погнал аппликацию. Оказалась полная фигня. Ну вот, ну пришлось самому писать. Почему его нигде нету-то? Хм.
UPDATED
def base62(bytes: Array[Byte]): String = base62(new BigInteger(1, bytes)) private val b62 = BigInteger.valueOf(62) def base62(number: BigInteger, buffer: StringBuilder = new StringBuilder): String = { if (number.compareTo(BigInteger.ZERO) == 0) return if (buffer.isEmpty) "0" else buffer.toString.reverse val rem = number.mod(b62).intValue val ch = if (rem < 10) (rem + '0') else if (rem < 36) (rem - 10 + 'A') else (rem - 36 + 'a') buffer.append(ch.toChar) base62(number.divide(b62), buffer) }
UPDATED
def base62(number: BigInteger, buffer: String = ""): String = { if (number.compareTo(BigInteger.ZERO) != 0) { val divAndRem = number.divideAndRemainder(b62) val digit = divAndRem(1).intValue val shift = if (digit < 10) '0': Int else if (digit < 36) 'A' - 10 else 'a' - 36 base62(divAndRem(0), (digit+shift).toChar + buffer) } else if (buffer.isEmpty) "0" else buffer }