বামন এবং কয়েন


32

পরিস্থিতি:

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

বামনদের এইভাবে কয়েনগুলি ভাগ করতে সহায়তা করুন বা তাদের বলুন যে এটি অসম্ভব।

উইনারের কোডটি সর্বদা সঠিকভাবে উত্তর দিতে হবে (এই চ্যালেঞ্জটি হ'ল ডিস্ট্রিমেন্টিক) এবং সাধারণ নিয়মগুলি অনুসরণ করুন ।

ইনপুট

আপনাকে কয়েনের সংখ্যার জন্য একটি পূর্ণসংখ্যা N (3 ≤ N ≤ 1000) এবং স্থান-বিভাজন দ্বারা বামনের সংখ্যার জন্য একটি পূর্ণসংখ্যার এম (3 ≤ এম ≤ এন) দেওয়া হয়।

আউটপুট

বামনরা যেভাবে চান সেইভাবে মুদ্রাগুলি ভাগ করা যদি অসম্ভব হয়ে থাকে তবে মুদ্রণ -১ (বিয়োগ 1)। অন্যথায়, প্রতিটি বামন প্রাপ্ত বয়স্ক থেকে কনিষ্ঠতম কয়েনের মুদ্রণ মুদ্রণ করুন। স্পেস সহ সংখ্যাগুলি পৃথক করুন।

নমুনা :

ইনপুট

3 3

আউটপুট

2 1 0

ইনপুট

9 3

আউটপুট

4 3 2

ইনপুট

7 3

আউটপুট

-1

ইনপুট

6 4

আউটপুট

3 2 1 0

4
আপনি একটি "জলদস্যু" মিস করেছেন।
রোলিং


3
ভাল সন্ধান করুন, @ রেয়াস্টাফেরিয়ান। সম্ভবত যখন শিক্ষক কেবল 3, s এর পরিবর্তে এম বামনদের জন্য একটি সাধারণ দ্রাবক পেয়েছেন তিনি বুঝতে পারবেন যে ব্যবহারকারী উত্তরটি ভিড় করেছেন :) - বিশেষত যদি সেই সমাধানকারী জেতে থাকে
প্রোগ্রামারডান

হোমওয়ার্ক বা না, এটি একটি স্মুরফিং ভাল প্রশ্ন!
লেভেল রিভার সেন্ট

উত্তর:


18

জে - 32 29 28 25

না অন্যান্য জে সমাধানের চেয়ে কম, কিন্তু এবং একটি ভিন্ন ধারণা ব্যবহার করে

(]{.[:i:-:@-.@]-%)/ ::_1:

সর্বাধিক র‌্যাঙ্কের জিনোম যে মুদ্রার সংখ্যার উত্তর পাচ্ছে তা হ'ল N/M+(M-1)/2(যদি এটি একটি পূর্ণসংখ্যা হয়), আমরা এর নেতিবাচক গঠন করি -:@-.@]-%। তারপরে আর্গুমেন্টের জন্য এর i:মতো অ্যারে তৈরি করে এবং আমরা এটি থেকে এম উপাদানগুলি নিয়ে যাই।2 1 0 _1 _2_2


1
এর উজ্জ্বল ব্যবহারের জন্য +1 i:%পরিবর্তে লিখে [%]এবং -.@]পরিবর্তে ব্যবহার করে আপনি আরও তিনটি চর সংরক্ষণ করতে পারেন (1-])
অ্যালগরিদমশর্ক

@ এলগোরিদমশর্ক ধন্যবাদ জে উত্সাহী!
ফিটফাট

1
@ ইচ্ছুক হিসাবে +1 করা যায় না বলে মনে হয় আমরা যে ছদ্মবেশ পেয়েছি তার সাথে রয়েছে। ;)
TheConstructor

11

জে - 30 চর

গল্ফ খুব মজা। অনেক কিছুই ঝরঝরে কাজ করেছে।

((+/@s~i.[){ ::_1:s=.+/&i.&-)/

ব্যাখ্যা:

  • /- স্থান দ্বারা পৃথক পূর্ণসংখ্যার যুক্তি হিসাবে গ্রহণ করুন এবং তাদের মধ্যে ফাংশনটি স্লিপ করুন। এর অর্থ, বন্ধনীতে ফাংশনটির জন্য বাম তর্কটিকে এন বিবেচনা করুন (...)এবং এমকে সঠিক যুক্তি।

  • i.&-- নেগেট ( -) এবং তারপরে পূর্ণসংখ্যা গ্রহণ করুন ( i.)। সাধারণত, যখন আপনি কিছু করতে মত i.5আপনি পেতে 0 1 2 3 4। যখনই i.একটি নেতিবাচক নম্বর পায়, তবে এটি আউটপুট তালিকার বিপরীত হয়। সুতরাং যেমন i._5দিতে হবে 4 3 2 1 0

  • s=.+/&- প্রতিটি যুক্তিতে ( &) উপরের ক্রিয়াটি সম্পাদন করুন এবং তারপরে +/এই অ্যারেগুলির বাইরে একটি টেবিল ( ) তৈরি করুন। আমাদের এখন একটি টেবিল রয়েছে যেখানে প্রতিটি সারি এম বামারগুলিতে একটি সম্ভাব্য মুদ্রা বিতরণ, যদিও এন কয়েন না থাকলেও না। অবশেষে, এই টেবিল তৈরির ক্রিয়াটি এত কার্যকর যে আমরা এটিকে কল করতে sএবং এটির পরে আবার ব্যবহার করব।

  • +/@s~- এখন, আমরা sআবার ব্যবহার করি , তবে আমরা ~আর্গুমেন্টের ক্রমটি ( ) পরিবর্তন করি, যাতে আমরা টেবিলটি স্থানান্তর করি। এই টেবিলের (নির্মাণের পরে প্রতিটি সারির যোগফল গ্রহণের একটি golfy উপায় +/@,) পথ জে বহুমাত্রিক তালিকা অঙ্কের সঙ্গে কাজ করতে হচ্ছে।

  • i.[ - অঙ্কের এই তালিকায় আমরা ক্রিয়াপদে বাম যুক্তি অনুসন্ধান করি, অর্থাৎ এন। এন যদি কোনও আইটেম হয় তবে আমরা সেই সূচকটি পাই: অন্যথায় আমরা তালিকার দৈর্ঘ্য পাই যা উল্লেখযোগ্যভাবে একটি অবৈধ সূচক।

  • { ::_1:- এখন আমরা সারণি থেকে একটি সারি বের করতে সূচকটি ব্যবহার করার চেষ্টা করি s{সূচকটি অবৈধ থাকলে কোনও ডোমেন ত্রুটি নিক্ষেপ করবে, সুতরাং সেই ক্ষেত্রে আমরা ত্রুটিটি ( ::) এবং ফিরতি -1 ( _1:) ধরি । এটি সবকিছু পরিচালনা করে। যেহেতু আমরা i.&-পূর্বে ব্যবহার করি , মুদ্রা বিতরণটি যেমন প্রয়োজন ছিল তেমন ক্রমে সাজানো হবে।

ব্যবহার:

   ((+/@s~i.[){ ::_1:s=.+/&i.&-)/ 9 3
4 3 2
   ((+/@s~i.[){ ::_1:s=.+/&i.&-)/ 7 3
_1
   ((+/@s~i.[){ ::_1:s=.+/&i.&-)/ 6 4
3 2 1 0
   ((+/@s~i.[){ ::_1:s=.+/&i.&-)/ 204 17
20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4

ইনপুট 9 3ফিরে আসা উচিত 4 3 2, না -1। আপনার উদাহরণ ব্যবহারে কি কোনও প্রতিস্থাপন রয়েছে বলে মনে হচ্ছে?
প্রোগ্রামারডান

@ প্রোগ্রামারড্যান ধন্যবাদ, এটি ধরেনি। আমি উদাহরণগুলি ভুল লিখেছি। প্রত্যাশিত হিসাবে 9 3দেয় 4 3 2এবং 7 3দেয় _1
অ্যালগরিদমশর্ক

সমাধানটি দেখেছি এবং যথাযথভাবে +1 করা হয়েছে: ডি। আমি জে জেগে দেখা উচিত, নিফটি দেখায়।
প্রোগ্রামারডান

7

আর - 71 70 67 66 65 অক্ষর

s=scan();m=s[2];x=s[1]-sum(1:m);cat(if(x%%m|-m>x)-1 else x/m+m:1)

Ungolfed:

s = scan()    # Reads N and M by stdin.
m = s[2]
x = s[1] - m*(m-1)/2
cat(if (x %% m | x < -m) -1 else x/m + m:1)

সমাধান:

এম যদি বামনের সংখ্যা হয় তবে প্রদত্ত সোনার ক্রমটি দুটি একক সিরিজে পচে যেতে পারে। প্রথম শূন্যে শেষ হওয়া একটি সিরিজ: এম -1, ..., 2, 1, 0 এবং সি, সি, ..., সি এর একটি ধ্রুবক সিরিজ। প্রথম সিরিজের যোগফল সর্বদা এম * (এম -1) / 2 হয়। সুতরাং যদি বাকী (x = N - M * (M-1) / 2) ভাগ না করে ভাগ করা যায় (মডুলো সমান 0), প্রতিটি বামন এক্স / এম প্লাস হ্রাসমান সিরিজের অংশ পায়।

ব্যবহার:

> s=scan()
1: 10 4
3: 
Read 2 items
> m=s[2]
> x = s[1] - m*(m-1)/2
> cat(if (x %% m || x<0) -1 else x/m + (m-1):0)
4 3 2 1

-1, প্রশ্নের একটি সম্পূর্ণ প্রোগ্রাম লিখতে হবে এবং একটি ফাংশন নয়। দেখুন meta.codegolf.stackexchange.com/a/1146/8766
user80551

@ user80551 আপনি ঠিক বলেছেন। এখন আমি স্নিপেট সংশোধন করেছি: এখন এটি স্থান দ্বারা পৃথক ইনপুট লাগে; আউটপুট এছাড়াও '[1]' প্রদর্শন করে না।
ল্যামব্রস্কো এসিডো

1
আপনি অন্য চরিত্র প্রতিস্থাপন সংরক্ষণ করতে পারবেন m*(m+1)/2সঙ্গেsum(1:m)
ব্রায়ান Diggs

@ ব্রায়ান থেক্স, আমি আমার কোডটি পরিবর্তন করব!
ল্যামব্রস্কো এসিডো

4

পিএইচপি (187)

গল্ফ করার এটি আমার প্রথম চেষ্টা, এবং আমি জানি এটি আরও ভাল হতে পারে তবে এখনও :)

Golfed:

<?php
$b=fgets(STDIN);list($c,$d)=explode(' ',$b);if((($d&1)AND($c%$d==0))OR($c%$d==$d/2)){for($e=floor($c/$d)+floor($d/2);$e>floor($c/$d)-round($d/2);$e--){echo"$e ";}}else{die('-1');}?>

Ungolfed:

<?php
$a = fgets(STDIN);
list($coins, $dwarves) = explode(' ', $a);
if ((($dwarves & 1) AND ($coins % $dwarves == 0)) OR ($coins % $dwarves == $dwarves / 2)) {
    for (
        $i = floor($coins / $dwarves) + floor($dwarves / 2);
        $i > floor($coins / $dwarves) - round($dwarves / 2);
        $i--
    ) {
        echo "$i ";
    }
}
else { 
  die('-1');
}
?>

একটি শেল চালানো

মৌলিক ধারণা:

কয়েনগুলি এই নিয়মের দ্বারা পৃথক করা যায়, যদি এর মধ্যে একটি সত্য হয়:

  1. বামনগুলি বিজোড় সংখ্যা, এবং কয়েনগুলি বামনদের দ্বারা ভাগ হয় না div
  2. বামনগুলি সমান সংখ্যা এবং কয়েন / বামনগুলিকে ভাগ করার পরে বাকী মুদ্রাগুলি বামন সংখ্যার অর্ধেকের সমান

যদি তা হয় তবে আমরা বামন প্রতি গড় কয়েনের ভিত্তিতে (এসিপিডি) নিই। তবে আমাদের সর্বোচ্চ এবং আউটপুট থেকে শুরু করতে হবে যতক্ষণ না আমরা নীচে পৌঁছতে পারি reach সুতরাং আমরা এসিপিডি থেকে শুরু করে কাউন্টার দিয়ে একটি লুপ তৈরি করি + উঁচু প্রান্তের দিকে বাকী বামনগুলির গণনা, এবং আমরা এসিপিডি না পৌঁছা পর্যন্ত এগিয়ে যাই - বাকী বামনগুলির গণনা নিম্ন প্রান্তের দিকে।

এটি মূলত একই তবে বামনগুলি বিজোড় হয় (অর্থাত্ 5 বামন - মাঝেরটি 3 হয়, এবং উভয় প্রান্তে 2 থাকে) তবে তারা যদি এমনকি হয় না - তবে কেন আমরা তল এবং বৃত্তের উপর নির্ভর করি।

এখনও অবধি সমস্যাগুলি: খুব কম কয়েন সংখ্যার সাথে কাজ করে, যার অর্থ কয়েকটি বামন ভেঙে তাদের মূল্যবান উপার্জন ছিনিয়ে নেবে। এবং এটি দুঃখজনক। বা কমপক্ষে যদি আপনি বামন পছন্দ করেন।

সমাধান :

  1. সর্বনিম্ন পরিমাণের কয়েন গণনা করার একটি উপায় চিন্তা করুন যাতে ধূলিকণায় বামন দিয়ে গণনা শেষ হয় না।
  2. নকশা-লোভী dwarves না।

স্মার্ট সমাধান :

মুদ্রা ধাতু হয়। বামনগুলি সেগুলি সমস্ত দ্রবীভূত করুন এবং তারপরে এগুলি ছোট / বৃহত্তর পরিমাণে কয়েনে ফেলে দিন, তাই তারা যে কোনও ক্ষেত্রে বিভাজ্য।

স্মার্টতম সমাধান :

তাদের পর্বতটি চুরি করুন, নিজেকে স্মাগে নাম পরিবর্তন করুন এবং এগুলি নিজের জন্য রাখুন। সর্বোপরি, আপনি কেন গ্রম্পী বামনগুলির সাথে বিরক্ত হবেন?


4

পাইথন 3 (100)

@ জিওবিট হিসাবে একই ধারণাটি ব্যবহার করা কিন্তু ইনপুট এবং আউটপুট প্রয়োজনীয়তার সাথে সামঞ্জস্য করা।

n,m=map(int,input().split())
κ,ρ=divmod(n-m*(m-1)//2,m)
x=[-1]if ρ else range(κ,κ+m)[::-1]
print(*x)

সতর্ক থাকুন জন্য ধন্যবাদ. ইনপুট রেকসগুলিতে স্থান-পৃথকীকরণটি লক্ষ্য করা যায় নি।
জিওবিটস

এগুলি 100 টি অক্ষর হতে পারে তবে গ্রীক পরিবর্তনশীল নামের কারণে এটির জন্য 105 বাইট প্রয়োজন requires
জোনাথন ফ্রেচ

4

পাইথন 3 - 109 107 103 102 90 93

এভপোকের মতো একই ধারণাটি ব্যবহার করে তবে বেশ কয়েকটি উন্নতি হয়েছে।

n,m=map(int,input().split())
k=n/m+m/2
a=int(k)
print(*(range(a,a-m,-1),[-1])[k-a-.5or~a>-m])

উন্নতিগুলি হ'ল:

  1. অন্যের পরে এবং '' এর আগে স্থানটি সরিয়ে ফেলা হচ্ছে। 1 চরিত্র
  2. '' এর ভিতরে বিভক্ত () বিভক্ত করা, কারণ স্পেসে বিভাজন একটি ডিফল্ট। 3 টি অক্ষর
  3. এক্সকে 1 দ্বারা কমিয়ে ডিভোমডের অভ্যন্তরে -1 থেকে +1 পরিবর্তন করে এবং তারপরে রেঞ্জের বিপরীত ক্রম বিকল্পটি ব্যবহার করতে সীমা ফাংশন পরিবর্তন করে। 3 টি অক্ষর।
  4. সম্পাদনা: ... যদি ... অন্য ... ... তে পরিবর্তিত হয় ... এবং ... বা ... 2 টি অক্ষর।
  5. সম্পাদনা: ডিভোমড স্পষ্টভাবে তৈরি, সরানো হয়েছে। 4 টি অক্ষর।
  6. সম্পাদনা: x সরানো হয়েছে, এম // এন স্পষ্টভাবে ব্যবহৃত হয়েছে। 1 চরিত্র
  7. সম্পাদনা: '' .জাইন (মানচিত্র (টিআর, ...)) এর পরিবর্তে তারকাচিহ্নযুক্ত অভিব্যক্তি, পুনরুক্তি মুদ্রণ () এড়ানোর জন্য এক্স যুক্ত করেছে। 12 টি অক্ষর।
  8. সম্পাদনা: আমি বুঝতে পেরেছিলাম যে আমি বামনকে নেতিবাচক সংখ্যক মুদ্রা দেওয়ার অনুমতি দিচ্ছি। আমি এড়ানোর জন্য কোডটি পরিবর্তন করেছি।

ভালই হয়েছে, এটি শিক্ষণীয় ছিল :) অপ্রয়োজনীয় জায়গাগুলি ছিনিয়ে নেওয়ার জন্য আমি আমার উত্তরটি পরিবর্তন করেছি, তবে আপনার সংরক্ষণের কৌশলটি [::-1]সমাধানের চেয়ে ভাল। +1
এভপোক

আমি কিছু মিস করছি, তবে আমি 94
জনাথন ফ্রেচ

3

পাইথন 3 - 114

n,m=map(int,input().split(' '))
r=range(m);n-=sum(r)
if n%m<1:
 for x in r:print(m-x+n//m-1,end=' ')
else:print -1

N-(M*(M-1)/2)সমানভাবে বিভাজ্য কিনা তা পরীক্ষা করে কাজ করে M। অজগর থেকে নতুন, সুতরাং কোনও পরামর্শ প্রশংসা করেছে।

Ideone.com উদাহরণ

Input:
735 30
Output:
39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10

পাইথন 3 সংস্করণটি কি পাইথন 2 এর printবিবৃতি শৈলীর সমর্থন করে ? বা কিভাবে শেষ লাইন ( else:print -1) এর ফলে কোনও ত্রুটি হয় না?
জোনাথন ফ্রেচ

3

সি # - 322

using System;using System.Linq;namespace D{class P{static void Main(string[]args){int n=Convert.ToInt16(args[0]);int m=Convert.ToInt16(args[1]);bool b=false;int q=n/2+1;g:b=!b;int[]z=new int[m];for(int i=0;i<m;i++){z[i]=q-i;}if(z.Sum()==n)foreach(int p in z)Console.Write(p+" ");else{q--;if(b)goto g;Console.Write(-1);}}}}

ভয়াবহ স্কোর তবে আমি আলাদা পদ্ধতি নিয়েছি এবং ব্যবহার করতে পেলাম goto:)

আমি পরে এটি সংক্ষিপ্ত করব।


1
আপনি অবশ্যই Convert.ToInt16কলগুলিতে সমস্ত সংক্ষিপ্ত করে ঠিক করতে পারেন int.Parse। আপনি যে কোনও পূর্বনির্ধারিত ভেরিয়েবল var(উদাহরণস্বরূপ int[]) এর সাথে ঘোষণা করতে পারেন । আপনার কমান্ড-লাইন প্যারামগুলি কল করার দরকার নেই args। এবং আপনি ঘন ঘন ব্যবহৃত ধরণের মতো উপন্যাস করতে পারেন using C = Console। আমি আরও মনে করি যে দীর্ঘ সমাধানের জন্য, কেবল কয়েকটি অক্ষর সংরক্ষণ না করে লাইন স্পেসিং অক্ষত রেখে উপস্থাপন করা ভাল। ওহ, এবং আমি জানি না কেন gotoএখানে বিকল্পগুলির চেয়ে ভাল কেন
হারুনাচট

3

জাভা 210

class A { public static void main(String[] a){int d=Integer.parseInt(a[0]),c=Integer.parseInt(a[1]);if (2*c%d==0) for (int i=0;i<d;i++) System.out.print((((1+(2*c/d)-d)/2)+i)+" "); else System.out.print(-1);}}

2
পিপিসিজিতে আপনাকে স্বাগতম, আমি দেখতে পাচ্ছি যে আপনার কাছে প্রচুর সাদা জায়গা রয়েছে যা মুছে ফেলা যায়।
পেস্টবিন ডট কম 0mr8spkT

আপনার উত্তরটি আরও খানিকটা গল্ফ করতে আপনি আরও অনেকগুলি জায়গা বের করতে পারেন - উদাহরণস্বরূপ, class A{public static void main(String[]a)বৈধ, এবং আপনাকে 3 টি অক্ষর বাঁচায়। প্রত্যেকের পরে ifএবং প্রত্যেকের পরে , forসাদা স্থান ... ইত্যাদি সরিয়ে দিন
প্রোগ্রামারডান

এটি পাগল যে "পাবলিক স্ট্যাটিক অকার্যকর মূল (এস" অংশটি পুরো জে সমাধান হিসাবে দীর্ঘ) :)
রবার্ট গ্রান্ট

3

আর: 77 73 70 অক্ষর

a=scan();r=a[2]:1-1;while((n=sum(r))<a[1])r=r+1;cat(`if`(n>a[1],-1,r))

(এম -1) থেকে 0-তে গিয়ে একটি ভেক্টর তৈরি করুন এবং যোগফলটি আর এন এর নিকৃষ্টতর না হওয়া অবধি প্রতিটি সংখ্যায় 1 যুক্ত করে If

ইন্ডেন্টেড এবং কিছুটা অবারিত:

a=scan()   #Reads in stdin (by default numeric, space-separated)
r=a[2]:1-1 #Creates vector (M-1) to 0
while(sum(r)<a[1])r=r+1 #Increments all member of vector by 1 until sum is not inferior to N
cat( #Outputs to stdout
    `if`(sum(r)>a[1], -1, r) #If superior to N: impossible, returns -1
    )

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

> a=scan();r=a[2]:1-1;while((n=sum(r))<a[1])r=r+1;cat(`if`(n>a[1],-1,r))
1: 9 3
3: 
Read 2 items
4 3 2
> a=scan();r=a[2]:1-1;while((n=sum(r))<a[1])r=r+1;cat(`if`(n>a[1],-1,r))
1: 7 3
3: 
Read 2 items
-1
> a=scan();r=a[2]:1-1;while((n=sum(r))<a[1])r=r+1;cat(`if`(n>a[1],-1,r))
1: 204 17
3: 
Read 2 items
20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4

2

জুলিয়া, 45

f(n,m)=(x=n/m-m/2+1/2;x%1==0?[x+m-1:-1:x]:-1)
julia> f(6,4)'
1x4 Array{Float64,2}:
 3.0  2.0  1.0  0.0

বীজগণিতের এক বিট, আমাকে যা করা উচিত তার চেয়ে অনেক বেশি সময় নিয়েছে।


2

জাভাস্ক্রিপ্ট - 76

দেখুন যে কে + (কে - 1) + ... + (কে - (এম - 1)) = এম (কে - (এম - 1) / 2) এটিকে N এর সমান সেট করা কে = এন / এম + (এম) দেয় -1) / 2 সর্বোচ্চ পরিমাণে। যদি এটি পূর্ণসংখ্যা হয় তবে কে% 1 == 0 এবং আমরা যে পরিমাণগুলি সন্ধান করছি তা হ'ল কে, কে - 1, ..., কে - (এম - 1)।

আমি সম্ভবত অন্য ভাষায় এই সংক্ষিপ্তটি লিখতে পারতাম, তবে জেএসের কোনও সমাধান এখনও হয়নি তবে এখানে এটি রয়েছে:

N=3;M=3;if((r=N/M+(M-1)/2)%1)console.log(-1);else while(M--)console.log(r--)

কনসোল চালান।

উদাহরণ ইনপুট:

N=3;M=3;if((r=N/M+(M-1)/2)%1)console.log(-1);else while(M--)console.log(r--)

আউটপুট:

3
2
1 

ইনপুট:

N=6;M=4;if((r=N/M+(M-1)/2)%1)console.log(-1);else while(M--)console.log(r--)

আউটপুট:

3
2
1
0

ইনপুট:

N=7;M=3;if((r=N/M+(M-1)/2)%1)console.log(-1);else while(M--)console.log(r--)

আউটপুট: -1

খুব খারাপ কনসোল.লগ বানান করার জন্য এত দীর্ঘ :) :) দুর্ভাগ্যজনকভাবে ঘোষণা করা l=console.log.bind(console)এটি কোনও ছোট l=console.logকরে না , এবং কেবল কাজ করে না।

ইনপুট:

"N=3;M=3;if((r=N/M+(M-1)/2)%1)console.log(-1);else while(M--)console.log(r--)".length

আউটপুট:

76

আপনি এটি ব্যবহার করতে c=consoleএবং c.log()এটি সংক্ষিপ্ত করতে পারেন ।
ব্যবহারকারী 2428118

2

গল্ফস্ক্রিপ্ট, 35

~:M.(*2/-.M%{;-1}{M/M+,-1%M<' '*}if

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

নিম্নলিখিত উদাহরণে ইনপুটটি হ'ল 9 3

          # STACK: "9 3"
~         # Interpret the input string.
          # STACK: 9 3
:M        # Store the top of the stack (number of dwarves) in variable `M'.
.         # Duplicate the top of the stack.
          # STACK: 9 3 3
(         # Decrement the top of the stack.
          # STACK: 9 3 2
*         # Multiply the topmost elements of the stack.
          # STACK: 9 6
2/        # Divide the top of the stack by `2'.
          # STACK: 9 3
          # So far, we've transformed `M' into `M*(M-1)/2', which is the minimum amount of
          # coins all dwarves together will get. This number comes from the fact that the
          # youngest dwarf will get at least 0 coins, the next at least 1 coin, etc., and
          # 0 + 1 + ... + (M - 1) = M*(M-1)/2.
-         # Subtract the topmost elements of the stack.
          # STACK: 6
          # The remaining coins have to get reparted evenly to all dwarves.
.         # Duplicate the top of the stack.
          # STACK: 6 6
M%        # Calculate the top of the stack modulus `M'.
          # STACK: 6 0
{         # If the modulus is positive, the remaining coins cannot get reparted evenly.
    ;-1   # Replace the top of the stack by `-1'.
}
{         # If the modulus is zero, the remaining coins can get reparted evenly.
    M/    # Divide the top of the stack by `M'.
          # STACK: 2
          # This is the number of coins all dwarves will get after giving 1 to the second
          # youngest, etc.
    M+    # Add `M' to the top of the stack.
          # STACK: 5
    ,     # Replace the top of the stack by an array of that many elements.
          # STACK: [ 0 1 2 3 4 ]
          # The rightmost element is the number of coins the oldest dwarf will get.
    -1%   # Reverse the array.
          # STACK: [ 4 3 2 1 0 ]
    M<    # Keep the leftmost `M' elements.
          # STACK: [ 4 3 2 ]
          # There are only `M' dwarves.
    ' '*  # Join the array, separating by spaces.
          # STACK: "4 3 2"
}if

1

ডেলফি এক্সই 3 (176)

uses SysUtils;var d,c,i:integer;begin read(c,d);for I:=1to d-1do c:=c-i;if c mod d>0then writeln(-1)else begin c:=c div d;for I:=d-1downto 0do write(IntToStr(i+c)+' ');end;end.

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

2 টি পূর্ণসংখ্যা, কয়েন এবং বামন পড়ে।
বামন প্রতি পার্থক্য বাদ দেয়।
যদি বাকী মোড বামে> 0 এটি অসম্ভব।
অন্যটি বামন প্রতি 1 থেকে 0 এর লুপে বামন প্রতি সমান অংশ পান এবং বামন ইনডেক্স + সমান ভাগ প্রিন্ট করে

Ungolfed

uses SysUtils;
var
  d,c,i:integer;
begin
  read(c,d);
  for I:=1to d-1do
    c:=c-i;
  if c mod d>0then
    writeln(-1)
  else
  begin
    c:=c div d;
    for I:=d-1downto 0do
      write(IntToStr(i+c)+' ');
  end;
end.

1

গণিত 65

এই ফাংশনটি g0 থেকে n পর্যন্ত দৈর্ঘ্য মিটারের সমস্ত ক্রমবর্ধমান ক্রম উত্পন্ন করে এবং এর মধ্যে কোনওটি এম এর যোগফল কিনা তা পরীক্ষা করে। সফল হলে, ক্রমটি ফিরে আসবে; অন্যথায়, -1 প্রদান করা হয়।

ক্রমগুলি Partitionতালিকাভুক্ত tig 0,1,2,3… m n এন সংবিধ পূর্ণসংখ্যার সমস্ত সম্ভাব্য তালিকাভুক্ত তালিকাতে তৈরি করে।

অবশ্যই একই প্রভাব অর্জনের জন্য আরও কার্যকর উপায় রয়েছে তবে আমি যেগুলি খুঁজে পেয়েছি তাদের আরও কোডের প্রয়োজন।

n_~g~m_:=If[(s=Select[Partition[0~Range~n,m,1],Tr@#==n&])=={},-1,s]

উদাহরণ

g[9, 3]

{{2, 3, 4}


g[3, 3]

{{0, 1, 2}


g[7, 3]

-1


g[705, 3]

{4 234, 235, 236}


g[840, 16]

{45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60}


g[839, 16]

-1


1

সি 131

#include <edk.h>
main(int a,char **v){int j=atoi(*++v),k=atoi(*++v)-j*(j-1)/2;k<0||k%j?j=1,k=-1:k/=j;while(j--)printf("%d ",k+j);}

Ungolfed

#include <edk.h> //Shortest standard header including stdio.h and stdlib.h
main(int a,char **v)
{
    int j=atoi(*++v),k=atoi(*++v)-j*(j-1)/2;

    k<0||k%j?j=1,k=-1:k/=j;  // If youngest dwarf gets < 0 or amount not equally divisible then set values such that ...

    while(j--)printf("%d ",k+j); // ... loop prints out correct values
}

এটি একটি সতর্কতার সাথে সংকলন করে কারণ মূলটির কোনও প্রকার থাকে না। যদি এটি গল্ফের নিয়মগুলিতে বৈধ না হয় তবে আমাকে পাঁচটি অক্ষর যুক্ত করতে হবে।


1

কোবরা - 198

কোবরা ওয়েবসাইট

class P
    def main
        x,y=Console.readLine.split
        a,b=x to int,y to int
        l=[]
        t=n=0
        for i in b,t+=i
        while (t+=b)<=a,n+=1
        for i in b,l.insert(0,i+n)
        print if(t-b<>a,-1,l.join(" "))

ব্যাখ্যা:

class P
    def main

কোড চালানোর জন্য প্রয়োজনীয়

        x,y=Console.readLine.split
        a,b=x to int,y to int

ইনপুট এবং দোকান লাগে এটা aএবংb

        l=[]
        t=n=0

আউটপুট তালিকাটি lসূচনা করে tএবং প্রতিটি বামন গাদা যুক্ত করতে প্রয়োজনীয় প্রয়োজনীয় অর্থ এবং কয়েনের সংখ্যা সূচনা করেn

        for i in b,t+=i

সর্বনিম্নতম সম্ভাব্য মান মানটি সন্ধান করে যা ফলস্বরূপ সমস্ত বামনদের তাদের গাদাতে অনুমতিযোগ্য সংখ্যক মুদ্রা রাখে

        while (t+=b)<=a,n+=1

প্রতিটি স্তূপে কয়টি মুদ্রা যুক্ত করতে হবে তা নির্ধারণ করে যাতে মোট প্রয়োজনীয় অর্থ> = মোট উপলব্ধ অর্থের যোগান হয়

        for i in b,l.insert(0,i+n)

বিভিন্ন আকারের টাকার টাকার সাথে তালিকাটি পূরণ করে

        print if(t-b<>a,-1,l.join(" "))

ফলাফলগুলি হয় -1বা lমোট প্রয়োজনীয় অর্থ মোট উপলব্ধ অর্থের সমান কিনা তা নির্ভর করে



-1

পাইথন ( 100 96 94):

একটি দুর্দান্ত, বৃত্তাকার স্কোরিং উত্তর। আর কিছু নয়, তবে এখন এটি সংক্ষিপ্ত।

def f(n,m):a=range(m)[::-1];b=n-sum(a);c=b/m;d=[i+c for i in a];return(d,-1)[-1in d or c*m!=b]

Ungolfed:

def f(n,m):
 a = range(m)[::-1]
 b = sum(a)
 c = (n-b)/m
 if c * m != n-b: return -1
 d = [i+c for i in a]
 return (d,-1)[-1 in d or c!=n-b]
 if -d in d or c*m!=n-b:
  return -1
 return d

আউটপুট:

def f(n,m):a=range(m)[::-1];b=sum(a);c=(n-b)/m;d=[i+c for i in a];return (d,-1)[-1 in d or c*m!=n-b]

f(3,3)
Out[2]: [2, 1, 0]

f(9,3)
Out[3]: [4, 3, 2]

f(7,3)
Out[4]: -1

f(6,4)
Out[5]: [3, 2, 1, 0]

2
এটি ইনপুট প্রয়োজনীয়তা অনুসরণ করে না।
অস্টিন হেনলি

-1, প্রশ্নের একটি সম্পূর্ণ প্রোগ্রাম লিখতে হবে এবং একটি ফাংশন নয়। দেখুন meta.codegolf.stackexchange.com/a/1146/8766
user80551
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.