CRUD nhiều người dùng: Hợp lệ, Sự cố hoặc Lỗi?


12

Giới thiệu :

Bạn đã từng sử dụng Dropbox với một số người khác và cả hai bạn đã sửa đổi cùng một tệp? Đã bao giờ có một ứng dụng nhiều người dùng với cơ sở dữ liệu quan hệ và hai người đang sửa đổi (hoặc tệ hơn, một người đang xóa và người kia sửa đổi) cùng một đối tượng? Chà, hãy mô phỏng điều đó với thử thách này (sắp xếp).

Vì lợi ích của thử thách này, chúng tôi chỉ có hai người dùng và một hoặc hai tệp có liên quan. Cả hai người dùng đều có các đặc quyền chung đối với CRUD (Tạo, Đọc, Cập nhật và Xóa) tất cả các tệp.

Thử thách:

Đầu vào:

Chúng tôi sẽ có một vài đầu vào (định dạng đầu vào là linh hoạt và bất kỳ định dạng hợp lý nào đều được phép):

1) Chế độ khóa (bật / tắt) : Loại sự khác biệt giữa khóa đồng thời lạc quan và bi quan .
Cả hai người dùng đều được phép CRUD (Tạo, Đọc, Cập nhật và Xóa) mọi thứ, nhưng đôi khi có thể xảy ra lỗi hoặc sự cố. Tùy thuộc vào chế độ khóa, sự cố khi tắt, có thể là lỗi khi bật. Điều này được giải thích dưới đây trong phần đầu ra .

2 & 3) Hai hành động của người dùng . Những hành động này luôn bao gồm hai điều: Người dùng làm gì (Tạo, Đọc, Cập nhật hoặc Xóa) và cho tệp nào.

Đầu ra:

Chúng tôi sẽ có ba đầu ra có thể:

  1. Hợp lệ : Cả hai hành động của cả hai người dùng đều có thể được thực hiện đồng thời mà không có sự cố nào xảy ra.
  2. Lỗi : Cả hai hành động của cả hai người dùng đều không thể được thực hiện đồng thời và gây ra lỗi cho một trong những người dùng (người dùng không liên quan đến thử thách này). Điều này có thể xảy ra khi:
    • một người dùng Đọc hoặc Cập nhật một tệp mà người dùng khác Xóa;
    • cả hai người dùng Cập nhật cùng một tệp với chế độ khóa được bật;
    • một người dùng Tạo một tệp mà người dùng khác Đọc / Cập nhật / Xóa (điều này có nghĩa là tệp đã tồn tại, vì vậy nó không thể được tạo);
    • cả hai người dùng Tạo cùng một tệp.
  3. Vấn đề : Cả hai hành động của cả hai người dùng có thể được thực hiện đồng thời, nhưng có thể gây ra sự cố không mong muốn. Điều này có thể xảy ra khi:
    • cả hai người dùng Cập nhật tệp khi tắt chế độ khóa;
    • một người dùng Cập nhật một tệp mà người dùng khác đọc;
    • cả hai người dùng Xóa cùng một tệp (thực tế điều này sẽ gây ra lỗi cho người dùng thứ hai, nhưng vì nó vẫn sẽ bị xóa như người dùng muốn, nên nó sẽ là một vấn đề thay vì lỗi vì thách thức này)

Quy tắc thử thách:

  • Tất cả đầu vào và đầu ra đều linh hoạt và mọi người nên nói rõ câu nào họ đã sử dụng trong câu trả lời của mình!
    Ví dụ đầu vào: 0/ 1cho chế độ khóa & 31(hành động thứ ba: Cập nhật; tệp: 1) & 21(hành động thứ hai: Đọc; tệp: 1); true/ falsecho chế độ khóa & ['C','A'](hành động: Tạo; tệp: A) & ['D','B'](hành động: Xóa; tệp: B); v.v ... Kết
    quả đầu ra: null/ true/ false(null = hợp lệ; true = error; false = vấn đề); -1/ 0/ 1(-1 = lỗi; 0 = vấn đề; 1 = hợp lệ); v.v ... Tuy nhiên, ba đầu ra có thể phải là duy nhất và khác biệt cho ba loại đầu ra.
  • Những gì các tệp được gọi là không liên quan, cũng có thể được nhìn thấy với các ví dụ đầu vào ở trên. Vì vậy, vui lòng sử dụng bất kỳ loại tên tệp nào trong câu trả lời của bạn bao gồm một chữ cái hoặc chữ số (ASCII). Tuy nhiên, chúng phải nhất quán trong tất cả các trường hợp thử nghiệm của bạn, vì vậy bạn không thể sử dụng A/ Btrong một trường hợp thử nghiệm và 1/ 2trong một trường hợp thử nghiệm khác.
  • Bốn hành động cho CRUD cũng phải là các giá trị duy nhất và nhất quán. Vì vậy, bạn không thể sử dụng 'D'/ 'C'trong một trường hợp thử nghiệm, và sau đó 4/ 1trong một trường hợp thử nghiệm khác.
  • Bạn có thể giả định rằng tệp được người dùng chọn luôn tồn tại khi họ muốn Đọc, Cập nhật hoặc Xóa tệp.

Quy tắc chung:

  • Đây là , vì vậy câu trả lời ngắn nhất bằng byte thắng.
    Đừng để ngôn ngữ mã-golf ngăn cản bạn đăng câu trả lời với các ngôn ngữ không mã hóa. Cố gắng đưa ra một câu trả lời càng ngắn càng tốt cho ngôn ngữ lập trình 'bất kỳ'.
  • Quy tắc chuẩn áp dụng cho câu trả lời của bạn với quy tắc I / O mặc định , vì vậy bạn được phép sử dụng STDIN / STDOUT, các hàm / phương thức với các tham số thích hợp và kiểu trả về, chương trình đầy đủ. Cuộc gọi của bạn.
  • Lỗ hổng mặc định bị cấm.
  • Nếu có thể, vui lòng thêm một liên kết với một bài kiểm tra cho mã của bạn (ví dụ TIO ).
  • Ngoài ra, thêm một lời giải thích cho câu trả lời của bạn rất được khuyến khích.

Tất cả các trường hợp thử nghiệm có thể (trong đó các hành động có thể theo thứ tự đầu vào ):

: Bạn nên hỗ trợ tất cả (lên đến bốn) biến thể trong các trường hợp thử nghiệm dưới đây. Vì vậy, nếu một trường hợp thử nghiệm nêu rõ action1: Create file A; action2: Update file B, trường hợp thử nghiệm đó cũng sẽ giữ kết quả tương tự cho action1: Create file B; action2: Update file A; action1: Update file B; action2: Create file A; và 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

2
Tôi cảm thấy như sẽ có một giải pháp 1 byte nếu tôi có thể đưa ra các phương thức nhập / xuất đúng (có thể là một loại mặt nạ bit nào đó)
Dữ liệu đã hết hạn

2
@ExpiredData Đã thay đổi một số phần của các đầu ra có thể, rằng chúng phải nhất quán, nhưng không nhất thiết phải là duy nhất. Và cũng là đầu vào phải nhất quán.
Kevin Cruijssen

1
@Arnauld Ah, tôi đã loại trừ tất cả các B/Btrường hợp trong tính của tôi , vì tôi coi chúng tương tự như A/A. Đó là nơi mà sự khác biệt đến từ. Nhưng tôi đoán rằng suy nghĩ đó là không chính xác nếu bạn có một giá trị cụ thể cho các tệp ..
Kevin Cruijssen

Câu trả lời:


8

JavaScript (ES6), 36 byte

Không có bảng tra cứu

(m,a,f,A,F)=>f-F?2:a^A?a*A&8:a&4?m:a

Hãy thử trực tuyến!

Tôi / O

  • m08
  • aA0248
  • fF
  • 028

Làm sao?

2

Nếu các tệp giống hệt nhau, chúng ta cần trả về:

  • 2
  • 8
  • m
  • 0

4×4

a ^ AaA? ? a * A & 8 : a & 4update? ? m:a

CRUD0248C00000R20280U408m0D80008


JavaScript (ES6),  46 45  40 byte

Với một bảng tra cứu

(m,a,f,A,F)=>f-F?0:[m,1,1,0][a*2+A*9&23]

Hãy thử trực tuyến!

Tôi / O

  • 1
  • 0123
  • Tệp: mọi số nguyên
  • 01

4

Võng mạc 0.8.2 , 53 byte

^(.)(?!\1).+|..RR.
V
..DD.
P
..UUL
E
.+[CD].+
E
..+
P

Hãy thử trực tuyến! Liên kết bao gồm bộ kiểm tra. Lấy đầu vào dưới dạng một chuỗi gồm 5 ký tự, hai ký tự đại diện cho tên tệp, sau đó hai ký tự từ CRUD, sau đó Lhoặc U(bị khóa / mở khóa) và xuất ra một trong VPE(hợp lệ / vấn đề / lỗi). Giải trình:

^(.)(?!\1).+|..RR.
V

Tên tệp khác nhau luôn luôn hợp lệ, như là hai lần đọc. Khó chịu, đây là thử nghiệm duy nhất buộc tôi phải sử dụng một tiêu đề. (Nó sẽ tốn thêm một byte để làm cho tiêu đề không cần thiết.)

..DD.
P

Hai lần xóa luôn là một vấn đề.

..UUL
E

Hai bản cập nhật bị khóa là một lỗi.

.+[CD].+
E

Bất kỳ tạo hoặc xóa khác là một lỗi.

..+
P

Mọi thứ khác là một vấn đề.


3

Octave , 96 byte

@(a,b,c)[a(1)!=b(1)|a(2)+b(2)==20,mod((m=a+b+c)(2),10010)<1|mod(m(2),1020000)<1|mod(m(2),200)<1]

Hãy thử trực tuyến!

Chắc chắn có thể ngắn hơn, nhưng tôi không có thời gian để làm điều đó

File 1 = 0
File 2 = 1
Read = 10
Delete = 100
Create = 1000 
Update = 10000
Lock on = 100000
Lock off = 1000000

Valid Values: 
[1 0] 

Problem Values: 
[0 1]


Invalid Values: 
[0 0]

Nhập dưới dạng a = [tệp, hành động], b = [file2, action2], c = lock

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.