Snippets

cia_rana KPTE

Created by cia_rana last modified
package main

import (
    "fmt"
    "strings"
    "sort"
    "strconv"
)

type EmojiUser struct {
    Name string
    Emojis []string
}

type EmojiUsers []EmojiUser

func (e EmojiUsers) Len() int {
    return len(e)
}

func (e EmojiUsers) Swap(i, j int) {
    e[i], e[j] = e[j], e[i]
}

type ByEmojisSize struct {
    EmojiUsers
}

func (b ByEmojisSize) Less(i, j int) bool {
    return len(b.EmojiUsers[i].Emojis) < len(b.EmojiUsers[j].Emojis)
}

func input() (results []string) {
    for {
        var line string
        if _, err := fmt.Scanln(&line); err != nil {
            return
        }
        results = append(results, line)
    }
}

func uniqueStrings(args []string) (results []string) {
    encounterd := map[string]bool{}
    for _, arg := range args {
        if !encounterd[arg] {
            encounterd[arg] = true
            results = append(results, arg)
        }
    }
    return
}

func main() {
    input_data := input()
    var emojiUsers EmojiUsers = make([]EmojiUser, 0, len(input_data))
    for _, line := range input_data {
        split_data := strings.Split(line, ",")
        emojiUsers = append(emojiUsers, EmojiUser{split_data[0], uniqueStrings(split_data[1:])})
    }
    sort.Sort(sort.Reverse(ByEmojisSize{emojiUsers}))
    for _, emojiUser := range emojiUsers {
        fmt.Println(emojiUser.Name + "," + strconv.Itoa(len(emojiUser.Emojis)));
    }
}
puts $<.map{|l|u,*e=l.scan /\w+/;[-s=e.size,[u,s]*?,]}.sort.map &:last

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.