Created
October 4, 2022 10:02
-
-
Save asissuthar/cf8fcf0b3be968b1f341e537eb423163 to your computer and use it in GitHub Desktop.
Convert country code (https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) to Flag emoji using Kotlin functions.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| fun countryFlag(code: String) = code | |
| .uppercase() | |
| .split("") | |
| .filter { it.isNotBlank() } | |
| .map { it.codePointAt(0) + 0x1F1A5 } | |
| .joinToString("") { String(Character.toChars(it)) } | |
| println(countryFlag("in")) | |
| // output ๐ฎ๐ณ |
Oh so you reset it to 0, making it the beginning of the range.
Using joinToString means it's multiple Unicode characters. According to the standard, supposed to always be 2 , no?
If so, this shows why the other implementation seems like this instead:
val firstLetter: Int = Character.codePointAt(countryCodeUpperCase, 0) + 0x1F1A5
val secondLetter: Int = Character.codePointAt(countryCodeUpperCase, 1) + 0x1F1A5
return String(Character.toChars(firstLetter)) + String(Character.toChars(secondLetter))
According to the standard, supposed to always be 2 , no?
Right
If so, this shows why the other implementation seems like this instead:
I wanted to do it in Kotlin way ๐
I see. Thanks.
So if I want to check the values, that it is in the range, each of the 2 characters should be between 0x1F1E6 and 0x1F1FF , right?
That's about the output.
The input should just be between A and Z, right (from AA to ZZ)?
each of the 2 characters should be between 0x1F1E6 and 0x1F1FF , right?
Correct
OK thanks
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Yes
For example
Simple alphabet A = 65 = 0x41
Regional indicator symbol ๐ฆ = 127462 = 0x1F1E6
๐ฆ - A = 127462 - 65 = 127397 = 0x1F1A5differenceThis is how 2 character country code generated for flag emoji.
Imagine there are only two countries. IN and US. Rest of countries are yet to be allocated.
How would you build logic to validate that? It can be done if someone maintain table for that.
It will require us to build a library for that instead of using simple function to generate flag.