পিপিসি ব্যবহারকারীর নাম গল্ফ ডাউন


32

আমি আড্ডায় একটি মন্তব্য করেছি এবং পরবর্তী কথোপকথন আমাকে এই চ্যালেঞ্জটি তৈরি করতে অনুপ্রাণিত করেছিল।

আমি কি কেবল এখানেই আশপাশের আদ্যক্ষর দ্বারা চিহ্নিত হই? আমরা সবাই নিচে গল্ফ করার বিষয়ে আছি। আমাদের এমবি এবং ডি-নোব এবং ... ও থাকতে পারে

যদি আমি "সিএইচ" হিসাবে পরিচিত তবে আমার মনে হয় অন্য সবারও প্রাথমিক-ভিত্তিক ডাক নাম থাকা উচিত।

এখানে খেলে খ্যাতি অনুসারে শীর্ষ 100 প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ ব্যবহারকারীদের একটি তালিকা:

Martin Büttner
Doorknob
Peter Taylor
Howard
marinus
Dennis
DigitalTrauma
David Carraher
primo
squeamish ossifrage
Keith Randall
Ilmari Karonen
Quincunx
Optimizer
grc
Calvin's Hobbies
ugoren
Mig
gnibbler
Sp3000
aditsu
histocrat
Ventero
xnor
mniip
Geobits
J B
Joe Z.
Gareth
Jan Dvorak
isaacg
edc65
Victor
steveverrill
feersum
ace
Danko Durbić
xfix
PhiNotPi
user23013
manatwork
es1024
Joey
daniero
boothby
nneonneo
Joey Adams
Timwi
FireFly
dansalmo
grovesNL
breadbox
Timtech
Flonk
algorithmshark
Johannes Kuhn
Yimin Rong
copy
belisarius
professorfish
Ypnypn
trichoplax
Darren Stone
Riot
ProgramFOX
TheDoctor
swish
minitech
Jason C
Tobia
Falko
PleaseStand
VisioN
leftaroundabout
alephalpha
FUZxxl
Peter Olson
Eelvex
marcog
MichaelT
w0lf
Ell
Kyle Kanos
qwr
flawr
James_pic
MtnViewMark
cjfaure
hammar
bitpwner
Heiko Oberdiek
proud haskeller
dan04
plannapus
Mr Lister
randomra
AShelly
ɐɔıʇǝɥʇuʎs
Alexandru
user unknown

( এইভাবে আমি এটি পেয়েছি )

চ্যালেঞ্জ

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা স্ট্রিংয়ের একটি তালিকা গ্রহণ করে এবং তাদের ন্যূনতম, অনন্য, প্রাথমিক-ভিত্তিক ডাকনামগুলির স্ট্রিংগুলির তালিকার অন্য একটি তালিকাকে আউটপুট দেয়, তালিকার শুরুর নিকটে থাকাদের অগ্রাধিকার দেয়।

ডাক নামগুলি তৈরি করতে প্রদত্ত ক্রমে তালিকায় প্রতিটি স্ট্রিং এস-তে এই পদ্ধতিটি প্রয়োগ করুন:

  1. প্রক্রিয়াটির সমস্ত শূন্যস্থান সরিয়ে শূন্যস্থান দ্বারা বিভক্ত শব্দের মধ্যে এস বিভক্ত করুন।
  2. সংক্ষিপ্ত থেকে দীর্ঘতম পর্যন্ত এস এর শব্দের প্রথম অক্ষরের স্ট্রিংয়ের Nompty উপসর্গগুলি তালিকাবদ্ধ করুন।
    যেমন Just Some NameJ, JS,JSN
  3. এই তালিকার প্রথম আইটেমটি চয়ন করুন যা এস এর জন্য ডাক নাম হিসাবে ইতিমধ্যে নির্বাচিত ডাক নামটির সাথে সাদৃশ্য নয়, কোনও ডাকনামটি বেছে নেওয়া হলে থামান, অন্যথায় 4 ধাপ অবিরত রাখুন।
    উদাহরণস্বরূপ যদি Just Some Nameপ্রথম স্ট্রিংটি ছিল তবে Jডাকনাম হওয়ার গ্যারান্টিযুক্ত।
  4. উপসর্গগুলি আবার তালিকাবদ্ধ করুন, তবে এবার প্রাকৃতিক স্থানে প্রথম শব্দের দ্বিতীয় অক্ষর অন্তর্ভুক্ত করুন।
    যেমন Just Some NameJu, JuS,JuSN
  5. এই তালিকার 3 ধাপে একই করুন, কোনও অনন্য ডাকনাম পাওয়া গেলে বন্ধ করে দিন।
  6. প্রথম শব্দের বাকী অক্ষরগুলি দিয়ে এই প্রক্রিয়াটি পুনরাবৃত্তি করুন, অবশেষে দ্বিতীয় শব্দের মধ্যে অক্ষর সন্নিবেশ করানো হবে, তৃতীয়টি হবে এবং অন্য কোনও অনন্য ডাকনাম পাওয়া না পাওয়া পর্যন্ত।
    যেমন প্রথম অনন্য এখানে তালিকাভুক্ত স্ট্রিং ডাক নাম হবে:
    Jus, JusS, JusSN
    Just, JustS, JustSN
    Just, JustSo, JustSoN(নোট যে oপরে যোগ করা হয়নি Just)
    Just, JustSom, JustSomN
    Just, JustSome, JustSomeN
    Just, JustSome, JustSomeNa
    Just, JustSome, JustSomeNam
    Just, JustSome,JustSomeName

শেষ পর্যন্ত সমস্ত ইনপুট স্ট্রিংগুলির একটি অনন্য ডাকনাম (স্ট্রিংয়ের সাথে সম্ভাব্য অভিন্ন) দিয়ে শেষ হওয়া উচিত। আপনি ধরে নিতে পারেন যে ইনপুট স্ট্রিংগুলির কোনওটিই এই পদ্ধতিটি ব্যবহার করে একই ডাকনামে ম্যাপ করবে না।

উদাহরণ

আমার ভুল সংশোধন করার জন্য আপডেট!

ইনপুট জন্য

Martin Buttner
Doorknob
Peter Taylor
Howard
marinus
Dennis
DigitalTrauma
David Carraher
Martin Bitter
Martin Butter
Martin Battle
Martini Beer
Mart Beer
Mars Bar
Mars Barn

ডাক নাম হবে

M
D
P
H
m
De
Di
DC
MB
Ma
MaB
Mar
MarB
Mars
MarsB

বিস্তারিত

  • ইনপুট কোনও ফাইল হতে পারে (প্রতি লাইনে এক নাম), বা স্ট্যান্ডিন / কমান্ড লাইনের মাধ্যমে একটি সময়ে একটি নাম, বা স্ট্রিংগুলির তালিকার ফাংশন আর্গুমেন্ট হিসাবে বা নামের মধ্যে নতুন লাইনের সাথে একটি একক স্ট্রিংয়ের ফাংশন আর্গ হিসাবে।
  • আউটপুট স্টাডাউটে (প্রতি লাইনে একটি ডাকনাম) মুদ্রণ করা উচিত বা স্ট্রিংগুলির তালিকা হিসাবে বা ডাকনামগুলির মধ্যে নতুন লাইনের সাথে একটি স্ট্রিং হিসাবে ফিরে আসতে হবে returned
  • আদর্শভাবে প্রোগ্রামগুলি এমন নামের জন্য কাজ করবে যেগুলিতে লাইন টার্মিনেটরগুলি ছাড়া কোনও অক্ষর রয়েছে । তবে, আপনি ধরে নিতে পারেন যে সমস্ত নামেই কেবল প্রিন্টযোগ্য এএসসিআইআই রয়েছে । (পিপিসিগির নামগুলি নেই))
  • কেবল নিয়মিত স্থানের অক্ষরকে শব্দের বিভাজক হিসাবে গণনা করা হয়। শীর্ষস্থানীয় এবং পিছনের স্থানগুলিকে উপেক্ষা করা যেতে পারে।

স্কোরিং

বাইটস মধ্যে সংক্ষিপ্ততম জমা জয়। টাইব্রেকার প্রথম পোস্ট করা উত্তরটিতে যায়।


49
এটি ব্যাখ্যা করে যে কেন আমি মাঝরাতে ঘুম থেকে জেগেছি এই লঙ্ঘনের বোধের সংবেদনশীল সংবেদন নিয়ে।
মার্টিন ইন্ডার

উত্তর:


8

সিজেম, 58 53 বাইট

এটি অনেক গল্ফ করা যেতে পারে .. তবে শুরুর জন্য:

LqN/{:Q1<aQ,,:)QS/f{{1$<_,@-z1e>}%W<s}+{a1$&!}=a+}/N*

কোড সম্প্রসারণ :

L                         "Put an empty array on stack. This is the final nickname array";
 qN/{  ...   }/           "Read the input and split it on new lines. Run the block for each";
     :Q1<a                "Store each name in Q and get its first char. Wrap it in an array";
          Q,,:)           "Get an array of 1 to length(name) integers";
               QS/        "Split the name on spaces";
f{{           }%   }      "for each of the integer in the array, run the code block";
                          "and then for each of the name part, run the inner code block";
   1$<                    "Copy the integer, take first that many characters from the";
                          "first part of the name";
      _,@-z1e>            "Get the actual length of the part and the number of characters";
                          "to be taken from the next name part, minimum being 1";
                W<        "Get rid of the last integer which equals 1";
                  s       "Concat all name parts in the array";
                    +     "Add the list of nick names as per spec with the first character";
{     }=                  "Get the first nick name that matches the criteria";
 a1$&                     "Wrap the nick name in an array and do set intersection with";
                          "the copy of existing nick names";
     !                    "Choose this nick name if the intersection is empty";
N*                        "After the { ... }/ for loop, the stack contains the final";
                          "nick names array. Print it separated with new lines";

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


2
ওপিকে আমার মন্তব্য দেখুন: 'জু' বা 'জুস' যদি 'জাস্ট কিছু নাম' এর বৈধ ডাকনাম হয় তবে 'মার্টিন বাটার' শোলড হতে হবে 'মা', তারপরে 'মাবি', 'মার', 'মারবি'।
edc65

@ Edc65 যা বলেছে তা সত্য। এর জন্যে দুঃখিত. আপনি চাইলে জিনিস পরিবর্তন না করার অনুমতি দেব; এটা আমার ভুল ছিল.
ক্যালভিনের শখ 21

9

জাভাস্ক্রিপ্ট (ES6) 159

চশমা অনুসরণ এবং উদাহরণ না।

আমি বর্তমানের মধ্যবর্তী শব্দ (প্রথম দিকে, প্রথম শব্দ) সহ প্রার্থী ডাকনাম তৈরি করি। কারেন্টের আগের শব্দগুলি 'যেমন রয়েছে' ব্যবহৃত হয়। বর্তমানের পরের শব্দগুলি কোনও - বা কেবল প্রথম - চরিত্রের সাথে অবদান রাখে। বর্তমান শব্দটি প্রতিটি লুপের জন্য আরও 1 টি চরিত্রের সাথে অবদান রাখে।

উদাহরণ 'শুধু কিছু নাম' => 'শুধু', 'কিছু', 'NAME'
Cw Just, অবস্থান 1করে দেখুন J, JS, JSN
Cw Just, অবস্থান 2, চেষ্টা Ju, JuS, JuSN
Cw Just, অবস্থান 3, চেষ্টা Jus,JusS , JusSN
Cw Just, অবস্থান 4, চেষ্টা Just, JustS, JustSN
এখন Justক্লান্ত হয় , Someসিডব্লিউ হয়ে যায়, পজিশনটি আবার শুরু হয়ে যায় (পজিশন 1 এর জন্য, সমস্ত ইতিমধ্যে চেষ্টা করা হয়েছে)

CW Some, অবস্থান 2করে দেখুন Just, JustSo, JustSoN
CW Some, অবস্থান 3, চেষ্টা Just, JustSom,JustSomN
CW Some, অবস্থান 4, চেষ্টা Just, JustSome, JustSomeN
এখন Some, ক্লান্ত হয়Name CW হয়ে, অবস্থান 2 পুনরায় আরম্ভ

CW Name, অবস্থান 2করে দেখুন Just, JustSome, JustSomeNa
CW Name, অবস্থান 3, চেষ্টা Just, JustSome,JustSomeNam
CW Name, অবস্থান 4, চেষ্টা Just, JustSome, JustSomeName
যে সব লোকেরা আছে!

কোড

(কিউ বর্তমান শব্দের অবস্থান, পি কাঁচের অবস্থান)

F=l=>
  l.map(w=>{ 
    for(w=w.match(/[^ ]+/g),q=p=0;
        w.every((w,i)=>~o.indexOf(t+=i<q?w:i>q?w[0]:w.slice(0,p+1)),t='')
        &&(w[q][p++]||(p=1,w[++q]));
       );
    o.push(t)
  },o=[])&&o

টেস্ট সালে ফায়ারফক্স / ফায়ারবাগ কনসোলটি

F(['Martin Buttner','Doorknob','Peter Taylor','Howard','marinus'
  ,'Dennis','DigitalTrauma','David Carraher'
  ,'Martin Bitter','Martin Butter','Martin Battle','Martini Beer','Mart Beer'])

["এম", "ডি", "পি", "এইচ", "এম", "দে", "দি", "ডিসি", "এমবি", "মা", "মাবি", "মার", " MarB "]


2

পিএইচপি, 327 289 275 274 270

এখনও কিছুটা গল্ফ করার সম্ভাবনা থাকতে পারে।

while($n=fgets(STDIN)){$c=count($w=preg_split('/\s+/',trim($n)));$p=[];for($k=0;$k<$c;$p[$k]++){for($t='',$j=0;$j<$c;$j++)$t.=substr($w[$j],0,$p[$j]+1);for($j=1;$j<=strlen($t);$j++)if(!in_array($v=substr($t,0,$j),$u))break 2;$k+=$p[$k]==strlen($w[$k]);}echo$u[]=$v,'
';}
  • প্রোগ্রাম স্টিন / স্টাডাউটে পরিচালিত হয়, এএসসিআইআই-তে কাজ করে, ইউটিএফ-তে বগি
  • ব্যবহার: php -d error_reporting=0 golfnicks.php < nicknames.txt
  • অথবা cat <<EOF | php -d error_reporting=0 golfnicks.php + নামের তালিকা +EOF
  • ওয়েব ব্রাউজারে ফাংশন হিসাবে পরীক্ষা করতে: ব্রেকডাউন আনুন, চিহ্নিত সমস্ত লাইনকে সংঘাতযুক্ত // FUNCকরুন এবং চিহ্নিত চিহ্নযুক্তটিতে মন্তব্য করুন //PROG। চেষ্টাf(array_fill(0,21,'Just Some Name'));

ভাঙ্গন

#error_reporting(0);function f($a){echo'<pre>'; // FUNC
#foreach($a as$n) // FUNC
while($n=fgets(STDIN)) // PROG
{
    $c=count($w=preg_split('/\s+/',trim($n)));     // split name to words, count them
    $p=[];                                         // initialize cursors
    for($k=0;$k<$c;$p[$k]++)
    {
        for($t='',$j=0;$j<$c;$j++)$t.=substr($w[$j],0,$p[$j]+1); // concatenate prefixes
        for($j=1;$j<=strlen($t);$j++)              // loop through possible nicks
            if(!in_array($v=substr($t,0,$j),$u))   // unused nick found
                break 2;                           // -> break cursor loop
        $k+=$p[$k]==strlen($w[$k]);                // if Cw exhausted -> next word
        // strlen()-1 would be correct; but this works too)
    }
    echo$u[]=$v,'
';
}
#echo '</pre>';} // FUNC
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.