बड़ा कोड… आपके लिए!


32

डार्क नाइट के शुरुआती दृश्य में , सीआईए एजेंट और खलनायक बैन के बीच एक अजीब सी बातचीत होती है।

CIA एजेंट: "अगर मैं उस [मास्क] को हटा दूं, तो क्या आप मर जाएंगे?"

बैन: "यह बेहद दर्दनाक होगा ..."

CIA एजेंट: "आप एक बड़े आदमी हैं।"

बैन: "... आपके लिए।"

यह अनिश्चित है कि क्या बैन "आपके लिए दर्दनाक" या "आपके लिए बड़ा आदमी" कहने का इरादा रखता है। कोड गोल्फिंग के माध्यम से सभी के लिए एक बार इस समस्या को हल करें!

चुनौती

आपका कार्य एक प्रोग्राम है जो इनपुट के रूप में दिए गए पूर्णांक के आधार पर उपरोक्त संवाद को फिर से लिखता है।

CIA एजेंट संवाद शब्द हैं: If I pull that off will you die? You're a big guy.

बैन के संवाद शब्द हैं: It would be extremely painful... for you!

कृपया ध्यान दें कि die?, You’re, painful...और you!एक शब्द माना जाता है।

  1. एक पूर्णांक n को इनपुट के रूप में देखते हुए, इसे बाइनरी में बदलें
  2. बाएं से दाएं बाइनरी अंकों को पढ़ना, अगर अंक है 1, तो सीआईए एजेंट संवाद से अगले शब्द का उत्पादन करें और यदि अंक है तो बाण संवाद से अगला शब्द 0। शब्दों को एक स्थान से अलग किया जाना चाहिए। जब स्पीकर बदलता है, तो एक पंक्ति फ़ीड जोड़ें। इसके अलावा, स्पीकर नाम ( BANE:या CIA:) के साथ प्रत्येक संवाद पंक्ति को उपसर्ग करें ।

आप मान सकते हैं कि इनपुट हमेशा बाइनरी फॉर्म में 1 से शुरू होता है, और इसमें 12 और 7 जीरो होते हैं।

उदाहरण

522300

  1. बाइनरी में परिवर्तित: 1111111100000111100

  2. संख्या 8 लोगों के साथ शुरू होती है, इसलिए हम CIA के एजेंट संवाद से 8 पहले शब्दों का उत्पादन करते हैं, और उन्हें CIA के साथ उपसर्ग करते हैं: CIA: If I pull that off will you die?

  3. फिर हमें 5 जीरो मिले, इसलिए हमें बैन के संवाद से 5 पहले शब्द मिले: BANE: It would be extremely painful...

  4. फिर 4 लोग हैं, इसलिए हम 4 अगले सीआईए शब्दों का उत्पादन करते हैं: CIA: You’re a big guy.

  5. फिर 2 शून्य: BANE: for you!

अंतिम परिणाम:

CIA: If I pull that off will you die?
BANE: It would be extremely painful...
CIA: You’re a big guy.
BANE: for you!

अधिक परीक्षण के मामले:

494,542

CIA: If I pull that
BANE: It would be
CIA: off
BANE: extremely
CIA: will you die? You're
BANE: painful... for
CIA: a big guy.
BANE: you!

326,711

CIA: If
BANE: It would
CIA: I pull that off will you
BANE: be extremely painful... for
CIA: die? You're
BANE: you!
CIA: a big guy.

क्या प्रत्येक रेखा अंतरिक्ष में समाप्त हो सकती है?
xnor

@xnor हाँ, यह ठीक है।
अरनौद

बैन के भाषण के पहले शब्द के रूप में "वह" और "यह" परीक्षण मामलों / उद्धरण में नहीं है
MildlyMilquetoast

@ मिस्टा ने "इसे" तय किया, धन्यवाद!
अरनौद

3
क्या यह सिर्फ मैं हूं या किसी ने बैन की आवाज में संवाद पढ़ा है।
गुरुपद ममदापुर

जवाबों:


10

पायथ - 138 बाइट्स

मुझे फिल्म की स्क्रिप्ट को कंप्रेस करना चाहिए।

K_cc"guy big a You're die? you will off that pull I If you! for painful... extremely be would That"d12jmj;++@c"BANECIA"4ed\:m.)@Kedhdr8jQ2

टेस्ट सूट


7

जावास्क्रिप्ट (ईएस 6), 203 201 बाइट्स

संपादित करें: बेशर्मी trim()से ETHproductions के उत्तर से विचार उधार लेकर 2 बाइट्स बचाए

n=>"If I pull that off will you die? You're a big guy. It would be extremely painful... for you!".split` `.map((_,i,a)=>[`
BANE: `,`
CIA: `,' '][j^(j=n>>18-i&1)?j:2]+a[k[j]++],k=[j=12,0]).join``.trim()

परीक्षण के मामलों


7

जावास्क्रिप्ट (ईएस 6), 209 202 201 बाइट्स

(n,a="It would be extremely painful... for you! If I pull that off will you die? You're a big guy.".split` `,b=[6,18])=>(F=(s,p=n%2)=>n?F((p^(n>>=1)%2?p?`
CIA: `:`
BANE: `:` `)+a[b[p]--]+s):s.trim())``

पुराना तरीका:

(n,a="If I pull that off will you die? You're a big guy. It would be extremely painful... for you!".split` `,b=[12,0])=>(F=p=>p^n%2?F(n%2)+(p?`
CIA:`:`
BANE:`):n?F(p,n>>=1)+" "+a[b[p]++]:``)(n%2).trim()

टेस्ट स्निपेट

f=(n,a="It would be extremely painful... for you! If I pull that off will you die? You're a big guy.".split` `,b=[6,18])=>(F=(s,p=n%2)=>n?F((p^(n>>=1)%2?p?`
CIA: `:`
BANE: `:` `)+a[b[p]--]+s):s.trim())``

console.log(f(522300))
console.log(f(494542))
console.log(f(326711))


मैं बेशर्मी से आपके trim()विचार को उधार ले रहा हूं । मुझे यकीन था कि कुछ बेहतर था, slice(1)लेकिन यह पता नहीं लगा सका।
Arnauld

@ मेरे साथ ठीक है, अब हम सब बंधे हुए हैं। मुझे यकीन है कि वहाँ एक तरीका है के तहत इसे 200 :-)
ETHproductions

6

सी ++ 11 (जीसीसी), 298 293 बाइट्स

#include<sstream>
[](int i){std::stringstream b("It would be extremely painful... for you!"),c("If I pull that off will you die? You're a big guy.");std::string s,w;int n=0,t=i,p;while(t/=2)n++;for(;n>=0;p=t)((t=i>>n&1)?c:b)>>w,s+=p^t?t?"CIA: ":"BANE: ":" ",s+=t^(i>>--n)&1?w+"\n":w;return s;}

एक लैम्ब्डा फ़ंक्शन जो एक पूर्णांक लेता है और एक के रूप में संवाद लौटाता है std::string। आप इसे यहां कार्रवाई में देख सकते हैं ।

Ungolfed संस्करण (कुछ स्पष्टीकरण के साथ):

#include<sstream>

[](int i) {
    std::stringstream bane("It would be extremely painful... for you!"),
                      cia("If I pull that off will you die? You're a big guy.");
    std::string s, w;
    int n = 0, t = i, p;
    // Find the position of the most significant bit (n)
    while (t/=2) n++;

    for (; n>=0; p=t) {
        t = i>>n&1; // Current bit
        // Append the speaker name if the previous bit was different
        if (t != p) s += (t ? "CIA: " : "BANE: ");
        else s += " ";

        // Read the next word from one of the streams
        if (t) cia >> w;
        else bane >> w;

        s += w;

        if (t != ((i>>--n)&1)) // Append a newline if the next bit is different
            s += "\n";
    }

    return s;
}

4

जावास्क्रिप्ट (ईएस 6), 252 227 226 बाइट्स

n=>[...n.toString(2,b="If I pull that off will you die? You're a big guy.".split` `,c="It would be extremely painful... for you!".split` `)].map((a,i,j)=>(a!=j[i-1]?+a?i?`
CIA: `:`CIA: `:`
BANE: `:``)+(+a?b:c).shift()).join` `

प्रयोग

f=n=>[...n.toString(2,b="If I pull that off will you die? You're a big guy.".split` `,c="It would be extremely painful... for you!".split` `)].map((a,i,j)=>(a!=j[i-1]?+a?i?`
CIA: `:`CIA: `:`
BANE: `:``)+(+a?b:c).shift()).join` `
f(522300)

टिप्पणियाँ

यह गोल्फिंग-इन-प्रोग्रेस है, मुझे लगता है कि मैं अभी भी कुछ बाइट्स से बच सकता हूं, लेकिन टिप्पणियों में सुझाव छोड़ने के लिए स्वतंत्र महसूस करता हूं।


4

पायथन 3.6, 232 बाइट्स

from itertools import*
c="you! for painful... extremely be would It".split(),"guy. big a You're die? you will off that pull I If".split()
for n,r in groupby(f'{int(input()):b}',int):
 print("BCAINAE::"[n::2],*[c[n].pop()for _ in r])

संपादित करें , समकक्ष:

from itertools import*
c="It would be extremely painful... for you!".split(),"_ If I pull that off will you die? You're a big guy.".split()
for n,r in groupby(map(int,f'{int(input()):b}')):
 print("BCAINAE::"[n::2],*map(c[n].pop,r))


2

पर्ल 6 , 211 बाइट्स

{.put for map |*,zip map {.[0]X .[1].rotor: .[2..*]},zip <CIA: BANE:>,(<If I pull that off will you die? You're a big guy.>,<It would be extremely painful... for you!>),|(.base(2)~~m:g/(.)$0*/)».chars.rotor(2)}

2

सी #, 398 390 385 396 389 बाइट्स

class P{static void Main(string[] a){string s="2"+System.Convert.ToString(int.Parse(a[0]),2),e="CIA: ",r="BANE: ",o="";int k=0,l=0,i=1;string[] c="If I pull that off will you die? You're a big guy.".Split(' '),b="It would be extremely painful... for you!".Split(' ');for(;i<s.Length;i++)o+=(s[i-1]==s[i]?" ":(i<2?"":"\n")+(s[i]>'0'?e:r))+(s[i]>'0'?c[k++]:b[l++]);System.Console.Write(o);}}

पैरामीटर के रूप में इनपुट नंबर के साथ लॉन्च करें।

Ungolfed:

class P
{
    static void Main(string[] a)
    {
        string s = "2" + System.Convert.ToString(int.Parse(a[0]), 2), e = "CIA: ", r = "BANE: ", o = "";
        int k = 0, l = 0, i = 1;

        string[] c = "If I pull that off will you die? You're a big guy.".Split(' '), b = "It would be extremely painful... for you!".Split(' ');
        for (; i < s.Length; i++)
            o += (s[i - 1] == s[i] ? " " : (i<2?"":"\n") + (s[i] > '0' ? e : r))
                + (s[i] > '0' ? c[k++] : b[l++]);
        System.Console.Write(o); 
    }
}

396 बाइट्स पर वापस जाएँ क्योंकि मुझे "भीख माँगने की कोई नई बात" नियम नज़र नहीं आया।


अफसोस की बात है, s.Replace("1",c[k++]).Replace("0",b[l++])इसी शब्दों के साथ प्रतिस्थापित नहीं करता है। ऐसा लगता है, C # एक बार स्ट्रिंग की जगह ले लेता है और इसे थप्पड़ मार देता है।
श्री स्केग्रेस

2

रूबी, 204 + 1 = 205 बाइट्स

-nध्वज की आवश्यकता है ।

d=[%w"It would be extremely painful... for you!",%w"If I pull that off will you die? You're a big guy."]
n=%w"BANE CIA"
("%b"%$_).scan(/((.)\2*)/).map{|i,b|puts n[k=b.to_i]+': '+d[k].slice!(0,i.size)*' '}

2

PHP, 198 बाइट्स

while($i++<19)echo($t-$s=1&$argv[1]>>19-$i)?"
"[$i<2].($s?CIA:BANE).": ":" ",explode(0,"It0would0be0extremely0painful...0for0you!0If0I0pull0that0off0will0you0die?0You're0a0big0guy.")[$$s+++7*$t=$s];

1

पर्ल, 205 बाइट्स

@t=([qw/It would be extremely painful... for you!/],[qw/If I pull that off will you die? You're a big guy./]);$_=sprintf'%b',$0;print$n?'BANE':'CIA',": @{[splice$t[$n=1-$n],0,length$&]}"while s/(.)\1*//;

494542 नामक फ़ाइल में रखें और इस तरह से चलाएं:

perl -lX 494542

Perl v5.22 पर परीक्षण किया गया


1

क्लोजर, 401 बाइट्स

(require '[clojure.string :as s])(defn f[n](let[c(map #(-(int %) 48)(Integer/toString n 2))p[(s/split"It would be extremely painful... for you!"#" ")(s/split"If I pull that off will you die? You're a big guy."#" ")]a["BANE" "CIA"]](loop[i[0 0] g"" d c q 2](if(<(count d)1)g(let[b(first d)j(i b)](recur(assoc i b (inc j))(str g(if(= b q)" "(str(when(not= 2 q)"\n")(a b)": "))((p b) j))(rest d) b))))))

मंगलाचरण:

(f 522300)

Ungolfed

(require '[clojure.string :as s])
(defn dialogue[num]
    (let [dacode (map #(- (int %) 48) (Integer/toString num 2))
          phrases [(s/split"It would be extremely painful... for you!"#" ")(s/split"If I pull that off will you die? You're a big guy."#" ")]
      actors ["BANE" "CIA"]]
      (loop [idxs [0 0] finaldial "" code dacode prevbit 2]
        (if (< (count code) 1) finaldial
            (let [bit (first code) idx (idxs bit)]
              (recur (assoc idxs bit (inc idx)) (str finaldial (if (= bit prevbit) " " (str (when (not= 2 prevbit) "\n") (actors bit) ": ")) ((phrases bit) idx)) (rest code) bit))))))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.