Chèn semi-sort vào mảng chưa sắp xếp


14

Chào mừng bạn đến với ngày đầu tiên của bạn tại PPCG Inc. Là công cụ sắp xếp tài liệu trợ lý mới nhất của chúng tôi, bạn có trách nhiệm đảm bảo tất cả các tài liệu chúng tôi gửi cho bạn được lưu trữ theo thứ tự bảng chữ cái. Thật dễ dàng một con khỉ có thể làm điều đó. Nói một cách ẩn dụ, như chúng ta đã thuê một con khỉ để làm điều đó. Đoán xem cái gì? Hóa ra khỉ thiếu hiểu biết về bảng chữ cái của chúng tôi. Dù sao, không có thời gian để sửa chữa mớ hỗn độn ngay bây giờ, vì vậy hãy cố gắng để không làm cho tình hình tồi tệ hơn, ok? Sau đó đến nó! Nếu bạn cảm thấy đói, có chuối trên máy làm mát nước. Chúc may mắn!

Mô tả công việc

Đầu vào

  • Bạn sẽ nhận được một danh sách các chuỗi (kho lưu trữ) và một chuỗi cần được thêm vào danh sách đó (tài liệu)
  • Tất cả các chuỗi sẽ chỉ chứa các chữ cái viết hoa, chữ thường và dấu cách
  • Chuỗi sẽ luôn bắt đầu và kết thúc bằng một chữ cái

Bài tập

Xác định vị trí mục tiêu của tài liệu: vị trí cần nhận trong kho lưu trữ. Vị trí mục tiêu có thể được xác định như sau:

  • Đối với từng vị trí:
    • Đếm số lượng chuỗi trong kho lưu trữ trước vị trí được sắp xếp theo thứ tự abc trước tài liệu
    • Đếm số lượng chuỗi trong kho lưu trữ sau vị trí đó theo thứ tự bảng chữ cái sau tài liệu
    • Xác định số điểm của vị trí là tổng của hai lần đếm trên
  • Vị trí mục tiêu của tài liệu là vị trí có số điểm cao nhất
  • Trong trường hợp hòa, tất cả các vị trí có số điểm cao nhất đều có giá trị như nhau như vị trí mục tiêu. Chỉ cần một lựa chọn.

Khi sắp xếp:

  • Chữ in hoa và chữ thường là tương đương
  • Dấu cách đến trước chữ

Đầu ra

  • Các kho lưu trữ với tài liệu được thêm vào nó dưới mọi hình thức

HOẶC LÀ

  • Vị trí mục tiêu của tài liệu, trong chỉ mục dựa trên 0 hoặc 1 dựa trên

Đánh giá công việc

Ít byte nhất sẽ thắng!

Ví dụ I / O

Archive:
    Applebuck Season
    Friendship is Magic
    The Ticket Master
    Griffon the BrushOff
    Boast Busters
    Bridle Gossip

Document: Dragonshy

Position scores (0-based index):
0: 0 + 3 = 3
1: 1 + 3 = 4
2: 1 + 2 = 3
3: 1 + 1 = 2
4: 1 + 0 = 1
5: 2 + 0 = 2
6: 3 + 0 = 3

Target position: 1

5
Chào mừng bạn đến với PPCG, đây có vẻ như là một bài viết đầu tiên tốt đẹp! :) Tuy nhiên, hướng dẫn của bạn trong phần "Nhiệm vụ" là loại khó đọc. Cuộn ngang gây khó chịu: Thay vào đó, tôi sẽ xem xét sử dụng danh sách dấu đầu dòng. Chúng tôi có một Sandbox tiện dụng , nơi bạn có thể đăng các thử thách để cộng đồng xem xét, nếu bạn muốn.
FryAmTheEggman

Dragonshy tôi chỉ cần có nó! Rất hay :-D
Luis Mendo

@Lex Sẽ tốt hơn nếu có thêm một hoặc hai trường hợp thử nghiệm
Luis Mendo

Câu trả lời:


4

JavaScript (ES6), 81 byte

(a,d)=>a.map((e,i)=>d[l="toLowerCase"]()<e[l]()?s--:++s>m&&(++m,p=++i),m=s=p=0)|p

Ung dung:

function position(archive, document) {
    var score = 0;
    var max = 0;
    var pos = 0;
    var i = 0;
    while (i < archive.length) {
        if (archive[i++].toLowerCase() > document.toLowerCase()) {
            score--;
        } else {
            score++;
            if (score > max) {
                max++;
                pos = i;
            }
        }
    }
    return pos;
}

Chỉnh sửa: Đã lưu rất nhiều byte nhờ @ user81655.


Ngoài ra, việc thay thế indexOfbằng một biến kết quả được đặt trong bản đồ cũng sẽ ngắn hơn.
dùng81655

Đồng ý, nhưng nó hầu như không giống như giải pháp của tôi nữa ...
Neil

3

Bình thường, 40 38 byte

Tín dụng cho @Katenkyo vì đã dạy tôi A xnor Bvề cơ bản A==B. ( A xor Bcũng A!=B)

AQJ+],k0.e,rb0hkGteh.Msmq<hdrH0<edeZJJ

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

Làm thế nào nó hoạt động:

Nó tính tổng XNOR về việc mục nhập có nhỏ hơn tài liệu hay không và liệu chỉ mục của mục có nhỏ hơn chỉ mục của tài liệu hay không.

Nó tìm vị trí mà tổng này là tối đa, sau đó xuất nó.


2

Python 3, 135 167 byte

def a(b,c):a=[sum(map(lambda x:x.lower()>c.lower(),b[i:]))+sum(map(lambda x:x.lower()<c.lower(),b[:i]))for i in range(0,len(b)+1)];b.insert(a.index(max(a)),c);print(b)

1

Ruby, 97 byte

Hàm ẩn danh, trả về vị trí đích.

->a,d{d.upcase!;(0...a.size).max_by{|i|a[0,i].count{|s|s.upcase<d}+a[i..-1].count{|s|s.upcase>d}}}

Khi thực sự chèn vào kho lưu trữ, 110 byte :

->a,d{t=d.upcase;a.insert (0...a.size).max_by{|i|a[0,i].count{|s|s.upcase<d}+a[i..-1].count{|s|s.upcase>d}},d}

1

Pyth, 54 52 47 45 byte

AQVhlG=Ys+m>rH0rd0:G0Nm<rH0rd0gGNI>YZ=ZY=kN;k

Đầu vào mong đợi là một danh sách, phần tử đầu tiên là danh sách các chuỗi (lưu trữ), phần tử thứ hai là một chuỗi (tài liệu)

AQ                                            # initialize G and H with the archive and the document
  VhlG                                        # iterate over the indexes on archive
      =Ys+                                    # concatenate and sum the following scores
          m>rH0rd0:G0N                        # map a string comparison between the document and the archives up to the index, returning true(1) for lower, and false(0) for higher
                      m<rH0rd0gGN             # same as above, but starts at the index and goes up to the end of the archive, returning false(0) for lower, and true(1) for higher
                                 I>YZ         # Check if score is higher than highest
                                     =ZY      # update highest score
                                        =kN;  # update index
                                            k # print index

Kiểm tra tại đây

  • Đã lưu 5 byte khi khởi tạo đầu vào (cảm ơn @Kenny Lau)

Z được tự động hóa 0mà nếu tôi đọc mã của bạn một cách chính xác có thể giúp bạn tiết kiệm một khoảng trống
Maltysen

Sử dụng ["Applebuck Season","Friendship is Magic","The Ticket Master","Griffon the BrushOff","Boast Busters","Bridle Gossip"]\n "Dragonshy"làm đầu vào và sử dụng Ethay vì @Q0@Q1có thể giúp bạn tiết kiệm bốn byte.
Leaky Nun

Bạn có thể sử dụng AQthay vì J@Q0K@Q1.
Leaky Nun

1

MATL , 32 byte

hk4#S4#S%2#0)>t0whYsw~0hPYsP+K#X>

Đầu vào là một mảng ô của các chuỗi (một số chuỗi được phân tách bằng dấu cách và được đặt trong dấu ngoặc nhọn) cho tệp lưu trữ và chuỗi cho tài liệu. Đầu ra là 1 dựa. Trong trường hợp hòa, vị trí đầu tiên được trả lại.

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

Giải trình

h      % Concatenate archive and document as a cell array of strings
k      % Convert all strings to lowercase
4#S    % Sort and output the indices of the sorting
4#S    % Again. This gives the indices that applied to the concatenated
       % array would make it sorted
2#0)   % Separate last index (document) from the others (archive)
>      % Is it greater? Gives zero/one array the size of the archive
t      % Duplicate that array
0wh    % Prepend a 0
Ys     % Cumulative sum. This is first part of the score
w~     % Swap. Negate zero/one array
0h     % Postpend a 0
PYsP   % Reverse, cumulative sum, reverse. Second part of the score
+      % Add. This is the score of each position
K#X>   % Arg max
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.