[bugfix] 修改部分bug Expr1 用例改为老师要求的用例 修复实验二的表格操作问题

This commit is contained in:
lichx 2024-12-07 15:25:47 +08:00
parent 16ac24a1ba
commit c0459fcdc7
8 changed files with 106 additions and 44 deletions

View File

@ -15,10 +15,15 @@ provide("disk",new Disk());
<DISK/>
<OperationGraph/>
</div>
<OperationTable/>
<div id="operation-table">
<OperationTable/>
</div>
</template>
<style scoped>
#operation-table
{
width: 50vw;
}
</style>

View File

@ -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;

View File

@ -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,14 +173,28 @@ 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, {
id: 0,
track: -1
});
if (row === 1)
originOperations.value.splice(0, 0, {
id: 0,
track: -1
});
else
originOperations.value.splice(row - 2, 0, {
id: 0,
track: -1
});
tableChanged.value = true;
}
@ -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;
}

View File

@ -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;
}

View File

@ -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;

View File

@ -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: ''

View File

@ -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;

View File

@ -17,7 +17,8 @@ const useExpr2Store = defineStore('expr2', {
trackFromIndex: 0,
trackToIndex: 0,
selectTrackFromIndex: 0,
selectTrackToIndex: 0
selectTrackToIndex: 0,
tableUpdate: false
}),
getters: {},
actions: {}