-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
120 lines (106 loc) · 3.95 KB
/
index.html
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
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Actividad 4 - Grupo I</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/css/bulma.min.css">
</head>
<body>
<section class="section">
<div class="container">
<p class="title is-4 mt-4 mb-1">
Dígitos iniciales:
</p>
<input class="input is-medium is-primary" type="number" id="inputNumber" name="inputNumber" min="100000" max="999999999999" value="175102" >
</div>
<div class="container">
<p class="title is-4 mt-5 mb-1">
Pasos máximos (K):
</p>
<input class="input is-medium is-primary" type="number" id="inputK" name="inputK" min="1" max="100" value="3" >
</div>
<div class="container has-text-centered mt-6">
<button class="button is-primary is-medium" onclick="start()">Empezar!</button>
</div>
</section>
<section class="section">
<div class="container has-text-centered box">
<p id="currentNum" class="title is-1 mb-5 mt-2 is-family-monospace">
...
</p>
<button id="nextButton" class="button is-primary is-medium mb-2" onclick="nextStep()" disabled>Siguiente</button>
<p id="currentStep" class="title is-5 mb-2 mt-2">
...
</p>
</div>
</section>
</body>
<script>
var currentNumArray = []
var k = -1
var stepCount = -1
var digitsInBestPos = -1
var earlyFinish = false
function start() {
var currentNum = document.getElementById("inputNumber").value
currentNumArray = String(currentNum).split("").map((currentNum)=>{
return Number(currentNum)
})
k = Number(document.getElementById("inputK").value)
stepCount = 0
digitsInBestPos = 0
earlyFinish = false
updateUI()
}
function nextStep() {
if (!applyGreedyAlgorithmOnce()) {
earlyFinish = true
}
updateUI()
}
function applyGreedyAlgorithmOnce() {
if (currentNumArray.length <= 1) {
return false
}
var selectedPos = -1
var selectedPosPotentialValue = 0
var selectedPosCurrentValue = 0
for (let i = 1 + digitsInBestPos; i < currentNumArray.length; i++) {
var digit = currentNumArray[i]
var digitCurrentPosRTL = currentNumArray.length - 1 - i // RTL = right to left
var digitPotentialPosRTL = Math.min(digitCurrentPosRTL + k - stepCount, currentNumArray.length - 1 - digitsInBestPos)
var digitCurrentValue = digit * Math.pow(10, digitCurrentPosRTL)
var digitPotentialValue = digit * Math.pow(10, digitPotentialPosRTL)
if (digitPotentialValue > selectedPosPotentialValue) {
if (currentNumArray[i] > currentNumArray[i-1]) {
selectedPos = i
selectedPosPotentialValue = digitPotentialValue
selectedPosCurrentValue = digitCurrentValue
}
}
}
if (selectedPos == -1) {
return false
}
while (selectedPosCurrentValue < selectedPosPotentialValue && stepCount < k) {
swap(currentNumArray, selectedPos, selectedPos - 1)
selectedPos--
selectedPosCurrentValue = selectedPosCurrentValue * 10
stepCount++
}
digitsInBestPos++
return true
}
function swap(array, i, j) {
var aux = array[i]
array[i] = array[j]
array[j] = aux
}
function updateUI() {
document.getElementById("currentNum").innerText = Number(currentNumArray.join(''))
document.getElementById("currentStep").innerText = "Paso: " + stepCount
document.getElementById("nextButton").disabled = stepCount == k || earlyFinish
}
</script>
</html>