Pārlūkot izejas kodu

Merge branch 'master' of dtelenkov:Home/codewars

unknown 4 dienas atpakaļ
vecāks
revīzija
4e61306570

+ 49 - 0
go/codewars/task1.go

@@ -0,0 +1,49 @@
+package main
+
+import (
+	"fmt"
+)
+
+// Возвращает сумму квадратов слайса
+func SquareSum(numbers []int) (sum int) {
+	for _, value := range numbers {
+		sum += value * value
+	}
+	return
+}
+
+// Перевернуть строку. Медленный вариант.
+func Solution(word string) string {
+	var res string
+	for _, val := range word {
+		res = string(val) + res
+	}
+	return res
+}
+
+// Нахождение минимума
+func SmallestIntegerFinder(numbers []int) (min int) {
+	min = numbers[0]
+	for _, val := range numbers {
+		if val < min {
+			min = val
+		}
+	}
+	return // your code here
+}
+
+func Litres(time float64) int {
+	return int(time) / 2
+}
+
+func CreatePhoneNumber(numbers [10]int) string {
+	return fmt.Sprintf("(%d%d%d) %d%d%d-%d%d%d%d", numbers[0], numbers[1], numbers[2], numbers[3], numbers[4], numbers[5], numbers[6], numbers[7], numbers[8], numbers[9])
+}
+
+func main() {
+	fmt.Println("Testing...")
+	//fmt.Println(SquareSum([]int{1, 2, 5, 6}))
+	// fmt.Println(Solution("world"))
+	// fmt.Println(Litres(6.7))
+	fmt.Println(CreatePhoneNumber([10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}))
+}

+ 0 - 3
go/go.mod

@@ -1,3 +0,0 @@
-module hello
-
-go 1.21.5

+ 134 - 0
go/interface/people.go

@@ -0,0 +1,134 @@
+package main
+
+import (
+	"fmt"
+	"time"
+)
+
+type Employee struct {
+	ID        int
+	FirstName string
+	LastName  string
+	DateHired time.Time
+}
+
+type Manager struct {
+	Employee
+	Reports []int
+}
+
+type SimpleEmployeeData struct {
+	employees map[int]Employee
+	managers  map[int]Manager
+	nextID    int
+}
+
+func NewSimpleEmployeeData() *SimpleEmployeeData {
+	return &SimpleEmployeeData{
+		employees: map[int]Employee{},
+		managers:  map[int]Manager{},
+		nextID:    0,
+	}
+}
+
+func (ed *SimpleEmployeeData) AddEmployee(firstName, lastName string, dateHired time.Time) int {
+	ed.nextID++
+	ed.employees[ed.nextID] = Employee{
+		ID:        ed.nextID,
+		FirstName: firstName,
+		LastName:  lastName,
+		DateHired: dateHired,
+	}
+	return ed.nextID
+}
+
+func (ed SimpleEmployeeData) GetEmployee(id int) (Employee, bool) {
+	p, ok := ed.employees[id]
+	return p, ok
+}
+
+func (ed *SimpleEmployeeData) AddManager(firstName, lastName string, dateHired time.Time, reports []int) int {
+	ed.nextID++
+	ed.managers[ed.nextID] = Manager{
+		Employee: Employee{
+			ID:        ed.nextID,
+			FirstName: firstName,
+			LastName:  lastName,
+			DateHired: dateHired,
+		},
+		Reports: reports,
+	}
+	return ed.nextID
+}
+
+func (ed SimpleEmployeeData) GetManager(id int) (Manager, bool) {
+	m, ok := ed.managers[id]
+	return m, ok
+}
+
+func DMYToTime(day int, month time.Month, year int) time.Time {
+	return time.Date(year, month, day, 0, 0, 0, 0, time.UTC)
+}
+
+func main() {
+	ed := NewSimpleEmployeeData()
+	manageEmployees(ed)
+}
+
+func manageEmployees(ed EmployeeData) {
+	e1ID := ed.AddEmployee("Bob", "Bobson", DMYToTime(10, time.January, 2020))
+	e2ID := ed.AddEmployee("Mary", "Maryson", DMYToTime(30, time.March, 2007))
+	e1, exists1 := ed.GetEmployee(e1ID)
+	e2, exists2 := ed.GetEmployee(e2ID)
+	fmt.Println(e1, exists1)
+	fmt.Println(e2, exists2)
+	e3, exists3 := ed.GetEmployee(2000)
+	fmt.Println(e3, exists3)
+
+	m1ID := ed.AddManager("Boss", "BossPerson", DMYToTime(17, time.June, 1982), []int{e1ID, e2ID})
+	m1, _ := ed.GetManager(m1ID)
+	fmt.Println(m1.FirstName, m1.Reports)
+
+	var e4 = m1.Employee
+	fmt.Println(e4.LastName)
+
+	fmt.Println(FormatTenure(e1))
+	fmt.Println(FormatTenure(e2))
+
+	fmt.Println(m1.TimeAtCompany())
+
+	fmt.Println(FormatTenure(m1))
+	fmt.Println(m1)
+}
+
+type Dater interface {
+	TimeAtCompany() time.Duration
+}
+
+func FormatTenure(d Dater) string {
+	// convert from hours to years and days (ignoring leap years)
+	hours := int(d.TimeAtCompany().Hours())
+	years := hours / (24 * 365)
+	hours = hours % (24 * 365)
+	days := hours / 24
+	return fmt.Sprintf("%d years, %d days", years, days)
+}
+
+func (e Employee) TimeAtCompany() time.Duration {
+	return time.Since(e.DateHired)
+}
+
+func (e Employee) String() string {
+	return e.FirstName + " " + e.LastName + ": Tenure " + FormatTenure(e)
+}
+
+func (m Manager) String() string {
+	return fmt.Sprintf("%s, reports: %v", m.Employee, m.Reports)
+}
+
+type EmployeeData interface {
+	AddEmployee(firstName, lastName string, dateHired time.Time) int
+	GetEmployee(id int) (Employee, bool)
+	AddManager(firstName, lastName string, dateHired time.Time, reports []int) int
+	GetManager(id int) (Manager, bool)
+}

+ 0 - 30
go/server/client.py

@@ -1,30 +0,0 @@
-import socket
-
-class NetClient:
-    TIMEOUT = 3
-    def __init__(self, ip, port) -> None:
-        self.ip = ip
-        self.port = port
-
-    def request(self, path, method='GET', body=''):
-        sock = socket.socket()
-        sock.settimeout(self.TIMEOUT)
-        try:
-            sock.connect((self.ip, self.port))
-            req = '{} {} HTTP/1.1\r\nHost:\r\nContent-Length: {}\r\n\r\n{}'.format(method, path, len(body), body).encode()
-            sock.sendall(req)
-            data = sock.recv(1024)
-            print(data)
-            sock.close()
-            print(req)
-        except Exception as e:
-            print(e)
-
-
-def main():
-    client = NetClient('localhost', 9000)
-    # client.request('/index.html', 'GET', '')
-    client.request('/fw.bin', 'GET', '')
-
-if __name__ == '__main__':
-    main()

BIN
go/server/fw.bin


+ 0 - 3
go/server/go.mod

@@ -1,3 +0,0 @@
-module server
-
-go 1.22.1

+ 0 - 58
go/server/main.go

@@ -1,58 +0,0 @@
-package main
-
-import (
-	"fmt"
-	"net/http"
-	"os"
-)
-
-func Index(w http.ResponseWriter, r *http.Request) {
-	fmt.Println("Recv data")
-	fmt.Fprintf(w, "Hello world")
-	fmt.Println("File opening...")
-	file, err := os.Open("main.go")
-	if err != nil {
-		fmt.Println(err)
-		os.Exit(1)
-	}
-	defer file.Close()
-
-	data := make([]byte, 64)
-
-	for {
-		n, err := file.Read(data)
-		if err == io.EOF {
-			break
-		}
-		w.Write(data)
-		fmt.Print(string(data[:n]))
-	}
-}
-
-func Update(w http.ResponseWriter, r *http.Request) {
-	fmt.Println(r.URL.Path)
-	fmt.Println(r.Method)
-	fmt.Println(r.Header)
-
-	fmt.Println(r.URL.Path)
-
-	fmt.Println("Download update file...")
-	// http.ServeFile(w, r, `fw.bin`)
-	// http.ServeFile(w, r, `E:\Greenstar\nSBS-ethernet-prime\bin\fw.bin`)
-
-	// if r.URL.Path == "/fw.bin" {
-	// 	fmt.Println("Download update file...")
-	// 	http.ServeFile(w, r, `fw.bin`)
-	// }
-}
-
-func main() {
-	args := os.Args[1:]
-	var path = args[0]
-	var port = ":" + args[1]
-
-	fmt.Println("Starting HTTP server...")
-	http.HandleFunc("/index.html", Index)
-	http.HandleFunc(path, Update)
-	http.ListenAndServe(port, nil)
-}

BIN
go/server/up_server.exe


+ 0 - 5
go/simple-app/go.mod

@@ -1,5 +0,0 @@
-module simple-app
-
-go 1.22.1
-
-require github.com/mitchellh/mapstructure v1.5.0 // indirect

+ 0 - 2
go/simple-app/go.sum

@@ -1,2 +0,0 @@
-github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
-github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=

+ 0 - 178
go/simple-app/main.go

@@ -1,178 +0,0 @@
-package main
-
-import (
-	"fmt"
-
-	"github.com/mitchellh/mapstructure"
-)
-
-type myStruct struct {
-	X, Y int
-}
-
-func (p myStruct) method() {
-	fmt.Println(p.X)
-	fmt.Println(p.Y)
-}
-
-func (p *myStruct) methodPtr() {
-	fmt.Println(p.X)
-	fmt.Println(p.Y)
-}
-
-type Point struct {
-	X int
-	Y int
-}
-
-func main() {
-	/*
-		http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
-			fmt.Fprintf(w, "Hello world")
-		})
-		http.ListenAndServe(":9000", nil)
-	*/
-
-	//test2()
-	// test3()
-	// test4()
-	// test5()
-	// test6()
-	// test7()
-	test8()
-}
-
-func test1() {
-	var name string = "Dmitry"
-	var age int = 23
-	var c = fmt.Sprintf("My name is %s and ma age is %d", name, age)
-	fmt.Println(c)
-}
-
-func test2() {
-	for i := 0; i < 10; i++ {
-		fmt.Println(i)
-	}
-}
-
-func test3() {
-	s1 := myStruct{
-		X: 1,
-		Y: 2,
-	}
-
-	s2 := myStruct{X: 123, Y: 23434}
-
-	//ptr := &s2
-
-	s1.method()
-	s2.methodPtr()
-}
-
-func test4() {
-	var a [2]string
-	a[0] = "hello"
-	a[1] = "world"
-
-	numbers := [...]int{1, 2, 3}
-
-	fmt.Println(a)
-	fmt.Println(numbers)
-
-	// Слайсы. Не имеют фиксированной длины
-	letters := []string{"a", "b", "c"}
-	letters[1] = "sadfasd"
-	letters = append(letters, "new element", "werwe")
-
-	// Пустой слайс
-	createSlice := make([]string, 3)
-
-	fmt.Println(letters)
-	fmt.Println(len(createSlice))
-	fmt.Println(cap(createSlice))
-}
-
-func test5() {
-	animalArr := [4]string{
-		"dog",
-		"cat",
-		"giraffe",
-		"elephant",
-	}
-
-	/*
-		animalSlic := []string{
-			"dog",
-			"cat",
-			"giraffe",
-			"elephant",
-		}
-	*/
-	a := animalArr[0:2]
-	fmt.Println(a)
-
-	b := animalArr[1:3]
-	fmt.Println(b)
-
-	b[0] = "123"
-	fmt.Println(a)
-	fmt.Println(animalArr)
-}
-
-func test6() {
-	arr := []string{"a", "b", "c"}
-	for i, l := range arr {
-		fmt.Println(i, l)
-	}
-
-	for _, l := range arr {
-		fmt.Println(l)
-	}
-}
-
-func test7() {
-	pointMap := map[string]Point{}
-	otherMap := map[string]Point{
-		"b": {X: 23, Y: 12},
-	}
-	otherPointMap := make(map[int]Point)
-
-	pointMap["a"] = Point{
-		X: 1,
-		Y: 2,
-	}
-
-	fmt.Println(pointMap)
-	fmt.Println(pointMap["a"])
-
-	otherPointMap[1] = Point{X: 3, Y: 7}
-	fmt.Println(otherPointMap[1])
-
-	fmt.Println(otherMap["b"])
-
-	key := 2
-	value, ok := otherPointMap[key]
-	if ok {
-		fmt.Printf("key=%d exist in map", key)
-		fmt.Println(value)
-	} else {
-		fmt.Printf("key=%d does exist in map", key)
-		fmt.Println(value)
-	}
-}
-
-func test8() {
-	pointsMap := map[string]int{
-		"X": 1,
-		"Y": 2,
-	}
-
-	p1 := Point{}
-	mapstructure.Decode(pointsMap, &p1)
-	fmt.Println(p1)
-
-	for k, v := range pointsMap {
-		fmt.Println(k)
-		fmt.Println(v)
-	}
-}

+ 0 - 25
go/test.go

@@ -1,25 +0,0 @@
-package main
-
-import "fmt"
-
-func main() {
-	// fmt.Printf("I like Go!\r\n")
-	multiple()
-}
-
-func input_age() {
-	var name string
-	var age int
-	fmt.Print("Введите имя: ")
-	fmt.Scan(&name)
-	fmt.Print("Введите возраст: ")
-	fmt.Scan(&age)
-
-	fmt.Println(name, age)
-}
-
-func multiple() {
-	var number int
-	fmt.Scan(&number)
-	fmt.Println(number*2 + 100)
-}

+ 0 - 3
go/test_1/go.mod

@@ -1,3 +0,0 @@
-module test
-
-go 1.22.1

+ 0 - 22
go/test_1/main.go

@@ -1,22 +0,0 @@
-package main
-
-import (
-	"fmt"
-	"os"
-	"reflect"
-)
-
-func main() {
-	// fmt.Println("Starting HTTP server...")
-	args := os.Args[1:]
-	var path = args[0]
-	var port = ":" + args[1]
-	fmt.Println(path, port)
-	fmt.Println(path, port[1:])
-	fmt.Println(reflect.TypeOf(args[0]))
-	fmt.Println(reflect.TypeOf(args[1]))
-
-	// fmt.Println(args[1])
-	// fmt.Println(args)
-
-}