ব্যান্ডের নাম বাছাই করুন


22

চ্যালেঞ্জের বিবরণ

আপনি অনেক অনেক ব্যান্ড, প্রতিটি যা একটি নাম আছে দ্বারা রেকর্ড ট্র্যাক দিয়ে একটি মিউজিক লাইব্রেরি আছে, মত Queen, Aerosmith, Sunny Day Real Estate, The Strokes। যখন কোনও অডিও প্লেয়ার আপনার লাইব্রেরিকে বর্ণানুক্রমিকভাবে ব্যান্ডের নাম অনুসারে প্রদর্শন করে, তখন Theঅনেকগুলি ব্যান্ডের নাম শুরু হওয়ার সাথে সাথে এটি অংশটি এড়িয়ে যায়, Theআপনার মিডিয়া সংগ্রহের মাধ্যমে নেভিগেটকে সহজ করে তোলে। এই চ্যালেঞ্জে, স্ট্রিংগুলির একটি তালিকা (অ্যারে) দেওয়া আপনার এটিকে সেভাবে বাছাই করতে হবে ( Theএটি নামের শুরুতে শব্দটি বাদ দেওয়া )। আপনি হয় কোনও পদ্ধতি বা একটি সম্পূর্ণ কার্যকারী প্রোগ্রাম লিখতে পারেন।

নমুনা ইনপুট / আউটপুট

[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]

নোট / এজ কেস

  • ডিক্সোগ্রাফিকভাবে বাছাই করা সংবেদনশীল, তাই The Police, The policeএবং the policeসমস্ত সমতুল্য,

  • আপনার অ্যালগরিদম কেবল প্রথম theশব্দটি বাদ দেওয়া উচিত , তাই ব্যান্ডদের নামকরণ করা হয় The Theবা The The Bandদ্বিতীয় দ্বারা সাধারণত সাজানো হয় the,

  • নামের Theতিনটি ব্যান্ড (তিনটি বর্ণের শব্দ) সাধারণত বাছাই করা হয় (এড়িয়ে যাবেন না),

  • একই নামের দুটি ব্যান্ডের অর্ডার, যার একটি দিয়ে শুরু হয় the(লাইক The Policeএবং Police) অপরিবর্তিত,

  • আপনি ধরে নিতে পারেন যে কোনও ব্যান্ডের নাম যদি একাধিক শব্দ নিয়ে থাকে তবে সেগুলি একক স্থান অক্ষর দ্বারা পৃথক করা হয়। আপনাকে শীর্ষস্থানীয় বা পিছনের শ্বেত স্পেসগুলি পরিচালনা করার দরকার নেই,

  • সমস্ত ইনপুট স্ট্রিং মিলছে [A-Za-z0-9 ]*, এগুলি কেবলমাত্র ইংরাজী বর্ণমালা, অঙ্ক এবং স্থানের অক্ষরের ছোট এবং বড় হাতের অক্ষরের সমন্বয়ে থাকবে,

  • মনে রাখবেন এটি একটি চ্যালেঞ্জ, সুতরাং আপনার কোডটি যতটা সম্ভব সংক্ষিপ্ত করুন!


বর্ণ-বর্ণের পূর্বে বা পরে কেবল নাম্বার নাম আসে?
অ্যাডমবর্কবার্ক

কেবলমাত্র
অঙ্কের

1
সাজানোর ক্রম কি Theএবং The The? (বেশিরভাগ উত্তর সম্ভবত পরিবর্তন করা দরকার যদি এটি
অপরিজ্ঞাত

লস লোবস সম্পর্কে কীভাবে?
njzk2

3
দ্য ওয়ে দ্য রিয়েল ব্যান্ড। (দ্য হু, দ্য হোয়াট, দ্য হি, কখন, হু অ্যান্ড দ্য
হাওস

উত্তর:


7

পাইথন, 56 62 64 বাইট

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

চেষ্টা করে দেখুন

@ ক্রিস এইচকে এটি নির্দেশ করার জন্য ধন্যবাদ যে lstrip()এটি The Theসঠিকভাবে পরিচালনা করছে না, যেহেতু স্ট্রিপটি সমস্ত মিলের অক্ষরগুলি ব্লাস্ট করছে এবং এটিকে ফাঁকা স্ট্রিং হিসাবে বাছাই করছে, এবং ব্যবহারের ত্রুটিটি খুঁজে পাওয়ার জন্য @ মান্যাটওয়ার্ক replace()। নতুন সংস্করণে কাজ করা উচিত।

পুরনো সংস্করণ:

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

1
আমি সন্তুষ্ট নই. শেষ তালিকায় "প্রাণী" যুক্ত করা দেয় ['The The', 'The', 'The Animals', 'Thermodynamics', 'The They']। ২ য় প্রান্তের কেসটি বসতে হবে ['প্রাণীজ', 'দ্য', 'দ্য', 'থার্মোডাইনামিক্স', 'দ্য দি'] (অথবা ২ য় এবং তৃতীয় আইটেম স্যুপ করা উচিত)। একটি সামান্য বেহায়াপন প্রস্তাব দেয় যে স্থানটি strip('the ')উপেক্ষা করা হচ্ছে - চেষ্টা করুনfor x in ['The The', 'The They', 'Thermodynamics', 'The', 'The Animals']: print (x.lower().strip('the '))
ক্রিস এইচ

এটি replace()খুব ভাল নয়: 'what the snake'.replace('the ','',1)ফলাফল 'what snake'
manatwork

5

ভি , 32 28 বাইট

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

এটি অনলাইন চেষ্টা করুন!

স্বরে নোট করুন: একটি সংক্ষেপণ তৈরি করুন :sortযাতে আমার একক কমান্ডের জন্য 6 টি পুরো বাইটের প্রয়োজন হয় না!

ব্যাখ্যা:

ç^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 '

ভি এর সাথে পরিচিত নয়, তবে মনে হচ্ছে এটি একটি তারাটি অস্ট্রিকগুলি ছাড়াই ভাল কাজ করে। এই কাকতালীয় ইনপুট সঙ্গে, বা আসলে অপ্রয়োজনীয়?
কিরকপ্যাট

1
@ কিরকপ্যাট ভাল ধারণা! এটি প্রায় কাজ করে, তবে বেশ নয়। উদাহরণস্বরূপ, এই ইনপুটটির সাহায্যে এটি "দ্য রামোনস" এবং "দ্য রুটস" এর পরে ভুলভাবে "রেডিওহেড" রাখে। যাইহোক, এটি আমাকে একটি ধারণা দেয় ...
ডিজেএমসিএমহেম

theসমস্ত ছোট হাতের অক্ষরে থাকলে, কী হয় the pAper chAse?
অ্যাডমবর্কবার্ক

4

রেটিনা , 34 বাইট

পেছনের লাইনফিডটি তাৎপর্যপূর্ণ।

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

O`
.+;

আই / ও লাইন প্রতি এক ব্যান্ড।

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

%`^
$';

;বিভাজক হিসাবে ব্যবহার করে প্রতিটি লাইনের সদৃশ করুন ।

T`L`l`.+;

একটি ;ছোট হাতের সামনে সমস্ত কিছুই ঘুরিয়ে দিন ।

m`^the 

theএকটি লাইনের শুরুতে প্রদর্শিত যে কোনও গুলি সরান ।

O`

লাইনগুলি বাছাই করুন।

.+;

আমরা বাছাইয়ের জন্য যে রেখাগুলি ব্যবহার করেছি সেগুলির সূচনাগুলি সরান।


আপনি কি প্রথম এক ধাপে তিনটি পদক্ষেপ প্যাক করতে পারবেন না? PCRE মধ্যে ভালো লেগেছে: S / (?i:the )?(.*)/ \L$1\E;$0/
Falco

@ ফ্যালকো। নেট নেট প্রতিস্থাপনের স্ট্রিংয়ের ক্ষেত্রে পরিবর্তনগুলি সমর্থন করে না এবং আমি এখনও এগুলিকে রেটিনার কাস্টম রিপ্লেসারে যোগ করি নি।
মার্টিন ইন্ডার


3

পার্ল, 52 বাইট

-13 বাইট
@ মান্যাটওয়ার্ক -1 বাইট @ এমএস 210 এর জন্য ধন্যবাদ

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

ইনপুট হিসাবে প্রতি লাইনে একটি ব্যান্ড, এবং আউটপুটও তাই।

বাস্তবায়নটি বেশ সোজা এগিয়ে রয়েছে: প্রোগ্রামটি একটি কাস্টম ফাংশন ( f) এর সাহায্যে বাছাই করা ব্যান্ডের তালিকা মুদ্রণ করে যা শেষের নেতৃত্ব ছাড়াই লোয়ার কেস ব্যান্ডের নাম দেয় the


ম্যাচিং পরিবর্তে প্রতিকল্পন সঙ্গে খাটো: sub f{lc$_[0]=~s/^the //ir}
manatwork

1 বাইট প্রকৃতপক্ষে সংক্ষিপ্ত, ধন্যবাদ।
দাদা

প্রকৃতপক্ষে আমি 2 বা 3 বাইটকে সংক্ষিপ্তভাবে গণনা করেছি: প্রতিস্থাপনের lcপ্যারামিটার এবং iপতাকাটির কাছাকাছি উভয়ের প্রথম বন্ধকের প্রয়োজন নেই । অথবা আপনি কোনও পরীক্ষার কেসটি পেয়েছেন যেখানে এটি কাজ করে না?
manatwork

আবার ভাবছেন, প্রতিটি ব্যান্ডের নাম পৃথক লাইনে নিলে কমান্ড লাইন বিকল্পের পরিমাণও হ্রাস করা যেতে পারে: 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
তিনটি বাইট সংরক্ষণ করুন: lc popপরিবর্তে lc$_[0]এবং sayপরিবর্তে print। (দ্বিতীয়টির প্রয়োজন -M5.01যা নিখরচায় requires
এমএস 210

2

পাইথন, 66 72 69 বাইট

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

"দ্য" নামটি অনুসারে বাছাই করার জন্য পাইথনের sortedপদ্ধতিটি keyকীওয়ার্ড আর্গুমেন্টের সাথে ব্যবহার করে । এটি ল্যাম্বদা; এটিকে ডাকতে, f=সামনে রেখে একটি নাম দিন ।

এখন অতিরিক্ত মামলার সংবেদনশীলতা নিয়ে!


2
এটি ক্ষেত্রে সংবেদনশীলতার প্রয়োজনীয়তা পূরণ করে না, যদিও ... একটি ব্যান্ডের নাম শুরু হতে পারে the , এই ক্ষেত্রে এই পদ্ধতিটি সঠিকভাবে কাজ করবে না।
shooqie

@ শুকী ওহ, আমি সেই প্রয়োজনীয়তাটি দেখিনি। আমি এটা ঠিক করব.
কপার


2

পার্ল 6 , 26 বাইট

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

ব্যাখ্যা:

# 「*」 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
      //
  }
)

টেস্ট:

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

পাওয়ারশেল ভি 2 +, 33 32 29 বাইট

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

সংরক্ষিত 3 বাইট @ ম্যাথিয়াসআর জেসেনকে ধন্যবাদ

ইনপুট হ'ল কমান্ড-লাইন আর্গুমেন্টের মাধ্যমে। স্ক্রিপ্ট ব্লকের ফলাফলের ভিত্তিতে মূল নামগুলি {...}সাজান -replaceযা নেতৃস্থানীয় (কেস-সংবেদনশীল) কে বের করার জন্য একটি রেইজেক্স সম্পাদন করে"the "

উদাহরণ

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

-replaceডিফল্ট ক্ষেত্রে কেস-সংবেদনশীল, '^the 'প্যাটার্নটির পক্ষে যথেষ্ট হবে
ম্যাথিয়াস আর জেসেন

@ ম্যাথিয়াসআর জেসেন হ্যাঁ, অনুস্মারকটির জন্য ধন্যবাদ।
অ্যাডমবর্কবার্ক

@ ভালিউইঙ্ক কেস সংবেদনশীলতা এবং আমি যুক্ত হওয়া চূড়ান্ত উদাহরণ সম্পর্কে ম্যাথিয়াসের মন্তব্য দেখুন।
অ্যাডমবর্কবার্ক

2

জাভাস্ক্রিপ্ট / ECMAScript 6 93 70 বাইট

70 পরামর্শের জন্য নীল এবং ডাউনগোটকে ধন্যবাদ

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

70-বাইট বৈকল্পিকের জন্য পঠনযোগ্য সংস্করণ

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

93-বাইট বৈকল্পিকের জন্য পঠনযোগ্য সংস্করণ

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

এই regexp এর ^মধ্যে থাকা উচিত নয়? এছাড়াও, লোকালক্যাম্পিয়ারটি আমার সিস্টেমে সংবেদনশীল, তাই আমার রেজিপ্স্পে toLowerCaseকেবল একটি /iপতাকা দরকার ছিল না । শেষ পর্যন্ত আপনি নীচে এটি গল্ফ করতে পারেন: B=>B.sort((a,b)=>...,R=s=>...)- sortঅতিরিক্ত পরামিতি সেট করে তা উপেক্ষা করে R
নিল

রেইজেক্সে ^ কোথায় যাবে? এটি একটি প্রত্যাখ্যান হবে এবং অভিব্যক্তিটি "দ্য" এর সাথে মেলে এবং মুছে ফেলার কথা। নিম্ন-কেস রূপান্তর ছাড়াই লোকেল তুলনা ব্যবহার করার চেষ্টা করব।
পান্ডাকোডার

@ পান্ডাকডার রিজেক্সের ^শুরুর দিকে যেতে পারেন
ডাউনগোট

@ ডাওনগোট প্রদত্ত সমস্ত মামলার পরীক্ষা করা থেকে এবং কয়েকটি ক্ষেত্রে আমি বিশেষভাবে রেজিএক্স ভেঙে বাছাই করার ইচ্ছা নিয়ে এসেছি ^ আমার আচরণে কোনও পরিবর্তন আসবে না, কেবলমাত্র একটি অতিরিক্ত চরিত্র যা কিছু অর্জন করে না।
পান্ডাকোডার

@ পান্ডাকোডার যা এটি বৈধ করে না। ^ হ'ল একটি নোঙ্গর যা
অনুমানের

1

জাভা 8, 178 বাইট

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

অবরুদ্ধ সংস্করণ:

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

যেমন কল করুন:

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

আমি জানি আপনি প্রায় এক বছর আগে এর উত্তর দিয়েছেন, তবে আপনি কয়েকটি বিষয় গল্ফ করতে পারেন। যেহেতু আপনি রাষ্ট্র জাভা 8 ব্যবহার করেন, আপনি পরিবর্তন করতে পারেন void q(String[]s){...}থেকে s->{...}। এবং আপনি উভয় (x.toLowerCase().startsWith("the ")?x.substring(4):x)দিয়ে পরিবর্তন করতে পারেন x.replaceFirst("(?i)the ","")। সুতরাং s->{java.util.Arrays.sort(s,(a,b)->a.replaceFirst("(?i)the ","").compareToIgnoreCase(b.replaceFirst("(?i)the ","")));}
মোটটি

রিপ্লেস ফার্স্ট সহ ঝরঝরে কৌশল। আমি যখন এর উত্তর দিয়েছি তখন আমাকে অন্যান্য উত্তরে কয়েকবার বলা s->{ ... }হয়েছিল যা অনুমোদিত নয় এবং আমাকে প্রকারের সাথে কী পদ্ধতিতে সম্পূর্ণ পদ্ধতিতে স্বাক্ষর করতে হবে what আমি জানি না এর পর থেকে পরিবর্তন হয়েছে কিনা।
জাস্টিন

ততক্ষণে নিশ্চিত নয়, তবে এই দিনগুলিতে জাভা বা সি # .NET এ গল্ফ করা প্রত্যেকের কাছাকাছি দ্বারা এটি অনুমোদিত এবং ব্যবহৃত used
কেভিন ক্রুইজসেন 21

0

নিম , 96 বাইট

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

সেই importগুলি এত বাইট পর্যন্ত সময় লাগতে:|

আমার পাইথন উত্তরের একটি অনুবাদ ।

এটি একটি বেনাম প্রক্রিয়া; এটি ব্যবহার করার জন্য, এটি অবশ্যই একটি পরীক্ষার পদ্ধতিতে পাস করা উচিত। এখানে পরীক্ষার জন্য আপনি ব্যবহার করতে পারেন এমন একটি সম্পূর্ণ প্রোগ্রাম:

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

হাস্কেল, 84 বাইট

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

সাথে কল

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

পরীক্ষা ক্ষেত্রে:

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

এমএটিএল , 16 বাইট

tk'^the '[]YX2$S

Input format is (each line corresponds to a test case)

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

Try it online!

Explanation

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 Bytes

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

Try online!

Without counting the usings the answer would be 102 bytes.


I believe you can ignore the final ToLower() due to the case-insensitive requirement
TheLethalCoder

Also you can make it an anonymous function which should save some bytes:
TheLethalCoder

l=>l.OrderBy(b=>(b.ToLower().StartsWith("the ")?b.Substring(4):b)); For 67 bytes and then you need to add on the using System.Linq; too
TheLethalCoder

@TheLethalCoder: I need the second ToLower because of the case-insensitive requirement. Otherwise the order would be case-sensitive.
raznagul

Okay the point about converting it to an anonymous function still stands though
TheLethalCoder

0

BASH, 64 Bytes

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

Input: stdin, one band per line. Output: stdout

Note: The second replacements (s/^The/ / and s/^ /The /) use the tab character, so they don't always copy/paste correctly.


0

Bash + coreutils, 44 bytes

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

Explanation: the input and output format is one band per line

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

Test run (using a here-document with EOF as the end marker):

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

Output:

Aerosmith
Queen
The Strokes
Sunny Day Real Estate

0

Vim, 18 bytes

Well now that I realized this is possible, I'm kinda embarrassed by my 26 byte V answer, especially since V is supposed to be shorter than vim. But this is pretty much a builtin.

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

Explanation (straight from vim help):

                            *: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 bytes

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

Well, I finally got around to finishing this in C. Golfing tips are very much appreciated.

In this submission, M is the comparison function to be supplied to qsort. Therefore, to invoke this, you must use qsort in the format qsort(argv++,argc--,8,M) where argv contains the command-line arguments and argc is the number of arguments provided.

Try It Online!


0

05AB1E, 27 bytes (non-competing)

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

Try it online!

Explanation

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 bytes

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

41% my answer is .toLowerCase(), kill me now.


Output

When running...

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

The result is...

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

With no debug or error output.


0

q/kdb+, 36 33 bytes

Solution:

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

Example:

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"

Explanation:

Strip out any "[Tt]he " from each input string, sort this list, then sort the original list based on the indexing of the sorted list.

{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 bytes

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

Main Function

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]))

); }

Golfed sort function:

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

Thanks to @raznagul for saving 18 bytes


Doesn't work if a name starts with the . The sort should be case insensitive.
shooqie

This won't work at all... Strings are immutable. You want to do 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); } Since the and The should work, and strings a immutable
Socratic Phoenix

Fixed that, but find me one band that starts with a small "the "
Roman Gräf

2
Arrays.sort returns type void
user902383

1
@RomanGräf the pAper chAse
AdmBorkBork
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.