소개
디스크는 블록을 0
통해 색인이 생성 된 선형 컨테이너입니다 size-1
.
파일은 해당 파일이 사용하는 명명 된 블록 인덱스 목록입니다.
예제 파일 시스템은 다음과 같이 표현됩니다.
15 ALPHA=3,5 BETA=11,10,7
"디스크에는 15 개의 블록이 있으며 파일 ALPHA의 첫 번째 블록은 인덱스 3의 디스크 블록입니다 ..."
디스크 맵은 다음과 같이 그려 질 수 있습니다.
Block Index 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14
Contents | | | |A0 | |A1 | |B2 | | |B1 |B0 | | | |
디스크는 파일 내의 모든 파일이 연속적으로 저장 될 때 조각 모음 된 것으로 간주됩니다.
네 목표:
주어진 디스크를 조각 모음 하는 가장 짧은 일련의 합법적 이동을 수행하십시오.
법적 움직임
이동에는 파일 이름 , 이동할 파일 의 블록 색인 및 이동하는 디스크 블록 의 세 가지 정보 가 포함됩니다.
예를 들어
ALPHA:1>4
"파일 ALPHA의 블록 1을 디스크의 블록 4로 이동하십시오."
이 이동 후 예제 파일 시스템은 이제
15 ALPHA=3,4 BETA=11,10,7
Block Index 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14
Contents | | | |A0 |A1 | | |B2 | | |B1 |B0 | | | |
이전에 거주했던 디스크 블록은 암시 적으로 지워집니다. 마찬가지로 디스크에서 두 블록을 교환하는 것으로 볼 수 있지만 스왑의 블록 중 하나는 비어 있어야합니다 .
데이터가 손상되지 않을 수 있습니다. 파일은 어떤 단계에서도 블록을 공유 할 수 없으며 이동은 디스크 범위 내에 있어야합니다. 다음은 불법입니다 : ALPHA:0>10
(베타 소유), ALPHA:3>0
(알파에 해당 블록 없음), ALPHA:0>-1
(디스크 인덱스 없음), ALPHA:0>15
(디스크 인덱스가 너무 큼)
실시 예 1
위의 예제를 완전히 해결하십시오.
ALPHA:0>4
BETA:0>9
BETA:2>11
파일은 솔루션 내에서 인접 할 필요는 없으며 자체적으로 연속적 일뿐입니다.
실시 예 2
더 제한된 경우가 있습니다.
입력:
10 A=1,2,3 B=6,7,8 C=4,5,0
산출:
B:2>9
B:1>8
B:0>7
C:2>6
이 파일 시스템의 진행은 다음과 같습니다.
Block Index 00 01 02 03 04 05 06 07 08 09
Contents |C2 |A0 |A1 |A2 |C0 |C1 |BO |B1 |B2 | |
|C2 |A0 |A1 |A2 |C0 |C1 |BO |B1 | |B2 |
|C2 |A0 |A1 |A2 |C0 |C1 |BO | |B1 |B2 |
|C2 |A0 |A1 |A2 |C0 |C1 | |B0 |B1 |B2 |
| |A0 |A1 |A2 |C0 |C1 |C2 |B0 |B1 |B2 |
다른 방법은이에 의한 것 조각 모음 C:2>9
후 가져 A
다음 단계를 가지고 C
다음 단계를 수행 C:2>5
하지만, 그 대안보다 더 많은 움직임을 포함하고 있기 때문에이 법적 솔루션이 아닐 것입니다 .
대표
기본 문자열에 합리적으로 가까운 한 입력에 대한 표현을 사용할 수 있습니다. 언어에 따라 첫 번째 예에 대한 입력은 다음과 같이 표기 될 수 있습니다.
"15 ALPHA=3,5 BETA=11,10,7"
[15," ","ALPHA","=",3,",",5," ","BETA","=",11,",",10,",",7]
(15,(("ALPHA",(3,5)),("BETA",(11,10,7))))
etc
마찬가지로, 출력은 사용자가 읽을 수있는 인쇄 된 로그로서 언어에 편리한 모든 것이 될 수 있으며 각 이동은 1) 파일 이름, 2) 파일 블록 색인으로 설명됩니다. , 3) 새 디스크 블록 인덱스
"ALPHA:1>6 BETA:2>9"
(0=>(0=>"ALPHA",1=>"1",2=>"6"), 1=>(0=>"BETA",1=>"2",2=>"9"))
["ALPHA",1,6,"BETA",2,9]
etc
요구 사항
코드는 모든 크기의 디스크와 파일 수 및 크기를 허용해야합니다.
유효한 초기 파일 시스템 상태를 설명하지 않는 입력은 정의되지 않은 동작을 유발할 수 있습니다.
코드는 잘 정의 된 입력에 대해 최단 이동 솔루션을 생성해야합니다 .
당신이 생산하는 모든 움직임은 합법적이어야합니다. 생성 한 각 단계를 적용한 후 파일 시스템이 유효한 상태 여야합니다.
모든 유효한 입력에 대해 코드를 종료해야합니다. 즉, 루프에 걸리지 않아야합니다. 각 이동이 적용된 후 파일 시스템이 완전히 새로운 상태에 있어야합니다.
가장 짧은 솔루션이 둘 이상있는 경우 유효한 솔루션을 선택할 수 있습니다.
가장 짧은 코드가 승리합니다. 최소한 하나의 새로운 예제 입력과 출력을 코드와 함께 게시하십시오.