← Home
For problem statement at 0-999/200-299/200-209/206/problemD1.txt this is a correct solution, but verifier at 0-999/200-299/200-209/206/verifierD1.go ends with test 1 failed
input:
1
Trade
Wheat prices rising worldwide.
Investors stay cautious.

expect:
1
actual:
3

exit status 1 can you fix the verifier? package main

import (
	"fmt"
	"io"
	"os"
	"strings"
	"unicode"
)

type K struct {
	s string
	w int
}

var lawWords = []K{
	{"закон", 5}, {"кодекс", 7}, {"судеб", 7}, {"суд", 4}, {"арбитраж", 8},
	{"правов", 6}, {"правоотнош", 7}, {"юрид", 6}, {"конституц", 8},
	{"гражданск", 4}, {"уголов", 7}, {"административ", 6}, {"процессуал", 6},
	{"нотари", 7}, {"правонаруш", 8}, {"постановлен", 4}, {"приказ", 3},
	{"решени", 2}, {"иск", 5}, {"истец", 6}, {"ответчик", 6}, {"прокур", 6},
	{"следств", 5}, {"договор", 2}, {"обязанност", 3}, {"лиценз", 3},
	{"законодатель", 7}, {"норматив", 5}, {"федеральн", 2}, {"стать", 3},
	{"подзакон", 6}, {"конвенц", 4}, {"презумпц", 6}, {"подсудн", 6},
	{"юрисдикц", 6}, {"собственност", 3}, {"правоохран", 6}, {"осужден", 7},
	{"наказан", 6}, {"преступ", 7}, {"правомер", 6}, {"диспозит", 5},
	{"санкц", 5}, {"ответственност", 6},
	{" legal ", 5}, {" court ", 6}, {" code ", 5}, {" constitution", 7},
	{" criminal", 6}, {" civil ", 4}, {" administrative", 5},
	{" jurisdiction", 6}, {" plaintiff", 6}, {" defendant", 6},
	{" regulation", 5}, {" statute", 6}, {" lawyer", 6}, {" jurisprud", 7},
}

var lawPhrases = []K{
	{"федеральный закон", 20}, {"арбитражный суд", 20}, {"уголовный кодекс", 20},
	{"гражданский кодекс", 20}, {"кодекс российской федерации", 20},
	{"постановление правительства", 15}, {"судебное решение", 15},
	{"юридическое лицо", 10}, {"правовое регулирование", 12},
	{"нормативно прав", 12}, {"административн правонаруш", 15},
	{"гражданско прав", 12}, {"уголовн ответствен", 12},
	{"правовое положение", 12}, {"договор купли продажи", 8},
	{"конституционный суд", 18}, {"апелляционн жалоб", 15},
	{"кассационн жалоб", 15}, {"исковое заявление", 15},
	{"трудовой кодекс", 18}, {"семейный кодекс", 18},
	{"гражданское право", 14}, {"административное право", 14},
	{"уголовное право", 14},
	{" rule of law ", 16}, {" legal entity ", 12}, {" civil law ", 14},
	{" criminal law ", 14},
}

var finWords = []K{
	{"бухгалтер", 10}, {"учетн", 4}, {"учет", 3}, {"аудит", 9}, {"финанс", 8},
	{"банк", 7}, {"банков", 7}, {"кредит", 7}, {"налог", 6}, {"бюджет", 7},
	{"инвест", 7}, {"страхов", 6}, {"актив", 6}, {"пассив", 6}, {"баланс", 8},
	{"прибыл", 6}, {"убыт", 6}, {"денеж", 6}, {"депозит", 8}, {"валют", 6},
	{"касс", 6}, {"платеж", 6}, {"счет", 5}, {"отчетн", 7}, {"отчет", 4},
	{"себестоим", 8}, {"амортиз", 7}, {"доход", 5}, {"расход", 5},
	{"капитал", 6}, {"облигац", 7}, {"дивиденд", 7}, {"лизинг", 6},
	{"ипотек", 6}, {"заем", 5}, {"задолж", 6}, {"налогооблож", 7},
	{"дебитор", 7}, {"кредитор", 7}, {"рентаб", 6}, {"эконом", 3},
	{"фонд", 4}, {"хозяйствен", 4}, {"калькуляц", 7}, {"смет", 6},
	{"ликвидн", 6}, {"фискал", 6}, {"маржа", 5}, {"мсфо", 9}, {"рсбу", 9},
	{"бюджетир", 7}, {"финрезульт", 7},
	{" accounting", 9}, {" audit", 9}, {" financial", 8}, {" bank", 7},
	{" credit", 7}, {" budget", 7}, {" tax", 6}, {" investment", 7},
	{" capital", 6}, {" balance", 8}, {" asset", 6}, {" liabilit", 6},
	{" profit", 6}, {" loss", 6}, {" cash", 6}, {" loan", 6},
	{" insurance", 6}, {" equity", 6}, {" debt", 6},
}

var finPhrases = []K{
	{"бухгалтерский учет", 22}, {"бухгалтерская отчетность", 20},
	{"финансовая отчетность", 18}, {"денежные средства", 15},
	{"аудиторская проверка", 16}, {"кредитная организация", 15},
	{"банковская деятельность", 15}, {"дебиторская задолженность", 18},
	{"кредиторская задолженность", 18}, {"финансовый результат", 15},
	{"учетная политика", 15}, {"основные средства", 14},
	{"оборотные активы", 14}, {"собственный капитал", 14},
	{"уставный капитал", 14}, {"денежный поток", 14},
	{"налоговая база", 14}, {"кассовые операции", 14},
	{"налоговый учет", 18}, {"бухгалтерский баланс", 20},
	{"отчет о прибылях", 18}, {"финансово хозяйствен", 16},
	{"первичные документы", 12}, {"учет затрат", 16},
	{"калькулирование себестоимости", 20}, {"анализ финансов", 16},
	{"налог на", 8}, {"налоговое планирование", 12},
	{"расчетный счет", 12},
	{" financial reporting", 18}, {" cash flow", 14},
	{" balance sheet", 18}, {" income statement", 16},
	{" accounting policy", 16}, {" financial result", 14},
}

var tradeWords = []K{
	{"торгов", 10}, {"товар", 9}, {"товаровед", 10}, {"продаж", 8},
	{"покуп", 7}, {"магаз", 7}, {"рынок", 5}, {"маркет", 7}, {"постав", 6},
	{"склад", 6}, {"оптов", 8}, {"рознич", 8}, {"покупател", 7},
	{"клиент", 4}, {"коммерц", 7}, {"ассортимент", 8}, {"цено", 4},
	{"экспорт", 6}, {"импорт", 6}, {"продукц", 4}, {"закуп", 6},
	{"реализац", 7}, {"сбыт", 7}, {"услуг", 3}, {"потребител", 6},
	{"конкурен", 5}, {"спрос", 6}, {"предложен", 5}, {"мерчендайз", 10},
	{"витрин", 6}, {"поставщик", 7}, {"товародвиж", 9},
	{"товарооборот", 10}, {"ярмарк", 5}, {"дистриб", 7}, {"логист", 5},
	{"реклама", 4}, {"бренд", 4}, {"ритейл", 8},
	{" retail", 8}, {" wholesale", 8}, {" sale", 5}, {" sales", 6},
	{" shop", 5}, {" store", 5}, {" market", 4}, {" trade", 8},
	{" commerce", 8}, {" customer", 5}, {" product", 4},
	{" seller", 5}, {" consumer", 4}, {" supplier", 6},
	{" inventory", 6}, {" marketing", 7}, {" merchandising", 9},
	{" purchase", 6}, {" price", 4},
}

var tradePhrases = []K{
	{"розничная торгов", 20}, {"оптовая торгов", 20},
	{"договор купли продажи", 15}, {"торговое предприят", 16},
	{"товарный ассортимент", 18}, {"потребительский спрос", 15},
	{"коммерческая деятель", 18}, {"рынок сбыта", 18},
	{"закупочная деятель", 15}, {"товарооборот", 20},
	{"торгово технолог", 16}, {"товарные запасы", 15},
	{"продвижение товара", 15}, {"обслуживание покупателей", 18},
	{"маркетинговые исследования", 18}, {"товароведение", 20},
	{"торговый зал", 16}, {"розничной купли продажи", 18},
	{"коммерческое предприятие", 14}, {"каналы сбыта", 16},
	{"торговая сеть", 16}, {"ассортимент товаров", 18},
	{"качество товаров", 16}, {"поставка товаров", 16},
	{" retail trade", 20}, {" wholesale trade", 20},
	{" consumer demand", 15}, {" marketing research", 18},
	{" sales market", 16},
}

func normalize(s string) string {
	s = strings.ToLower(s)
	s = strings.ReplaceAll(s, "ё", "е")
	var b strings.Builder
	for _, r := range s {
		if unicode.IsLetter(r) || unicode.IsDigit(r) {
			b.WriteRune(r)
		} else {
			b.WriteByte(' ')
		}
	}
	return " " + strings.Join(strings.Fields(b.String()), " ") + " "
}

func score(text string, arr []K) int {
	res := 0
	for _, k := range arr {
		c := strings.Count(text, k.s)
		if c > 0 {
			res += c * k.w
		}
	}
	return res
}

func containsAny(s string, arr []string) bool {
	for _, x := range arr {
		if strings.Contains(s, x) {
			return true
		}
	}
	return false
}

func main() {
	data, _ := io.ReadAll(os.Stdin)
	input := strings.ReplaceAll(string(data), "\r", "")
	lines := strings.Split(input, "\n")
	titleRaw := ""
	bodyRaw := ""
	if len(lines) >= 2 {
		titleRaw = lines[1]
	}
	if len(lines) >= 3 {
		bodyRaw = strings.Join(lines[2:], "\n")
	}
	title := normalize(titleRaw)
	body := normalize(bodyRaw)
	full := title + " " + body

	lw := score(body, lawWords) + score(body, lawPhrases) + 4*score(title, lawWords) + 6*score(title, lawPhrases)
	fw := score(body, finWords) + score(body, finPhrases) + 4*score(title, finWords) + 6*score(title, finPhrases)
	tw := score(body, tradeWords) + score(body, tradePhrases) + 4*score(title, tradeWords) + 6*score(title, tradePhrases)

	if strings.HasPrefix(title, " федеральный закон ") ||
		strings.HasPrefix(title, " постановление ") ||
		strings.HasPrefix(title, " определение ") ||
		strings.HasPrefix(title, " решение ") ||
		strings.HasPrefix(title, " приказ ") ||
		strings.HasPrefix(title, " кодекс ") {
		lw += 30
	}
	if containsAny(title, []string{" бухгалтер", " аудит", " финанс", " баланс", " налого", " банк ", " кредит ", " отчетност", " учет "}) {
		fw += 25
	}
	if containsAny(title, []string{" торгов", " товар", " товаровед", " коммер", " маркет", " продаж", " логист", " ритейл", " merchand", " retail", " wholesale"}) {
		tw += 25
	}
	if containsAny(title, []string{" правов", " юрид", " суд", " кодекс", " закон", " уголов", " гражданск", " административ"}) {
		lw += 25
	}

	if strings.Contains(full, " статья ") && (strings.Contains(full, " кодекс ") || strings.Contains(full, " суд ")) {
		lw += 15
	}
	if strings.Contains(full, " бухгалтерский учет ") || strings.Contains(full, " бухгалтерская отчетность ") {
		fw += 20
	}
	if strings.Contains(full, " розничная торгов ") || strings.Contains(full, " оптовая торгов ") || strings.Contains(full, " товароведение ") {
		tw += 20
	}

	if tw >= lw && tw >= fw {
		fmt.Println(3)
		return
	}
	if lw == fw {
		if containsAny(title, []string{" закон", " кодекс", " суд", " правов", " юрид", " уголов", " гражданск", " административ"}) {
			fmt.Println(1)
		} else {
			fmt.Println(2)
		}
		return
	}
	if lw > fw {
		fmt.Println(1)
	} else {
		fmt.Println(2)
	}
}