न्यूमेरोनीज़ या N8s?


10

एक numeronym (जिसे "संख्यात्मक संकुचन" के रूप में जाना जाता है), जब शब्द नंबर का उपयोग कर छोटा है है। एक सामान्य संकुचन विधि प्रतिस्थापित प्रतिस्थापन की लंबाई का उपयोग सभी लेकिन पहले और अंतिम पात्रों को बदलने के लिए है। उदाहरण के लिए, के i18nबजाय internationalizationया के L10nबजाय का उपयोग करेंlocalization । ( Lएक लोअरकेस के बाद से कैपिटल होता है 1)

बेशक, एक ही वाक्यांश में कई शब्द समान संक्षिप्त रूप में हो सकते हैं, इसलिए आपका काम शब्दों के एक समूह को उनके संख्या-समूहों में बदलना है, या इस घटना में कि एक ही अंक के साथ कुछ अलग शब्द मौजूद हैं , आपके कार्यक्रम को कुछ देना चाहिए के लिए परिणाम A7s R4t, Ambiguous Result(हाँ, मुझे पता है कि यह परिणाम अपने आप में एक अस्पष्ट परिणाम है।)

नियम:

  • प्रोग्राम या फ़ंक्शन का उपयोग करें, और परिणाम प्रिंट या वापस करें।
  • इनपुट को एक स्ट्रिंग के रूप में लिया जाता है।
  • आउटपुट स्पेस-सीमांकित शब्दों की एक स्ट्रिंग है।
  • आपके प्रोग्राम को शब्दों को लंबाई 3 के साथ परिवर्तित करने की आवश्यकता नहीं है, और इसे कम शब्दों में परिवर्तित नहीं करना चाहिए।
  • यदि एक l( 1एक) से पहले (लोअरकेस ell) होता है , तो इसे अपरकेस बनाया जाना चाहिए।
  • यदि एक I( 1एक) से पहले एक (अपरकेस आंख) होती है , तो इसे लोअरकेस बनाया जाना चाहिए।
  • इनपुट मुद्रण योग्य ASCII और रिक्त स्थान होंगे। शब्दों को रिक्त स्थान द्वारा अलग किया जाता है।
  • सबसे छोटा कोड जीतता है।

उदाहरण:

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

संपादित करें: यदि किसी को संदर्भ नहीं मिला: Thnks fr th Mmrs


क्या इनपुट में नंबर भी हो सकते हैं? यदि हां, तो क्या इनपुट 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कॉल I / l को बदलने के लिए हैं जब वे भ्रमित हो सकते हैं। &एक रचना है, और एक ऑपरेटर को एक मूल्य धाराओं के साथ रचना करना। (इसलिए 3&+एक फ़ंक्शन देता है जो 2 तर्क को जोड़ने की उम्मीद करता है)। अंत में, अंतिम भाग वह फ़ंक्शन है जो पहले, लंबाई -2 (स्ट्रिंग के साथ रचना), और अंतिम लेता है। &>&;:अंत में बिट इस फंक्शन (जिसे हर तर्क पर लागू किया जाना चाहिए) >(अनबॉक्सिंग) को कंपोज़ करता है, क्योंकि ;:(स्प्लिट शब्द) एक बॉक्स्ड लिस्ट देता है (ताकि हर एलिमेंट की लंबाई अलग-अलग हो)।

उदाहरण:

     (' '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"

यदि यह उस pesky $REPLACEकॉल के लिए नहीं था , जो मानक का हिस्सा नहीं है, तो यह अच्छे-राजभाषा मानकों के अनुरूप MPS होगा । शुद्ध एम में इसे फिर से लागू करना एक अच्छा 80ish बाइट्स लेता है, इसलिए मैं उस मार्ग से नीचे नहीं गया।

प्रवेश बिंदु है $$z("your string here"), जो "y2r s4g h2e"आगे और पीछे लौटता है।


3
क्या आप शायद भाषा से जुड़ सकते हैं? मैंने इसके बारे में नहीं सुना है।
mbomb007

मेरा मतलब है, यह वह चीज है जब आप इसके लिए गूगल करते हैं ( docs.intersystems.com/cache20152/csp/docbook/… ) - MUMPS का मालिकाना स्वाद।
सेंसहिन

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

एक ही बात ungolfed:

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

धन्यवाद दोस्तों!


PPCG में आपका स्वागत है! c:
देउसोवी

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;

यह सुनिश्चित नहीं है कि क्या सही है, लेकिन मुझे उम्मीद है कि "एल" में "एल" को "एल 2 ई" में तब्दील होने पर पूंजीकृत नहीं किया जाएगा, जैसा कि "1" के बाद नहीं है।
मैनटवर्क

सिर्फ कुछ मामलों का परीक्षण किया, लेकिन काम करने के लिए लगता है: s/(\w)(\w+)(\w)/$1.length($2)."$3_$2"/ges/\B(\w+)(\w)/length($1)."$2_$1"/ge
12

धन्यवाद, @manatwork मैंने [Il]पहले ही मामलों को रोकने की आवश्यकता को अनदेखा कर दिया 1- बाइट्स के एक जोड़े को भी बचाया!
टॉबी स्पाइट

1

जावास्क्रिप्ट (ईएस 6), 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

जावास्क्रिप्ट ईएस 6, 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 ;

क्या यह i / L सामान और A7s R4t को संभालता है?
रॉबर्ट फ्रेजर

@RobertFraser मुझे यकीन है कि यह करता है, हालांकि मैं इस मिनट में एक फैक्टर संकलक नहीं हूं; जब मैं कर रहा हूँ मैं इकाई परीक्षण जोड़ देंगे। : D
बिल्ली

हाँ, आवश्यकताओं के बारे में क्षमा करें। सवाल खत्म करने के एक हफ्ते बाद, मैं "ओह नहीं, मैंने क्या किया है" जैसा था, लेकिन बहुत देर हो चुकी थी। मैं एक अलग चुनौती के रूप में एक सरल संस्करण बना सकता हूं।
mbomb007
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.