// Algoritma PICK UP
// Diketahui disk mempunyai 100 track dg nomor urut 0 99,
// antrian akses track dengan saat awal 50 (letak head R/W)
// 60 43 49 12 35 27 6 95 5 80 9 73 64 90 55 92
void main() {
int initialTrack = 50;
List<int> trackQueue = [
60,
43,
49,
12,
35,
27,
6,
95,
5,
80,
9,
73,
64,
90,
55,
92
];
List<int> pickUpQueue(List<int> queue) {
// Insert initial tract to the queue
queue.insert(0, initialTrack);
// Sort the queue to ascending order
queue.sort();
var highestQueue = queue.where((test) => test > initialTrack);
var lowesQueue =
queue.where((test) => test < initialTrack).toList().reversed;
return [...highestQueue, ...lowesQueue];
}
List<int> pickedUpQueue = pickUpQueue(trackQueue);
print('Picked Up Queue: ${pickedUpQueue.join(' -> ')}');
}
Ly8gQWxnb3JpdG1hIFBJQ0sgVVAKLy8gRGlrZXRhaHVpIGRpc2sgbWVtcHVueWFpIDEwMCB0cmFjayBkZyBub21vciB1cnV0IDAgOTksCi8vIGFudHJpYW4gYWtzZXMgdHJhY2sgZGVuZ2FuIHNhYXQgYXdhbCA1MCAobGV0YWsgaGVhZCBSL1cpCi8vIDYwIDQzIDQ5IDEyIDM1IDI3IDYgOTUgNSA4MCA5IDczIDY0IDkwIDU1IDkyCgp2b2lkIG1haW4oKSB7CiAgaW50IGluaXRpYWxUcmFjayA9IDUwOwogIExpc3Q8aW50PiB0cmFja1F1ZXVlID0gWwogICAgNjAsCiAgICA0MywKICAgIDQ5LAogICAgMTIsCiAgICAzNSwKICAgIDI3LAogICAgNiwKICAgIDk1LAogICAgNSwKICAgIDgwLAogICAgOSwKICAgIDczLAogICAgNjQsCiAgICA5MCwKICAgIDU1LAogICAgOTIKICBdOwoKICBMaXN0PGludD4gcGlja1VwUXVldWUoTGlzdDxpbnQ+IHF1ZXVlKSB7CiAgICAvLyBJbnNlcnQgaW5pdGlhbCB0cmFjdCB0byB0aGUgcXVldWUKICAgIHF1ZXVlLmluc2VydCgwLCBpbml0aWFsVHJhY2spOwoKICAgIC8vIFNvcnQgdGhlIHF1ZXVlIHRvIGFzY2VuZGluZyBvcmRlcgogICAgcXVldWUuc29ydCgpOwoKICAgIHZhciBoaWdoZXN0UXVldWUgPSBxdWV1ZS53aGVyZSgodGVzdCkgPT4gdGVzdCA+IGluaXRpYWxUcmFjayk7CiAgICB2YXIgbG93ZXNRdWV1ZSA9CiAgICAgICAgcXVldWUud2hlcmUoKHRlc3QpID0+IHRlc3QgPCBpbml0aWFsVHJhY2spLnRvTGlzdCgpLnJldmVyc2VkOwoKICAgIHJldHVybiBbLi4uaGlnaGVzdFF1ZXVlLCAuLi5sb3dlc1F1ZXVlXTsKICB9CgogIExpc3Q8aW50PiBwaWNrZWRVcFF1ZXVlID0gcGlja1VwUXVldWUodHJhY2tRdWV1ZSk7CiAgcHJpbnQoJ1BpY2tlZCBVcCBRdWV1ZTogJHtwaWNrZWRVcFF1ZXVlLmpvaW4oJyAtPiAnKX0nKTsKfQo=