Please note, this is a STATIC archive of website www.tutorialspoint.com from 11 May 2019, cach3.com does not collect or store any user information, there is no "phishing" involved.
Tutorialspoint

virus

package main

import (
	"fmt"
	"math/rand"
	"time"
)

//Virus represents simplified data of virus
type Virus struct {
	Knowledge  float64 //Knowledge means number between 0 - 1, 0 - not known, 1 - very well known
	Uniqueness float64 // Uniqueness means number between 0 - 1, 0 - not unique, 1 - unique
}

//Subnet represents simplified data of each subnet
type Subnet struct {
	ID          int
	Antivirus   float64 //Antivirus means number between 0 - 1, 0 - not installed
	Updated     float64 //Updated means number between 0 - 1, 0 - not updated, 1 - updated regularly
	ConnectedTo []int   //ConnectedTo is an array of connected subnets
	IsInfected  bool
}

//Entrydata represents topology of networks
var entryData = []Subnet{
	{
		ID:          0,
		Antivirus:   getRandomNumber(),
		Updated:     getRandomNumber(),
		ConnectedTo: []int{1, 2},
	}, {
		ID:          1,
		Antivirus:   getRandomNumber(),
		Updated:     getRandomNumber(),
		ConnectedTo: []int{3, 4},
	}, {
		ID:          2,
		Antivirus:   getRandomNumber(),
		Updated:     getRandomNumber(),
		ConnectedTo: []int{5, 6},
	}, {
		ID:          3,
		Antivirus:   getRandomNumber(),
		Updated:     getRandomNumber(),
		ConnectedTo: []int{},
	}, {
		ID:          4,
		Antivirus:   getRandomNumber(),
		Updated:     getRandomNumber(),
		ConnectedTo: []int{},
	}, {
		ID:          5,
		Antivirus:   getRandomNumber(),
		Updated:     getRandomNumber(),
		ConnectedTo: []int{},
	}, {
		ID:          6,
		Antivirus:   getRandomNumber(),
		Updated:     getRandomNumber(),
		ConnectedTo: []int{},
	},
}

var numberOfInfected = 0

//getRandomNumber returns random float in range 0-1
func getRandomNumber() float64 {
	s := rand.NewSource(time.Now().UnixNano())
  newRand := rand.New(s)
	return newRand.Float64()
}

//getsInfected returns if node will be infected or not
func getsInfected(node *Subnet, virus Virus) {
	nodeEndurance := node.Antivirus * node.Updated
	virusEndurance := (1 - virus.Knowledge) * virus.Uniqueness
	//if node endurance is lover than virus endurance, it means node is not protected enough and will be infected
	if nodeEndurance < virusEndurance {
		node.IsInfected = true
	}
}

func goThroughNet(index int, virus Virus) {
	node := &entryData[index]
	getsInfected(node, virus)
	if node.IsInfected {
		fmt.Println("Subnet ", node.ID, " gets infected.")
		numberOfInfected++

		for _, nextID := range node.ConnectedTo {
			goThroughNet(nextID, virus)
		}
	}
}
func main() {
	var virus = Virus{
		Knowledge:  0,
		Uniqueness: getRandomNumber(),
	}
	goThroughNet(0, virus)
	fmt.Println("Number of infected subnet: ", numberOfInfected)
}

Advertisements
Loading...

We use cookies to provide and improve our services. By using our site, you consent to our Cookies Policy.