উপহার দেওয়ার জন্য সান্তার কয়টি এলভের দরকার?


23

সান্টাকে প্রতিটি বাড়িতে উপহার প্রদানের জন্য তাকে সাহায্য করার জন্য কতগুলি এলভের দরকার হবে তা নির্ধারণের জন্য কিছু সহায়তা প্রয়োজন।

কয়লা উপহারের তুলনায় যথেষ্ট ভারী, সুতরাং সান্তার বাড়ির প্রতিটি দুষ্টু ব্যক্তির জন্য তিনটি এলভের প্রয়োজন হবে। সান্তা উপহার দেওয়ার জন্য মাত্র দুটি এলভের প্রয়োজন।

সান্তার মানচিত্রে একটি বাড়ি একটি দ্বারা উপস্থাপিত হয় *এবং প্রতিটি ঘর একটি দ্বারা বিভক্ত হয় +

বাড়ির দুপাশে একটি সংখ্যা থাকবে - বামদিকে একটি ঘরের দুষ্টু লোকের প্রতিনিধিত্ব করে এবং ডানদিকে একটি বাড়ির সুন্দর লোকের প্রতিনিধিত্ব করে। যদি একদিকে কোনও সংখ্যা না থাকে তবে এটি 0 হিসাবে ব্যাখ্যা করা হয়।

যারা ক্রিসমাস স্পিরিটে নেই তাদের সাথে সান্টা পরিদর্শন করেন না (তারা কয়লারও প্রাপ্য নয়), তাই কখনও কখনও কোনও বাড়ির দু'পাশে নম্বর নাও থাকতে পারে। এই ক্ষেত্রে, সান্তা কোনও ধনুকের সাহায্যের প্রয়োজন নেই

উদাহরণস্বরূপ, সান্তার মানচিত্রগুলির মধ্যে একটির মতো দেখতে এটি হতে পারে

1*3+2*2+1*+*2

প্রথম বাড়িতে 1 টি দুষ্টু এবং 3 টি সুন্দর, সান্তার নয়টি এলভের দরকার হবে । দ্বিতীয়টিতে 2 টি দুষ্টু এবং 2 টি সুন্দর, সান্তার দশটি ধনুকের প্রয়োজন হবে । তৃতীয় ঘরে 1 টি দুষ্টু এবং 0 টি সুন্দর, সান্তার জন্য তিনটি ধনুকের প্রয়োজন হবে , এবং শেষ বাড়িতে 0 টি দুষ্টু এবং 2 টি সুন্দর, সান্তার জন্য চারটি ধনুকের প্রয়োজন হবে ।

যদিও এটি সান্তার মানচিত্রগুলির একটির ওভার সিম্প্লিফাইড সংস্করণ। সাধারণত সান্তার মানচিত্রে একাধিক লাইন থাকে এবং তার তালিকায় আরও ভাল ফিট করার জন্য বর্গাকার আকারে থাকে। একটি সাধারণ মানচিত্র এ জাতীয় কিছু দেখতে পারে ( \nপ্রতিটি লাইনের শেষে)

1*2+*+*4+1*
2*4+3*+1*6+*
*+*+4*2+1*1
*4+*3+1*+2*3
3*10+2*+*5+*

এই মানচিত্রে, সান্তা ((1 + 0 + 0 + 1 + 2 + 3 + 1 + 0 + 0 + 0 + 4 + 1 + 0 + 0 + 1 + 2 + 3 + 2 + 0 + 0) * 3) + ((2 + 0 + 4 + 0 + 4 + 0 + 6 + 0 + 0 + 0 + 2 + 1 + 4 + 3 + 0 + 3 + 10 + 0 + 5 + 0) * 2)= 151 ধনুকের প্রয়োজন

চ্যালেঞ্জ

প্রতিটি বাড়িতে পণ্য সরবরাহের জন্য তার কতগুলি এলভের দরকার তা নির্ধারণ করতে সান্টাকে সহায়তা করুন!

ঘর

  • একটি ঘর একটি দ্বারা প্রতিনিধিত্ব করা হয় *
  • ঘরগুলি বিভক্ত হয় +
  • ঘরের বামে সংখ্যা দুষ্টু মানুষের সংখ্যার প্রতীক (কোনও সংখ্যা মানে 0 নয়)
  • ডান দিকের সংখ্যাটি সুন্দর লোকের সংখ্যাকে প্রতীকী করে (কোনও সংখ্যা মানে 0 নয়)
  • ইনপুটটিতে নতুন লাইনগুলি ( \n) থাকতে পারে , যা বিভাজন হিসাবেও পরিচালনা করা উচিত

পরী

  • দুষ্টু লোকদের জন্য সান্তাকে তিনটি এলভের সাহায্য প্রয়োজন (কয়লা উপহারের চেয়ে অনেক বেশি ভারী)
  • সান্তা সুন্দর লোকের জন্য দুটি এলভের সাহায্য দরকার
  • দু'দিকে যদি কোনও সংখ্যা না থাকে তবে সান্তা সেই বাড়িটি দেখতে পাবেন না এবং এর জন্য কোনও এলভের দরকার নেই

কি করো

তাকে বাসায় উপহার দেওয়ার জন্য সাহায্য করার জন্য প্রয়োজনীয় এলভ সংখ্যাটি প্রিন্ট করুন। যেহেতু সমস্ত সান্তাকে জানতে হবে যে কয়টি এলভাস আনতে হবে, আপনাকে কেবল বাড়ির তালিকার জন্য প্রয়োজনীয় সংখ্যক ধনুকের মুদ্রণ করতে হবে

পরীক্ষার মামলা

1*1 => 5
1*2 => 7
2*1 => 8
1* => 3
*1 => 2
* => 0

1*1+1*1 => 10
1*2+2*1 => 15
1*+*1 => 5
1*1+*+1*1 => 10
*+*+*+* => 0

বিধি

  • ইনপুটটি হয় কোনও ফাংশনে আর্গুমেন্ট হিসাবে নেওয়া যেতে পারে, বা এসটিডিআইএন বা সমতুল্য থেকে নেওয়া যেতে পারে
  • আউটপুট হয় কোনও ফাংশনের রিটার্ন মান হতে পারে, বা STDOUT বা সমতুল্যে মুদ্রিত হতে পারে
  • ইনপুট শুধুমাত্র সংখ্যা, উপস্থিত থাকবে +, *এবং নতুন লাইন\n
  • ক্রিসমাস উপলক্ষে আউটপুটটিতে কেবলমাত্র এলভের মোট সংখ্যা হওয়া উচিত যা সান্টাকে সাহায্যের প্রয়োজন
  • স্ট্যান্ডার্ড লুফোলস প্রযোজ্য

স্কোরিং

কোড চালানোর জন্য সান্টা স্লিঘে উপহারের ফলে তাকে কম স্থান দেওয়া হয়েছে, তাই তার পক্ষে সবচেয়ে কম সংখ্যক কোড পাওয়া দরকার (এটি যদি বোঝা যায় না তবে চিন্তা করবেন না you আপনি যদি সান্তার যুক্তি নিয়ে প্রশ্ন করেন তবে আপনি দুষ্টু তালিকায় শেষ করবেন) )। সান্টার সঠিক যুক্তির কারণে , বাইটে সংক্ষিপ্ততম জমাটি জয়!

লিডারবোর্ড

এটি একটি স্ট্যাক স্নিপেট যা ভাষার দ্বারা লিডারবোর্ড এবং বিজয়ীদের একটি সংক্ষিপ্তসার উভয়ই উত্পন্ন করে।

আপনার উত্তরটি প্রদর্শিত হবে তা নিশ্চিত করতে, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন

## Language Name, N bytes

যেখানে এন আপনার জমা দেওয়ার আকার, বাইটগুলিতে

যদি আপনি আপনার শিরোনামে একাধিক সংখ্যা অন্তর্ভুক্ত করতে চান (উদাহরণস্বরূপ, পুরানো স্কোরগুলি ধরে ফেলা, বা বাইট গণনাতে পতাকা সহ) কেবলমাত্র নিশ্চিত হয়ে নিন যে আসল স্কোরটি আপনার শিরোনামের শেষ সংখ্যা is

## Language Name, <s>K</s> X + 2 = N bytes


1
আমি অবাক হই, যেহেতু কোনও বাড়িতে সান্তা থামবে, max(naughty) + max(nice)পুরো পথের জন্য তার কি কেবল সর্বাধিক এলভের দরকার হবে না ? আমি ভেবেছিলাম তাঁর সাথে উড়ন্ত এক ধরণের এলভ রয়েছে, তবে সম্ভবত আপনার কাছে এর অভ্যন্তরীণ তথ্য রয়েছে এবং এই বছর আমার আরও তাকাতে হবে। :)
সন্নিবেশকারী নাম এখানে

8
@ অন্তর্ভুক্তকারীর নাম এখানে আমি বর্তমানে সান্তা ইনক। এ কাজ করি এবং আমি আপনাকে বলতে পারি যে আমাদের অবকাঠামো ভারি অ্যাসিঙ্ক ফ্যাশনে কাজ করে। তিনি চান না যে তার সংস্থান অনাহারে থাকুক, তাই আমরা প্রয়োজনমতো শ্রমিক বরাদ্দ করি। আমাদের যদি অতিরিক্ত ELF দরকার হয় তবে আমরা কয়েক সেকেন্ডের মধ্যে একটি সংকলন করতে পারি hello-world.c। জোজডমো যেমন বলেছিলেন (আমি নিশ্চিত আমি জোজডমোকে জানি, তিনি আমাদের সিসডএম হতে পারেন) এবং তারপরে যখন স্লাইট পুলে পুনরায় স্থাপনের সময় হবে বা কোনও শিশু যখন তাদের দেখেছে তখন তা জানানোর জন্য একটি কলব্যাক ব্যবহার করুন।
স্টেফানো সানফিলিপো

2
@ স্টেফানোসানফিলিপো আহ, আমি দেখছি। এই শ্রেণিবদ্ধ তথ্যের সমস্ত বিস্তারিত অন্তর্দৃষ্টি জন্য ধন্যবাদ। এবং মেরি ক্রিসমাস। :)
insertusernamehere

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

উত্তর:


2

পাইথ, 21 বাইট

ssMs*VCcR\*scR\+.z_S3

মাল্টি লাইন উদাহরণ

একক লাইন পরীক্ষার স্যুট

ssMs*VCcR\*scR\+.z_S3
                .z        Take a input, as a list of lines.
            cR\+          Chop each line on '+'.
           s              Flatten into list of strings.
       cR\*               Chop each line on '*'.
      C                   Transpose, into a list of naughty and nice.
    *V            _S3     Vectorized multiplication with [3, 2, 1]. This replicates
                          the naughty list 3 times and the nice list 2 times.
   s                      Flatten.
 sM                       Convert each string to an int.
s                         Sum.

সিরিয়াসলি ... 30 টি বাইটের নিচে পাইথ কিছু করতে পারে না এমন কি?
জোজোডমো

2
@ জোজোদমো যদি আমি এটির সাহায্য করতে পারি তবে তা নয় ...
isaacg

13

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

s=>eval(s.replace(/\D|$/g,m=>`.0*${m=="*"?3:2}+`)+0)

ব্যাখ্যা

ইনপুটটিকে বৈধ জাভাস্ক্রিপ্ট বিবৃতিতে রূপান্তর করে। এর *সাথে সমস্ত .0*3+এবং অন্যান্য (অ-অঙ্ক) চিহ্নগুলি প্রতিস্থাপন করে .0*2+। উদাহরণস্বরূপ 8*9+*10হয়ে যায় 8.0*3+9.0*2+.0*3+10। শেষ অবধি .0*2এটি শেষটি দুর্দান্ত গণনার জন্য শেষ হয়। এটি কাজ করে কারণ n.0= nএবং .0= 0

s=>
  eval(                      // execute the formed equation
    s.replace(/\D|$/g,       // replace each symbol (and also add to the end) with:
      m=>`.0*${m=="*"?3:2}+` // case * = ".0*3+", else replace with ".0*2+"
    )
    +0                       // add "0" to the end for the trailing "+"
  )

পরীক্ষা


9
.0ধারণার জন্য +1 ।
নিমি

3

ফ্লেক্স + সি, 112 90 বাইট

 m=3,t;
%%
[0-9]+ t+=m*atoi(yytext);
\* m=2;
[+\n] m=3;
%%
main(){yylex();printf("%d",t);}

প্রথম চরিত্রটি একটি স্থান। এর সাথে সংকলন:

flex -o santa.c santa.l
cc santa.c -o santa -ll

STDIN থেকে পড়া, STDOUT এ লিখেছে। ইনপুটটি ইওএফ দ্বারা শেষ করা হয় (কনসোলে Ctrl + D)।


2

গণিত, 70 বাইট

a=Tr[FromDigits/@StringExtract[#,"
"|"+"->;;,"*"->#2]]&;3#~a~1+2#~a~2&

StringExtractস্বতন্ত্র সংখ্যাগুলি নিষ্কাশন করতে ব্যবহার করে।


2

সিজেম, 23 বাইট

q'+NerN/{'*/3*5<:~~}%1b

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

q      e# Read all input.
'+Ner  e# Replaces all "+" with linefeeds.
N/     e# Split the string around linefeeds (i.e. into houses).
{      e# Map this block over the list of house...
  '*/  e#   Split the string around the "*".
  3*   e#   Repeat the times.
  5<   e#   Truncate to 5 elements, keeping 3 copies of the naughty number and 2 copies of
       e#   the nice number.
  :~   e#   Evaluate each number (which may be an empty string which pushes nothing).
  ~    e#   Dump the list of numbers on the stack.
}%
1b     e# Sum all the numbers.

2

সিরিয়াসলি, 38 30 বাইট

'*Ws`'0+'*@s'≈£M4rR*`MΣ+'+,WXX

হেক্স ডাম্প:

272a57736027302b272a407327f79c4d3472522a604de42b272b2c575858

এই নতুন সংস্করণটি অনলাইন ইন্টারপ্রেটারকে ভেঙে দেয় তবে স্থানীয়ভাবে এটি কাজ করে। এখানে একটি উদাহরণ রান করুন:

$ python2 seriously.py -f elves.srs
1*2+*+*4+1*
2*4+3*+1*6+*
*+*+4*2+1*1
*4+*3+1*+2*3
3*10+2*+*5+*

151

ব্যাখ্যা:

'*                              Push a "*" to make the stack truthy
  W                        W    Repeat while the top of stack is truthy
                                  (A whole bunch of instructions just turn the "*" into a
                                  zero on the first pass, so I'll list them here in the
                                  order they actually accomplish useful things:)
                          ,     Read in a line of input
   s                    '+      Split it on occurrence of "+"
    `               `M          Map this function over the list of strings.
     '0+                        Prepend a "0" to ensure a naughty number exists
        '*@s                    Split the string on "*"
            '≈£M                Map over the string with int() to convert it to int
                4rR             Push [3,2,1,0]
                   *            Dot product
                      Σ+        Sum all the houses, and add it to the results
                                  from the previous line of input
                            XX  Pop the "" and '+ from the stack, leaving only the
                                result to be implicitly output.

পুরনো সংস্করণ:

'+ε'*`+'++,`╬Xs`≈`╗`'0+'*@s╜M[3,2]*`MΣ

হেক্স ডাম্প:

272bee272a602b272b2b2c60ce587360f760bb6027302b272a4073bd4d5b332c325d2a604de4

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

ব্যাখ্যা:

  ε'*                                   Initialize with two strings so the first + works
     `+'++,`╬                           Read in strings and compile them until "" is read
             X                          Throw away the ""
'+            s                         Split on +
               `≈`╗                     Chuck int function into reg0 to use within function
                   `               `M   Map this function over the list of houses
                    '0+                 Prepend a "0" to ensure a naughty number exists
                       '*@s             Split on *
                           ╜M           Convert the resulting list to ints with stored func
                             [3,2]*     Dot product with [3,2]
                                     Σ  Sum all houses

আমি যদি প্রতিটি লাইন আলাদাভাবে রূপান্তর করি এবং শেষে সমস্তগুলি সংমিশ্রিত করি তবে এটি সংক্ষিপ্ত হতে পারে। আমি পরে এটি দেখতে হবে।


2

পাওয়ারশেল, 52 বাইট

এর প্রকরণ ব্যবহার user81655 এর .0কৌতুক

$OFS='+';"$("$args"-replace'\*','.0*3+2*0'|iex)"|iex

উদার সংস্করণ

$OFS='+' # Set Output Field Separator to '+'
         # So if $arr = 1,2,3 then "$arr" will output 1+2+3

" # Cast result of subexpression to string using $OFS

    $( # Subexpression

        "$args" # Input is an array of arguments. Casting it to string using "$args"
                # is shorter then acessing the first element using $args[0]
                # $OFS wouldn't affect this, because input has only 1 element.

        -replace '\*' , '.0*3+2*0' # Replace every * with .0*3+2*0
                                   # Example: 1*+*1 becomes 1.0*3+2*0+.0*3+2*01

    ) | Invoke-Expression # Execute a result of subexpression as PS code.
                          # This will execute resulting multiline string line-by line
                          # and return an array of values, e.g.: 18,38,21,29,45

" Cast the aray above to string using '+' as Output Field Separator, e.g: 18+38+21+29+45

| Invoke-Expression # Execute the string above as PS code to get final result.
                    # E.g.: 18+38+21+29+45 = 151

ব্যবহারের উদাহরণ

$Map = @'
1*2+*+*4+1*
2*4+3*+1*6+*
*+*+4*2+1*1
*4+*3+1*+2*3
3*10+2*+*5+*
'@

PS > .\SantaMap.ps1 $Map
151

1

সুইফট 2, 283 211 বাইট

func f(s:String)->Int{var r=0;for p in(s.characters.split{$0=="\n"}.map(String.init)){for v in p.utf8.split(43){let k="0\(v)".utf8.split(42);r+=(Int("\(k[0])")!)*3;r+=(k.count<2 ?0:Int("\(k[1])")!)*2}};return r}

এটি এখানে সুইফটস্টাবে পরীক্ষা করা যেতে পারে

Ungolfed

func f(s: String) -> Int{
    var r = 0

    //for every value in the input, split every "\n" and mapped
    //to a String array
    for p in (s.characters.split{$0=="\n"}.map(String.init)){

        //for every value in the split input, split again at every + (Decimal 43)
        for v in p.utf8.split(43){
            //change the value to "0" + v, which doesn't change the
            //input, but in the event that there is no input on the
            //left side, a "0" will be used
            //
            //then split on every * (Decimal 42)
            let k = "0\(v)".utf8.split(42)

           //add to the total count of elves the number on the left * 3
            r+=(Int("\(k[0])")!) * 3

            //add to the total count of elves the number on the left * 2
            r+=(k.count < 2 ? 0 : Int("\(k[1])")!) * 2
        }

        //return the number of elves
        return r
    }
}

1

পাইথন 3, 141 114 112 বাইট

মাল্টি-লাইন ইনপুটগুলি এর মতো গ্রহণ করে c("1*2+*+*4+1*\n2*4+3*+1*6+*\n*+*+4*2+1*1\n*4+*3+1*+2*3\n3*10+2*+*5+*")

lambda s:sum(a and(3-z)*int(a)or 0for j in s.split("\n")for i in j.split("+")for z,a in enumerate(i.split("*")))

Ungolfed:

def c(s):
    t = 0
    for j in s.split("\n"):
        for i in j.split("+"):
            for z,a in enumerate(i.split("*"))
                if a == "":
                    a = 0
                else:
                    a = int(a)
                t += (3-z) * a  # alternate a*3 and a*2
    return t

1

আমি সুপার দেরিতে এসেছি, তবে আমি যাইহোক এটি একটি শট দিতে চেয়েছিলাম।

রুবি , 84 55 বাইট

আমি বহু বছর পরে আবার এই প্রশ্নটি পেয়েছি এবং আমি আগেই উত্তর দিয়েছি বুঝতে পেরে একটি নতুন উত্তর নিয়ে ভাবছিলাম। উপস! যাইহোক, এখানে একটি মারাত্মক উন্নত উত্তর।

->m{m.scan(/(\d*)\*(\d*)/).sum{|a,b|3*a.to_i+2*b.to_i}}

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

2 বছর আগে আমি যখন প্রথম উত্তর দিয়েছিলাম তখন থেকে পুরানো 84-বাইট উত্তর:

->m{m.split(/[+\n]/).map{|h|b,g=h.split(?*).map &:to_i
3*(b||0)+2*(g||0)}.inject :+}

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


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.