वाक्यांश बनाने के लिए उपनाम बदलें


9

C -directive से प्रेरित है #define

चुनौती

कुछ उपनामों के साथ एक वाक्यांश दिया, और प्रत्येक उपनाम पाठ के साथ एक सरणी। अपने संबंधित पाठ के साथ प्रत्येक उपनाम की जगह प्रारंभिक वाक्यांश को आउटपुट करें।

एक उपनाम को एक तेज द्वारा परिभाषित #किया जाता है, जिसके बाद इसके सूचकांक में सरणी होती है (सूचकांक शून्य या एक पर शुरू हो सकता है)। उपनाम अपने पाठ के अंदर एक और उपनाम हो सकता है, और आपको उन सभी को हल करना होगा (शायद पुनरावर्ती)। आप मान सकते हैं कि उपनाम कभी अनंत-पाश में नहीं चलेगा। उपनाम में अग्रणी शून्य नहीं होगा ( यह #02सूचकांक में उपनाम नहीं है 2, यह 0पाठ के बाद सूचकांक में उपनाम है 2)।

आप मान सकते हैं कि सरणी लंबाई में 20 आइटम पास नहीं करेगी।

आप एक प्रोग्राम लिख सकते हैं, या एक फ़ंक्शन या यहां तक ​​कि #defineयह अच्छा होगा :)

आप एक अन्य इनपुट-विधि का भी उपयोग कर सकते हैं जो आपकी भाषा के लिए बेहतर है।

उदाहरण

phrase: "#0 & #3"
array: [
    "Programming #1",
    "Puzzles",
    "Code",
    "#2 Golf"
]
output: "Programming Puzzles & Code Golf"

क्रमशः:

0> "#0 & #3"
1> "Programming #1 & #2 Golf"
2> "Programming Puzzles & Code Golf"

चूंकि यह है , बाइट्स जीत में सबसे छोटा जवाब!

एक और नमूना

phrase: "#0!"
array: [
    "We are #1",
    "#2",
    "#3",
    "#4 !",
    "graduating"
]
output: "We are graduating !!"

phrase: "##0#1#0#21#3#4"
array: [
    "a",
    "m",
    "z",
    "n",
    "g"
]
output: "#amaz1ng"

phrase: "##1#23"
array: [
    "WEIRD",
    "0 C",
    "AS"
]
output: "WEIRD CAS3"

phrase: "#1#7#6y#4#7#10s#7b#11#0#0#11r#7#0h#6#5#2#5#9#4."
array: [
    "t",
    "#12#3",
    "#11ga#3",
    "#0#10v#11",
    "#0h#10#8g",
    "#7#8",
    "a#8",
    " ",
    "n",
    "o",
    "i",
    "e",
    "P#9s#10"
]
output: "Positive anything is better than negative nothing."

ऊपर दिए गए उदाहरणों का उपयोग एरे को शून्य पर शुरू करने वाले सूचकांक के साथ किया गया है।


यदि हम 1-इंडेक्सिंग विकल्प का उपयोग करते हैं, तो क्या हमें अग्रणी 0 चीज़ के बारे में चिंता करने की ज़रूरत #0नहीं है या #01वैध है लेकिन एक उपनाम नहीं है (अर्थात यह बस के रूप में छोड़ दिया जाता है)?
फ्राईअमईएग्मन

@FryAmTheEggman। उस मामले में आपको बस अनदेखा करना चाहिए#01
हटा दिया गया

0-9 के लिए अजगर के साथ आसान, दिमाग को कम करने की कोशिश कर रहा 0-19: D
एंटटी हापला

1
एक साधारण समस्या प्रतीत होती है, इसमें एक आश्चर्यजनक मात्रा छिपी हुई है। बड़ा अच्छा सवाल!
जोश

जवाबों:


4

जावास्क्रिप्ट (ईएस 6) 58

पुनरावर्ती कार्य

f=(s,h,r=s.replace(/#(1?\d)/g,(_,x)=>h[x]))=>r==s?r:f(r,h)

परीक्षा

f=(s,h,r=s.replace(/#(1?\d)/g,(_,x)=>h[x]))=>r==s?r:f(r,h)

// Version without default parameters, same length but using a global
// f=(s,h)=>(r=s.replace(/#(1?\d)/g,(_,x)=>h[x]))==s?r:f(r,h)

console.log=x=>O.textContent+=x+'\n'

;[
  ['##1#23',['WEIRD','0 C','AS']],
  ["#0!",["We are #1","#2","#3","#4 !","graduating"]],
  ["##0#1#0#21#3#4",["a","m","z","n","g"]],
  ["##0#1#0#21#13#4",["a","m","z","","g","","","","","","","","","n"]],
  ["#1#7#6y#4#7#10s#7b#11#0#0#11r#7#0h#6#5#2#5#9#4.",
    ["t","#12#3","#11ga#3","#0#10v#11","#0h#10#8g","#7#8","a#8"," ","n","o","i","e","P#9s#10"]
  ],
  ["#0 & #3",["Programming #1","Puzzles","Code","#2 Golf"]]
].forEach(t=>{
  var a=t[0],b=t[1]
  console.log(a+' ['+b+']\n -> '+f(a,b))
})
<pre id=O></pre>


मैंने उपनाम के साथ एक और परीक्षण मामला जोड़ा है। 9. से अधिक
हटा दिया

2

मैथमेटिका, 74 बाइट्स

FixedPoint[#~StringReplace~a&,a=0;a=Reverse["#"<>ToString@a++->#&/@#2];#]&

बहुत जटिल नहीं है। यह ज्यादातर इंडेक्स बनाने के लिए समर्पित है।


1
@WashingtonGuedes फिक्स्ड।
लेजियन मम्मल 978

2

जूलिया, 112 107 66 बाइट्स

f(s,x)=(r=replace(s,r"#1?\d",m->x[1+parse(m[2:end])]))==s?s:f(r,x)

यह एक पुनरावर्ती कार्य है जो एक स्ट्रिंग को एक सरणी में स्वीकार करता है और एक स्ट्रिंग लौटाता है। यह 0-आधारित इंडेक्सिंग का उपयोग करता है।

हम एक स्ट्रिंग आर का निर्माण शुरू करते हैं, क्योंकि इनपुट स्ट्रिंग s नियमित अभिव्यक्ति के सभी मैचों के #1?\dसाथ x के तत्व से बदलकर 1 + पूर्णांक के साथ मेल खाता है। यदि यह के बराबर है रों , हम वापसी रों , अन्यथा हम recurse, गुजर आर स्ट्रिंग के रूप में।


1

सी, 269 232

#define f(p,a,l)char*n,o[999],i=0,c,x;for(strcpy(o,p);o[i];)o[i]==35&isdigit(o[i+1])?c=o[i+1]-48,c=isdigit(o[i+2])&c?10*c+o[i+2]-48:c,n=a[c<l?c:c/10],x=strlen(n),memmove(o+i+x,o+i+2+c/10,strlen(o+i)),i=!memmove(o+i,n,x):++i;puts(o);

अनुरोध के अनुसार, #defineसमस्या को हल करने वाला एकल ! सी मैक्रोज़ पुनरावर्ती नहीं हो सकते हैं, इसलिए समस्या को पुनरावृत्तिपूर्वक हल किया जाना था। मैक्रो 3 तर्क लेता है; वाक्यांश p, सरणी aऔर सरणी की लंबाई lमैंने केवल अपने ungolfed समाधान से व्हॉट्सएप छीन लिया; मुझे पता है कि कुछ और पात्र हैं जिन्हें मैं बचा सकता हूं, लेकिन मुझे नहीं लगता कि यह मुझे 200 से नीचे मिलेगा। यह निश्चित रूप से एक प्रतिस्पर्धी समाधान नहीं होगा। समाधान पूरी तरह से गोल्फ है। नीचे एक समारोह के रूप में अघोषित समाधान:

f(char*p,char**a,int l){
  char o[999]={0},i=0;
  strcpy(o,p);
  while(o[i]){
    if(o[i]=='#'&&isdigit(o[i+1])){
      int c = o[i+1]-'0';
      if(isdigit(o[i+2])&&c)
        c=10*c+o[i+2]-'0';
      if(c>=l)
        c/=10;
      char *n=a[c];
      memmove(o+i+strlen(n),o+i+2+c/10,strlen(o+i));
      memmove(o+i,n,strlen(n));
      i=0;
    }else{
      i++;
    }
  }
  puts(o);
}

और परीक्षण कोड:

void test(char *phrase, char **array, int length) {
  f(phrase, array, length);
}

main() {
  const char *t1[] = {
    "Programming #1","Puzzles","Code","#2 Golf"
  };
  test("#0 & #3", t1, 4);

  const char *t2[] = {
    "We are #1","#2","#3","#4 !","graduating"
  };
  test("#0!", t2, 5);

  const char *t3[] = {
    "a","m","z", "n","g"
  };
  test("##0#1#0#21#3#4", t3, 5);

  const char *t4[] = {
    "WEIRD","0 C","AS"
  };
  test("##1#23", t4, 3);

  const char *t5[] = {
    "t","#12#3","#11ga#3","#0#10v#11","#0h#10#8g","#7#8","a#8"," ","n","o","i","e","P#9s#10"
  };
  test("#1#7#6y#4#7#10s#7b#11#0#0#11r#7#0h#6#5#2#5#9#4.", t5, 13);
}

संपादित करें: कुछ गोल्फिंग जादू का काम किया। यह उतना छोटा और अपठनीय है जितना मुझे लगता है कि यह मिल सकता है।


यार, अच्छा है !!! ... मैं इसे फिर से बढ़ाऊंगा अगर मैं कर सकता हूं;)
हटा दिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.