소개 :
다른 사람들과 Dropbox를 사용해 본 적이 있고 둘 다 동일한 파일을 수정 했습니까? 관계형 데이터베이스를 사용하는 다중 사용자 응용 프로그램을 가지고 있고 두 사람이 같은 개체를 수정하거나 더 나쁜 것은 수정하고 있습니까? 글쎄,이 도전 (정렬)으로 그것을 시뮬레이션 해 봅시다.
이 문제를 해결하기 위해 두 명의 사용자와 하나 또는 두 개의 관련 파일 만 있습니다. 두 사용자 모두 일반적으로 모든 파일 을 CRUD (만들기, 읽기, 업데이트 및 삭제) 할 수 있습니다.
도전:
입력:
몇 가지 입력이 가능합니다 (입력 형식은 유연하고 모든 합리적인 형식이 허용됩니다).
1) 잠금 모드 (켜기 / 끄기) : 낙관적 잠금과 비관적 동시 잠금 간의 차이점을 해결 합니다 .
두 사용자 모두 모든 것을 CRUD (만들기, 읽기, 업데이트 및 삭제) 할 수 있지만 때때로 오류나 문제가 발생할 수 있습니다. 잠금 모드에 따라 전원을 끌 때 문제가 발생하면 전원을 켤 때 오류가 발생할 수 있습니다. 이에 대해서는 아래 출력 섹션 에서 설명합니다 .
2 & 3) 두 가지 사용자 동작 . 이러한 작업은 항상 사용자가 수행하는 작업 (만들기, 읽기, 업데이트 또는 삭제)과 파일에 대한 두 가지로 구성됩니다.
산출:
세 가지 가능한 출력이 있습니다 :
- 유효한 : 문제없이 두 사용자의 두 작업을 동시에 수행 할 수 있습니다.
- 오류 : 두 사용자의 두 작업을 동시에 수행 할 수 없으며 사용자 중 한 명 (이 사용자는이 문제와 관련이 없음)에 오류가 발생합니다. 다음과 같은 경우에 발생할 수 있습니다.
- 한 사용자가 다른 사용자가 삭제 한 파일을 읽거나 업데이트합니다.
- 두 사용자 모두 잠금 모드가 설정된 동일한 파일을 업데이트합니다.
- 사용자 다른 사용자가 읽기 / 업데이트 / 삭제하는 파일을 작성합니다 (이는 파일이 이미 존재하므로 작성할 수 없음을 나타냄).
- 두 사용자 모두 같은 파일을 만듭니다.
- 문제 : 두 사용자의 두 작업을 동시에 수행 할 수 있지만 예기치 않은 문제가 발생할 수 있습니다. 다음과 같은 경우에 발생할 수 있습니다.
- 두 사용자 잠금 모드가 해제되면 파일을 업데이트합니다.
- 한 명의 사용자가 다른 사용자가 읽는 파일을 업데이트합니다.
- 두 사용자 모두 같은 파일을 삭제합니다 (실제로이 경우 두 번째 사용자에게는 오류가 발생하지만 사용자가 원하는대로 여전히 삭제되므로이 문제로 인해 오류 대신 문제가됩니다)
도전 규칙 :
- 모든 입력 및 출력은 유연 하며 모든 사람은 자신의 답변에 사용한 것을 명시해야합니다!
입력 예 :0
/1
잠금 모드의 경우 &31
(세 번째 작업 : 업데이트; 파일 : 1) &21
(두 번째 작업 : 읽기; 파일 : 1);true
/false
잠금 모드의 경우 &['C','A']
(조치 : 작성; 파일 : A) &['D','B']
(조치 : 삭제; 파일 : B); 등.
예제 출력 :null
/true
/false
(null = 유효한; true = 오류; false = 문제);-1
/0
/1
(-1 = 오류; 0 = 문제; 1 = 유효); 그러나 세 가지 가능한 출력은 세 가지 출력 유형에 대해 고유하고 고유 해야합니다. - 파일이 호출되는 것은 관련이 없으며 위의 입력 예제에서도 볼 수 있습니다. 따라서 단일 (ASCII) 문자 또는 숫자로 구성된 답에 파일 형식의 파일을 자유롭게 사용하십시오. 그들은 당신이 사용할 수 있도록, 그러나 모든 테스트 케이스에서 일치해야합니까
A
/B
하나의 테스트 케이스 및1
/2
또 다른에. - CRUD에 대한 4 가지 조치는 고유하고 일관된 값이어야합니다. 따라서 한 테스트 사례에서 / 를 사용한 다음 다른 테스트 사례에서
'D'
/'C'
를 사용할 수 없습니다 .4
1
- 사용자가 선택한 파일이 읽기, 업데이트 또는 삭제를 원할 때 항상 존재한다고 가정 할 수 있습니다.
일반 규칙:
- 이것은 code-golf 이므로 바이트 단위의 최단 답변이 이깁니다.
코드 골프 언어가 코드 골프 언어 이외의 언어로 답변을 게시하지 못하게하십시오. '모든'프로그래밍 언어에 대한 가능한 한 짧은 대답을 생각해보십시오. - 표준 규칙 은 기본 I / O 규칙 을 사용 하여 답변에 적용 되므로 STDIN / STDOUT, 적절한 매개 변수 및 반환 유형의 전체 프로그램과 함께 함수 / 방법을 사용할 수 있습니다. 당신의 전화.
- 기본 허점 은 금지되어 있습니다.
- 가능하면 코드 테스트 (예 : TIO ) 링크를 추가하십시오 .
- 또한 답변에 대한 설명을 추가하는 것이 좋습니다.
가능한 모든 테스트 사례 (작업이 입력 순서 † 중 하나 일 수있는 경우 ) :
† : 아래 테스트 사례의 모든 (최대 4 개) 변형을 지원해야합니다. 따라서 테스트 케이스에 상태가 표시 action1: Create file A; action2: Update file B
되면 해당 테스트 케이스도 동일한 결과를 가져야합니다 action1: Create file B; action2: Update file A
. action1: Update file B; action2: Create file A
; 그리고 action1: Update file A; action2: Create file B
.
Valid use-cases:
locking mode: either; action1: Create file A; action2: Create file B
locking mode: either; action1: Create file A; action2: Read file B
locking mode: either; action1: Create file A; action2: Update file B
locking mode: either; action1: Create file A; action2: Delete file B
locking mode: either; action1: Read file A; action2: Read file A
locking mode: either; action1: Read file A; action2: Read file B
locking mode: either; action1: Read file A; action2: Update file B
locking mode: either; action1: Read file A; action2: Delete file B
locking mode: either; action1: Update file A; action2: Update file B
locking mode: either; action1: Update file A; action2: Delete file B
locking mode: either; action1: Delete file A; action2: Delete file B
Error use-cases:
locking mode: either; action1: Create file A; action2: Create file A
locking mode: either; action1: Create file A; action2: Read file A
locking mode: either; action1: Create file A; action2: Update file A
locking mode: either; action1: Create file A; action2: Delete file A
locking mode: either; action1: Read file A; action2: Delete file A
locking mode: on; action1: Update file A; action2: Update file A
locking mode: either; action1: Update file A; action2: Delete file A
Problem use-cases:
locking mode: either; action1: Read file A; action2: Update file A
locking mode: off; action1: Update file A; action2: Update file A
locking mode: either; action1: Delete file A; action2: Delete file A
B/B
내 계산에 사건을 내가 아니라 그들과 유사한 것으로 간주하기 때문에, A/A
. 그 차이가 나옵니다. 그러나 파일에 대한 특정 값이 있으면 생각이 잘못되었다고 생각합니다.