Sắp xếp tên ban nhạc


22

Mô tả thử thách

Bạn có một thư viện âm nhạc với nhiều bài hát được ghi lại bằng nhiều ban nhạc, mỗi trong số đó có một cái tên, như Queen, Aerosmith, Sunny Day Real Estate, The Strokes. Khi trình phát âm thanh hiển thị thư viện của bạn theo thứ tự bảng chữ cái theo tên ban nhạc, nó thường bỏ qua Thephần đó, vì nhiều tên ban nhạc bắt đầu The, giúp điều hướng qua bộ sưu tập phương tiện của bạn dễ dàng hơn. Trong thử thách này, đưa ra một danh sách (mảng) các chuỗi, bạn cần sắp xếp nó theo cách đó (nghĩa là bỏ qua Thetừ ở đầu tên). Bạn có thể viết một phương pháp hoặc một chương trình làm việc đầy đủ.

Đầu vào / đầu ra mẫu

[Queen, Aerosmith, Sunny Day Real Estate, The Strokes] -> [Aerosmith, Queen, The Strokes, Sunny Day Real Estate]
[The Ramones, The Cure, The Pixies, The Roots, The Animals, Enrique Iglesias] -> [The Animals, The Cure, Enrique Iglesias, The Pixies, The Ramones, The Roots]
[The The, The They, Thermodynamics] -> [The The, Thermodynamics, The They]

Ghi chú / trường hợp cạnh

  • Sắp xếp từ vựng là trường hợp không nhạy cảm, vì vậy The Police, The policethe policetất cả đều tương đương,

  • Thuật toán của bạn chỉ nên bỏ qua thetừ đầu tiên , vì vậy các dải được đặt tên The Thehoặc The The Bandđược sắp xếp bình thường theo từ thứ hai the,

  • Một ban nhạc có tên The(một từ ba chữ cái) được sắp xếp bình thường (không bỏ qua),

  • Thứ tự của hai dải có cùng tên, một trong số đó bắt đầu bằng the(như The PolicePolice) không được xác định,

  • Bạn có thể giả sử rằng nếu tên của một ban nhạc bao gồm nhiều hơn một từ, chúng được phân tách bằng một ký tự khoảng trắng. Bạn không cần phải xử lý khoảng trắng hàng đầu hoặc dấu,

  • Tất cả các chuỗi đầu vào khớp nhau [A-Za-z0-9 ]*, nghĩa là chúng sẽ chỉ bao gồm các chữ cái viết thường và in hoa của bảng chữ cái tiếng Anh, chữ số và ký tự khoảng trắng,

  • Hãy nhớ rằng đây là một thử thách , vì vậy hãy viết mã của bạn càng ngắn càng tốt!


Những cái tên chỉ có chữ số đến trước hay sau bảng chữ cái?
admBorkBork

Chuỗi chỉ số đến trước
shooqie

1
Thứ tự sắp xếp của Thevà là The Thegì? (Hầu hết các câu trả lời có thể cần phải thay đổi nếu đó là bất cứ điều gì khác ngoài không xác định)
Brad Gilbert b2gills

Los lobos thì sao?
njzk2

3
Nhân tiện, đây là một ban nhạc thực sự. (cùng với Ai, Cái gì, Ở đâu, Khi nào, Tại sao và Làm thế nào)
DanTheMan

Câu trả lời:


7

Python, 56 62 64 byte

lambda b:sorted(b,key=lambda x:(x,x[4:])[x.lower()[:4]=='the '])

Thử nó

Cảm ơn @Chris H đã chỉ ra rằng lstrip()không xử lý The Thechính xác, vì dải này đã làm nổ tung tất cả các ký tự khớp và sắp xếp nó thành một chuỗi trống và @manatwork để tìm ra lỗ hổng khi sử dụng replace(). Phiên bản mới sẽ hoạt động.

Phiên bản cũ:

lambda b:sorted(b,key=lambda x:x.lower().lstrip('the '))

1
Tôi không tin chắc. Thêm "Các động vật" vào danh sách cuối cùng cho ['The The', 'The', 'The Animals', 'Thermodynamics', 'The They']. Trường hợp cạnh thứ 2 gợi ý ngồi nên là ['Động vật', 'The', 'The', 'Nhiệt động lực học', 'Chúng'] (hoặc trao đổi vật phẩm thứ 2 và thứ 3). Một chút lo lắng cho thấy không gian bên trong strip('the ')đang bị bỏ qua - hãy thửfor x in ['The The', 'The They', 'Thermodynamics', 'The', 'The Animals']: print (x.lower().strip('the '))
Chris H

Điều đó replace()không tốt hơn nhiều: 'what the snake'.replace('the ','',1)kết quả 'what snake'.
manatwork

5

V , 32 28 byte

ç^The /dwA_
:sort
ç_/$xIThe 

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

Lưu ý đến bản thân: Viết tắt để :sorttôi không cần 6 byte cho một lệnh!

Giải trình:

ç^The /     "On every line starting with 'The ',
       dw   "Delete a word
         A_ "And (A)ppend an underscore '_'

:sort       "Sort all lines alphabetically

ç_/         "On every line containing an underscore,
   $x       "Delete the last character
     IThe   "And prepened 'The '

Không quen thuộc với V, nhưng có vẻ như cái này hoạt động tốt mà không có dấu hoa thị. Đây có phải là sự trùng hợp ngẫu nhiên với đầu vào, hoặc thực sự không cần thiết?
kirkpatt

1
@kirkpatt Ý kiến ​​hay! Điều đó gần như hoạt động, nhưng không hoàn toàn. Ví dụ, với đầu vào này, nó đặt "Radiohead" không chính xác sau "The Ramones" và "The Roots". Tuy nhiên, điều đó cho tôi một ý tưởng ...
DJMcMayhem

Điều gì xảy ra nếu thetrong tất cả các chữ thường, như thế the pAper chAsenào?
admBorkBork

4

Võng mạc , 34 byte

Các linefeed trailing là đáng kể.

%`^
$';
T`L`l`.+;
m`^the 

O`
.+;

I / O là một băng tần trên mỗi dòng.

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

Giải trình

%`^
$';

Nhân đôi từng dòng, sử dụng ;như một dấu phân cách.

T`L`l`.+;

Biến mọi thứ ở phía trước của một ;trường hợp thấp hơn.

m`^the 

Loại bỏ bất kỳ thes xuất hiện ở đầu một dòng.

O`

Sắp xếp các dòng.

.+;

Xóa phần mở đầu của các dòng mà chúng ta đã sử dụng để sắp xếp.


Bạn không thể gói 3 bước đầu tiên thành một bước duy nhất sao? Giống như trong PCRE: s / (?i:the )?(.*)/ \L$1\E;$0/
Falco

@Falco .NET không hỗ trợ thay đổi trường hợp trong chuỗi thay thế và tôi cũng chưa thêm chúng vào trình thay thế tùy chỉnh của Retina.
Martin Ender


3

Perl, 52 byte

-13 byte nhờ @manatwork
-1 byte nhờ @ msh210

sub f{lc pop=~s/^the //ri}print sort{f($a)cmp f$b}<>

Một băng tần trên mỗi dòng là đầu vào, và đầu ra cũng vậy.

Việc triển khai khá đơn giản: chương trình in danh sách các băng tần, được sắp xếp với sự trợ giúp của hàm tùy chỉnh ( f) trả về tên băng tần chữ thường mà không dẫn đầu the.


Là ngắn hơn với sự thay thế thay vì phù hợp : sub f{lc$_[0]=~s/^the //ir}.
manatwork

Thực sự ngắn hơn 1 byte, cảm ơn.
Dada

Trên thực tế, tôi đếm ngắn hơn 2 hoặc 3 byte: không cần cả dấu ngoặc đơn xung quanh lctham số và icờ thay thế. Hoặc bạn đã gặp một trường hợp thử nghiệm mà không hoạt động?
manatwork

Suy nghĩ lại, số lượng tùy chọn dòng lệnh cũng có thể giảm nếu bạn lấy từng tên băng tần trên dòng riêng biệt : perl -e 'sub f{lc$_[0]=~s/^the //ri}print sort{f($a)cmp f$b}<>' <<< $'Queen\nAerosmith\nSunny Day Real Estate\nThe Strokes'.
manatwork

1
Lưu ba byte: lc popthay vì lc$_[0]saythay vì print. (Yêu cầu thứ hai -M5.01, miễn phí.) Đã thử nghiệm trong Dâu 5.20.2 chỉ với trường hợp thử nghiệm đầu tiên từ câu hỏi.
msh210

2

Python, 66 72 69 byte

lambda x:sorted(x,key=lambda a:a[4*(a.lower()[:4]=='the '):].lower())

Sử dụng sortedphương thức của Python với keyđối số từ khóa để sắp xếp theo tên trừ "The". Đây là một lambda; để gọi nó, đặt tên cho nó bằng cách đặt f=ở phía trước.

Bây giờ với trường hợp vô cảm thêm!


2
Nó không đáp ứng yêu cầu không nhạy cảm trong trường hợp, mặc dù ... Một tên ban nhạc có thể bắt đầu bằng the , trong trường hợp đó phương pháp này sẽ không hoạt động đúng.
shooqie

@shooqie Ồ, tôi không thấy yêu cầu đó. Tôi sẽ sửa chữa nó.
Đồng


2

Perl 6 , 26 byte

*.sort({fc S:i/^'the '//})

Giải trình:

# 「*」 is the input to this Whatever lambda
*.sort(

  # sort based on the return value of this Block lambda
  {
    fc # foldcase the following

    # string replace but not in-place
    S
      :ignorecase
      /
        # at the start of the string
        ^

        # match 「the 」
        'the '

      # replace with nothing
      //
  }
)

Kiểm tra:

use v6.c;
use Test;

my @tests = (
  « Queen Aerosmith 'Sunny Day Real Estate' 'The Strokes' »
    => « Aerosmith Queen 'The Strokes' 'Sunny Day Real Estate' »,
  « 'The Ramones' 'The Cure' 'The Pixies' 'The Roots' 'The Animals' 'Enrique Iglesias' »
    => « 'The Animals' 'The Cure' 'Enrique Iglesias' 'The Pixies' 'The Ramones' 'The Roots' »,
  « 'The The' 'The They' Thermodynamics »
    => « 'The The' Thermodynamics 'The They' »,
);

# give it a lexical name for clarity
my &band-sort = *.sort({fc S:i/^'the '//});

plan +@tests;

for @tests -> ( :key(@input), :value(@expected) ) {
  is-deeply band-sort(@input), @expected, @expected.perl;
}
1..3
ok 1 - ("Aerosmith", "Queen", "The Strokes", "Sunny Day Real Estate")
ok 2 - ("The Animals", "The Cure", "Enrique Iglesias", "The Pixies", "The Ramones", "The Roots")
ok 3 - ("The The", "Thermodynamics", "The They")

2

PowerShell v2 +, 33 32 29 byte

$args|sort{$_-replace'^the '}

Đã lưu 3 byte nhờ @MathiasRJessen

Đầu vào là thông qua các đối số dòng lệnh. Sắp xếp các tên gốc dựa trên kết quả của khối tập lệnh {...}thực hiện biểu thức chính quy -replaceđể loại bỏ phần đầu (không phân biệt chữ hoa chữ thường) "the ".

Ví dụ

PS C:\Tools\Scripts\golfing> .\sort-band-names.ps1 'the Ramones' 'The cure' 'The Pixies' 'The Roots' 'the Animals' 'Enrique Iglesias'
the Animals
The cure
Enrique Iglesias
The Pixies
the Ramones
The Roots

PS C:\Tools\Scripts\golfing> .\sort-band-names.ps1 'The The' 'The They' 'Thermodynamics'
The The
Thermodynamics
The They

PS C:\Tools\Scripts\golfing> .\sort-band-names.ps1 'THE STOOGES' 'The Strokes' 'The The' 'the they' 'the band' 'STP'
the band
THE STOOGES
STP
The Strokes
The The
the they

-replacekhông phân biệt chữ hoa chữ thường theo mặc định, '^the 'sẽ đủ cho mẫu
Mathias R. Jessen

@ MathiasR.Jessen Vâng, cảm ơn bạn đã nhắc nhở.
admBorkBork

@ValueInk Xem bình luận của Mathias về trường hợp không nhạy cảm và ví dụ cuối cùng tôi đã thêm.
admBorkBork

2

JavaScript / ECMAScript 6 93 70 byte

70 Cảm ơn Neil và Downgoat đã cho lời khuyên

B=>B.sort((a,b)=>R(a).localeCompare(R(b)),R=s=>s.replace(/^the /i,''))

Phiên bản có thể đọc được cho biến thể 70 byte

let sortBandNames = (bandNames) => {
    let stripThe = (name) => name.replace(/^the /i, '');
    let compareFunc = (a, b) => stripThe(a).localeCompare(stripThe(b));
    return bandNames.sort(compareFunc)
};

93

f=B=>{R=s=>s.toLowerCase().replace(/the /,'');return B.sort((a,b)=>R(a).localeCompare(R(b)))}

Phiên bản có thể đọc được cho biến thể 93 byte

let sortBandNames = (bandNames) => {
    let stripThe = (name) => name.toLowerCase().replace(/the /, '');
    let compareFunc = (a, b) => stripThe(a).localeCompare(stripThe(b));
    return bandNames.sort(compareFunc)
};

Không nên regrec đó có ^trong đó? Ngoài ra, localeCompare không phân biệt chữ hoa chữ thường trên hệ thống của tôi, vì vậy tôi không cần toLowerCase, chỉ là một /ilá cờ trên biểu thức chính quy. Cuối cùng, bạn có thể đánh gôn như sau: B=>B.sort((a,b)=>...,R=s=>...)- sortbỏ qua tham số phụ được đặt R.
Neil

^ Trong regex sẽ đi đâu? Đó sẽ là một phủ định và biểu thức được cho là khớp và xóa "cái". Tôi sẽ thử sử dụng so sánh miền địa phương mà không cần chuyển đổi chữ thường.
Pandacoder

@Pandacoder ^shuold đi vào đầu regex
Downgoat

@Downgoat Từ việc kiểm tra tất cả các trường hợp cụ thể và một vài trường hợp tôi nghĩ ra có ý định phá vỡ RegEx, có hoặc không có ^ Tôi không thay đổi hành vi, chỉ có một nhân vật phụ không hoàn thành bất cứ điều gì.
Pandacoder

@Pandacoder không hợp lệ. ^ là một mỏ neo yêu cầu "the" phải ở đầu mỗi thông số kỹ thuật
Downgoat

1

Java 8, 178 byte

void q(String[]s){java.util.Arrays.sort(s,(a,b)->(a.toLowerCase().startsWith("the ")?a.substring(4):a).compareToIgnoreCase(b.toLowerCase().startsWith("the ")?b.substring(4):b));}

Phiên bản bị đánh cắp:

void sort(String[] bands) {
    java.util.Arrays.sort(bands, (a, b) -> 
        (a.toLowerCase().startsWith("the ") ? a.substring(4) : a).compareToIgnoreCase(
            b.toLowerCase().startsWith("the ") ? b.substring(4) : b
        )
    );
}

Gọi như vậy:

public static void main(String[] args) {
    String[] bands = {"The Strokes", "Queen", "AC/DC", "The Band", "Cage the Elephant", "cage the elephant"};
    sort(bands); // or q(bands) in the golfed version
    System.out.println(java.util.Arrays.toString(bands));
}

Tôi biết bạn đã trả lời điều này gần một năm trước, nhưng bạn có thể chơi một vài thứ. Vì bạn tuyên bố bạn sử dụng Java 8, bạn có thể thay đổi void q(String[]s){...}thành s->{...}. Và bạn có thể thay đổi cả (x.toLowerCase().startsWith("the ")?x.substring(4):x)với x.replaceFirst("(?i)the ",""). Vì vậy, tổng số trở thành: s->{java.util.Arrays.sort(s,(a,b)->a.replaceFirst("(?i)the ","").compareToIgnoreCase(b.replaceFirst("(?i)the ","")));}- 118 byte
Kevin Cruijssen

Thủ thuật gọn gàng với thay thếFirst. Khi tôi trả lời điều này, tôi đã được nói một vài lần về các câu trả lời khác s->{ ... }không được phép và tôi phải có chữ ký phương thức đầy đủ với các loại và không có gì. Tôi không biết nếu điều đó thay đổi kể từ đó.
Justin

Không chắc chắn về thời đó, nhưng ngày nay, nó được cho phép và sử dụng bởi mọi người chơi golf trong Java hoặc C # .NET.
Kevin Cruijssen

0

Nim , 96 byte

import algorithm,strutils,future
x=>x.sortedByIt toLower it[4*int(it.toLower[0..3]=="the ")..^0]

Những importcái đó chiếm quá nhiều byte:|

Một bản dịch câu trả lời Python của tôi .

Đây là một thủ tục ẩn danh; để sử dụng nó, nó phải được chuyển vào một quy trình thử nghiệm. Đây là một chương trình đầy đủ mà bạn có thể sử dụng để thử nghiệm:

import algorithm,strutils,future
proc test(x: seq[string] -> seq[string]) =
 echo x(@["The The", "The They", "Thermodynamics"]) # Substitute your input here
test(x=>x.sortedByIt toLower it[4*int(it.toLower[0..3]=="the ")..^0])

0

Haskell, 84 byte

import Data.List
p(t:'h':'e':' ':s)|elem t"Tt"=s
p s=s
sortBy(\a b->p a`compare`p b)

Gọi với

sortBy(\a b->p a`compare`p b)["The The", "The They", "Thermodynamics"]

Testcase:

let s = sortBy(\a b->p a`compare`p b)
and[s["Queen", "Aerosmith", "Sunny Day Real Estate", "The Strokes"]==["Aerosmith", "Queen", "The Strokes", "Sunny Day Real Estate"],s["The Ramones", "The Cure", "The Pixies", "The Roots", "The Animals", "Enrique Iglesias"]==["The Animals", "The Cure", "Enrique Iglesias", "The Pixies", "The Ramones", "The Roots"],s["The The", "The They", "Thermodynamics"]==["The The", "Thermodynamics", "The They"]]

0

MATL , 16 byte

tk'^the '[]YX2$S

Định dạng đầu vào là (mỗi dòng tương ứng với một trường hợp thử nghiệm)

{'Queen', 'Aerosmith', 'Sunny Day Real Estate', 'The Strokes'} 
{'The Ramones', 'The Cure', 'The Pixies', 'The Roots', 'The Animals', 'Enrique Iglesias'}
{'The The', 'The They', 'Thermodynamics'}

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

Giải trình

t        % Implicitly input cell array of strings. Push another copy
k        % Convert to lowercase
'^the '  % String to be used as regex pattern: matches initial 'the '
[]       % Empty array
YX       % Regex replacement: replace initial 'the ' in each string by empty array
2$S      % Sort input according to the modified cell array. Implicitly display

0

C #, 139 byte

using System.Linq;System.Collections.IEnumerable S(string[] l)=> l.OrderBy(b=>(b.ToLower().StartsWith("the ")?b.Substring(4):b).ToLower());

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

Không tính các lần sử dụng, câu trả lời sẽ là 102 byte.


Tôi tin rằng bạn có thể bỏ qua trận chung kết ToLower()do yêu cầu không phân biệt chữ hoa chữ thường
TheLethalCoder

Ngoài ra, bạn có thể biến nó thành một hàm ẩn danh sẽ lưu một số byte:
TheLethalCoder

l=>l.OrderBy(b=>(b.ToLower().StartsWith("the ")?b.Substring(4):b));Đối với 67 byte và sau đó bạn cần phải thêm vào using System.Linq;quá
TheLethalCoder

@TheLethalCoder: Tôi cần cái thứ hai ToLowervì yêu cầu không phân biệt chữ hoa chữ thường. Nếu không, thứ tự sẽ là trường hợp nhạy cảm.
raznagul

Được rồi, quan điểm về việc chuyển đổi nó thành một chức năng ẩn danh vẫn còn tồn tại
TheLethalCoder

0

BASH, 64 byte

sed 's/^the / /;s/^The /    /'|sort -fb|sed 's/^ /the /;s/^ /The /'

Đầu vào: stdin, một băng tần trên mỗi dòng. Đầu ra: thiết bị xuất chuẩn

Lưu ý: Thay thế thứ hai (s / ^ The / / và s / ^ / The /) sử dụng ký tự tab, vì vậy chúng không luôn sao chép / dán chính xác.


0

Bash + coreutils, 44 byte

sed '/^the /I!s,^,@ ,'|sort -dk2|sed s,@\ ,,

Giải thích: định dạng đầu vào và đầu ra là một băng tần trên mỗi dòng

sed '/^the /I!s,^,@ ,'   # prepend '@ ' to each line not starting with 'the ', case
                         #insensitive. This adds a temporary field needed by sort.
sort -dk2                # sort in ascending dictionary order by 2nd field onward
sed s,@\ ,,              # remove the temporary field

Chạy thử (sử dụng tài liệu ở đây với EOF làm điểm đánh dấu kết thúc):

./sort_bands.sh << EOF
> Queen
> Aerosmith
> Sunny Day Real Estate
> The Strokes
> EOF

Đầu ra:

Aerosmith
Queen
The Strokes
Sunny Day Real Estate

0

Vim, 18 byte

Bây giờ tôi nhận ra điều này là có thể, tôi hơi bối rối với câu trả lời V 26 byte của mình, đặc biệt là vì V được cho là ngắn hơn vim. Nhưng đây là khá nhiều nội dung.

:sor i/\(The \)*/<CR>

Giải thích (trực tiếp từ trợ giúp vim):

                            *:sor* *:sort*
:[range]sor[t][!] [b][f][i][n][o][r][u][x] [/{pattern}/]
            Sort lines in [range].  When no range is given all
            lines are sorted.

            With [i] case is ignored.

            When /{pattern}/ is specified and there is no [r] flag
            the text matched with {pattern} is skipped, so that
            you sort on what comes after the match.
            Instead of the slash any non-letter can be used.

0

C, 216 212 135 + 5 ( qsort) = 221 217 140 byte

M(void*a,void*b){char*A,*B;A=*(char**)a;B=*(char**)b;A=strcasestr(A,"The ")?A+4:A;B=strcasestr(B,"The ")?B+4:B;return strcasecmp(A,B);}

Vâng, cuối cùng tôi đã có xung quanh để hoàn thành điều này C. Lời khuyên chơi golf được rất nhiều đánh giá cao.

Trong đệ trình này, Mlà chức năng so sánh sẽ được cung cấp cho qsort. Do đó, để gọi này, bạn phải sử dụng qsorttrong các định dạng qsort(argv++,argc--,8,M)nơiargv chứa các đối số dòng lệnh vàargc là số đối số đã cho.

Dùng thử trực tuyến!


0

05AB1E , 27 byte (không cạnh tranh)

vyð¡RD¤…TheQsgα£Rðý})‚øí{ø¤

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

Giải trình

vyð¡RD¤…TheQsgα£Rðý})‚øí{ø¤   Argument l
v                 }           For each y in l, do:
 yð¡                            Split y on space
    RD                          Reverse and duplicate
      ¤…TheQ                    Last element equals "The" (true = 1, false = 0)
            sgα                 Absolute difference with length of array
               £                Get elements from index 0 to calculated difference
                R               Reverse
                 ðý             Join on space
                    )‚øí      Pair each element with original
                        {ø¤   Sort and get the original band name

0

Groovy, 34 byte

{it.sort{it.toLowerCase()-'the '}}

41% câu trả lời của tôi là .toLowerCase() , giết tôi ngay bây giờ.


Đầu ra

Khi chạy ...

({it.sort{it.toLowerCase()-'the '}})(['The ramones','The Cure','The Pixies','The Roots','The Animals','Enrique Iglesias'])

Kết quả là...

[The Animals, The Cure, Enrique Iglesias, The Pixies, The ramones, The Roots]

Không có gỡ lỗi hoặc đầu ra lỗi.


0

q / kdb +, 36 33 byte

Dung dịch:

{x(<)@[x;(&)x like"[Tt]he *";4_]}

Thí dụ:

q){x(<)@[x;(&)x like"[Tt]he *";4_]}("Queen";"Aerosmith";"Sunny Day Real Estate";"The Strokes";"the Eagles")
"Aerosmith"
"the Eagles"
"Queen"
"The Strokes"
"Sunny Day Real Estate"

Giải trình:

Loại bỏ bất kỳ "[Tt] anh" nào từ mỗi chuỗi đầu vào, sắp xếp danh sách này, sau đó sắp xếp danh sách ban đầu dựa trên việc lập chỉ mục của danh sách được sắp xếp.

{x iasc @[x;where x like "[Tt]he *";4_]} / ungolfed solution
{                                      } / lambda function
        @[x;                       ;  ]  / apply function to x at indices
                                    4_   / 4 drop, remove first 4 items
            where x like "[Tt]he *"      / where the input matches 'The ...' or 'the ...'
   iasc                                  / returns sorted indices
 x                                       / index into original list at these indices


-2

Java 176 158 byte

public String[]sort(String[]names){
  for(int i=-1;++i<names.length;)
    if(names[i].startsWith("(The |the )"))
      names[i]=names[i].substring(4);
  return Arrays.sort(names,String.CASE_INSENSITIVE_ORDER);
  }

Chức năng chính

public static void main(String[]args){
  Scanner s = new Scanner(System.in);
  List<String> list= new ArrayList<>();
  while(!(String h = s.nextLine).equalsIgnoreCase("~")){
    list.add(h);
  }
System.out.println(sort(list.toArray(newString[0]))

); }

Chức năng sắp xếp chơi gôn:

String[]s(String[]n){for(int i=-1;++i<n.length;)if(n[i].startsWith("(The |the )"))n[i]=n[i].substring(4);return Arrays.sort(n,String.CASE_INSENSITIVE_ORDER);}

Cảm ơn @raznagul vì đã lưu 18 byte


Không hoạt động nếu một tên bắt đầu bằng the . Các loại nên không nhạy cảm trường hợp.
shooqie

Điều này sẽ không hoạt động ở tất cả ... Chuỗi là bất biến. Bạn muốn làm public String[]sort(String[]names){ for(int i=-1;++i<names.length;) names[i]=names[i].replaceFirst("(the|The)", ""); return Arrays.sort(names,String.CASE_INSENSITIVE_ORDER); }Vì và nên hoạt động, và chuỗi bất biến
Socratic Phoenix

Đã sửa lỗi đó, nhưng hãy tìm cho tôi một ban nhạc bắt đầu bằng một "the" nhỏ
Roman Gräf

2
Arrays.sorttrả về kiểu void
user902383

1
@ RomanGräfthe pAper chAse
admBorkBork
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.