Решение на Markdown от Дойчин Атанасов

Обратно към всички решения

Към профила на Дойчин Атанасов

Резултати

  • 3 точки от тестове
  • 0 бонус точки
  • 3 точки общо
  • 2 успешни тест(а)
  • 5 неуспешни тест(а)

Код

package main
import "regexp"
import "strings"
type MarkdownParser struct {
rawText string
}
func NewMarkdownParser(text string) (parser *MarkdownParser) {
parser = new(MarkdownParser)
parser.rawText = text
return
}
func (mp *MarkdownParser) Headers() (headers []string) {
re := regexp.MustCompile(`(?m)^(.+)\n=+$`)
for _, match := range re.FindAllStringSubmatch(mp.rawText, -1) {
headers = append(headers, match[1])
}
re = regexp.MustCompile(`(?m)^\s*#\s*(.+?)(\s*#+)?$`)
for _, match := range re.FindAllStringSubmatch(mp.rawText, -1) {
headers = append(headers, match[1])
}
return
}
func (mp *MarkdownParser) SubHeadersOf(header string) (subHeaders []string) {
// Няма време :(
return
}
func (mp *MarkdownParser) Names() (names []string) {
re := regexp.MustCompile(`(?s)[^\.!?;]\s+(([А-ЯA-Z][а-яa-z]+[\s-]*){2,})`)
for _, match := range re.FindAllStringSubmatch(mp.rawText, -1) {
names = append(names, strings.Trim(match[1], "\t\n\v\f\r -"))
}
return
}
func (mp *MarkdownParser) PhoneNumbers() (phoneNumbers []string) {
re := regexp.MustCompile(`(?s)(\+?\s*[\d\(\)-]+[\d \(\)-]+)`)
for _, match := range re.FindAllStringSubmatch(mp.rawText, -1) {
phoneNumbers = append(phoneNumbers, strings.Trim(match[1], "\t\n\v\f\r -"))
}
return
}
func (mp *MarkdownParser) Links() (links []string) {
links_re := `([a-zA-Z]+://[a-zA-Z][\w\.\-]+\.[\w\.\-]+[a-zA-Z](:\d+)?(/[/\w\?#_&%]+)?)`
re := regexp.MustCompile(links_re)
for _, match := range re.FindAllStringSubmatch(mp.rawText, -1) {
links = append(links, match[1])
}
return
}
func (mp *MarkdownParser) Emails() (emails []string) {
email_re := `([\w][\w\.\+]+@[a-zA-Z][\w\.\-]+\.[\w\.\-]+[a-zA-Z])`
re := regexp.MustCompile(email_re)
for _, match := range re.FindAllStringSubmatch(mp.rawText, -1) {
emails = append(emails, match[1])
}
return
}
func (mp *MarkdownParser) GenerateTableOfContents() string {
// Няма време :(
return ""
}

Лог от изпълнението

--- FAIL: TestHeaders (0.00 seconds)
	solution_test.go:27: Not equal:
		  []string{"Two", "One", "#One # Two", "# Three # Four"}
		  []string{"One", "Two", "# Three # Four"}
FAIL
exit status 1
FAIL	_/tmp/d20140106-32701-9g8u08	0.024s
--- FAIL: TestSubHeadersOf (0.00 seconds)
	solution_test.go:50: Not equal:
		  []string(nil)
		  []string{"Dee-dee", "Boo-boo"}
	solution_test.go:62: Not equal:
		  []string(nil)
		  []string{"Three-four"}
FAIL
exit status 1
FAIL	_/tmp/d20140106-32701-9g8u08	0.011s
PASS
ok  	_/tmp/d20140106-32701-9g8u08	0.011s
PASS
ok  	_/tmp/d20140106-32701-9g8u08	0.040s
--- FAIL: TestLinks (0.00 seconds)
	solution_test.go:98: Not equal:
		  []string{"http://somelink.com:230", "https://www.google.bg/search?q"}
		  []string{"http://somelink.com:230", "https://www.google.bg/search?q=4531&ie=utf-8&oe=utf-8&rls=org.mozilla:en-US:official&client=%20firefox-a&gws_rd=asd&ei=some#somefragment"}
FAIL
exit status 1
FAIL	_/tmp/d20140106-32701-9g8u08	0.023s
--- FAIL: TestEmails (0.00 seconds)
	solution_test.go:107: Not equal:
		  []string{"validMail12@foobar.com", "_invalidmail@google.com", "toolongmailhereaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@gmail.com", "12mail@gmail.com"}
		  []string{"validMail12@foobar.com", "12mail@gmail.com"}
FAIL
exit status 1
FAIL	_/tmp/d20140106-32701-9g8u08	0.045s
--- FAIL: TestTableOfContents (0.00 seconds)
	solution_test.go:140: Not equal:
		  []string{}
		  []string{"1. Path", "1.1 Примери:"}
	solution_test.go:165: Not equal:
		  []string{}
		  []string{"1. One", "2. Two", "2.1 Three", "3. Four", "3.1 Five"}
	solution_test.go:188: Not equal:
		  []string{}
		  []string{"1. One", "1.1 Two", "1.1.1 Three", "1.1.1.1 Four", "1.1.1.1.1 Five", "1.1.1.1.1.1 Six"}
FAIL
exit status 1
FAIL	_/tmp/d20140106-32701-9g8u08	0.156s

История (2 версии и 0 коментара)

Дойчин обнови решението на 03.12.2013 16:51 (преди над 4 години)

+package main
+
+import "regexp"
+import "strings"
+
+type MarkdownParser struct {
+ rawText string
+}
+
+func NewMarkdownParser(text string) (parser *MarkdownParser) {
+ parser = new(MarkdownParser)
+ parser.rawText = text
+ return
+}
+
+func (mp *MarkdownParser) Headers() (headers []string) {
+ re := regexp.MustCompile(`(?m)^(.+)\n=+$`)
+ for _, match := range re.FindAllStringSubmatch(mp.rawText, -1) {
+ headers = append(headers, match[1])
+ }
+
+ re = regexp.MustCompile(`(?m)^\s*#\s*(.+?)(\s*#+)?$`)
+ for _, match := range re.FindAllStringSubmatch(mp.rawText, -1) {
+ headers = append(headers, match[1])
+ }
+ return
+}
+
+func (mp *MarkdownParser) SubHeadersOf(header string) (subHeaders []string) {
+
+ return
+}
+
+func (mp *MarkdownParser) Names() (names []string) {
+ re := regexp.MustCompile(`(?s)[^\.!?;]\s+(([А-ЯA-Z][а-яa-z]+[\s-]*){2,})`)
+ for _, match := range re.FindAllStringSubmatch(mp.rawText, -1) {
+ names = append(names, strings.Trim(match[1], "\t\n\v\f\r -"))
+ }
+ return
+}
+
+func (mp *MarkdownParser) PhoneNumbers() (phoneNumbers []string) {
+ re := regexp.MustCompile(`(?s)(\+?\s*[\d\(\)-]+[\d \(\)-]+)`)
+ for _, match := range re.FindAllStringSubmatch(mp.rawText, -1) {
+ phoneNumbers = append(phoneNumbers, strings.Trim(match[1], "\t\n\v\f\r -"))
+ }
+ return
+}
+
+func (mp *MarkdownParser) Links() (links []string) {
+ links_re := `([a-zA-Z]+://[a-zA-Z][\w\.\-]+\.[\w\.\-]+[a-zA-Z](:\d+)?(/[/\w\?#_&%]+)?)`
+ re := regexp.MustCompile(links_re)
+ for _, match := range re.FindAllStringSubmatch(mp.rawText, -1) {
+ links = append(links, match[1])
+ }
+ return
+}
+
+func (mp *MarkdownParser) Emails() (emails []string) {
+ email_re := `([\w][\w\.\+]+@[a-zA-Z][\w\.\-]+\.[\w\.\-]+[a-zA-Z])`
+ re := regexp.MustCompile(email_re)
+ for _, match := range re.FindAllStringSubmatch(mp.rawText, -1) {
+ emails = append(emails, match[1])
+ }
+ return
+}
+
+func (mp *MarkdownParser) GenerateTableOfContents() string {
+ return ""
+}

Дойчин обнови решението на 03.12.2013 16:57 (преди над 4 години)

package main
import "regexp"
import "strings"
type MarkdownParser struct {
rawText string
}
func NewMarkdownParser(text string) (parser *MarkdownParser) {
parser = new(MarkdownParser)
parser.rawText = text
return
}
func (mp *MarkdownParser) Headers() (headers []string) {
re := regexp.MustCompile(`(?m)^(.+)\n=+$`)
for _, match := range re.FindAllStringSubmatch(mp.rawText, -1) {
headers = append(headers, match[1])
}
re = regexp.MustCompile(`(?m)^\s*#\s*(.+?)(\s*#+)?$`)
for _, match := range re.FindAllStringSubmatch(mp.rawText, -1) {
headers = append(headers, match[1])
}
return
}
func (mp *MarkdownParser) SubHeadersOf(header string) (subHeaders []string) {
-
+ // Няма време :(
return
}
func (mp *MarkdownParser) Names() (names []string) {
re := regexp.MustCompile(`(?s)[^\.!?;]\s+(([А-ЯA-Z][а-яa-z]+[\s-]*){2,})`)
for _, match := range re.FindAllStringSubmatch(mp.rawText, -1) {
names = append(names, strings.Trim(match[1], "\t\n\v\f\r -"))
}
return
}
func (mp *MarkdownParser) PhoneNumbers() (phoneNumbers []string) {
re := regexp.MustCompile(`(?s)(\+?\s*[\d\(\)-]+[\d \(\)-]+)`)
for _, match := range re.FindAllStringSubmatch(mp.rawText, -1) {
phoneNumbers = append(phoneNumbers, strings.Trim(match[1], "\t\n\v\f\r -"))
}
return
}
func (mp *MarkdownParser) Links() (links []string) {
links_re := `([a-zA-Z]+://[a-zA-Z][\w\.\-]+\.[\w\.\-]+[a-zA-Z](:\d+)?(/[/\w\?#_&%]+)?)`
re := regexp.MustCompile(links_re)
for _, match := range re.FindAllStringSubmatch(mp.rawText, -1) {
links = append(links, match[1])
}
return
}
func (mp *MarkdownParser) Emails() (emails []string) {
email_re := `([\w][\w\.\+]+@[a-zA-Z][\w\.\-]+\.[\w\.\-]+[a-zA-Z])`
re := regexp.MustCompile(email_re)
for _, match := range re.FindAllStringSubmatch(mp.rawText, -1) {
emails = append(emails, match[1])
}
return
}
func (mp *MarkdownParser) GenerateTableOfContents() string {
+ // Няма време :(
return ""
}