All streams
Search
Write a publication
Pull to refresh
20
0
Valentyn Ponomarenko @BOOTLOADER

Да я тут просто мимо проходил…

Send message
Не запустился у меня ваш код, выдает вот такую ошибку:

Traceback (most recent call last):
File «main.py», line 23, in fbi(121212)
File «main.py», line 10, in fbi
for then in digits:
TypeError: 'int' object is not iterable

И мне не совсем понятна логика.
Статья действительно больше о тестирование, чем о высконадежности… сам авто подитожил это -
после того, как проект успешно проходит стресс-тесты, можем ли мы говорить о том, что наша система работает именно так, как ожидается? Можно ли считать её высоконадёжной? К сожалению — нет.


Но вот Gomega прикольный BDD пакет, надо попробовать.
Я думал это вынести отдельно в init, чтобы избежать повторного создания map.
Насчет префиксного дерева не знаю, надо копнуть. Скорее всего используется ассоциативный массив.
Моя реализация на Go для Word boggle. Пробовал несколько варианты без рекурсии, но не все тесты проходят или алгоритм становится очень сложный.

func isWord(w string) bool {

	l := len(boggle)
	c := len(boggle[0])

	vs = make(map[uint8][]*position)

	// O(n2)
	for i := 0; i < l ; i++ {
		for j := 0; j < c ; j++ {
			vs[boggle[i][j]] = append(vs[boggle[i][j]], &position{i,j,false})
		}
	}

	if ps, ok := vs[w[0]]; ok {
		for _, p := range ps {
			p.visited = true

			if  isNextChar(p,w[1:]) {
				return true
			}

			p.visited = false
		}
	}

	return false
}


var vs map[uint8][]*position
type position struct {
	i int
	j int
	visited bool
}

func isNextChar(p *position, w string ) bool {

	if ps, ok := vs[w[0]]; ok {
		for _, pn := range ps {

			if !pn.visited &&
				((p.i-1 == pn.i && p.j-1 == pn.j) || (p.i-1 == pn.i && p.j == pn.j) || (p.i-1 == pn.i && p.j+1 == pn.j) ||
				 (p.i == pn.i && p.j-1 == pn.j)   ||                                   (p.i == pn.i && p.j+1 == pn.j)   ||
				 (p.i+1 == pn.i && p.j-1 == pn.j) || (p.i+1 == pn.i && p.j == pn.j) || (p.i+1 == pn.i && p.j+1 == pn.j)    ) {

				pn.visited = true

				if len(w) == 1 {
					return true
				}

				if isNextChar(pn, w[1:]) {
					return true
				} else {
					pn.visited = false
				}
				continue
			}
		}
	}

	return false
}


И тесты. Все проходит
import "testing"

func Test1(t *testing.T)  {

	boggle = [][]uint8 {
		{'H','I','Z'},
		{'U','A','R'},
		{'Q','N','B'},
	}

	testDatas := [] struct{
		word string
		isExist bool
	}{
		{ "HHH", false },
		{ "HABR", true },
		{ "HAABR", false },
		{ "FOR", false },
		{ "QUIZ", true },
		{ "QUIZZ", false },
		{ "GO", false },
		{ "HUAIH", false },
		{ "HUAIZ", true },

	}

	for _, w := range testDatas {
		result := isWord(w.word)

		if result != w.isExist {
			t.Errorf("Failed: %s - expected:%v, actual:%v", w.word, w.isExist, result)
		}
	}
}
func Test2(t *testing.T)  {

	boggle = [][]uint8 {
		{'H','I','Z'},
		{'U','A','A'},
		{'H','N','B'},
	}

	testDatas := [] struct{
		word string
		isExist bool
	}{
		{ "HUH", true },
		{ "HNB", true },
		{ "HUAI", true },
		{ "HIZAA", true },
		{ "AA", true },
		{ "IAAB", true },
		{ "HUHAA", true },
	}

	for _, w := range testDatas {
		result := isWord(w.word)

		if result != w.isExist {
			t.Errorf("Failed: %s - expected:%v, actual:%v", w.word, w.isExist, result)
		}
	}
}
func Test3(t *testing.T)  {

	boggle = [][]uint8 {
		{'H','A','C'},
		{'A','X','K'},
		{'C','X','E'},
		{'K','E','R'},
	}

	testDatas := [] struct{
		word string
		isExist bool
	}{
		{ "HACKER", true },
		{ "HACKERXX", true },
		{ "XX", true },
		{ "XXX", false },
		{ "HXER", true },
		{ "HACKERQ", false },
	}

	for _, w := range testDatas {
		result := isWord(w.word)

		if result != w.isExist {
			t.Errorf("Failed: %s - expected:%v, actual:%v", w.word, w.isExist, result)
		}
	}
}
1. Запускаем 7 и 4 одновременно, когда закончиться 7, в 4 минутах останется 1 минута.
2. Запускаем 1 минуту и потом два раза по 4 минуты — получим 9 минут.
Я что-то не совсем понял — передается словарь, скажем Вход: dictionary[] = {«HABR», «FOR», «QUIZ», «GO»};

или

Вход: dictionary[] = {«HIZ», «RND»};

и по нему нужно определиться, есть ли такое слово.
2-я задача:
1. Запускаем 7 и 4 одновременно, когда закончиться 7, в 4 минутах останется 1 минута.
2. Запускаем оставщуюся 1 минута в 4 и 7 одновременно. После окончания 1 минуты, в 7 останется 6 минут.
3. Запускаем сразу 4 и после окончания 6 минут в 7, в 4 останется 2 минуты
4. Запускаем 7 и потом запускаем оставшиеся 2 минуты из 4 — в сумме получаем 9 минут.
В спецификации так и написано, если вы удаляете или комментируете поле, используете reserved fields, чтобы избежать колизий.
Reserved Fields

If you update a message type by entirely removing a field, or commenting it out, future users can reuse the tag number when making their own updates to the type. This can cause severe issues if they later load old versions of the same .proto, including data corruption, privacy bugs, and so on. One way to make sure this doesn't happen is to specify that the field tags (and/or names, which can also cause issues for JSON serialization) of your deleted fields are reserved. The protocol buffer compiler will complain if any future users try to use these field identifiers.

message Foo {
reserved 2, 15, 9 to 11;
reserved «foo», «bar»;
}
Поправил. Спасибо.
Да, gRPC использует Protobuf как язык описание интерфейсов, но такая форма не совсем понятная, поэтому для просто я использовал как «реализация протокола Protobuf».
Да, вы правы — получить не совсем корректно. Просто есть реализация от Google, есть вот от Twich и от многих других: github.com/google/protobuf/blob/master/docs/third_party.md
У меня лично опыт негативного нет gRPC. Но у меня все инфраструктура новая на одной версии. Я пытался с ними связаться, чтобы получиться какие-то точные пояснения ошибок, но пока безуспешно. Насчет добавления удаления полей есть Reserved Fields которые вам позволяют избежать ошибок, но как я сказал — пока нет информации были ли причины именно в этом.
все непотраченные выходы транзакций
не смог понять, что это значит.
В америке некоторые могут делать планку лежа на животе.
Судя, что дата публикации 2008 год и нет никакой новой информации… вместо хепи энд просто «The end !!»
А потом это все отдадут на аутсорс :))
Покажите мне компании, которые аусорсят R&D особенно в фармацептике? Давай-те отбросим софтверный аутсорс типа — переведите мой бухгалтерское приложение в облако. Покажите, где Google аутсорсит скажем разработку языков программирования или Apple разработку новой модели iPhone. Компании будут либо строить свои R&D там, где будут дешевые ресурсы, научная база, стабильная политическая обстановка — а всякие call-center так и будут переводить в Индию, или что более вероятнее заменять в AI, ботами итд.
Да, я использую net.ParseCIDR, но если мне в качестве параметров передается скажем 216.58.192.12 — 216.58.192.34, то мне его нужно сначала перевести в набор подсетей {216.58.192.12/30, 216.58.192.16/28, 216.58.192.32/31, 216.58.192.34/32}, потому уже работать с ними с помощью метода net.ParseCIDR.
На iPhone тоже работает.

Information

Rating
Does not participate
Location
Seattle, Washington, США
Date of birth
Registered
Activity

Specialization

Backend Developer
Lead
Golang