[bugfix] 修改部分bug Expr1 用例改为老师要求的用例 修复实验二的表格操作问题
This commit is contained in:
parent
16ac24a1ba
commit
c0459fcdc7
|
@ -15,10 +15,15 @@ provide("disk",new Disk());
|
|||
<DISK/>
|
||||
<OperationGraph/>
|
||||
</div>
|
||||
<div id="operation-table">
|
||||
<OperationTable/>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
|
||||
#operation-table
|
||||
{
|
||||
width: 50vw;
|
||||
}
|
||||
</style>
|
|
@ -6,7 +6,16 @@ import {storeToRefs} from "pinia";
|
|||
import useExpr2Store from "@/store/expr2/expr2Store.ts";
|
||||
//18 <-> -12
|
||||
const duration = 1, animationCount = 40;
|
||||
const {currentTrack, trackCount, trackFromIndex, trackToIndex, operations, startTrack,selectTrackFromIndex,selectTrackToIndex} = storeToRefs(useExpr2Store());
|
||||
const {
|
||||
currentTrack,
|
||||
trackCount,
|
||||
trackFromIndex,
|
||||
trackToIndex,
|
||||
operations,
|
||||
startTrack,
|
||||
selectTrackFromIndex,
|
||||
selectTrackToIndex
|
||||
} = storeToRefs(useExpr2Store());
|
||||
const degree = computed(() =>
|
||||
6 - (currentTrack.value / trackCount.value * (30) - 12)
|
||||
);
|
||||
|
@ -17,17 +26,16 @@ const cssVars = computed(() => {
|
|||
});
|
||||
const trackDelta = computed(() => {
|
||||
let start = trackFromIndex.value === -1 ? startTrack.value : operations.value[trackFromIndex.value].track;
|
||||
let end = trackToIndex.value === -1 ? startTrack.value : operations.value[trackToIndex.value].track;
|
||||
let end = trackToIndex.value === -1 ? startTrack.value : (trackToIndex.value >= operations.value.length ? 0 : operations.value[trackToIndex.value].track);
|
||||
return end - start;
|
||||
});
|
||||
const selectTrackSum = computed(()=>{
|
||||
if(selectTrackFromIndex.value === selectTrackToIndex.value)
|
||||
const selectTrackSum = computed(() => {
|
||||
if (selectTrackFromIndex.value === selectTrackToIndex.value)
|
||||
return 0;
|
||||
let t = 0;
|
||||
let last = selectTrackFromIndex.value === -1? selectTrackToIndex.value: operations.value[selectTrackFromIndex.value].track;
|
||||
console.log(selectTrackFromIndex.value,selectTrackToIndex.value,t);
|
||||
for(let i = Math.max(0,selectTrackFromIndex.value);i<=selectTrackToIndex.value;i++)
|
||||
{
|
||||
let last = selectTrackFromIndex.value === -1 ? startTrack.value : operations.value[selectTrackFromIndex.value].track;
|
||||
console.log(selectTrackFromIndex.value, selectTrackToIndex.value, t);
|
||||
for (let i = Math.max(0, selectTrackFromIndex.value); i <= selectTrackToIndex.value; i++) {
|
||||
console.log(operations.value[i].track);
|
||||
t += Math.abs(operations.value[i].track - last);
|
||||
last = operations.value[i].track;
|
||||
|
@ -122,6 +130,7 @@ watch(degree, (newDeg) => {
|
|||
top: 396px;
|
||||
left: 210px;
|
||||
}
|
||||
|
||||
#track-sum {
|
||||
z-index: 2;
|
||||
position: absolute;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
import {storeToRefs} from "pinia";
|
||||
import {Input} from "tdesign-vue-next";
|
||||
import {computed} from "vue";
|
||||
import {Ref, ref, watch} from "vue";
|
||||
import useExpr2Store from "@/store/expr2/expr2Store.ts";
|
||||
import {Operation} from "@/store/expr2/defaultOperation.ts";
|
||||
|
||||
|
@ -16,17 +16,32 @@ let {
|
|||
trackFromIndex,
|
||||
trackToIndex,
|
||||
selectTrackFromIndex,
|
||||
selectTrackToIndex
|
||||
selectTrackToIndex,
|
||||
tableUpdate
|
||||
} = storeToRefs(expr2Store);
|
||||
let data = computed(() => {
|
||||
console.log(startTrack.value);
|
||||
return [{track: startTrack.value, id: 0}, ...operations.value].map((operation: Operation, index: number) => {
|
||||
let data: Ref<{ key: string, id: number, track: number }[]> = ref<{
|
||||
key: string,
|
||||
id: number,
|
||||
track: number
|
||||
}[]>([{track: startTrack.value, id: 0}, ...operations.value].map((operation: Operation, index: number) => {
|
||||
return {
|
||||
key: String(index + 1),
|
||||
id: operation.id,
|
||||
track: operation.track,
|
||||
}
|
||||
}));
|
||||
|
||||
watch(tableUpdate, (newVal) => {
|
||||
if (newVal === false)
|
||||
return;
|
||||
data.value = [{track: startTrack.value, id: 0}, ...operations.value].map((operation: Operation, index: number) => {
|
||||
return {
|
||||
key: String(index + 1),
|
||||
id: operation.id,
|
||||
track: operation.track,
|
||||
}
|
||||
});
|
||||
tableUpdate.value = false;
|
||||
});
|
||||
let beforeKey = -1;
|
||||
let beforeFromKey = -1;
|
||||
|
@ -158,11 +173,25 @@ function ActiveChange(rows: string[]) {
|
|||
return;
|
||||
selectTrackFromIndex.value = parseInt(rows[0]) - 2;
|
||||
selectTrackToIndex.value = parseInt(rows[rows.length - 1]) - 2;
|
||||
if (selectTrackToIndex.value === selectTrackFromIndex.value) {
|
||||
if (selectTrackFromIndex.value >= 0 && selectTrackFromIndex.value < operations.value.length)
|
||||
beforeKey = operations.value[selectTrackFromIndex.value].track;
|
||||
else if (selectTrackFromIndex.value === -1)
|
||||
beforeKey = startTrack.value;
|
||||
else
|
||||
beforeKey = currentTrack.value;
|
||||
}
|
||||
}
|
||||
|
||||
// row Error
|
||||
function InsertBefore(row: number) {
|
||||
originOperations.value.splice(row - 1, 0, {
|
||||
if (row === 1)
|
||||
originOperations.value.splice(0, 0, {
|
||||
id: 0,
|
||||
track: -1
|
||||
});
|
||||
else
|
||||
originOperations.value.splice(row - 2, 0, {
|
||||
id: 0,
|
||||
track: -1
|
||||
});
|
||||
|
@ -179,7 +208,9 @@ function InsertEnd() {
|
|||
|
||||
// row Error
|
||||
function Delete(row: number) {
|
||||
originOperations.value.splice(row - 1, 1);
|
||||
let key = data.value[row - 1].key;
|
||||
let index = FindOriginOperationIndex(key);
|
||||
originOperations.value.splice(index, 1);
|
||||
tableChanged.value = true;
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,8 @@ export class Disk {
|
|||
trackCount,
|
||||
failInfo,
|
||||
tableChanged,
|
||||
dataChanged
|
||||
dataChanged,
|
||||
tableUpdate
|
||||
} = storeToRefs(useExpr2Store());
|
||||
watch(tableChanged, (newVal) => {
|
||||
if(newVal === false)
|
||||
|
@ -46,6 +47,7 @@ export class Disk {
|
|||
}
|
||||
}
|
||||
dataChanged.value = true;
|
||||
tableUpdate.value = true;
|
||||
tableChanged.value = false;
|
||||
});
|
||||
}
|
||||
|
@ -77,7 +79,7 @@ export class Disk {
|
|||
let track = FindTrack();
|
||||
ans.push(operations[track])
|
||||
set.add(track);
|
||||
//O(n)
|
||||
//O(n^2)
|
||||
while (set.size < operations.length) {
|
||||
let candidate: number[] = [];
|
||||
|
||||
|
@ -99,14 +101,16 @@ export class Disk {
|
|||
}
|
||||
}
|
||||
let min = Number.MAX_VALUE;
|
||||
let targetTrack = 0;
|
||||
for (let t of candidate) {
|
||||
if (Math.abs(operations[t].track - operations[track].track) < min) {
|
||||
min = Math.abs(operations[t].track - operations[track].track);
|
||||
track = t;
|
||||
targetTrack = t;
|
||||
}
|
||||
}
|
||||
ans.push(operations[track]);
|
||||
set.add(track);
|
||||
ans.push(operations[targetTrack]);
|
||||
set.add(targetTrack);
|
||||
track = targetTrack;
|
||||
}
|
||||
return ans;
|
||||
}
|
||||
|
|
|
@ -1,14 +1,28 @@
|
|||
// const operations: Operation[] = [
|
||||
// { id: 1, memorySize: 200, type: 'request' },
|
||||
// { id: 2, memorySize: 200, type: 'request' },
|
||||
// { id: 3, memorySize: 300, type: 'request' },
|
||||
// { id: 4, memorySize: 200, type: 'request' },
|
||||
// { id: 5, memorySize: 100, type: 'request' },
|
||||
// { id: 1, memorySize: 200, type: 'release' },
|
||||
// { id: 3, memorySize: 300, type: 'release' },
|
||||
// { id: 5, memorySize: 100, type: 'release' },
|
||||
// { id: 6, memorySize: 50, type: 'request' },
|
||||
// ];
|
||||
const operations: Operation[] = [
|
||||
{ id: 1, memorySize: 200, type: 'request' },
|
||||
{ id: 2, memorySize: 200, type: 'request' },
|
||||
{ id: 3, memorySize: 300, type: 'request' },
|
||||
{ id: 0, memorySize: 40, type: 'request' },
|
||||
{ id: 1, memorySize: 130, type: 'request' },
|
||||
{ id: 2, memorySize: 60, type: 'request' },
|
||||
{ id: 3, memorySize: 100, type: 'request' },
|
||||
{ id: 2, memorySize: 60, type: 'release' },
|
||||
{ id: 4, memorySize: 200, type: 'request' },
|
||||
{ id: 5, memorySize: 100, type: 'request' },
|
||||
{ id: 1, memorySize: 200, type: 'release' },
|
||||
{ id: 3, memorySize: 300, type: 'release' },
|
||||
{ id: 5, memorySize: 100, type: 'release' },
|
||||
{ id: 6, memorySize: 50, type: 'request' },
|
||||
];
|
||||
{ id: 3, memorySize: 100, type: 'release' },
|
||||
{ id: 1, memorySize: 130, type: 'release' },
|
||||
{ id: 5, memorySize: 140, type: 'request' },
|
||||
{ id: 6, memorySize: 60, type: 'request' },
|
||||
{ id: 7, memorySize: 50, type: 'request' },
|
||||
{ id: 6, memorySize: 60, type: 'release' },
|
||||
];
|
||||
export default operations;
|
||||
export interface Operation {
|
||||
id: number;
|
||||
|
|
|
@ -4,7 +4,7 @@ import operations from '@/store/expr1/defaultOperation.ts'
|
|||
const useExpr1Store = defineStore('expr1', {
|
||||
state: () => ({
|
||||
operations: operations,
|
||||
memSize: 1000,
|
||||
memSize: 640,
|
||||
currentState: operations.length,
|
||||
tableChanged: false,
|
||||
failInfo: ''
|
||||
|
|
|
@ -1,13 +1,11 @@
|
|||
const operations: Operation[] = [
|
||||
{id: 1, track: 80},
|
||||
{id: 1, track: 90},
|
||||
{id: 2, track: 60},
|
||||
{id: 3, track: 90},
|
||||
{id: 4, track: 70},
|
||||
{id: 5, track: 10},
|
||||
{id: 6, track: 30},
|
||||
{id: 7, track: 20},
|
||||
{id: 8, track: 99},
|
||||
{id: 9, track: 50},
|
||||
{id: 3, track: 10},
|
||||
{id: 4, track: 30},
|
||||
{id: 5, track: 20},
|
||||
{id: 6, track: 99},
|
||||
{id: 7, track: 50},
|
||||
];
|
||||
export default operations;
|
||||
|
||||
|
|
|
@ -17,7 +17,8 @@ const useExpr2Store = defineStore('expr2', {
|
|||
trackFromIndex: 0,
|
||||
trackToIndex: 0,
|
||||
selectTrackFromIndex: 0,
|
||||
selectTrackToIndex: 0
|
||||
selectTrackToIndex: 0,
|
||||
tableUpdate: false
|
||||
}),
|
||||
getters: {},
|
||||
actions: {}
|
||||
|
|
Loading…
Reference in New Issue