Guest User

Untitled

a guest
Feb 17th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.85 KB | None | 0 0
  1. @kotlinx.serialization.Serializable
  2. open class Node(val frequency: Int, var code: String = "", val left: Node, val right: Node): Comparable<Node>{
  3. override fun compareTo(other: Node): Int {
  4. return Integer.compare(frequency, other.frequency)
  5. }
  6.  
  7. open fun createCode(code_: String){
  8. code = code_
  9. }
  10. }
  11.  
  12. @kotlinx.serialization.Serializable
  13. class NodeTwoLeaf(val l: Node, val r: Node): Node(l.frequency+r.frequency, "", l, r){
  14. override fun createCode(code_: String) {
  15. super.createCode(code_)
  16. left.createCode(code + "0")
  17. right.createCode(code + "1")
  18. }
  19. }
  20.  
  21. class Leaf(val symb: Char, count: Int): Node(count){
  22. override fun createCode(code_: String) {
  23. super.createCode(code_)
  24. }
  25. }
  26.  
  27. import java.util.*
  28.  
  29. class Haff(strings: List<String>){
  30. val countChars = hashMapOf<Char, Int>()
  31. val priorityQuenue: PriorityQueue<Node> = PriorityQueue()
  32. val codes = hashMapOf<Char, Node>()
  33.  
  34. init {
  35. for(line in strings)
  36. createCountChars(line)
  37. leafAndQuenue()
  38. createTreeCodes()
  39. }
  40.  
  41. fun createCountChars(text: String){
  42. for(char in text){
  43. if (countChars[char] != null)
  44. countChars.set(char, countChars[char]!!.inc())
  45. else {
  46. countChars.set(char, 1)
  47. }
  48. }
  49. }
  50.  
  51. fun leafAndQuenue(){
  52. for(el in countChars){
  53. val leaf = Leaf(el.key, el.value)
  54. codes.set(el.key, leaf)
  55. priorityQuenue.add(leaf)
  56. }
  57. }
  58.  
  59. fun createTreeCodes(){
  60. while(priorityQuenue.size > 1){
  61. val first: Node = priorityQuenue.poll()
  62. val second: Node = priorityQuenue.poll()
  63. val node = NodeTwoLeaf(first, second)
  64. priorityQuenue.add(node)
  65. }
  66. val root: Node = priorityQuenue.poll()
  67. if(countChars.size == 1){
  68. root.code = "0"
  69. } else {
  70. root.createCode("")
  71. }
  72. }
  73.  
  74. val jsonData = Json.stringify(Leaf.serializer(), a.root)
Add Comment
Please, Sign In to add comment