Browse Source

15 лаб. раб. заменена на отдельную страницу КР

master v1.8.0
Krio 4 years ago
parent
commit
d337fe9abb
  1. 10
      app/app.go
  2. 54
      labs/coursework.js
  3. 28
      labs/lab15/desc.json
  4. 1
      main.go
  5. 25
      web/static/styles.css
  6. 26
      web/templates/coursework.html
  7. 1
      web/templates/index.html

10
app/app.go

@ -77,6 +77,16 @@ func (a *App) LabPageHandler(writer http.ResponseWriter, request *http.Request)
}
}
func (a *App) CourseworkPageHandler(writer http.ResponseWriter, request *http.Request) {
cwFile, err := fs.ReadFile(a.WebFS, "templates/coursework.html")
if err != nil {
log.Fatal(err)
}
writer.WriteHeader(http.StatusOK)
writer.Write(cwFile)
}
func getLabsList(labsFS fs.FS) map[int]models.Lab {
var result = make(map[int]models.Lab)

54
labs/lab15/main.js → labs/coursework.js

@ -1,15 +1,18 @@
"use strict";
function main(formName) {
function main() {
let result = document.getElementById("result");
let arr = document.forms[formName].elements[0].value;
let arr = document.forms[0].elements[0].value;
arr = arr.trim().split(" ");
let checkResult = arr.some( elem => isNotNumber(elem) );
if (checkResult) {
result.textContent = "Ошибка: arr должен содержать только целые числа, разделенные пробелом!";
result.innerHTML = "<p class='fail'>Ошибка: введите только целые числа, разделенные пробелом!</p>";
return;
} else {
} else if (arr.length < 2) {
result.innerHTML = "<p class='fail'>Ошибка: введите минимум 2 числа!</p>";
return;
} else {
arr = arr.map( elem => Number(elem) );
}
@ -17,13 +20,23 @@ function main(formName) {
let path = findPath(graph);
if (path == undefined) {
result.textContent = "Результат: путь не найден";
result.innerHTML = "<p class='fail'>Результат: путь не найден!</p>";
return;
}
path[0] = "Start";
path[path.length - 1] = "End";
result.textContent = "Результат: " + path.join(" > ") + ". Длина пути: " + path.length;
arr[0] = "Start";
arr[arr.length - 1] = "End";
let table = "<table id='table'><tr><th>Метка</th><th>Номер прыжка</th></tr>";
arr.forEach( elem => table += "<tr><td>" + elem + "</td><td></td></tr>" );
table += "</table>";
result.innerHTML = "<p class='success'>Результат: путь найден! Прыжков в пути: " + (path.length - 1) + "</p>" + table;
path.forEach( (elem, index) =>
document.getElementById("table").rows[elem + 1].cells[1].innerHTML = index
);
}
function createGraph(arr) {
@ -35,21 +48,20 @@ function createGraph(arr) {
length = arr.length;
arr.forEach( (elem, index) => {
result[index] = {
prev: undefined,
dist: Number.POSITIVE_INFINITY,
visited: false,
childs: []
};
result[index] = {
prev: undefined,
dist: Number.POSITIVE_INFINITY,
visited: false,
childs: []
};
if (elem <= index) {
result[index].childs.push(index - elem);
}
let forwardIndex = elem >= (length - index) ? length - 1 : index + elem;
result[index].childs.push(forwardIndex);
if (elem <= index) {
result[index].childs.push(index - elem);
}
);
let forwardIndex = elem >= (length - index) ? length - 1 : index + elem;
result[index].childs.push(forwardIndex);
});
return result;
}

28
labs/lab15/desc.json

@ -1,28 +0,0 @@
{
"number": 15,
"task": "Лягушка хочет перепрыгнуть реку, но она не может сделать это одним прыжком. При этом, в реке имеется n камней. Лягушка может прыгать с ближайшего берега на камень 1 и с камня n на дальний берег. Она также может прыгать с камня на камень, вперед и назад. Однако на каждом камне написано число j, и она должна перепрыгнуть ровно на j камней назад или вперед. Найдите минимальное количество прыжков для перехода через реку (включая прыжки с первого камня и с последнего камня (или любого другого камня, если возможно) на дальний берег) или определите отсутствие шансов, если невозможно перепрыгнуть реку. Лягушка может также добраться до дальнего берега от камня, отличного от n, если на нем написано достаточно большое число. n >= 2.",
"vars": [
[
{
"name": "arr",
"desc": "Массив надписей на камнях",
"data": ""
}
],
[
{
"name": "arr",
"desc": "Массив надписей на камнях",
"data": "1 3 5 3 2 2 1 0"
}
],
[
{
"name": "arr",
"desc": "Массив надписей на камнях",
"data": "1 3 5 3 2 3 1 0"
}
]
],
"complete": true
}

1
main.go

@ -22,6 +22,7 @@ func main() {
http.HandleFunc("/", app.MainPageHandler)
http.HandleFunc("/lab", app.LabPageHandler)
http.HandleFunc("/coursework", app.CourseworkPageHandler)
debug := flag.Bool("d", false, "Debug flag for using local FS instead of embed")
flag.Parse()

25
web/static/styles.css

@ -67,6 +67,20 @@ a.blocked {
cursor: default;
}
p {
text-align: justify;
margin-bottom: .5%;
}
.fail {
text-align: center;
color: red;
}
.success {
text-align: center;
color: green;
}
hr {
margin: .5% 0;
border: none;
@ -100,3 +114,14 @@ input[type=button] {
input[type=button]:hover {
background-color: #D8DDDD;
}
table {
border-collapse: collapse;
margin: auto;
}
th, td {
border: 2px solid;
padding: 1%;
width: 40%;
}

26
web/templates/coursework.html

@ -0,0 +1,26 @@
<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title>Курсовая работа</title>
<link rel="icon" type="image/png" sizes="256x256" href="static/favicon.png">
<link rel="stylesheet" type="text/css" href="static/styles.css">
</head>
<body>
<div class="main">
<h1>Курсовая работа</h1>
<p>Лягушка хочет перепрыгнуть реку, но она не может сделать это одним прыжком. При этом, в реке имеется n камней. Лягушка может прыгать с ближайшего берега на камень 1 и с камня n на дальний берег. Она также может прыгать с камня на камень, вперед и назад. Однако на каждом камне написано число j, и она должна перепрыгнуть ровно на j камней назад или вперед. Найдите минимальное количество прыжков для перехода через реку (включая прыжки с первого камня и с последнего камня (или любого другого камня, если возможно) на дальний берег) или определите отсутствие шансов, если невозможно перепрыгнуть реку. Лягушка может также добраться до дальнего берега от камня, отличного от n, если на нем написано достаточно большое число. n >= 2.</p>
<hr>
<form>
<label for="input">Метки на камнях:</label>
<input type="text" id="input" name="input" placeholder="Введите целые числа разделенные пробелом" value="1 3 5 3 2 3 1 0">
<input type="button" id="calculate" value="Вычислить" onclick="main();">
</form>
<div id="result"></div>
</div>
<script src="labs/coursework.js"></script>
</body>
</html>

1
web/templates/index.html

@ -17,6 +17,7 @@
{{ $k }}
</a>
{{ end }}
<a href="coursework">КР</a>
</div>
</div>
</body>

Loading…
Cancel
Save