Masukkan semi-sortir ke dalam array yang tidak disortir

14

Selamat datang di hari pertama Anda di PPCG Inc. Sebagai penyortir dokumen asisten junior terbaru kami, Anda bertanggung jawab untuk memastikan semua dokumen yang kami kirimkan kepada Anda diarsipkan dalam urutan abjad. Sangat mudah monyet bisa melakukannya. Nah, secara metaforis, seperti kita menyewa monyet untuk melakukannya. Tebak apa? Ternyata monyet kurang mengerti alfabet kita. Ngomong-ngomong, tidak ada waktu untuk memperbaiki kekacauan yang ada saat ini, jadi cobalah untuk tidak memperburuk situasi, ok? Kalau begitu lakukanlah! Jika Anda lapar, ada pisang di dekat pendingin air. Semoga berhasil!

Uraian Tugas

Memasukkan

  • Anda akan menerima daftar string (arsip) dan string yang perlu ditambahkan ke daftar itu (dokumen)
  • Semua string hanya akan berisi huruf besar, huruf kecil, dan spasi
  • String akan selalu dimulai dan diakhiri dengan surat

Tugas

Tentukan posisi target dokumen: posisi yang harus diterima dalam arsip. Posisi target dapat ditentukan sebagai berikut:

  • Untuk setiap posisi:
    • Hitung jumlah string dalam arsip sebelum posisi itu yang abjad sebelum dokumen
    • Hitung jumlah string dalam arsip setelah posisi itu yang sesuai abjad setelah dokumen
    • Tentukan skor posisi sebagai jumlah dari dua hitungan di atas
  • Posisi target dokumen adalah posisi dengan skor tertinggi
  • Dalam hal seri, semua posisi dengan skor tertinggi sama-sama valid sebagai posisi target. Hanya satu yang perlu dipilih.

Saat menyortir:

  • Huruf besar dan kecil sama
  • Spasi datang sebelum surat

Keluaran

  • Arsip dengan dokumen ditambahkan ke dalamnya dalam bentuk apa pun

ATAU

  • Posisi target dokumen, dalam indeks berbasis 0 atau 1

Evaluasi pekerjaan

Bytes paling sedikit menang!

Contoh 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
Lex
sumber
5
Selamat datang di PPCG, ini sepertinya posting pertama yang bagus! :) Instruksi Anda di bagian "Tugas" agak sulit dibaca. Pengguliran horizontal menyebalkan: Saya akan mempertimbangkan menggunakan daftar peluru saja. Kami memiliki Kotak Pasir berguna di mana Anda dapat memposting tantangan bagi komunitas untuk ditinjau, jika Anda mau.
FryAmTheEggman
Dragonshy, saya baru saja mendapatkannya! Sangat bagus :-D
Luis Mendo
@Lex Akan lebih baik untuk memiliki satu atau dua kasus uji lagi
Luis Mendo

Jawaban:

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

Tidak Disatukan:

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;
}

Sunting: Menyimpan banyak byte berkat @ user81655.

Neil
sumber
Juga mengganti indexOfdengan variabel hasil yang ditetapkan selama peta akan lebih pendek juga.
user81655
Setuju, tapi sepertinya itu bukan solusi saya lagi ...
Neil
3

Pyth, 40 38 byte

Kredit untuk @Katenkyo untuk mengajar saya bahwa A xnor Bpada dasarnya A==B. ( A xor Bjuga A!=B)

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

Cobalah online!

Bagaimana itu bekerja:

Ini menjumlahkan XNOR apakah entri lebih kecil dari dokumen, dan apakah indeks entri lebih kecil dari indeks dokumen.

Ia menemukan posisi di mana jumlah ini adalah maksimum, lalu mengeluarkannya.

Biarawati Bocor
sumber
2

Python 3, 135 167 Bytes

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)
haydenridd
sumber
1

Ruby, 97 byte

Fungsi anonim, mengembalikan posisi target.

->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}}}

Ketika benar-benar memasukkan ke dalam arsip, 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}
Nilai Tinta
sumber
1

Pyth, 54 52 47 45 byte

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

Masukan yang diharapkan adalah daftar, elemen pertama adalah daftar string (arsip), elemen kedua adalah string (dokumen)

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

Tes di sini

  • Disimpan 5 byte pada inisialisasi input (terima kasih @ Kenny Lau)
tongkat
sumber
Z adalah autoinited 0yang jika saya membaca kode Anda dengan benar dapat menghemat ruang
Maltysen
Menggunakan ["Applebuck Season","Friendship is Magic","The Ticket Master","Griffon the BrushOff","Boast Busters","Bridle Gossip"]\n "Dragonshy" sebagai input dan menggunakan Esebagai ganti @Q0dan @Q1dapat menghemat empat byte.
Leaky Nun
Anda bisa menggunakan AQbukan J@Q0K@Q1.
Leaky Nun
1

MATL , 32 byte

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

Input adalah array sel string (beberapa string dipisahkan oleh spasi dan dilampirkan dalam kurung kurawal) untuk arsip, dan string untuk dokumen. Output berbasis 1. Dalam kasus seri, posisi pertama dikembalikan.

Cobalah online!

Penjelasan

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
Luis Mendo
sumber