shek15470

Untitled

Jun 15th, 2021
775
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package main
  2.  
  3. import (
  4.         "fmt"
  5.     "github.com/skorobogatov/input"
  6. )
  7.  
  8. type Pair struct {
  9.     number,place int
  10.     symbol string
  11. }
  12.  
  13.  
  14. type Set struct {
  15.     set []Pair
  16. }
  17.  
  18. func (set *Set) add(p Pair)bool{
  19.     for _,v:=range set.set{
  20.         if v.number==p.number && p.symbol==v.symbol{
  21.             return false
  22.         }
  23.     }
  24.     set.set = append(set.set, p)
  25.     return true
  26. }
  27.  
  28.  
  29. func main(){
  30.     var(
  31.         edges,output []string
  32.         n,m,k int
  33.         delta [][]int
  34.         phi [][]string
  35.     )
  36.     input.Scanf("%d",&n)
  37.     edges=make([]string,n)
  38.     readData:= func(container []string) {
  39.         for i:=range container{
  40.             input.Scanf("%s ",&container[i])
  41.         }
  42.     }
  43.     readData(edges)
  44.     input.Scanf("%d",&m)
  45.     output=make([]string,m)
  46.     readData(output)
  47.     states:=Set{}
  48.  
  49.     input.Scanf("%d",&k)
  50.     delta,phi=make([][]int,k),make([][]string,k)
  51.     for i:=range delta{
  52.         delta[i]=make([]int,n)
  53.         phi[i]=make([]string,n)
  54.     }
  55.  
  56.     for i:=range delta{
  57.         for j:=range delta[i]{
  58.             input.Scanf("%d",&delta[i][j])
  59.         }
  60.     }
  61.  
  62.     for i:=range delta{
  63.         for j:=range delta[i]{
  64.             input.Scanf("%s",&phi[i][j])
  65.         }
  66.     }
  67.  
  68.     m=0
  69.     for i:=range delta{
  70.         for j:=range delta[i]{
  71.             if states.add(Pair{
  72.                 number: delta[i][j],
  73.                 place:  m,
  74.                 symbol: phi[i][j],
  75.             }){
  76.                 m++
  77.             }
  78.         }
  79.     }
  80.  
  81.     fmt.Println("digraph{\nrankdir = LR")
  82.  
  83.     getElem:= func(i,j int) Pair{
  84.         for _,p:=range states.set{
  85.             if p.number==delta[i][j] && p.symbol==phi[i][j]{
  86.                 return p
  87.             }
  88.         }
  89.         panic("Error")
  90.     }
  91.  
  92.     for i:=range states.set{
  93.         fmt.Print(states.set[i].place," [label=\"(",)
  94.         fmt.Print(states.set[i].number)
  95.         fmt.Print(",")
  96.         fmt.Print(states.set[i].symbol)
  97.         fmt.Println(")\"]")
  98.         for j:=range delta[0]{
  99.             fmt.Print(states.set[i].place,"->",getElem(states.set[i].number,j).place," [label=\"")
  100.             fmt.Print(edges[j])
  101.             fmt.Println("\"]")
  102.         }
  103.     }
  104.     fmt.Println("}")
  105. }
  106.  
RAW Paste Data