-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
ticketgen.js
150 lines (145 loc) · 4.97 KB
/
ticketgen.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
const pattern=[-1,-2,-3,-4,-5,0,0,0,0];
const ROWS = 3;
const COLUMNS=9;
getRandomInt = (rootVal)=> {
if(rootVal== (COLUMNS-1)){
return Math.floor(Math.random() * 11) + (rootVal*10);
}
else if(rootVal==0){
return Math.floor(Math.random() * 9) + 1;
}
else{
return Math.floor(Math.random() * 10) + (rootVal*10);
}
}
generateTicket=()=>{
var newTicket= document.createElement("div");
newTicket.classList.add("tg-grid-container");
// create array of three rows
var arrayOfNumbers = [];
for(index=0;index<ROWS;index++){
//console.log("Inside the generator");
var row = [...pattern];
// shuffle using "Fisher-Yates" algorithm
//we are creating a pattern for each column where only 5 cells have values out of a total of 9 cells.
for(let i=row.length-1; i>0;i--){
var j = Math.floor(Math.random() * (i+1));
var temp = row[i];
row[i] = row[j];
row[j] = temp;
}
//console.table(row);
arrayOfNumbers.push(row);
}
//ticket template created. Now to fill Numbers
//add numbers per column
for(ticketCol=0;ticketCol<COLUMNS;ticketCol++){
for(ticketRow=0;ticketRow<ROWS;ticketRow++){
//get total numbers to be generated.
if(arrayOfNumbers[ticketRow][ticketCol] < 0){
arrayOfNumbers[ticketRow][ticketCol]=getRandomInt(ticketCol);
}
else{
arrayOfNumbers[ticketRow][ticketCol]="";
}
}
}
// Check for duplicates. Sort and update array
// A coder died with tears in his eyes on the duplicate check and sort below.
for(sortColIndex=0;sortColIndex<COLUMNS;sortColIndex++){
tempArr = [arrayOfNumbers[0][sortColIndex], arrayOfNumbers[1][sortColIndex],arrayOfNumbers[2][sortColIndex]];
//case only one element exists, case 2, case 3
if((tempArr[0]=="")&&(tempArr[1]=="")&&(tempArr[2]=="")){
//no elements in column
}
else if(((tempArr[0]=="")&&(tempArr[1]==""))||((tempArr[2]=="")&&(tempArr[1]==""))||((tempArr[0]=="")&&(tempArr[2]==""))){
//only one element
}
else if((tempArr[0]!="")&&(tempArr[1]!="")&&(tempArr[2]!="")){
while(tempArr[0]==tempArr[1]){
tempArr[0]=getRandomInt(sortColIndex);
}
while(tempArr[0]==tempArr[2]){
tempArr[2]=getRandomInt(sortColIndex);
}
while(tempArr[2]==tempArr[1]){
tempArr[1]=getRandomInt(sortColIndex);
}
for(sortIndex=0; sortIndex<ROWS-1; sortIndex++){
if(tempArr[sortIndex]>tempArr[sortIndex+1]){
let tempNum = tempArr[sortIndex];
tempArr[sortIndex] = tempArr[sortIndex+1];
tempArr[sortIndex+1]= tempNum;
}
}
}
else{
while((tempArr[0]!="")&&(tempArr[0]==tempArr[1])){
tempArr[0]=getRandomInt(sortColIndex);
}
while((tempArr[0]!="")&&(tempArr[0]==tempArr[2])){
tempArr[2]=getRandomInt(sortColIndex);
}
while((tempArr[1]!="")&&(tempArr[2]==tempArr[1])){
tempArr[1]=getRandomInt(sortColIndex);
}
if(tempArr[0]==""){
if(tempArr[1]>tempArr[2]){
let tempNum = tempArr[1];
tempArr[1] = tempArr[2];
tempArr[2]= tempNum;
}
}
else if(tempArr[1]==""){
if(tempArr[0]>tempArr[2]){
let tempNum = tempArr[0];
tempArr[0] = tempArr[2];
tempArr[2]= tempNum;
}
}
else if(tempArr[2]==""){
if(tempArr[0]>tempArr[1]){
let tempNum = tempArr[0];
tempArr[0] = tempArr[1];
tempArr[1]= tempNum;
}
}
}
arrayOfNumbers[0][sortColIndex]=tempArr[0];
arrayOfNumbers[1][sortColIndex]=tempArr[1];
arrayOfNumbers[2][sortColIndex]=tempArr[2];
}
return arrayOfNumbers;
}
generateBlankTemplate = (e)=>{
e.preventDefault();
var inputTickets = document.getElementById("inputTickets");
var rootDiv= document.getElementById("tambolaTable");
if(inputTickets.value && (inputTickets.value>0)){
rootDiv.textContent="";
for(ticketIndex=1;ticketIndex<=inputTickets.value;ticketIndex++){
var outputTicket = document.createElement("div");
outputTicket.classList.add("tg-grid-container");
var newTicket = generateTicket();
// console.table(newTicket);
for(outputRowIndex=0;outputRowIndex<ROWS;outputRowIndex++){
for(outputColIndex=0;outputColIndex<COLUMNS;outputColIndex++){
var outputNumber = newTicket[outputRowIndex][outputColIndex];
// console.log("Output:"+ outputNumber);
var newElement = document.createElement("div");
var currentNumber = document.createTextNode(outputNumber);
newElement.classList.add("tg-used");
newElement.setAttribute("id",outputNumber);
newElement.appendChild(currentNumber);
outputTicket.appendChild(newElement);
}
}
rootDiv.appendChild(outputTicket);
}
}
}
printDiv=()=> {
window.print();
}
document.getElementById("btnSubmit").addEventListener("click", generateBlankTemplate);
document.getElementById("printBtn").addEventListener("click", printDiv);