-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
263 additions
and
6 deletions.
There are no files selected for viewing
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package main | ||
|
||
import ( | ||
"log" | ||
"regexp" | ||
"strconv" | ||
"strings" | ||
) | ||
|
||
type Message struct { | ||
Content string | ||
} | ||
|
||
func main() { | ||
sms := []Message{ | ||
{Content: "СЧЁТ7999 10:02 Перевод 350р от Ирина С. Баланс: 1150.28р"}, | ||
{Content: "Перевод из Тинькофф Банк +7968р от АЛЕКСАНДР М. СЧЁТ7999 — Баланс: 9933.28р"}, | ||
{Content: "Перевод из Газпромбанк +2778р от КИРИЛЛ П. СЧЁТ3550 — Баланс: 18044.43р"}, | ||
{Content: "СЧЁТ3550 19:25 Перевод 10 790р от Людмила Д. Баланс: 15 266.43р"}, | ||
} | ||
|
||
for _, v := range sms { | ||
NewSms(v) | ||
} | ||
|
||
} | ||
|
||
func NewSms(sms Message) { | ||
log.Println("new sms -", sms.Content) | ||
r, _ := regexp.Compile(`[+ ]((?:\d+ )*\d+)р`) | ||
f := r.FindAllStringSubmatch(sms.Content, -1) | ||
f[0][1] = strings.ReplaceAll(f[0][1], " ", "") | ||
|
||
if len(f) != 1 { | ||
log.Println("В теле сообщения отсутствует сумма") | ||
return | ||
} | ||
|
||
amount, err := strconv.ParseFloat(f[0][1], 64) | ||
|
||
if err == nil { | ||
log.Println("Идентификация суммы", amount) | ||
} else { | ||
log.Println("Сумма не идентифицирована") | ||
return | ||
} | ||
} |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
# Тренировочный раунд Route 256: Junior Go-разработчик | ||
|
||
## 4. Битва за кондиционер | ||
|
||
| Показатель | значение | | ||
|----------------------|--------------------| | ||
| Ограничение времени | 2 000 Мс | | ||
| Ограничение памяти | 512Mb | | ||
| Ввод | стандартный ввод | | ||
| Вывод | стандартный вывод | | ||
|
||
В офисе стоит кондиционер, на котором можно установить температуру от `15` до `30` градусов. | ||
|
||
В офис по очереди приходят `n` сотрудников. `i`-й из них желает температуру не больше или не меньше `ai`. | ||
|
||
После прихода каждого сотрудника определите, можно ли выставить температуру, которая удовлетворит всех в офисе. | ||
|
||
### Входные данные | ||
|
||
Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число `t` (`1 ≤ t ≤ 10^3`) — количество наборов входных данных. Далее следует описание наборов входных данных. | ||
|
||
Первая строка каждого набора содержит целое число `n` (`1 ≤ n ≤ 10^3`) — количество сотрудников. | ||
|
||
`i`-я из следующих `n` строк каждого набора входных данных содержит требование к температуре от `i`-го сотрудника: либо `≥ ai`, либо `≤ ai` (`15 ≤ ai ≤ 30`, `ai` — целое число). Требование `≥ ai` означает, что `i`-й сотрудник желает температуру не ниже `ai`; требование `≤ ai` означает, что `i`-й сотрудник желает температуру не выше `ai`. | ||
|
||
Гарантируется, что сумма `n` по всем наборам входных данных не превосходит `10^3`. | ||
|
||
### Выходные данные | ||
|
||
Для каждого набора входных данных выведите `n` строк, `i`-я из которых содержит температуру, удовлетворяющую всех сотрудников с номерами от `1` до `i` включительно. Если такой температуры не существует, выведите `−1`. После вывода ответа на очередной набор входных данных выводите пустую строку. | ||
|
||
Если ответов несколько, выведите любой. | ||
|
||
Пояснение к первому примеру: | ||
|
||
1. добавляется требование `≥ 30`, диапазон возможных температур — `[30, 30]`, поэтому единственный возможный ответ — `30` градусов. | ||
|
||
Пояснение ко второму примеру: | ||
|
||
1. добавляется требование `≥ 18`, диапазон возможных температур — `[18, 30]`, поэтому в качестве примера взяли `29` градусов; | ||
|
||
2. добавляется требование `≤ 23`, диапазон возможных температур — `[18, 23]`, поэтому в качестве примера взяли `19` градусов; | ||
|
||
3. добавляется требование `≥ 20`, диапазон возможных температур — `[20, 23]`, поэтому в качестве примера взяли `22` градуса; | ||
|
||
4. добавляется требование `≤ 27`, диапазон возможных температур — `[20, 23]`, поэтому в качестве примера взяли `21` градус; | ||
|
||
5. добавляется требование `≤ 21`, диапазон возможных температур — `[20, 21]`, поэтому в качестве примера взяли `20` градусов; | ||
|
||
6. добавляется требование `≥ 28`, диапазон возможных температур — `[28, 21]`, поэтому ответа нет и нужно вывести `-1`. | ||
|
||
Пояснение к третьему примеру: | ||
|
||
1. добавляется требование `≤ 25`, диапазон возможных температур — `[15, 25]`, поэтому в качестве примера взяли `23` градуса; | ||
|
||
2. добавляется требование `≥ 20`, диапазон возможных температур — `[20, 25]`, поэтому в качестве примера взяли `22` градуса; | ||
|
||
3. добавляется требование `≥ 25`, диапазон возможных температур — `[25, 25]`, поэтому в качестве примера можно взять только `25` градусов. | ||
|
||
Пояснение к четвертому примеру: | ||
|
||
1. добавляется требование `≤ 15`, диапазон возможных температур — `[15, 15]`, поэтому в качестве примера можно взять только `15` градусов; | ||
|
||
2. добавляется требование `≥ 30`, диапазон возможных температур — `[30, 15]`, поэтому ответа нет и нужно вывести `-1`; | ||
|
||
3. добавляется требование `≤ 24`, диапазон возможных температур — `[30, 15]`, поэтому ответа нет и нужно вывести `-1`. | ||
|
||
#### Пример 1 | ||
|
||
| Ввод | Вывод | | ||
|-------|-------| | ||
| 4 | | | ||
| 1 | | | ||
| >= 30 | 30 | | ||
| 6 | | | ||
| >= 18 | 18 | | ||
| <= 23 | 18 | | ||
| >= 20 | 20 | | ||
| <= 27 | 20 | | ||
| <= 21 | 20 | | ||
| >= 28 | -1 | | ||
| 3 | | | ||
| <= 25 | 15 | | ||
| >= 20 | 20 | | ||
| >= 25 | 25 | | ||
| 3 | | | ||
| <= 15 | 15 | | ||
| >= 30 | -1 | | ||
| <= 24 | -1 | |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
package main | ||
|
||
import ( | ||
"fmt" | ||
"log" | ||
"unicode" | ||
) | ||
|
||
const ( | ||
fourCharacters = 4 | ||
fiveCharacters = 5 | ||
) | ||
|
||
func main() { | ||
carPlatesPackage := parseCarPlates() | ||
for _, carPlates := range carPlatesPackage { | ||
showMessage(iterateCarPlates(carPlates)) | ||
} | ||
} | ||
|
||
func parseDataTemperaturePackage() [][]string { // TODO: проверить сначала что работает | ||
var dataTemperaturePackage [][]string | ||
var dateTemperatureKit []string | ||
var err error | ||
var countTemperaturePackage int | ||
|
||
_, err = fmt.Scan(&countTemperaturePackage) | ||
if err != nil { | ||
log.Println(err) | ||
} | ||
|
||
for i := 0; i < countTemperaturePackage; i++ { | ||
var countTemperatureKit int | ||
|
||
_, err = fmt.Scan(&countTemperatureKit) | ||
if err != nil { | ||
log.Println(err) | ||
} | ||
|
||
for i := 0; i < countTemperatureKit; i++ { | ||
var dataTemperature string | ||
_, err = fmt.Scan(&dataTemperature) | ||
if err != nil { | ||
log.Println(err) | ||
} | ||
|
||
dateTemperatureKit = append(dateTemperatureKit, dataTemperature) | ||
} | ||
dataTemperaturePackage = append(dataTemperaturePackage, dateTemperatureKit) | ||
} | ||
|
||
return dataTemperaturePackage | ||
} | ||
|
||
func isValidCarPlate(carPlate string) bool { | ||
if len(carPlate) == fourCharacters { | ||
character1 := rune(carPlate[0]) | ||
character2 := rune(carPlate[1]) | ||
character3 := rune(carPlate[2]) | ||
character4 := rune(carPlate[3]) | ||
|
||
if unicode.IsLetter(character1) && unicode.IsDigit(character2) && unicode.IsLetter(character3) && unicode.IsLetter(character4) { | ||
return true | ||
} | ||
} | ||
if len(carPlate) == fiveCharacters { | ||
character1 := rune(carPlate[0]) | ||
character2 := rune(carPlate[1]) | ||
character3 := rune(carPlate[2]) | ||
character4 := rune(carPlate[3]) | ||
character5 := rune(carPlate[4]) | ||
|
||
if unicode.IsLetter(character1) && unicode.IsDigit(character2) && unicode.IsDigit(character3) && unicode.IsLetter(character4) && unicode.IsLetter(character5) { | ||
return true | ||
} | ||
} | ||
|
||
return false | ||
} | ||
|
||
func iterateCarPlates(carPlates string) string { | ||
if len(carPlates) < fourCharacters { | ||
return "-" | ||
} | ||
|
||
var carPlatesList string | ||
var currentIdx int | ||
var remainCharactersCarPlates = len(carPlates) | ||
|
||
for remainCharactersCarPlates != 0 { | ||
var fourCharactersCarPlate string | ||
var fiveCharactersCarPlate string | ||
|
||
if remainCharactersCarPlates >= fourCharacters { | ||
fourCharactersCarPlate = carPlates[currentIdx : currentIdx+fourCharacters] | ||
} | ||
if remainCharactersCarPlates >= fiveCharacters { | ||
fiveCharactersCarPlate = carPlates[currentIdx : currentIdx+fiveCharacters] | ||
} | ||
|
||
if isValidCarPlate(fourCharactersCarPlate) && remainCharactersCarPlates >= fourCharacters { | ||
carPlatesList += fourCharactersCarPlate + " " | ||
currentIdx += fourCharacters | ||
remainCharactersCarPlates -= fourCharacters | ||
continue | ||
} else if isValidCarPlate(fiveCharactersCarPlate) && remainCharactersCarPlates >= fiveCharacters { | ||
carPlatesList += fiveCharactersCarPlate + " " | ||
currentIdx += fiveCharacters | ||
remainCharactersCarPlates -= fiveCharacters | ||
continue | ||
} | ||
return "-" | ||
} | ||
return carPlatesList | ||
} | ||
|
||
func showMessage(msg string) { | ||
fmt.Printf("%s\n", msg) //nolint:forbidigo // it's not debug | ||
} |
This file contains 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