সংখ্যার নাম বা এন 8?


10

একটি সংখ্যার নাম ("সংখ্যার সংকোচন" নামেও পরিচিত) হ'ল সংখ্যার সাহায্যে কোনও শব্দ সংক্ষিপ্ত করা হয়। একটি সাধারণ সংকোচন পদ্ধতি হ'ল প্রথম এবং শেষ অক্ষরের ব্যতীত সমস্ত প্রতিস্থাপনের জন্য প্রতিস্থাপিত স্ট্রিংয়ের দৈর্ঘ্যটি ব্যবহার করা। উদাহরণস্বরূপ, i18nপরিবর্তে internationalizationবা L10nপরিবর্তে ব্যবহার করুনlocalization । ( Lযেহেতু একটি ছোট হাতের অক্ষরটি দেখতে খুব একই রকম দেখা যায় তাই মূলধনটি মূলধনযুক্ত is 1)

অবশ্যই, একই বাক্যাংশের বেশ কয়েকটি শব্দের একই সংক্ষিপ্ত রূপ থাকতে পারে, সুতরাং আপনার কাজ হ'ল শব্দের একটি গ্রুপকে তাদের সংখ্যায় রূপান্তর করা বা একই সংখ্যার সাথে কিছু ভিন্ন শব্দের উপস্থিতি ঘটলে আপনার প্রোগ্রামটি একটি দেওয়া উচিত এর ফলাফল A7s R4t, এর জন্য সংক্ষিপ্ত Ambiguous Result(হ্যাঁ, আমি জানি যে এই ফলাফলটি নিজেই একটি দ্ব্যর্থক ফলাফল))

নিয়মাবলী:

  • কোনও প্রোগ্রাম বা ফাংশন ব্যবহার করুন, এবং ফলাফলটি মুদ্রণ করুন বা প্রত্যাবর্তন করুন।
  • ইনপুটটি একক স্ট্রিং হিসাবে নেওয়া হয়।
  • আউটপুট হল স্থান-বিস্মৃত শব্দের একক স্ট্রিং।
  • আপনার প্রোগ্রামে 3 টি দৈর্ঘ্যের সাথে শব্দ রূপান্তর করতে হবে না এবং ছোট শব্দগুলিতে রূপান্তর করা উচিত নয়।
  • যদি একটি l(ছোট হাতের এল) একটি 1(এক) এর আগে ঘটে থাকে তবে এটি বড় হাতের তৈরি করা উচিত।
  • যদি কোনও I(বড় হাতের চোখ) কোনও 1(এক) এর আগে ঘটে থাকে তবে এটি ছোট হাতের তৈরি করা উচিত।
  • ইনপুট প্রিন্টযোগ্য এএসসিআইআই এবং স্পেস হবে। শব্দ স্পেস দ্বারা পৃথক করা হয়।
  • সংক্ষিপ্ততম কোড জিতেছে।

উদাহরণ:

A7s R4t -> A7s R4t (OR: A1s R1t, etc)
Ambiguous Result -> A7s R4t
Billy goats gruff -> B3y g3s g3f
Thanks for the Memories -> T4s f1r the M6s (one possible answer, NOT: Thnks fr th Mmrs)
Programming Puzzles & Code Golf -> P9g P5s & C2e G2f
globalization -> g11n
localizability -> L12y
Internationalization or antidisestablishmentarianism -> i18n or a26m
Internationalization or InternXXXXXalization -> A7s R4t
what is this fiddle and faddle -> A7s R4t
A be see -> A be s1e (OR: A be see)
see sea -> s1e s1a (OR: see sea)
2B or not 2B -> 2B or not 2B (OR: 2B or n1t 2B. 2 letters, don't change, don't count as ambiguous)
this example is this example -> t2s e5e is t2s e5e (same words aren't ambiguous)
l1 -> l1 (2 letters, don't change.)
I1 -> I1 (2 letters, don't change.)

সম্পাদনা করুন: যদি কেউ রেফারেন্সটি না পেয়ে থাকে: থিমস মাই মিমার্স


ইনপুট এছাড়াও সংখ্যা থাকতে পারে? যদি তা হয়, তবে একটি ইনপুট কি l1হয়ে যায় L1বা থাকে l1?
ডুরকনব

আমি জোর থেকে অনুমান বিভিন্ন যে example exampleহবে e5e e5e, কিন্তু এটা একটি পরীক্ষা ক্ষেত্রে যা এই কভার অন্তর্ভুক্ত করা ভাল হবে।
পিটার টেলর

আপনার উভয় প্রশ্নের ( 2B or not 2Bএবং পরে) এর জন্য পরীক্ষার কেস যুক্ত করা হয়েছে
mbomb007

উত্তর:


1

জে, 92 বাইট

(' 'joinstring(<&(]`(rplc&('I1';'i1')&(rplc&('l1';'L1'))&({.,([:":#-2:),{:))@.(#>3:))&>&;:))

সুরক্ষিত কলগুলির একটি লুঙ্গ চেইন। প্রথম অংশটি কেবল একটি কাঁটাচামচ: একটি আক্ষরিক joinstring, এবং একটি ফাংশন (জেতে, 1 (10 + +) 2হয় (10 + (1 + 2)))। দ্বিতীয় অংশটি হ'ল ফাংশন। দুটি rplcকল হ'ল আই / এল প্রতিস্থাপন করতে হবে যখন তারা বিভ্রান্ত হতে পারে। &হ'ল রচনা, এবং একটি মান কারিগুলি সহ একটি অপারেটর রচনা। (সুতরাং 3&+এমন একটি ফাংশন দেয় যা ২ য় যুক্তি যুক্ত হওয়ার প্রত্যাশা করে)। অবশেষে, শেষ অংশটি হল প্রথমটি, দৈর্ঘ্য -২ (স্ট্রিংফিকেশন দিয়ে গঠিত) এবং শেষটি function &>&;:শেষে বিট এই ফাংশন (যা প্রত্যেক যুক্তি প্রয়োগ করতে হবে) এর composes >(আনবক্সিং), কারণ ;:(বিভক্ত শব্দ) বক্স তালিকা (প্রতিটি উপাদান বিভিন্ন দৈর্ঘ্য থাকতে পারে যাতে) ফেরৎ।

উদাহরণ:

     (' 'joinstring(<&(]`(rplc&('I1';'i1')&(rplc&('l1';'L1'))&({.,([:":#-2:),{:))@.(#>3:))&>&;:)) 'hey you baby Iooooooooneey I1'
hey you b2y i11y I1

4

ক্যাচ অবজেক্টস্ক্রিপ্ট , 231 বাইট

r(a,b) s o=$REPLACE(o,a,b) q
z(s) f i=1:1:$L(s," ") s u=$P(s," ",i),l=$L(u),o=$S(l<4:u,1:$E(u)_(l-2)_$E(u,l)) d:l>3 r("I1","i1"),r("l1","L1") d  g:r z+4
    . i '(l<4!(v(o)=u!'$D(v(o)))) s r=1 q
    . s v(o)=u,t=t_o_" "
    q t
    q "A7s R4t"

এটি ভাল-ওয়াল 'স্ট্যান্ডার্ডস-কমপ্লায়েন্ট এমএমপিএস হবে যদি এটি সেই সমস্যাযুক্ত কলটির জন্য না হয় $REPLACE, যা এটি স্ট্যান্ডার্ডের অংশ নয়। খাঁটি এম তে এটি পুনরায় প্রয়োগ করতে ভাল 80ish বাইট লাগে, তাই আমি সেই পথে নামি না।

প্রবেশের বিন্দুটি $$z("your string here"), যা আবার ফিরে আসে "y2r s4g h2e"


3
আপনি সম্ভবত ভাষা লিঙ্ক করতে পারেন? আমি এটা শুনিনি।
mbomb007

আমি বোঝাতে চাইছি, এটি সেই জিনিসটি আসে যখন আপনি এটির জন্য গুগল করেন ( docs.intersystems.com/cache20152/csp/docbook/… ) - এমএমপিএসের স্বত্বাধিকারী গন্ধ।
সেনশিন

3

সি #, 280 274 বাইট

এখানে প্রথমবারের মতো গল্ফার! এগুলি ইদানীং পড়ে উপভোগ করা হয়েছে এবং তাই আমি ভেবেছিলাম আমি নিজেই কিছু চেষ্টা করতে পারি! সম্ভবত সেরা সমাধান নয়, তবে ওহ ভাল!

class B{static void Main(string[] a){string[] n=Console.ReadLine().Split(' ');string o="";int j,i=j=0;for(;j<n.Length;j++){int s=n[j].Length;n[j]=((s<4)?n[j]:""+n[j][0]+(s-2)+n[j][s-1])+" ";o+=n[j];for(;i<j;i++)if(n[j]==n[i]){o="A7s R4t";j=n.Length;}}Console.WriteLine(o);}}

একই জিনিস অবরুদ্ধ:

class B
{
    static void Main(string[] a)
    {            
        string[] n = Console.ReadLine().Split(' ');
        string o = "";
        int j, i = j = 0;
        for(; j < n.Length;j++)
        {
            int s = n[j].Length;

            n[j] = ((s<4) ? n[j] : "" + n[j][0] + (s - 2) + n[j][s - 1]) + " ";
            o += n[j];
            for (; i < j; i++)
            {
                if (n[j] == n[i]) { o = "A7s R4t"; j=n.Length;}
            }                              
        }
        Console.WriteLine(o);
    }
}

ধন্যবাদ বন্ধুরা!


পিপিসিজিতে আপনাকে স্বাগতম! সি:
দেউসোভি

2

পার্ল, 131 120 বাইট

আমি -pস্যুইচটি ব্যবহারের জন্য একটি বাইট যুক্ত করেছি :

s/\B(\w+)(\w)/length($1)."$2_$1"/ge;$_="A7s R4t\n"if/(\w\d+\w)(\w+)\b.*\1(?!\2)/;s/_\w+//g;s/I1\w/\l$&/g;s/l1\w/\u$&/g;

ব্যাখ্যা

# Replace internal letters with count, but keep them around for the next test.
s/\B(\w+)(\w)/length($1)."$2_$1"/ge;
# Detect ambiguous result
$_ = "A7s R4t\n" if
    # Use negative look-ahead assertion to find conflicts
    /(\w\d+\w)(\w+)\b.*\1(?!\2)/;
# We're done with the internal letters now
s/_\w+//g;
# Transform case of initial 'I' and 'l', but only before '1'
s/I1\w/\l$&/g;
s/l1\w/\u$&/g;

সঠিক কিনা তা নিশ্চিত না তবে আমি "এল" তে "এল" তে রূপান্তরিত হওয়ার পরে মূলধন হয়ে উঠবে না বলে আশা করি, "1" অনুসরণ না করে।
manatwork

মাত্র দু'টি কেস পরীক্ষিত, তবে মনে হচ্ছে এটি কার্যকর: s/(\w)(\w+)(\w)/$1.length($2)."$3_$2"/ges/\B(\w+)(\w)/length($1)."$2_$1"/ge
manatwork

ধন্যবাদ, @ মানাত ওয়ার্ক। আমি [Il]কেবল আগে কেসসপআপ করার প্রয়োজনীয়তাটি উপেক্ষা করেছিলাম 1- বেশ কয়েকটি বাইটও সংরক্ষণ করেছি!
টবি স্পিড

1

জাভাস্ক্রিপ্ট (ES6), 165 বাইট

s=>(r=s.replace(/\S+/g,w=>(m=w.length-2)<2?w:(i=d.indexOf(n=((m+s)[0]<2&&{I:"i",l:"L"}[w[0]]||w[0])+m+w[m+1]))>=0&d[i+1]!=w?v=0:d.push(n,w)&&n,v=d=[]),v?r:"A7s R4t")

ব্যাখ্যা

s=>(                         // s = input string
  r=s.replace(               // r = result of s with words replaced by numeronyms
    /\S+/g,                  // match each word
    w=>                      // w = matched word
      (m=w.length-2)         // m = number of characters in the middle of the word
        <2?w:                // if the word length is less than 4 leave it as it is
      (i=d.indexOf(          // check if this numeronym has been used before
        n=                   // n = numeronymified word
          ((m+s)[0]<2&&      // if the number starts with 1 we may need to replace
            {I:"i",l:"L"}    //     the first character with one of these
              [w[0]]||w[0])+ // return the replaced or original character
          m+w[m+1]
      ))>=0&d[i+1]!=w?       // set result as invalid if the same numeronym has been
        v=0:                 //     used before with a different word
      d.push(n,w)&&n,        // if everything is fine return n and add it to the list
    v=                       // v = true if result is valid
      d=[]                   // d = array of numeronyms used followed by their original word
  ),
  v?r:"A7s R4t"              // return the result
)

পরীক্ষা


1

জাভাস্ক্রিপ্ট ES6, 162

w=>(v=(w=w.split` `).map(x=>(l=x.length-2+'')>1?((l[0]>1||{I:'i',l:'L'})[x[0]]||x[0])+l+x[-~l]:x)).some((a,i)=>v.some((b,j)=>a==b&w[i]!=w[j]))?'A7s R4t':v.join` `

কম গল্ফড

// Less golfed
f=w=>{
  w = w.split` ` // original text splitted in words
  v = w.map(x=> { // build modified words in array v

    l = x.length - 2 // word length - 2
    if (l > 1) // if word length is 4 or more
    {
      a = x[0] // get first char of word
      l = l+'' // convert to string to get the first digit
      m = l[0] > 1 || {I:'i', l:'L'} // only if first digit is 1, prepare to remap I to i and l to L
      a = m[a] || a // remap
      return a + l + x[-~l] // note: -~ convert back to number and add 1
    }
    else
      return x // word unchanged
  })
  return v.some((a,i)=>v.some((b,j)=>a==b&w[i]!=w[j])) // look for equals Numeronyms on different words
  ? 'A7s R4t' 
  : v.join` `
}  

পরীক্ষা


1

পাইথন 2, 185 বাইট

d={}
r=''
for w in input().split():
 l=len(w);x=(w[0]+`l-2`+w[-1]).replace('l1','L1').replace('I1','i1')
 if l<4:x=w
 if d.get(x,w)!=w:r='A7s R4t';break
 d[x]=w;r+=x+' '
print r.strip()

1

পাইথন 3, 160

আমি সেইগুলি প্রতিস্থাপন কলগুলি প্রতিস্থাপনের জন্য একটি ভাল উপায় খুঁজে পেতে চাই।

def f(a):y=[(x,(x[0]+str(len(x)-2)+x[-1]).replace('l1','L1').replace('I1','i1'))[len(x)>3]for x in a.split()];return('A7s R4t',' '.join(y))[len(set(y))==len(y)]

কিছু পরীক্ষার ক্ষেত্রে:

assert f('Billy goats gruff') == 'B3y g3s g3f'
assert f('Programming Puzzles & Code Golf') == 'P9g P5s & C2e G2f'
assert f('Internationalization or InternXXXXXalization') == 'A7s R4t'

1

ফ্যাক্টর, 48 35 বাইট, নন-কেপটিং

এটি একটি ল্যাম্বডা যা স্ট্যাকের উপরে চলে যায়, এটি প্রযুক্তিগতভাবে সত্যই বিরক্তিকর শক্ত প্রয়োজনীয়তাগুলি পূরণ করে না যা আমি মূলত উপেক্ষা করতে সক্ষম হয়েছিল।

[ " " split [ a10n ] map " " join ]

englishশব্দভান্ডার ব্যবহার করে ।

অথবা, আমরা যদি a10nলাইব্রেরির শব্দটি ইনলাইন করি তবে 131 বাইট (স্বতঃ-আমদানি সহ):

: a ( b -- c ) " " split [ dup length 3 > [ [ 1 head ] [ length 2 - number>string ] [ 1 tail* ] tri 3append ] when ] map " " join ;

এটি কি আই / এল স্টাফ এবং এ 7 এস আর 4 টি পরিচালনা করে?
রবার্ট ফ্রেজার

@ রবার্ট ফ্রেজার আমি নিশ্চিত যে এটি এটি করে, যদিও আমি এই মুহুর্তে কোনও ফ্যাক্টর সংকলনে নেই; আমি যখন থাকি তখন আমি পাসের ইউনিট পরীক্ষা যুক্ত করব। : ডি
বিড়াল

হ্যাঁ, প্রয়োজনীয়তা সম্পর্কে দুঃখিত। আমি প্রশ্নটি শেষ করার এক সপ্তাহ পরে, আমি "ওহ না, আমি কী করেছি" এর মতো ছিলাম তবে অনেক দেরি হয়েছিল। আমি পৃথক চ্যালেঞ্জ হিসাবে একটি সহজ সংস্করণ করতে পারে।
mbomb007
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.