এই পৃষ্ঠা নম্বর কন্ডসন!


35

দাবি অস্বীকার: আমি এখন কিছু সময়ের জন্য বিনোদনমূলক উদ্দেশ্যে এই সাইটে ছিলাম, এটি আমার প্রথম প্রশ্ন, সুতরাং দয়া করে কোনও ছোটখাটো ত্রুটি ক্ষমা করুন।

পটভূমি

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

পৃষ্ঠা বা সমস্যা সংখ্যার একটি তালিকা লেখার সময়, আমরা একটি ব্যাপ্তি বোঝাতে একটি ড্যাশ ব্যবহার করি। উদাহরণস্বরূপ, 19-21হয়ে যায় 19, 20, 21। এর মধ্যে যদি ব্যবধান থাকে তবে দুটি কমা-বিচ্ছিন্ন রেঞ্জ ব্যবহৃত হয়: 19-21, 27-31হয়ে যায় 19, 20, 21, 27, 28, 29, 30, 31
ঠিক এখনই, আপনি সম্ভবত চিন্তা করছেন: "এটি বেশ তুচ্ছ বলে মনে হচ্ছে"। আসলে, ইতিমধ্যে এটি এখানে এবং এখানে উত্তর দেওয়া হয়েছে

তবে, একটি ধরা আছে। আমাদের যদি সমান টানা অঙ্কের পরিসীমা থাকে তবে পুনরাবৃত্ত সংখ্যাগুলি বাদ দেওয়া যাবে। উদাহরণস্বরূপ: 15, 16, 17হয়ে 15-7, এবং 107, 108, 109হয়ে 107-9। কোনও বোনাসের জন্য, যদি শেষ একটানা সমান অঙ্কটি 1 এর বেশি হয় এবং উপরের সীমাটির শেষ সংখ্যাটি নীচের চেয়ে কম বা সমান হয় তবে নিম্নলিখিতগুলি বাদ দেওয়া যেতে পারে (দুঃখিত যদি এটি বিভ্রান্ত মনে হয়; সম্ভবত কিছু উদাহরণ এটি পরিষ্কার করে দেবে) । 109-113হয়ে109-3 , যেমন একটি নিম্ন শেষের ডিজিটটি 10s জায়গা বৃদ্ধি বোঝা।

চ্যালেঞ্জ

আপনার প্রোগ্রামটি ইনপুট (আপনার ভাষা, বা একটি ফাংশন জন্য মান যে যাই হোক না কেন) মাধ্যমে পূর্ণসংখ্যার একটি তালিকা নিতে হবে। এই তালিকাটি কমা-বিচ্ছিন্ন, স্থান-বিচ্ছিন্ন, বা প্রকৃত তালিকা / অ্যারে হিসাবে আপনি সিদ্ধান্ত নিতে পারেন।

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

যেহেতু আমাদের স্কুল ওয়াই-ফাই ভয়ঙ্কর , তাই ফাইলটি তার কাছে পাঠানোর জন্য আমাকে যতটা সম্ভব ছোট করতে হবে। সবচেয়ে সংক্ষিপ্ততম কোড (বাইটে) জিতেছে।

বোনাসেস

আমার শিক্ষিকা ম্লান, তাই কিছু জিনিস আছে যা তাকে সাহায্য করবে। একাধিক বোনাসগুলি গুণের মাধ্যমে স্ট্যাক করে, যেমন -10% বোনাস (x 90%) এবং একটি -25% (x 75%) বোনাস = 90% * 75% = x 67.5% (-32.5% বোনাস)।

  • কখনও কখনও সেগুলি তাদের ভুল ক্রমে ফেলে দেয় (তিনি কোনও গণিতের শিক্ষক নন)। যদি আপনার প্রোগ্রামটি পূর্ণসংখ্যাকে স্বল্প-থেকে-মাপে বাছাই না করে এমন পূর্ণসংখ্যা গ্রহণ করতে পারে তবে একটি -20% বোনাস নিন।
  • আমাদের বইটি অদ্ভুত, এবং প্রতিটি বিভাগ -10 এ সমস্যাগুলি গণনা শুরু করে। যদি আপনার প্রোগ্রামটি নেতিবাচক সংখ্যাগুলি গ্রহণ করতে পারে তবে একটি -25% নিন।
  • যদি এটি 10 ​​এর স্থানে বাড়ার একটি নিম্নতম অঙ্কের বোনাস গ্রহণ করে, যেমন 25-32হ্রাস করে 25-2, -50% বোনাস নিন।

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

In:  1, 2, 3, 4, 5
Out: 1-5

In:  3, 4, 5, 9, 10, 11, 12
Out: 3-5, 9-12

In:  149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160
Out: 149-60

In: 1 2 3 4
Out: 1-4


For bonuses:

In: 109, 110, 111, 112, 113
Out: 109-3

In:  19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29
Out: 19-9

In: -3, -2, -1, 0, 1, 2
Out: -3-2

In: -3, -2, -1
Out: -3--1

একটি উত্তর শনিবার, 19 ডিসেম্বর 2015 গৃহীত হবে।

GLHF!


তৃতীয় পরীক্ষার ক্ষেত্রে আউটপুট কেন হয় না 1-4 9-2?
অ্যালেক্স এ।

(ক) এবং (খ) ৫০% বোনাস নেয় না এমন কোনও প্রোগ্রামের আউটপুট কী হওয়া উচিত 149 150 151 152 153 154 155 156 157 178 159 160?
lirtosiast

3
আমি শপথ করতে পারলাম ঠিক এর মতোই আরও একটি প্রশ্ন আছে তবে আমি এটি খুঁজে পাচ্ছি না ...
mbomb007

5
আমি মনে করি এই সংশ্লিষ্ট প্রশ্ন টা সবার চিন্তা করা হয়। যদিও এটি তালিকাতে রেঞ্জকে পরিণত করে।
ডেনিস

1
আরেকটি জিনিস - পাঠ্যটিতে বলা হয়েছে যে প্রারম্ভের শেষ পৃষ্ঠার জন্য পেনাল্টিমেট ডিজিটটি প্রারম্ভিক পৃষ্ঠার চেয়ে কম হলে কেটে নেওয়া উচিত , তবে পরীক্ষার ক্ষেত্রে পাঠ্যটি বোঝানো 19-9হয়েছে 19,20,...,29এবং এর জন্য নয় 19-29। তাহলে কোনটি সঠিক?
জোকি

উত্তর:


5

ল্যাবভিউ, 97 * 0.8 * 0.75 * 0.5 = 29.1 ল্যাবভিউ পুরষ্কার

এটি উপরের দিকে গণনা করে কাজ করে যদি পর্যাপ্ত এলিমেটগুলি 1 টি পৃথক হয় এবং তার পরে সংখ্যা এবং সংখ্যা থেকে একটি স্ট্রিং তৈরি করে - গণনা 10 মডিউল এবং কিছু গুণ কারণ কারণ নেতিবাচকগুলি একটি দুশ্চরিত্রা।

জিআইএফ একটি ইনপুট 8,9,10,11এবং আউটপুট প্রদর্শন করে 8-1। ইনপুট জন্য -5,-4,-3,1,3,4,5 -5--3,1,3-5বাইরে আসে।


1
সত্যই, এটি লুপের জন্য প্রতিটি হিসাবে গণনা করা / যখন লুপ / ​​যদি / যাই হোক না কেন 1 আদিম যা
জাসদের

@ ev3 কমেন্ডারের যেকোনও মেলা যদি এটি একটি দুর্দান্ত অ্যানিমেটেড ডায়াগ্রামের সাথে আসে!
সাইয়েস

এটি কেন আদিমগুলিতে বাইট নয়। এছাড়াও প্রচুর ওয়্যারিং চলছে যাতে লুপগুলি কমপক্ষে 2 বা 3 হয় এবং শিফট রেজিস্ট্রার প্রতি + 3 আরম্ভ হয় initial
Eumel

1
স্ট্যান্ডার্ড গল্ফ নিয়ম অনুসারে আপনি এটি করতে পারেন, এটির বিরক্তিকর
Eumel

2
@ ev3commander আসলে, ভাষা যদি চ্যালেঞ্জের চেয়ে নতুন হয় তবে আপনাকে প্রতিযোগিতামূলক কারণে এটি ব্যবহার করার অনুমতি দেওয়া হচ্ছে না।
আদনান

14

সি ++ 11, 451 * 80% * 75% * 50% = 135.3 বাইট

@ Kirbyfan64sos ধন্যবাদ 9 বাইট সংরক্ষণ করা।

@ জোসেফম্যাল এবং @ কেটকে ধন্যবাদ 19 বাইট সংরক্ষণ করা।

@ পিঙ্কফ্লয়েডএক্স 33-তে 11 বাইট সংরক্ষণ করা হয়েছে।

#include<vector>
#include<cmath>
#include<algorithm>
#include<string>
#define T string
#define P append
using namespace std;T f(vector<int>v){sort(v.begin(),v.end());T r=to_T(v[0]);int b=1;int m=v[0];for(int i=1;i<=v.size();i++){if(i!=v.size()&&v[i]==v[i-1]+1){if(!b){m=v[i-1];}b=1;}else{if(b){T s=to_T(v[i-1]);r.P("-").P(s.substr(s.size()-(v[i-1]-m==1?1:log10(v[i-1]-m)),s.size()));}if(i!=v.size()){r.P(", ").P(to_T(v[i]));}b=0;}}return r;}

এটি সমস্ত বোনাসের জন্য যোগ্যতা অর্জন করে।

নমুনা প্যারামিটার পরীক্ষা এবং ফলাফল:

In:  [1, 2, 3, 4, 5]
Out: 1-5

In:  [3, 4, 5, 9, 10, 11, 12]
Out: 3-5, 9-12

In:  [149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160]
Out: 149-60

In:  [1, 2, 3, 4]
Out: 1-4

In:  [109, 110, 111, 112, 113]
Out: 109-3

In:  [19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
Out: 19-9

intপরিবর্তে ব্যবহার করবেন না কেন unsigned int? 9 বাইট সংরক্ষণ করুন
kirbyfan64sos

@ kirbyfan64sos ধন্যবাদ, এটি লক্ষ্য করেনি।
দ্য কফিকপ

+1 সর্বদা সি ++ দেখতে পছন্দ করে। আমি এটি পরীক্ষা করতে পারছি না, তবে আমি মনে করি না যে আপনাকে iostream দরকার
sudo rm -rf slash

আমার মনে হয় না আপনারও আইস্ট্রিম দরকার, তবে gccদিয়েছেন:a.cpp: In function ‘std::string f(std::vector<int>)’: a.cpp:8:83: error: ‘to_string’ was not declared in this scope
বিড়াল

@ কেট নিশ্চিত করুন যে এটি যথেষ্ট পরিমাণে আপডেট হয়েছে যে এটি সি ++ 11 মানকে সমর্থন করে। 4.3-ইশ এর সাথে ভাল হওয়া উচিত -std=c++11; > = 5.0 এ এটি ডিফল্টরূপে চালু রয়েছে (আসলে এটি -std=gnu11তবে যথেষ্ট কাছাকাছি)।
মেগো

8

রুবি, 120 118 * 0.8 * 0.75 * 0.5 = 35.4 বাইট

কমান্ড-লাইন আর্গুমেন্টকে ইনপুট হিসাবে গ্রহণ করে (কমাগুলি ঠিক আছে); স্ট্যান্ডার্ড আউটপুটে প্রতি লাইনে একটি রেঞ্জ প্রিন্ট করে।

c=(b=(a=$*.map(&:to_i).sort).map &:succ)-a
puts (a-b).map{|m|(m<n=c.shift-1)?"#{m}-#{m<0?n:n%10**"#{n-m-1}".size}":m}

সাদা স্থান / মন্তব্য সহ:

c=(
  b=(
    # a is the sorted input
    a=$*.map(&:to_i).sort
  # b is the set of successors of elements of a
  ).map &:succ
# c=b-a is the set of not-quite-least upper bounds of our ranges
)-a

# a-b is the set of greatest lower bounds of our ranges
puts (a-b).map {|m|
  # for each range [m,n], if there are multiple elements
  (m < n = c.shift-1) ?
    # yield the range, abbreviating n appropriately if positive
    "#{m}-#{m<0 ? n : n % 10 ** "#{n-m-1}".size}" :
    # in the one-element case, just yield that
    m
}

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

$ ruby homework.rb 1, 2, 3, 4, 5
1-5

$ ruby homework.rb 3, 4, 5, 9, 10, 11, 12
3-5
9-2

$ ruby homework.rb 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160
149-60

$ ruby homework.rb 1 2 3 4
1-4

$ ruby homework.rb 109, 110, 111, 112, 113
109-3

$ ruby homework.rb 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29
19-9

বৈশিষ্ট্যগুলি পরীক্ষার ক্ষেত্রে আচ্ছাদিত নয়

অর্ডারযুক্ত ইনপুট এবং একক-উপাদান রেঞ্জ:

$ ruby homework.rb 2 17 19 22 0 1 8 20 18
0-2
8
17-0
22

Gণাত্মক ব্যাপ্তি (এর সাথে আরও বড় সংখ্যার সংক্ষিপ্তকরণ সম্ভব নয়):

$ ruby homework.rb -17 -18 -19 -20 -21
-21--17

সংখ্যার স্বেচ্ছাসেবী সংখ্যার সংক্ষিপ্তসার (এখানে ইনপুটটির জন্য সাধারণ ব্যাশ সম্প্রসারণ):

$ ruby homework.rb {1234567..1235467} 2345999 2346000 2346001
1234567-467
2345999-1

আমি বিশ্বাস করি আপনি প্রতিস্থাপন করতে পারেন ((n=c.shift-1)>m)সঙ্গেm<n=c.shift-1
Cyoce

5

জাভাস্ক্রিপ্ট ES6, 229 * 80% * 75% * 50% = 68.7 বাইট

পরীক্ষার ইনপুট

আমি নিম্নলিখিত পরীক্ষার ডেটা ব্যবহার করছি:

var A1=[
  5,6,7,            // => 5-7     # (a) group pages 
  2,3,              // => 2-3,5-7 # (b) must be properly sorted
  -9,-8,-7,         // => -10--8  # (c) allow negative numbers
  29,30,31,32,      // => 29-2    # (d) lower last digit implies increasing the 10s place
  9,10,11,12,       // => 9-11    # NOT 9-2
  36,37,38,39,40,41,42,43,44,45,46,47, 
                    // => 36-47   # NOT 36-7
  99,100,101,102,   // => 99-102  # NOT 99-2
  109,110,111,112,  // => 109-2   # NOT 109-12
],
// more tests, not specified in the question
A2=[
  120,124,       // => 120,124 # (e) handle single pages
],
A3=[
  135,136,135    // => 135-6   # (f) handle duplicates
];

বেসিক: 229 বাইট

এই সংস্করণটি (ক) সমস্ত বোনাস (সি, ডি, ই) দিয়ে প্রয়োজনীয়তার সাথে সন্তুষ্ট হয় তবে একক পৃষ্ঠায় ঝুলছে। এটি সদৃশগুলি (চ )ও পরিচালনা করতে পারে। এটি নেতিবাচক পৃষ্ঠাগুলি -10,000 এ হ্যান্ডেল করে, যা সহজেই (বৃহত্তর) গতি হারাতে বাড়াতে পারে।

F=(a)=>{var R=[],i=NaN,l,u;a.map(x=>R[1e4+x]=x);R.concat('').map(x=>(i!=i&&(l=x,u=l-1),i=0,u=(x+="")-u-1?l=console.log(l+'-'+(u>0?(l.length-u.length||(z=>{for(;l[i]==u[i];i++);})(),u.length-i-2||u-l>9||i++,u.slice(i)):u))||x:x))}
F(A1.concat(A3)) --> -9--7 2-3 5-7 9-12 29-2 36-47 99-102 109-2 135-136

(উপরের আউটপুটটি ব্রেভিটির জন্য প্রকৃত নিউলাইনগুলির পরিবর্তে স্পেসগুলি দেখায়)

একক পৃষ্ঠা: 233 বাইট

এই সামান্য দীর্ঘতর সংস্করণ অতিরিক্তভাবে সন্তুষ্ট করে (ঙ) এবং একক পৃষ্ঠাগুলিকে সমান নিম্ন এবং উপরের সীমা সহ একটি সীমা হিসাবে প্রদর্শন করে

G=(a)=>{var R=[],i=NaN,l,u;a.map(x=>R[1e4+x]=x);R.concat('').map(x=>(i!=i&&(l=x,u=l-1),i=0,u=(x+="")-u-1?l=console.log(l+'-'+(u-l&u>0?(l.length-u.length||(z=>{for(;l[i]==u[i];i++);})(),u.length-i-2||u-l>9||i++,u.slice(i)):u))||x:x))}
G(A1.concat(A2,A3)) --> -9--7 2-3 5-7 9-12 29-2 36-47 99-102 109-2 120-120 124-124

@ কিয়েস - আপনি কি কোনও ES6- সক্ষম জাভাস্ক্রিপ্ট ইঞ্জিন ব্যবহার করছেন?
জোকি

ওহ, হুম, আমার একটি বাগ আছে, এটি আসলে 36-47 সঠিকভাবে পরিচালনা করে না। সঠিক পদ্ধতি কি? আমি কি এটি মুছে ফেলি এবং এটি ঠিক করি, বা কেবল এটি ঠিক করার চেষ্টা করব (আমার এখনই সময় থাকতে পারে না), বা কী?
জোকি

হুম, এটি আমার ক্রোমে কাজ করে। শেষ ঘন্টা?
জোকি

এবং জোকি, যখন পারো ঠিক করুন। এটি স্থির না হওয়া পর্যন্ত এটি বৈধ হিসাবে গণ্য হবে না এবং ততক্ষণ এগুলি গ্রহণ করা যাবে না (ধরে নিলাম আপনার সংখ্যাটি সর্বনিম্ন বাইট)।
সাইয়েস


3

জিএপি , 355 বাইট * 0.8 * 0.75 * 0.5 = 106.5

এটি সমস্ত বোনাস সন্তুষ্ট করে। সবকিছু সুন্দরভাবে কাজ করতে আমার প্রায় 100 অতিরিক্ত বাইট খরচ হয়েছে। এই ফাংশনটি কেবল অগ্রণী অঙ্কগুলি বাদ দেয় যদি শূন্যস্থানটি একবারে স্থানটি অতিক্রম করে না। উদাহরণস্বরূপ 9 10 11আউটপুট 9-1তবে 9 10 11 12 .. 20 21আউটপুট 9-21

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

g:=function(l)local n;if not l=[] then Sort(l);n:=1;while not l=[] do;if not IsSubset(l,[l[1]..l[1]+n]) then if not n=1 then if n-1>10-l[1] mod 10 and n-1<11 then Print(l[1],"-",(l[1]+n-1) mod 10);else Print(l[1],"-",l[1]+n-1);fi;else Print(l[1]);fi;Print(", ");SubtractSet(l,[l[1]..l[1]+n-1]);g(l);fi;n:=n+1;od;fi;Print("\b\b  ");end; 

ungolfed:

g:=function(l)
    local n;
    if not l=[] then
        Sort(l);
        n:=1;
        while not l=[] do;
            if not IsSubset(l,[l[1]..l[1]+n]) then
                if not n=1 then
                    if n-1>10-l[1] mod 10 and n-1<11 then
                        Print(l[1],"-",(l[1]+n-1) mod 10);
                    else
                        Print(l[1],"-",l[1]+n-1);
                    fi;
                else
                    Print(l[1]);
                fi;
                Print(", ");
                SubtractSet(l,[l[1]..l[1]+n-1]);
                g(l);
            fi;
            n:=n+1;
        od; 
    fi;
    Print("\b\b  ");
end;

নোট করুন যে জিএপি সিন্ট্যাক্সে, [a..b]সমান [a,a+1,...,b]। আমি বিশ্বাস করি যে এই পরীক্ষার কেসগুলি প্রমাণ করে যে এই প্রোগ্রামটি সমস্ত প্রয়োজনীয়তা পূরণ করে। যদি কিছু ভুল হয় তবে আমাকে জানান।

gap> h([1..5]);
1-5  
gap> h([3,4,5,9,10,11,12]);
3-5, 9-2  
gap> h([149..160]);
149-160  
gap> h([109..113]);
109-3  
gap> h([19..29]);
19-9  

gap> h([-1,-2,-3,-7,-20000,9,10,110101,110102]);
-20000, -7, -3--1, 9-10, 110101-110102  

gap> h([10101,10102,10103,10,11,12,13,14,15,16,234,999,1000,1001,1002]);
10-16, 234, 999-2, 10101-10103  

3

লুয়া, 322 * 80% * 75% * 50% = 96.6 বাইট

অবশেষে 3 টি চ্যালেঞ্জ নিয়ে সম্পন্ন হয়েছে, 100 বাইটের নিচে স্কোর: ডি

Golfed

function f(l)table.sort(l)l[#l+1]=-13 a=l[1]t,s=a,"" for _,v in next,l do if v-t>1 or t-v>1 then s,p,r=s..a.."-",""..t,""..a r:gsub("%d",function(c)p=r:find(c)~=r:len()and p:gsub("^(-?)"..c,"%1")or p r=r:gsub("^"..c,"")end)p=t-a<10 and t%10<a%10 and p:gsub("^(%d)","")or p s,a,t=s..p..",",v,v else t=v end end return s end

Ungolfed

function f(l)
    table.sort(l)
    l[#l+1]=-13 
    a=l[1] 
    t,s=a,"" 
    for _,v in next,l 
    do
        if v-t>1 or t-v>1
        then
            s,p,r=s..a.."-",""..t,""..a
            r:gsub("%d",function(c)
                p=r:find(c)~=#r and p:gsub("^(-?)"..c,"%1")or p
                r=r:gsub("^"..c,"")
            end)
            p=t-a<10 and t%10<a%10 and p:gsub("^(%d)","")or p
            s=s..p..","
            a,t=v,v
        else
            t=v
        end
    end
return s
end

আপনি লুয়া অনলাইন পরীক্ষা করতে পারেন, এটি পরীক্ষার কেসগুলির বিরুদ্ধে কীভাবে সম্পাদন করে তা দেখতে, এই কোডটি অনুসরণ করে ফাংশনটি অনুলিপি করুন:

a={1,2,3,4,5}
b={3,4,5,9,10,11,12,13,14,15,16,17,18,19,20,21}
c={149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160}
d={-7,8,5,-6,-5,6,7}
print(f(a))
print(f(b))
print(f(c))
print(f(d))

{9..21} প্রবেশ করানোতে ব্যর্থ বলে মনে হচ্ছে। ফলাফল 9-1।
Liam

@ আইএনহাজহ্যাটস স্থির করেছেন, এটি দেখানোর জন্য ধন্যবাদ :)
কাটেনকিও

2

জাভা, 252 * 80% * 75% * 50% = 75.6 বাইট

আমি কোনও পদ্ধতিতে যাওয়ার সিদ্ধান্ত নিয়েছি (জাভাতে এটি অনেক ছোট), এখানে গল্ফযুক্ত সংস্করণ রয়েছে:

Golfed

int p,c,s;String m(int[]a){p=s=c=0;c--;String o="";Arrays.sort(a);for(int n:a){if(s==0)o+=s=n;else if(n-p==1)c++;else{o+=t()+", "+(s=n);c=-1;}p=n;}return o+t();}String t(){return c>=0?"-"+(""+p).substring((""+Math.abs(p)).length()-(""+c).length()):"";}

এবং এখানে পাঠযোগ্য সংস্করণ:

int p, c, s;

String m(int[] a) {
    p = s = c = 0;
    c--;
    String o = "";
    Arrays.sort(a);
    for (int n : a) {
        if (s == 0)
            o += s = n;
        else if (n - p == 1)
            c++;
        else {
            o += t() + ", " + (s = n);
            c = -1;
        }
        p = n;
    }
    return o + t();
}

String t() {
    return c >= 0 ? "-" + ("" + p).substring(("" + Math.abs(p)).length() - ("" + c).length()) : "";
}

পরীক্ষিত হলে এগুলি ফলাফল হয়:

import java.util.Arrays;
public class A {
    public static void main(String...s) {
        A a = new A();
        System.out.println(a.m(new int[] {1, 2, 3, 4, 5}));
        System.out.println(a.m(new int[] {3, 4, 5, 9, 10, 11, 12}));
        System.out.println(a.m(new int[] {149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160}));
        System.out.println(a.m(new int[] {109, 110, 111, 112, 113}));
        System.out.println(a.m(new int[] {19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29}));
        System.out.println(a.m(new int[] {1,10,11,16}));
        System.out.println(a.m(new int[] {-3,-2,-1,0,1,2,3}));
        System.out.println(a.m(new int[] {-3,-2,-1}));
    }

    int p,c,s;String m(int[]a){p=s=c=0;c--;String o="";Arrays.sort(a);for(int n:a){if(s==0)o+=s=n;else if(n-p==1)c++;else{o+=t()+", "+(s=n);c=-1;}p=n;}return o+t();}String t(){return c>=0?"-"+(""+p).substring((""+Math.abs(p)).length()-(""+c).length()):"";}
}

আউটপুট:

1-5
3-5, 9-2
149-60
109-3
19-9
1, 10-1, 16
-3-3
-3--1

হালনাগাদ:

এটি এখন বোনাস যুক্ত করে নেতিবাচক সংখ্যাগুলিও পরিচালনা করতে পারে।


আমি কোন জাভা বিশেষজ্ঞ নই, তবে আপনি কি এটি পরিবর্তন করে সংক্ষিপ্ত করতে p=s=c=0;c--;পারবেন p=s=0;c=-1;?
সাইয়েস

আমি কোন জাভা বিশেষজ্ঞ নই, তবে আপনি কি c> = 0 রিটার্ন পরিবর্তন করে সংক্ষিপ্ত করতে পারবেন? "ব্লে": "" সি <0 ফিরে আসবে? "": "ব্লে"?
স্টিফান শিনকেল

আপনি এমনকি c=~(p=s=0)শৈলী পয়েন্ট জন্য করতে পারে ।
সাইয়েস

2

জাপট, 127 বাইট * 80% * 75% * 50% = 38.1

বাহ, এটি সমস্ত বোনাস অন্তর্ভুক্ত করার জন্য একটি চ্যালেঞ্জ ছিল। এটি সম্ভবত আরও খাটো করা যেতে পারে।

D=[]N=Nn-;DpNr@Y-1¥Xg1 ?[Xg Y]:DpX ©[YY]}D;Ds1 £[BC]=Xms;B¥C?B:B+'-+CsBg ¦'-©Cl ¥Bl ©C¬r@B¯Z ¥C¯Z ªC-B§ApCl -Z ©ÂBsX <ÂCsX ?Z:X

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

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

ব্যাখ্যাটি খুব রুক্ষ; আপনার যে কোনও প্রশ্ন জিজ্ঞাসা করতে দ্বিধা করবেন না।

/*    Setting up basic variables    */
                      // Implicit: A = 10, N = list of input numbers.
D=[],N=Nn-;           // D = empty array, N = N sorted by subtraction.

/*    Finding ranges of page numbers    */    
Dp                    // Push into D the result of
NrXYZ{                // reducing each previous value X and item Y in N by this function,
}[];                  // starting with an empty array:
 Y-1==Xg1 ?           //  If Y is 1 more than the second item of X,
 [Xg Y]:              //   return [X[0], Y].
 DpX &&[YY]           //  Otherwise, push X into D and return [Y, Y].

/*    Formatting result    */
Ds1 mXYZ{             // Take the first item off of D and map each item X by this function:
 [BC]=Xms;            //  Set B and C to the first to items in X as strings.
 B==C?B               //  If B is the same as C, return B.
 :B+'-+Cs             //  Otherwise, return B + a hyphen + C.slice(
  Bg !='-&&           //   If B[0] is not a hyphen (B is not negative), AND
  Cl ==Bl &&          //   B and C are the same length,

  /*    Cutting off unnecessary digits    */
  Cq r                //    then C split into digits, reduced with
  rXYZ{               //    each previous value X, item Y, and index Z mapped by this function:
   Bs0,Z ==Cs0,Z ||   //     If B.slice(0,Z) equals C.slice(0,Z), OR
   C-B<=ApCl -Z       //     C - B <= 10 to the power of (C.length - Z);
   &&~~BsX <~~CsX     //     AND B.slice(X) is a smaller number than C.slice(X),
   ?Z:X               //     then Z; otherwise, X.
                      //   Otherwise, 0.

1

আর, 167 বাইট x 80% x 75% x 50% -> 50.1

s=sort(scan(se=","));r=c();while(length(s)){w=s==1:length(s)+s[1]-1;x=s[w];s=s[!w];z=tail(x,1);r=c(r,paste0(x[1],"-",ifelse(z-x[1]<=10,z%%10,z%%100)))};cat(r,sep=", ")

নতুন লাইনের সাহায্যে ইন্ডেন্ট করা:

s=sort(scan(se=","))
r=c()
while(length(s)){
w=s==1:length(s)+s[1]-1
x=s[w]
s=s[!w]
z=tail(x,1)
r=c(r, paste0(x[1],"-", ifelse(z-x[1]<=10, 
                               z%%10,
                               z%%100)))}
cat(r,sep=", ")

পরীক্ষার কেস:

> s=sort(scan(se=","));r=c();while(length(s)){w=s==1:length(s)+s[1]-1;x=s[w];s=s[!w];r=c(r,paste0(x[1],"-",ifelse(tail(x,1)-x[1]<=10,tail(x,1)%%10,tail(x,1)%%100)))};cat(r,sep=", ")
1: 3, 4, 5, 9, 10, 11, 12
8: 
Read 7 items
3-5, 9-2
> s=sort(scan(se=","));r=c();while(length(s)){w=s==1:length(s)+s[1]-1;x=s[w];s=s[!w];r=c(r,paste0(x[1],"-",ifelse(tail(x,1)-x[1]<=10,tail(x,1)%%10,tail(x,1)%%100)))};cat(r,sep=", ")
1: 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160
13: 
Read 12 items
149-60

এটি -50% বোনাসের জন্য কাজ করে:

> s=sort(scan(se=","));r=c();while(length(s)){w=s==1:length(s)+s[1]-1;x=s[w];s=s[!w];r=c(r,paste0(x[1],"-",ifelse(tail(x,1)-x[1]<=10,tail(x,1)%%10,tail(x,1)%%100)))};cat(r,sep=", ")
1: 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29
12: 
Read 11 items
19-9
> s=sort(scan(se=","));r=c();while(length(s)){w=s==1:length(s)+s[1]-1;x=s[w];s=s[!w];r=c(r,paste0(x[1],"-",ifelse(tail(x,1)-x[1]<=10,tail(x,1)%%10,tail(x,1)%%100)))};cat(r,sep=", ")
1: 109, 110, 111, 112, 113
6: 
Read 5 items
109-3

এটি অরসোর্টড ইনপুট গ্রহণ করে:

> s=sort(scan(se=","));r=c();while(length(s)){w=s==1:length(s)+s[1]-1;x=s[w];s=s[!w];r=c(r,paste0(x[1],"-",ifelse(tail(x,1)-x[1]<=10,tail(x,1)%%10,tail(x,1)%%100)))};cat(r,sep=", ")
1: 114, 109, 110, 111, 112, 113
7: 
Read 6 items
109-4

এটি নেতিবাচক সংখ্যা গ্রহণ করে:

> s=sort(scan(se=","));r=c();while(length(s)){w=s==1:length(s)+s[1]-1;x=s[w];s=s[!w];r=c(r,paste0(x[1],"-",ifelse(tail(x,1)-x[1]<=10,tail(x,1)%%10,tail(x,1)%%100)))};cat(r,sep=", ")
1: -1,0,1,2
4: 
Read 3 items
-1-2

0

sh, 135 * .8 * .75 * .5 = 40.5

tr , \\n|sort -n|awk -vORS="" '$1-o>1||!c{print p c$1;s=$1}{o=$1;c=", ";p=""}o>s{p="-"substr(o,length(o)-length(o-s-1)+1)}END{print p}'

শেল স্ক্রিপ্ট

tr , \\n|           # comma separated -> newline separated
sort -n|            # sort
awk -vORS=""        # suppress automatic newlines in output

awk স্ক্রিপ্ট

# on step > 1 or first run, end the current sequence and start a new one.
# on first run, p and c are empty strings.
$1-o>1||!c
    {print p c$1;s=$1}

# old = current, c = ", " except for first run, clear end string.
    {o=$1;c=", ";p=""}

# if the sequence is not a single number, its end is denoted by "-o".
# print only the last n digits of o.
o>s
    {p="-"substr(o,length(o)-length(o-s-1)+1)}

# end the current sequence without starting a new one.
END
    {print p}'

sবর্তমান ক্রমের শুরু কোথায় এবং oপূর্ববর্তী ইনপুট মান।


আমি এটি পছন্দ করি তবে এটি বর্তমানে -২২% বোনাস পায় না। সাবস্ট্রাস্ট () বিয়োগ চিহ্ন এবং উল্লেখযোগ্য অঙ্কগুলি কেটে দিচ্ছে।
এজাস্ট

@ezrast এটি আসলে -50% বোনাস পরিপ্রেক্ষিতে সঠিক আচরণ: -31, -30, -29, -28থেকে 10 এর জায়গায় বৃদ্ধি -3করতে -2এবং সেইজন্য ঘনীভূত হবে -31-8। আমি এটি যে অস্পষ্টতা তৈরি করি তাও দেখি তবে এটিই যা চাওয়া হয়েছিল।
রেইনার পি।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.