পরিবর্তনশীল-দামের আয়!


16

ভূমিকা এবং creditণ

ধরুন আপনি বারটেন্ডার আপনার বারে আপনার বেশিরভাগ সুখী মানুষ থাকে তবে অনেকেই কখনও একই জাতীয় পানীয় পান করেন এবং আপনার স্বাদের জন্য খুব কম পান এবং আপনি এটি পরিবর্তন করতে চান। সুতরাং আপনি এমন একটি সিস্টেম প্রবর্তন করেন যেখানে পানীয়র দাম ইতিমধ্যে কতগুলি বিক্রি হয়েছে তার উপর নির্ভর করে পরিবর্তনশীল তবে নির্দিষ্ট প্রান্তিকের চেয়ে কম বা কম ব্যয় কখনও নয়। কিছু অদ্ভুত কারণে আপনি সর্বদা সমস্ত বিক্রয়কৃত পানীয় এবং দামের সঠিক ট্র্যাক রাখতে ভুলে যান এবং সুতরাং আপনাকে একটি সংক্ষিপ্ত (= স্মরণীয়!) কোডের টুকরোটি মনে করতে হবে যা আপনার জন্য গণিতের পরিমাণ মতো পানীয়গুলি খাওয়াবে।

এই চ্যালেঞ্জটি ইতিমধ্যে আমার ইউনিতে ফাংশনাল প্রোগ্রামিং কোর্সে মধ্য-মেয়াদী পরীক্ষায় উপস্থিত হয়েছে এবং আমি এখানে পোস্ট করার জন্য আমার অধ্যাপকের ঠিক আছে। পরীক্ষার ভাষায় আমাদের একটি উদাহরণ সমাধান সরবরাহ করা হয়েছে।

ইনপুট

আপনার ইনপুটটি স্ট্রিংগুলির একটি তালিকা থাকবে যাতে স্পেস থাকে না - এগুলি বিক্রি হওয়া পানীয়গুলির নাম। আপনার পছন্দসই, সাধারণত গৃহীত ইনপুট পদ্ধতিটি ব্যবহার করে ইনপুট নিন

আউটপুট

আপনার আউটপুটটি একক সংখ্যা হবে - এটি এই সন্ধ্যায় আপনি আয় করেছেন। আপনার পছন্দসই, সাধারণত গৃহীত আউটপুট পদ্ধতি ব্যবহার করে আউটপুট দিন

কি করো?

এটি প্রতিটি পানীয়ের জন্য পৃথকভাবে প্রযোজ্য:

  • প্রারম্ভিক মূল্য 10।
  • প্রতিবার পানীয়টি কেনা হয়, পরবর্তী ক্রেতার জন্য এটির দাম 1 টি বাড়িয়ে দেওয়া হয়।
  • সর্বাধিক দাম 50. যদি পানীয়টি 50 টি কেনা হয় তবে নতুন দাম আবার 10 হবে।

উপরোক্ত নিয়মাবলী অনুসারে পানীয়গুলির ইনপুট তালিকা দ্বারা উত্পন্ন সামগ্রিক আয় অনুসন্ধান করা আপনার কাজ।


আপনি যদি ভাবছেন: "৫০ টাকা সত্যই পান করার জন্য ব্যয়বহুল!", এটি ৫০-ডেস্কি টাকা, তাই ৫০ * ০.০ * ইউনিট, তবে আমি ভাষা ছাড়াই ১০-৫০ পর্যন্ত যেতে বেছে নিয়েছি ভাসমান পয়েন্ট গণিত।

কে জিতলো?

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী! স্ট্যান্ডার্ড বিধি প্রয়োগ।

সম্ভাব্য কর্নার কেস

যদি ইনপুট তালিকাটি খালি থাকে তবে আউটপুটটি 0 হবে
input ইনপুট তালিকা আইকননাটি পান করে বাছাই করা হবে বলে ধরে নেওয়া যায় না।

উদাহরণ

[] -> 0
["A"] -> 10
["A","B"] -> 20
["A","A","B"] -> 31
["A","B","A"] -> 31
["A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A"] -> 1240
["A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","B","B","C","C","D"] -> 1304 
["D","A","A","C","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","B","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","C"] -> 1304
["A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","B","B","C","C","D","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A"] -> 1304

1
পোস্ট করার আগে আপনার অধ্যাপককে জিজ্ঞাসা করার প্রসেস, বেশ ওজি পদক্ষেপ।
ম্যাজিক অক্টোপাস আরন

উত্তর:


4

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

a=>a.map(x=>t+=d[x]=d[x]<50?d[x]+1:10,t=0,d={})&&t

d[x]আপনি 10 থেকে কোথায় ?
তিতাস

@ টিটাস যদি d[x]সেট না করা থাকে তবে এটি undefined; এটি d[x]<50প্রত্যাবর্তনকে মিথ্যা করে তোলে , তাই d[x]=d[x]<50?d[x]+1:10সেট d[x]করে 10
ETH প্রোডাকশনগুলি

আমি জেএস যে ভুলে গেছি undefined। :)
তিতাস

4

পাইথন 2, 79 74 54 48 বাইট

সমস্যাটি পুনর্বিবেচনা করে প্রচুর বাইট গণনা বৃদ্ধি। আমি the intালাই থেকে মুক্তি পেতে চাই তবে আমার মস্তিষ্ক কাজ করছে নাl.pop()তালিকাটি দু'বার ছাঁটা ও কিছু ভাল পুরাতন ল্যাম্বদা পুনরাবৃত্তি এড়ানোর জন্য ব্যবহার করা :)

f=lambda l:l and l.count(l.pop())%41+10+f(l)or 0

6 বাইট সংরক্ষণ করার জন্য জোনাথন অ্যালানকে ধন্যবাদ :)

আমার পুরানো 54-বাইট সংস্করণটি আমি বেশ গর্বিত ছিল :)

f=lambda l:int(l>[])and~-l.count(l[0])%41+10+f(l[1:])

...l>[]and 1*~...এই 3 বাইট সংরক্ষণ করতে আপনি জানেন যে আপনি করতে পারেন।
জোনাথন অ্যালান

আসলে এর সাথে আরও 1 কম:f=lambda l:l and~-l.count(l[0])%41+10+f(l[1:])or 0
জোনাথন অ্যালান

ওহ এবং আরও দু'এর সাথে:f=lambda l:l and l.count(l.pop())%41+10+f(l)or 0
জোনাথন অ্যালান

@ জোনাথন অ্যালান টিপসের জন্য ধন্যবাদ! আমি শীঘ্রই আমার পোস্ট আপডেট করব :)
কেড

2

পাইথ, 15 বাইট

ssm<*lQ}T50/Qd{

একটি প্রোগ্রাম যা তালিকার ইনপুট নেয় এবং ফলাফল মুদ্রণ করে।

পরীক্ষার স্যুট (একাধিক ইনপুট অনুমতি দেওয়ার জন্য প্রথম লাইন)

কিভাবে এটা কাজ করে

ssm<*lQ}T50/Qd{   Program. Input: Q
ssm<*lQ}T50/Qd{Q  Implicit input fill
              {Q  Deduplicate Q
  m               Map over that with variable d:
       }T50        Yield [10, 11, 12, ..., 48, 49, 50]
    *lQ            Repeat len(Q) times
   <       /Qd     First Q.count(d) elements of that
 s                Flatten
s                 Sum
                  Implicitly print

2

জেলি , 14 11 10 বাইট

50⁵rṁЀĠSS

TryItOnline!

কিভাবে?

50⁵rṁЀĠSS - Main link: list of drink names                e.g. ['d', 'a', 'b', 'a', 'c']
       Ġ   - group indices by values                       e.g. [[2, 4], [3], [5], [1]]
  ⁵        - 10
50         - 50
   r       - inclusive range, i.e. [10, 11, 12, ..., 48, 49, 50]
    ṁЀ    - mould left (the range) like €ach of right(Ð)  e.g. [[10, 11], [10], [10], [10]]
                 note: moulding wraps, so 42 items becomes [10, 11, 12, ..., 48, 49, 50, 10]
        S  - sum (vectorises)                              e.g. [40, 11]
         S - sum                                           e.g. 51

2

05 এ বি 1 ই , 16 15 বাইট

বাইট সংরক্ষণের জন্য এমিগিনার ধন্যবাদ !

ÎÙv¹y¢L<41%T+OO

সিপি -1222 এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!


ÎÙv¹y¢L<41%T+OO1 বাইট সংরক্ষিত জন্য কাজ করা উচিত
Emigna

@ এমিগনা এটি দুর্দান্ত! ধন্যবাদ :)
আদনান

1

পার্ল 41 বাইট

এর জন্য +1 অন্তর্ভুক্ত -p

$\+=$H{$_}+=$H{$_}?$H{$_}>49?-40:1:10;}{

নিউলাইনগুলিতে ইনপুট নেয়।

বৃদ্ধি একটি হ্যাশ মান দ্বারা: 10 এটা যদি undef, -40যদি এইটা > 49অর্থাত 50, বা 1অন্যথায়। এটি তখন যুক্ত হয় $\, আউটপুট বিভাজক যা -pমুদ্রণ করে।

উদাহরণ:

$ echo -e 'A\nB\nA' | perl -pe '$\+=$H{$_}+=$H{$_}?$H{$_}>49?-40:1:10;}{'
31

1

05 এ বি 1 ই , 13 বাইট

{.¡€gL<41%T+O

ব্যাখ্যা

["A","B","A"] উদাহরণ হিসাবে ব্যবহৃত।

{               # sort input
                # STACK: ["A","A","B"]
 .¡             # split on different
                # STACK: [["A","A"],["B"]]
   €g           # length of each sublist
                # STACK: [2,1]
     L          # range [1 ... x] (vectorized)
                # STACK: [1,2,1]
      <         # decrease by 1
                # STACK: [0,1,0]
       41%      # mod 41
                # STACK: [0,1,0]
          T+    # add 10
                # STACK: [10,11,10]
            O   # sum
                # OUTPUT: 31

1

সি ++ 14, 105 বাইট

জেনেরিক নামবিহীন ল্যাম্বদা হিসাবে রেফারেন্স প্যারামিটারের মাধ্যমে ফেরত। ইনপুট প্রয়োজন একটি ধারক হতে stringযে হয়েছে push_back, মত vector<string>

%41+10কেডের পাইথন উত্তর থেকে কৌশলটি ব্যবহার করা ।

[](auto X,int&r){r=0;decltype(X)P;for(auto x:X){int d=0;for(auto p:P)d+=x==p;r+=d%41+10;P.push_back(x);}}

Pইতিমধ্যে পরিবেশন করা হয়েছে যা মেমরি হিসাবে একটি খালি ধারক তৈরি করে । দাম গণনা করে গণনা করা xহয় P

অবরুদ্ধ এবং ব্যবহার:

#include<iostream>
#include<vector>
#include<string>

using namespace std;

auto f=
[](auto X, int& r){
  r = 0;
  decltype(X) P;
  for (auto x:X){
    int d = 0;
    for (auto p:P)
      d += x==p;
    r += d % 41 + 10;
    P.push_back(x);
  }
}
;

int main(){
 int r;
 vector<string> V;
 f(V,r);cout << r << endl;
 V={"A"};
 f(V,r);cout << r << endl;
 V={"A","B"};
 f(V,r);cout << r << endl;
 V={"A","B","C"};
 f(V,r);cout << r << endl;
 V={"A","A"};
 f(V,r);cout << r << endl;
 V={"A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A"};
 f(V,r);cout << r << endl;
 V={"A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","B","B","C","C","D"};
 f(V,r);cout << r << endl;
 V={"A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","C"};
 f(V,r);cout << r << endl;
}

0

গণিত, 64 বাইট

মনে হচ্ছে এটি খাটো হওয়া উচিত।

Tr[(19+#)#/2&/@(Length/@Gather@#//.z_/;z>41:>Sequence[41,z-41])]&

Length/@Gather@#প্রতিটি পানীয়ের পুনরাবৃত্তি গণনা করে। //.z_/;z>41:>Sequence[41,z-41]এর মধ্যে যে কোনও পূর্ণসংখ্যা z৪১ এর বেশি বিভক্ত হয় 41এবং z-41মূল্য হ্রাসকে প্রতিফলিত করে। তারপরে প্রতিটি গণনা সূত্রে প্লাগ করা হয় (19+#)#/2, এটি #যতক্ষণ না #বেশিরভাগ 41 বছর পর্যন্ত পানির মোট Trখরচ।


0

k, 22 বাইট

যুক্তিটি কোনও তালিকা হতে পারে - স্ট্রিং, সংখ্যাগুলি ইত্যাদি

{+/,/10+(#:'=x)#\:!41}

qঅনুবাদ পড়ার জন্য সহজ হয়:

{sum raze 10+(count each group x)#\:til 41}

0

সি #, 193 বাইট + 33

অতিরিক্ত 33 বাইট using System.Collections.Generic;

void m(string[]a){int t=0;Dictionary<string,int>v=new Dictionary<string,int>();foreach(string s in a){if(v.ContainsKey(s)){v[s]=v[s]==50?10:v[s]+1;}else{v.Add(s,10);}t+=v[s];}Console.WriteLine(t);}

আমি নিশ্চিত যে এটিকে বিস্মৃত হতে পারে, ডিকোরিয়াসগুলি অবশ্যই এটি করার সর্বোত্তম উপায় নয় এবং আমি সম্ভবত আমার যদি একটি ত্রৈমাসিকের কাজ করতে পারি। একপাশে আমি মনে করি এটি ঠিক আছে!

উদাহরণ:

a = {"A", "A", "A", "B", "B", "C"};
//output = 64

a = {"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A",, "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A", "A" ,"A" "A" ,"A", "A" ,"A", "B", "B", "C"};
//output 727

Ungolfed

void m(string[] a)
{
    int t=0;
    Dictionary<string,int> v = new Dictionary<string,int>();
    foreach(string s in a)
    {
        if(v.ContainsKey(s))
        {
            v[s]=v[s]==50?10:v[s]+1;
        }
        else
        {
            v.Add(s,10);
        }
        t+=v[s];
    }
    Console.Write(t);
}

0

Clojure, 79 বাইট

#(apply +(mapcat(fn[l](for[i(range l)](+(mod i 41)10)))(vals(frequencies %)))))

পানীয়ের ফ্রিকোয়েন্সি গণনা করে, তারপরে বেসের মূল্য হিসাবে গণনা করে 10 + (i % 41)mapcatতাদের সাথে সম্মিলন করে এবং apply +যোগফল গণনা করে।


0

পিএইচপি, 47 বাইট

while($k=$argv[++$i])$s+=10+$p[$k]++%41;echo$s;

কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নেয়; সাথে চালানো -r

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