ক্রেজি লাইব্রেরিয়ান এর আশ্চর্যজনক বাছাই সিস্টেম


21

এটা আবার স্কুল মৌসুম! সুতরাং একটি খণ্ডকালীন কাজের জন্য, আপনি স্কুলের লাইব্রেরিতে সাহায্য করছেন। সমস্যাটি হ'ল প্রধান গ্রন্থাগারিক এমনকি "দেউই ডেসিমাল" শব্দটি কখনও শোনেনি that পরিবর্তে, লাইব্রেরিটি প্রসারিত হওয়ায় ব্যবহারে বাছাই করা ব্যবস্থা "জৈবিক "ভাবে বেড়েছে ...

আপনার বিচক্ষণতা বজায় রাখার প্রয়াসে, আপনি বইগুলি ফেরত পাঠানোর সাথে সাথে আপনাকে বাছাই করার জন্য একটি প্রোগ্রাম লেখার সিদ্ধান্ত নিয়েছেন, কারণ আপনারা দুর্ভাগ্য হচ্ছেন যদি আপনি বইগুলিকে ভুলভাবে সাজান sort (প্রধান গ্রন্থাগারিক খুব কঠোর।)

ইনপুট আউটপুট

  • ইনপুটটি STDIN / ভাষার সমতুল্য থেকে প্রতি লাইনে একটি করে (অনুমানমূলক) বইয়ের শিরোনামগুলির তালিকা হবে।
  • আপনি একবারে 100 টিরও বেশি বইয়ের ইনপুট ধরে নিতে পারবেন না (আপনি কেবল একবারে লাইব্রেরির চারপাশে এতগুলি বহন করতে পারেন)।
  • বইগুলির শিরোনামে একাধিক শব্দ থাকতে পারে এবং এই শব্দগুলি স্পেস বা অন্যান্য বিরামচিহ্ন দ্বারা পৃথক করা যেতে পারে (যেমন, একটি কোলন :, ড্যাশ -ইত্যাদি)।
  • গণনার স্বাচ্ছন্দ্যের জন্য, ধরে নিন সমস্ত শিরোনাম UTF-8 ume

আউটপুট একই শিরোনাম, নীচের নিয়ম অনুসারে বাছাই, আবার প্রতি লাইনে একটি, STDOUT / ভাষার সমতুল্য।

বাছাই বিধি

নিম্নোক্ত নিয়মাবলী অনুসারে বইগুলি তাদের গড় চরিত্রের মানের উপর ভিত্তি করে সংখ্যা অনুসারে বাছাই করা হয় (অর্থাত, ক্রমবর্ধমান চরিত্রের মান বইয়ের শিরোনামের অক্ষরের সংখ্যাকে বিভক্ত করে):

  • সমস্ত অক্ষর শিরোনামে অক্ষরের সংখ্যা নির্ধারণের জন্য গণনা করে।
  • ছোট হাতের বর্ণগুলি বর্ণমালায় তাদের অবস্থান দ্বারা গণনা করা হয়। (ক = 1, B = 2, ... z- র = 26)
  • যদি শিরোনামে মূল অক্ষর থাকে তবে তাদের ছোট হাতের মান 1.5 এর জন্য গণ্য হয় (এ = 1.5, বি = 3, ... জেড = 39)। ("বড় বড় অক্ষরগুলি গুরুত্বপূর্ণ!" গ্রন্থাগারিক বলেছেন।)
  • এই তালিকার প্রতিটি বিরামচিহ্ন চিহ্ন / চিহ্নকে !@#$%^&*()-=_+[]\{}|;':",./<>?~গড়ের আগে সংশ্লেষক মান থেকে -1 গণনা করা হয়। ("গ্রান্ডিজ শিরোনামগুলি নয়!")
  • শিরোনামটিতে আরবি সংখ্যায় লিখিত কোনও সংখ্যা থাকলে, সেই সংখ্যাটি বাছাইয়ের আগে গড় মান থেকে বিয়োগ করা হয়। একাধিক পরপর সংখ্যার একটি সংখ্যা হিসাবে বিবেচনা করা হয় (যেমন, 4242 বিয়োগ করবে, 4 বিয়োগ করবে না এবং 2 বিয়োগ করবে)। পৃথক সংখ্যাগুলি संचयी মানের জন্য গণনা করে না (যেমন, প্রতিটি অঙ্ক 0 অবদান রাখে), তবে অক্ষরের সংখ্যার জন্য গণনা করুন। দ্রষ্টব্য যে এটির একটি নেতিবাচক মান হতে পারে এবং যথাযথভাবে চিকিত্সা করা উচিত। (গুজব এটি আছে, গ্রন্থাগারিক এখন কয়েক বছর ধরে একটি গণিত প্রশিক্ষকের উপর ক্রাশ ছিল।)
  • শিরোনামটিতে দুটি দিয়ে পৃথক শব্দ রয়েছে যা একটি দিয়ে শুরু হয় R, বইটি "ইনফিনিটি" এর একটি স্কোর পায় এবং কোণার একটি স্তূপে ফেলে দেওয়া হয় (অর্থাত্ এলোমেলোভাবে তালিকার শেষে সাজানো)। (গ্রন্থাগারিক একবার এই আদ্যক্ষেত্রযুক্ত ব্যক্তি দ্বারা ডাম্প করা হয়েছিল, বা তাই আপনি শুনেছেন।)
  • স্থানগুলি ক্রমযুক্ত চরিত্রের মান হিসাবে গণনা করে না (যেমন, তারা 0 অবদান রাখে), তবে শিরোনামের অক্ষরের সংখ্যায় অবদান রাখে DO
  • উপরের নিয়মগুলিতে ফিট না হওয়া অক্ষরগুলি (যেমন, ক ÿ) ক্রমযুক্ত চরিত্রের মান গণনা করে না (যেমন, তারা 0 অবদান রাখে), তবে শিরোনামের অক্ষরের সংখ্যায় অবদান রাখে না।
  • উদাহরণস্বরূপ, একটি হাইপোথিটিক্যাল বইয়ের ÿÿÿÿÿএকটি "স্কোর" থাকবে (0+0+0+0+0) / 5 = 0তবে একটি অনুমান বইয়ের ÿÿyÿÿ"স্কোর" হবে (0+0+25+0+0) / 5 = 5
  • দুটি স্কোর যা "স্কোর" এর সাথে একই হয় তা আপনার পছন্দ অনুসারে আউটপুট হতে পারে। (তারা যাইহোক, একই শেল্ফে রয়েছেন)

উদাহরণ ইনপুট 1

War and Peace
Reading Rainbow: The Best Unicorn Ever
Maus
Home for a Bunny

উদাহরণ আউটপুট 1 (যুক্তি দেখানোর জন্য বন্ধনীগুলিতে "স্কোর" সহ - আপনাকে সেগুলি মুদ্রণের দরকার নেই)

War and Peace (8.5)
Home for a Bunny (10.125)
Maus (15.125)
Reading Rainbow: The Best Unicorn Ever (infinity)

উদাহরণ ইনপুট 2

Matthew
Mark
Luke
John
Revelations

উদাহরণ আউটপুট 2 (যুক্তি দেখানোর জন্য বন্ধনীগুলিতে "স্কোর" সহ - আপনাকে সেগুলি মুদ্রণের দরকার নেই)

Mark (12.375)
John (13)
Revelations (13.545454...)
Luke (13.75)
Matthew (~13.786)

উদাহরণ ইনপুট 3

42
9 Kings
1:8
7th

উদাহরণ আউটপুট 3 (যুক্তি দেখানোর জন্য বন্ধনীগুলিতে "স্কোর" সহ - আপনাকে সেগুলি মুদ্রণের দরকার নেই)

42 (-42)
1:8 (-9.3333...)
9 Kings (~0.36)
7th (2.3333...)

অন্যান্য বিধিনিষেধ

  • এটি কোড-গল্ফ, কারণ আপনার গ্রন্থাগারিকের সর্বদা নজরদারি থেকে প্রোগ্রামটি গোপন রাখা দরকার, এবং প্রোগ্রামটি যত ছোট হবে, লুকানো সহজ।
  • স্ট্যান্ডার্ড লুফোলের বিধিনিষেধগুলি প্রযোজ্য
  • আপনার সমস্ত সময় পিপিসি-তে ব্যয় করে গ্রন্থাগারিক আপনাকে স্ল্যাচিং বন্ধ করতে দেবেন না।

যদি দুটি বই ঠিক একই স্কোর হয়। অর্থ্যাৎ আমি রেনবো এবং রুবি রেল পড়ছি
কিশান কুমার

@ কিশানকুমার সেই নির্দিষ্ট ক্ষেত্রে, "তালিকার শেষে এলোমেলোভাবে সাজানো হয়েছে" যেহেতু তারা দু'জনেই ডাবল-আর। অন্য কথায়, আপনার বাছাই করুন। সাধারণ ক্ষেত্রে, যদি দুটি শব্দ একই স্কোর করে তবে তারা একে অপরের সাথে সম্পর্কিত যে কোনও ক্রমে উপস্থিত হতে পারে। আমি এটি স্পষ্ট করতে একটি বুলেট যুক্ত করব।
অ্যাডমবর্কবর্ক

7
আপনার একটি শব্দ দরকার যাতে আপনার সিস্টেমে একটি সংক্ষিপ্ত নাম থাকবে। আমি ক্রেজি গ্রন্থাগারিকের আশ্চর্যজনক বাছাই সিস্টেমটি সুপারিশ করছি: ডি
জিওবিটস

3
@ জিওবিটস আপনার কি ক্লাস আছে?
অ্যাডমবর্কবার্ক

সংখ্যা কি দশমিক সংখ্যা? যদি বেশ কয়েকটি থাকে তবে সেগুলি কি আলাদা করে বিয়োগ করা হবে?
পাওলো ইবারম্যান

উত্তর:


5

এপিএল (132)

{⎕ML←3⋄⍵[⍋{2='R'+.=↑¨⍵⊂⍨⍵≠' ':!99⋄↑(+/⍎¨'0',⍵⊂⍨⍵∊⎕D)-⍨((+/∊1.5 1×(⍳×∊⍨)∘⍵¨G)-+/⍵∊(⎕UCS 32+⍳94)~'`',⎕D,∊G←(⊂⎕A),⊂⎕UCS 96+⍳26)÷⍴⍵}¨⍵]}

যেহেতু প্রত্যেকে প্রত্যেকে একই কাজ করছে, এটিও একটি ফাংশন যা শিরোনামের অ্যারে নেয় এবং এটি সাজানো যেমন প্রদান করে:

      titles
┌─────────────┬──────────────────────────────────────┬────┬────────────────┬───────┬────┬────┬────┬───────────┬──┬───────┬───┬───┐
│War and Peace│Reading Rainbow: The Best Unicorn Ever│Maus│Home for a Bunny│Matthew│Mark│Luke│John│Revelations│42│9 Kings│1:8│7th│
└─────────────┴──────────────────────────────────────┴────┴────────────────┴───────┴────┴────┴────┴───────────┴──┴───────┴───┴───┘

      {⎕ML←3⋄⍵[⍋{2='R'+.=↑¨⍵⊂⍨⍵≠' ':!99⋄↑(+/⍎¨'0',⍵⊂⍨⍵∊⎕D)-⍨((+/∊1.5 1×(⍳×∊⍨)∘⍵¨G)-+/⍵∊(⎕UCS 32+⍳94)~'`',⎕D,∊G←(⊂⎕A),⊂⎕UCS 96+⍳26)÷⍴⍵}¨⍵]}titles
┌──┬───┬───────┬───┬─────────────┬────────────────┬────┬────┬───────────┬────┬───────┬────┬──────────────────────────────────────┐
│42│1:8│9 Kings│7th│War and Peace│Home for a Bunny│Mark│John│Revelations│Luke│Matthew│Maus│Reading Rainbow: The Best Unicorn Ever│
└──┴───┴───────┴───┴─────────────┴────────────────┴────┴────┴───────────┴────┴───────┴────┴──────────────────────────────────────┘

ব্যাখ্যা:

  • ⎕ML←3: সেট ⎕MLকরা 3(জন্য )
  • ⍵[⍋{... }¨⍵]: অভ্যন্তরীণ ফাংশন থেকে ফিরে আসা মানগুলি অনুসারে ইনপুটটিকে সাজান
    • ↑¨⍵⊂⍨⍵≠' ': প্রতিটি শব্দের প্রথম অক্ষর পান
    • 2='R'+.=: দেখুন এই দুটি হয় কিনা 'R'
    • :!99: তা হলে, 99 ফিরিয়ে দিন! (.3 9.3 × 10 155 )। এটি একেবারে অসীম নয়, তবে এটি করবে: কোনও শিরোনামের দৈর্ঘ্য (জেডজেডজেড ...) এর চেয়ে 38 গুণ বেশি কখনও স্কোর থাকতে পারে না, যতক্ষণ না কোনও একক শিরোনাম প্রায় 2 130 10 130 ইয়োটাবাইটের চেয়ে বড় না হয় , গ্যারান্টিযুক্ত যে এগুলি শেষ হবে।
    • : অন্যথায়:
    • (... )÷⍴⍵: স্কোরটিকে গণনার পরে দৈর্ঘ্যের দ্বারা ভাগ করুন :
      • G←(⊂⎕A),(⎕UCS 96+⍳26): Gবড় হাতের অক্ষরে এবং ছোট হাতের অক্ষরে সংরক্ষণ করুন
      • (⎕UCS 32+⍳94)~'`',⎕D,∊G: প্রিন্টযোগ্য এএসসিআইআই অক্ষর, অক্ষর, অঙ্ক, স্পেস এবং '`', যা এমন অক্ষর যার জন্য একটি বিন্দু বিয়োগ করা হয়। (এটি সব লেখার চেয়ে কম, কারণ Gপরে এটি ব্যবহৃত হয়))
      • +/⍵∊: এই অক্ষরের পরিমাণ গণনা করুন
      • -: এ থেকে বিয়োগ:
      • +/∊1.5 1×(⍳×∊⍨)∘⍵¨G: রাজধানীগুলির জন্য 1.5% স্কোরগুলির সমষ্টি এবং ছোট হাতের অক্ষরের জন্য 1। স্কোর।
    • -⍨: এরপরে, মোট সংখ্যাকে বিয়োগ করুন :
      • ⍵⊂⍨⍵∊⎕D: সংখ্যাগুলির গ্রুপগুলি সন্ধান করুন
      • '0',: যোগ করুন '0', তালিকাটি খালি হওয়া রোধ করতে
      • ⍎¨: প্রতিটি স্ট্রিং মূল্যায়ন
      • +/: যোগফলটি সন্ধান করুন

পরিবর্তে !99আপনি ব্যবহার করতে পারেন⌊/⍬
Adám

1
আমি এপিএলে লম্বা কোডটি দেখতে পছন্দ করি। এটি আমার মনে করে যে পৃথিবী আমার চেয়ে অনেক বড় And এবং আমি প্রতীকগুলি পছন্দ করি।
কনার ও'ব্রায়ান

2

লুয়া 5.3, 366 364 বাইট

r={}for i,s in ipairs(arg)do n=0 s:gsub("%l",function(a)n=n+(a:byte()-96)end):gsub("%u",function(a)n=n+(a:byte()-64)*1.5 end):gsub("%p",function(a)n=n-1 end):gsub("^R?.- R.- ?R?",function()n=math.huge end)m=n/utf8.len(s)s:gsub("%d+",function(a)m=m-a end)table.insert(r,{s=s,n=m})end table.sort(r,function(a,b)return a.n<b.n end)for i,v in ipairs(r)do print(v.s)end

এই কোডটি কেবল লুয়া 5.3 এ কাজ করে কারণ এটি ইউনিকোড অক্ষরগুলির সাথে ডিল করার প্রয়োজন। আপনি যদি ইউনিকোড সম্পর্কে চিন্তা না করেন তবে "utf8" কে "স্ট্রিং" দিয়ে প্রতিস্থাপন করুন এবং এটি লুয়া 5.2 বা 5.1 এর সাথে সূক্ষ্মভাবে কাজ করবে।

এটি কমান্ড-লাইন আর্গুমেন্ট থেকে এর ইনপুট নেয়, সুতরাং হয় কমান্ড লাইন থেকে এটি চালনা করুন বা এই উত্তরটি আমার উত্তরের উপরে রাখুন:

arg = {"Title 1", "Title 2", "Title 3"}

আমার মেশিনে লুয়া 5.3 নেই, তবে আমি আপনার পরামর্শটি অনুসরণ করে আইডিয়োনেরutf8 সাথে অদলবদল করেছিলাম এবং কোনও আউটপুট পাইনি। string
অ্যাডমবর্কবর্ক

@ টিমিডি আমার সম্পাদনা দেখুন
ট্রেবুচেট

ভাল. রসা। এবং (arg)সেখানে বসে আমাকে মুখে ঘুরপাক খাচ্ছে। এই প্রশ্নটি স্পষ্টতই আমার মস্তিষ্ককে ভাজা করে তুলেছে। একটি +1 আছে।
অ্যাডমবর্কবার্ক

মুনস্ক্রিপ্ট সহ এটি 266 বাইট: পেস্টবিন . com/wr4qVs5h ।
kirbyfan64sos

2

গণিত, 253 216 বাইট (214 চর)

r=RegularExpression;c=ToCharacterCode;f=SortBy[Tr@Flatten@Reap[StringCases[#,
{r@"(\\bR.*)+"->∞,r@"\\d+":>0Sow@-FromDigits@"$0",r@"[a-z]":>c@"$0"-96,
r@"[A-Z]":>1.5c@"$0"-96,r@"[!-/:-@[-_{-~]"->-1}]/StringLength@#]&]

ফাংশনটি কল করুন যেমন f[{"42", "9 Kings", "1:8", "7th"}]; এটি ইনপুটগুলির বাছাই করা তালিকা ফিরিয়ে দেবে।

সবেমাত্র এটি তৈরি! স্ট্রিং জড়িত থাকাকালীন ম্যাথামেটিকার প্যাটার্নের মিলটি সংক্ষিপ্ত নয় এবং আমি দীর্ঘ নামগুলি দিয়ে খুন হয়েছি। অতিরিক্ত দুটি বাইট Infinityইউনিকোড চরিত্রের জন্য।

(আমি কোনও স্ট্যান্ডার্ড লুফোলের চেয়ে অনেক বেশি পড়েছি কিনা তা আমাকে জানান))

হালনাগাদ

এডিসি 65 এর উত্তরের দিকে কিছুটা কাছ থেকে তাকালে, দেখে মনে হচ্ছে ওপি একটি ফাংশন গ্রহণ করবে যা স্ট্রিংগুলির তালিকাই সাজিয়েছে। এই বিষয়টি মাথায় রেখে আমরা কার্ডিযুক্ত রূপটি ব্যবহার করতে পারি SortBy(যা ম্যাথেম্যাটিকাকে "অপারেটর ফর্ম" বলে); একটি যুক্তি দিয়ে (তালিকার উপাদানগুলিকে তাদের ক্রম নির্ধারণের জন্য প্রয়োগ করা ফাংশন) এটি কোনও ফাংশনের মতো আচরণ করে যা একটি যুক্তি নেয়, ইনপুটটির সাজানো ফর্মটি ফিরিয়ে দেয়; যে, SortBy[list, f]সমতুল্য (SortBy[f])[list]

Ungolfed

Function[{titles},
  SortBy[titles, Function[{str}, (* sort by function value *)
    Total[Flatten[Reap[ (* total up all the parts *)
      StringCases[str, {
        RegularExpression["(\\bR.*){2}"] -> Infinity
          (* matches R at the start of a word twice, adds infinity to the total *),
        RegularExpression["\\d+"] :> 0 * Sow[-FromDigits["$0"]]
          (* matches a number, Sows it for Reap to collect, then multiplies by zero
                                                          to not affect the average *),
        RegularExpression["[a-z]"] :> ToCharacterCode["$0"] - 96
          (* matches a lowercase letter and returns its value *),
        RegularExpression["[A-Z]"] :> 1.5 ToCharacterCode["$0"] - 96
          (* matches an uppercase letter and returns 1.5 its value *),
        RegularExpression["[!-/:-@[-_{-~]"] -> -1
          (* matches a 'grandiose' symbol and returns -1 *)
      }] / StringLength[#] (* averages character values *)
    ]]]
  ]]
]

1
উত্তম উত্তর, এবং আপনার গণনাগুলিতে আক্ষরিক "অনন্ত" ব্যবহার করার জন্য আপনি একটি ইন্টারনেট কুকি পেয়েছেন ;-)।
অ্যাডমবর্কবার্ক

@ টিমিডি প্রতীকী গণিত প্রসেসিংয়ের সৌন্দর্য =)
2012campion

সম্ভবত আপনি 214 চর, 216 বাইট বোঝাতে চাইছেন। ভাল হয়েছে, আমি প্রতিযোগিতা করার চেষ্টা করেছি কিন্তু কোনও উপায় নেই
21

2

জাভাস্ক্রিপ্ট (ES6), 210 218 251

একটি অ্যারের আর্গুমেন্ট সহ একটি ফাংশন হিসাবে, সাজানো ফেরত।

f=L=>(S=s=>([...s].map(c=>t-=(a=s.charCodeAt(l++))>32&a<48|a>57&a<65|a>90&a<96|a>122&a<127?1:a>64&a<123?96-(a<96?a*1.5:a):0,l=t=0),s.split(/\D/).map(n=>t-=n,t/=l),t/!s.split(/\bR/)[2]),L.sort((a,b)=>S(a)-S(b)))

//TEST

test1=['War and Peace','Reading Rainbow: The Best Unicorn Ever','Maus','Home for a Bunny']
test2=['Matthew','Mark','Luke','John','Revelations']
test3=['42','9 Kings','1:8','7th']

;O.innerHTML=f(test1)+'\n\n'+f(test2)+'\n\n'+f(test3);

// The comparing function used to sort, more readable

Sort=s=>(
  t = 0, // running total
  l = 0, // to calc the string length avoiding the '.length' property
  [...s].map(c=>{
    a=s.charCodeAt(l++);
    t-=a>32&a<48|a>57&a<65|a>90&a<96|a>122&a<127
      ? 1 // symbols (ASCII char except space, alphanumeric and backtick)
      : a>64&a<123 
        ? 96-(a<96?a*1.5:a) // alphabetic both upcase and lowcase, and backtick
        // lowcase: 96-a, upcase (64-a)*1.5=>96-a*1.5, backtick is 96 and 96-96 == 0
        : 0 // else space, non ASCII, and numeric : 0
  }),
  t = t/l, // average
  s.split(/\D/).map(n=>t-=n), // sub number values
  f = s.split(/\bR/)[2], // split at words starting with R, if less then 2 f is undefined
  t/!f // dividing by not f I can get the infinity I need
)
<pre id=O></pre>


সুন্দরভাবে সম্পন্ন. এই উত্তরটি পড়ার অন্য কারও রেফারেন্সের জন্য আমাকে ফায়ারফক্সের কনসোলে পরিবর্তন O.innerHTMLকরতে this.InnerHTMLহয়েছিল।
অ্যাডমবর্কবার্ক

1

সি #, 352 349 বাইট

লিনকের ম্যাজিকের কারণে:

class A{static void Main(string[]a){foreach(var x in a.OrderBy(b=>{var s="0";int j=0;return Regex.Split(b,@"[^\w]+").Count(l=>l[0]=='R')==2?(1/0d):b.Aggregate(0d,(d,e)=>{if(e>47&e<58){s+=e;return d;}d+=(e>64&e<91)?(e-64)*1.5:(e>96&e<123)?e-96:e>32&e<127&e!=96?-1:0;j+=int.Parse(s);s="0";return d;})/b.Length-j-int.Parse(s);}))Console.WriteLine(x);}}

ব্যাকটিকটি বিরামচিহ্ন তালিকায় অন্তর্ভুক্ত করা হলে আরও 6 বাইট সংরক্ষণ করতে পারত!

class A
{
    static void Main(string[] a)
    {
        foreach (var x in a.OrderBy(b =>
            {
                var s = "0";
                int j = 0;
                return Regex.Split(b, @"[^\w]+").Count(l => l[0] == 'R') == 2
                    ? (1 / 0d)
                        : b.Aggregate(0d, (d, e) =>
                        {
                            if (e > 47 & e < 58) { s += e; return d; }
                            d += (e > 64 & e < 91) ? (e - 64) * 1.5 : (e > 96 & e < 123) ? e - 96 : e > 32 & e < 127 & e != 96 ? -1 : 0;
                            j += int.Parse(s);
                            s = "0";
                            return d;
                        }) / b.Length - j - int.Parse(s);
            }))
            Console.WriteLine(x);
    }

}

1

যান, 755 বাইট

package main
import("os"
"fmt"
"math"
"bufio"
"regexp"
"sort"
"strconv")
type F float64
type T []F
func(t T)Swap(i,j int){t[i],t[j],S[i],S[j]=t[j],t[i],S[j],S[i]}
func(t T)Len()int{return len(t)}
func(t T)Less(i,j int)bool{return t[i]<t[j]}
var S []string
func main(){var t T
for{b:=bufio.NewReader(os.Stdin)
w,_,_:=b.ReadLine()
if len(w)==0{break}
u:=string(w)
var v F
for _,c:=range u{if 96<c&&c<123{v+=F(c)-F(96)}else
if 64<c&&c<91{v+=(F(c)-64)*1.5}else
if (48>c&&c>32)||(c>57&&c<127){v-=1}}
a:=v/F(len(w))
r,_:=regexp.Compile("[0-9]+")
n:=r.FindAllString(string(w),-1)
for _,x:=range n{y,_:=strconv.Atoi(x);a-=F(y)}
if m,_:=regexp.Match("((^| )R.*){2}",w);m{a=F(math.Inf(1))}
S=append(S,u)
t=append(t,a)}
sort.Sort(t)
for _,o:=range S{fmt.Println(o)}}

বিন্যাসিত সংস্করণ:

package main

import (
    "bufio"
    "fmt"
    "math"
    "os"
    "regexp"
    "sort"
    "strconv"
)

type F float64
type T []F

func (t T) Swap(i, j int)      { t[i], t[j], S[i], S[j] = t[j], t[i], S[j], S[i] }
func (t T) Len() int           { return len(t) }
func (t T) Less(i, j int) bool { return t[i] < t[j] }

var S []string

func main() {
    var t T
    for {
        b := bufio.NewReader(os.Stdin)
        w, _, _ := b.ReadLine()
        if len(w) == 0 {
            break
        }
        u := string(w)
        var v F
        for _, c := range u {
            if 96 < c && c < 123 {
                v += F(c) - F(96)
            } else if 64 < c && c < 91 {
                v += (F(c) - 64) * 1.5
            } else if (48 > c && c > 32) || (c > 57 && c < 127) {
                v -= 1
            }
        }
        a := v / F(len(w))
        r, _ := regexp.Compile("[0-9]+")
        n := r.FindAllString(string(w), -1)
        for _, x := range n {
            y, _ := strconv.Atoi(x)
            a -= F(y)
        }
        if m, _ := regexp.Match("((^| )R.*){2}", w); m {
            a = F(math.Inf(1))
        }
        S = append(S, u)
        t = append(t, a)
    }
    sort.Sort(t)
    for _, o := range S {
        fmt.Println(o)
    }
}

একটি কাস্টম সাজানোর ইন্টারফেস বাস্তবায়ন এটি প্রত্যাশার চেয়ে দীর্ঘ করেছে। প্রোগ্রামটি এসটিডিআইএন থেকে ইনপুট শেষ না হওয়া অবধি ফাঁকা রেখা প্রবেশ করা হয়।


1

পিএইচপি, 362 367 বাইট

<?for(;$w=fgets(STDIN);$S[]=$w){for($l=$i=mb_strlen($w);$i--;){$c=array_sum(unpack("C*",mb_substr($w,$i,1)));96<$c&&$c<123 and $v+=$c-96 or 64<$c&&$c<91 and $v+=1.5*$c-96 or 48<$c&&$c>32||$c>57&&$c<127 and $v-=1;}$v/=$l;preg_match_all("/\d+/",$w,$m);$v-=array_sum($m[0]);preg_match("/((^| )R.*){2}/",$w)&&$v=INF;$t[]=$v;}array_multisort($t,$S);echo join("
",$S);

ফর্ম্যাট সংস্করণ:

<?php
for (; $w = fgets(STDIN); $S[] = $w) {
    for ($l = $i = mb_strlen($w); $i--;) {
        $c = array_sum(unpack("C*", mb_substr($w, $i, 1)));
        96 < $c && $c < 123 and $v += $c - 96
        or 64 < $c && $c < 91 and $v += 1.5 * $c - 96
        or 48 < $c && $c > 32 || $c > 57 && $c < 127 and $v -= 1;
    }
    $v /= $l;
    preg_match_all("/\d+/", $w, $m);
    $v -= array_sum($m[0]);
    preg_match("/((^| )R.*){2}/", $w) && $v = INF;
    $t[] = $v;
}
array_multisort($t, $S);
echo join("
", $S); 

আকর্ষণীয় লাইন:

$c = array_sum(unpack("C*", mb_substr($w, $i, 1)));

একটি একক ইউটিএফ -8 অক্ষরকে তার বাইট মানগুলিতে রূপান্তর করে এবং তাদের অঙ্ক করে, যাতে আমরা ASCII অক্ষরগুলির আসল মান এবং মাল্টিবাইট অক্ষরের জন্য 127 এর চেয়ে বেশি মান পাই।

96 < $c && $c < 123 and $v += $c - 96
or 64 < $c && $c < 91 and $v += 1.5 * $c - 96
or 48 < $c && $c > 32 || $c > 57 && $c < 127 and $v -= 1;

কম অপারেটরের নজির ব্যবহার করে andএবং orছাড়াই একক বিবৃতিতে অক্ষরের মান নির্ধারণ করতে if


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