Skip to content

Commit

Permalink
Merge pull request #30 from mablo/master
Browse files Browse the repository at this point in the history
Polish language
  • Loading branch information
moul authored Jul 18, 2018
2 parents cc61681 + 15c74b5 commit b5a5b9f
Show file tree
Hide file tree
Showing 2 changed files with 218 additions and 0 deletions.
112 changes: 112 additions & 0 deletions pl-pl.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
package ntw

import (
"fmt"
"strings"
)

func init() {
// register the language
Languages["pl-pl"] = Language{
Name: "Polish",
Aliases: []string{"pl", "pl-pl", "pl_PL", "polish"},
Flag: "🇵🇱",

IntegerToWords: IntegerToPlPl,
}
}

func IntegerToPlPl(input int) string {
var polishMegas = [][]string{
{"", "", ""},
{"tysiąc", "tysiące", "tysięcy"},
{"milion", "miliony", "milionów"},
{"miliard", "miliardy", "miliardów"},
{"bilion", "biliony", "bilionów"},
{"biliard", "biliardy", "biliardów"},
{"trylion", "tryliony", "trylionów"},
{"tryliard", "tryliardy", "tryliardów"},
{"kwadrylion", "kwadryliony", "kwadrylionów"},
{"kwintylion", "kwintyliony", "kwintylionów"},
{"sekstylion", "sekstyliony", "sekstylionów"},
{"septylion", "septyliony", "septylionów"},
{"oktylion", "oktyliony", "oktylionów"},
{"nonylion", "nonyliony", "nonylionów"},
{"decylion", "decyliony", "decylionów"}}
var polishUnits = []string{"", "jeden", "dwa", "trzy", "cztery", "pięć", "sześć", "siedem", "osiem", "dziewięć"}
var polishTens = []string{"", "dziesięć", "dwadzieścia", "trzydzieści", "czterdzieści", "pięćdziesiąt", "sześćdziesiąt", "siedemdziesiąt", "osiemdziesiąt", "dziewięćdziesiąt"}
var polishTeens = []string{"dziesięć", "jedenaście", "dwanaście", "trzynaście", "czternaście", "piętnaście", "szesnaście", "siedemnaście", "osiemnaście", "dziewiętnaście"}
var polishHundreds = []string{"", "sto", "dwieście", "trzysta", "czterysta", "pięćset", "sześćset", "siedemset", "osiemset", "dziewięćset"}

//log.Printf("Input: %d\n", input)
words := []string{}

if input < 0 {
words = append(words, "minus")
input *= -1
}

// split integer in triplets
triplets := integerToTriplets(input)

// zero is a special case
if len(triplets) == 0 {
return "zero"
}

// iterate over triplets
for idx := len(triplets) - 1; idx >= 0; idx-- {
triplet := triplets[idx]
//log.Printf("Triplet: %d (idx=%d)\n", triplet, idx)

if triplet == 0 {
continue
}

// three-digits
hundreds := triplet / 100 % 10
tens := triplet / 10 % 10
units := triplet % 10

if hundreds > 0 {
words = append(words, polishHundreds[hundreds])
}

if tens == 0 && units == 0 {
goto tripletEnd
}

switch tens {
case 0:
words = append(words, polishUnits[units])
case 1:
words = append(words, polishTeens[units])
break
default:
if units > 0 {
word := fmt.Sprintf("%s %s", polishTens[tens], polishUnits[units])
words = append(words, word)
} else {
words = append(words, polishTens[tens])
}
break
}

tripletEnd:
if triplet == 1 {
words = append(words, polishMegas[idx][0])
continue
}

megaIndex := 2
if units >= 2 && units <= 4 {
megaIndex = 1
}

if mega := polishMegas[idx][megaIndex]; mega != "" {
words = append(words, mega)
}
}

return strings.TrimSpace(strings.Join(words, " "))
}
106 changes: 106 additions & 0 deletions pl-pl_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
package ntw

import (
"testing"

. "github.com/smartystreets/goconvey/convey"
)

func TestIntegerToPlPl(t *testing.T) {
Convey("Testing IntegerToPlPl()", t, FailureContinues, func() {
testing := map[int]string{
0: "zero",
1: "jeden",
2: "dwa",
3: "trzy",
4: "cztery",
5: "pięć",
6: "sześć",
7: "siedem",
8: "osiem",
9: "dziewięć",
10: "dziesięć",
11: "jedenaście",
12: "dwanaście",
13: "trzynaście",
14: "czternaście",
15: "piętnaście",
16: "szesnaście",
17: "siedemnaście",
18: "osiemnaście",
19: "dziewiętnaście",
20: "dwadzieścia",
21: "dwadzieścia jeden",
22: "dwadzieścia dwa",
23: "dwadzieścia trzy",
24: "dwadzieścia cztery",
25: "dwadzieścia pięć",
26: "dwadzieścia sześć",
27: "dwadzieścia siedem",
28: "dwadzieścia osiem",
29: "dwadzieścia dziewięć",
30: "trzydzieści",
31: "trzydzieści jeden",
32: "trzydzieści dwa",
39: "trzydzieści dziewięć",
42: "czterdzieści dwa",
80: "osiemdziesiąt",
90: "dziewięćdziesiąt",
99: "dziewięćdziesiąt dziewięć",
100: "sto",
101: "sto jeden",
111: "sto jedenaście",
120: "sto dwadzieścia",
121: "sto dwadzieścia jeden",
200: "dwieście",
300: "trzysta",
400: "czterysta",
500: "pięćset",
600: "sześćset",
700: "siedemset",
800: "osiemset",
900: "dziewięćset",
909: "dziewięćset dziewięć",
919: "dziewięćset dziewiętnaście",
990: "dziewięćset dziewięćdziesiąt",
999: "dziewięćset dziewięćdziesiąt dziewięć",
1000: "jeden tysiąc",
1337: "jeden tysiąc trzysta trzydzieści siedem",
2000: "dwa tysiące",
4000: "cztery tysiące",
5000: "pięć tysięcy",
11000: "jedenaście tysięcy",
21000: "dwadzieścia jeden tysięcy",
28000: "dwadzieścia osiem tysięcy",
31000: "trzydzieści jeden tysięcy",
32000: "trzydzieści dwa tysiące",
39000: "trzydzieści dziewięć tysięcy",
42000: "czterdzieści dwa tysiące",
999000: "dziewięćset dziewięćdziesiąt dziewięć tysięcy",
999999: "dziewięćset dziewięćdziesiąt dziewięć tysięcy dziewięćset dziewięćdziesiąt dziewięć",
1000000: "jeden milion",
2000000: "dwa miliony",
4000000: "cztery miliony",
5000000: "pięć milionów",
100100100: "sto milionów sto tysięcy sto",
500500500: "pięćset milionów pięćset tysięcy pięćset",
606606606: "sześćset sześć milionów sześćset sześć tysięcy sześćset sześć",
999000000: "dziewięćset dziewięćdziesiąt dziewięć milionów",
999000999: "dziewięćset dziewięćdziesiąt dziewięć milionów dziewięćset dziewięćdziesiąt dziewięć",
999999000: "dziewięćset dziewięćdziesiąt dziewięć milionów dziewięćset dziewięćdziesiąt dziewięć tysięcy",
999999999: "dziewięćset dziewięćdziesiąt dziewięć milionów dziewięćset dziewięćdziesiąt dziewięć tysięcy dziewięćset dziewięćdziesiąt dziewięć",
1174315110: "jeden miliard sto siedemdziesiąt cztery miliony trzysta piętnaście tysięcy sto dziesięć",
1174315119: "jeden miliard sto siedemdziesiąt cztery miliony trzysta piętnaście tysięcy sto dziewiętnaście",
15174315119: "piętnaście miliardów sto siedemdziesiąt cztery miliony trzysta piętnaście tysięcy sto dziewiętnaście",
35174315119: "trzydzieści pięć miliardów sto siedemdziesiąt cztery miliony trzysta piętnaście tysięcy sto dziewiętnaście",
935174315119: "dziewięćset trzydzieści pięć miliardów sto siedemdziesiąt cztery miliony trzysta piętnaście tysięcy sto dziewiętnaście",
2935174315119: "dwa biliony dziewięćset trzydzieści pięć miliardów sto siedemdziesiąt cztery miliony trzysta piętnaście tysięcy sto dziewiętnaście",
}
for input, expectedOutput := range testing {
So(IntegerToPlPl(input), ShouldEqual, expectedOutput)
}

// testing negative values
So(IntegerToPlPl(-1), ShouldEqual, "minus jeden")
})
}

0 comments on commit b5a5b9f

Please sign in to comment.