1 থেকে 7 এর অঙ্কের যোগফল


21

চ্যালেঞ্জ

একটি ধনাত্মক পূর্ণসংখ্যা দেওয়া Nহয় 28 অথবা উপরে, আউটপুট summing সংখ্যার একটি তালিকা Nযে ব্যবহারসমূহ প্রতিটি অঙ্ক 1মাধ্যমে 7ঠিক একবার। আপনি একটি প্রোগ্রাম বা ফাংশন হিসাবে দিতে পারেন।

অঙ্কগুলি নিজের দ্বারা প্রকাশিত বা সংক্ষিপ্ত আকারে উপস্থিত হতে পারে, যতক্ষণ না আপনি একবারে পুনরাবৃত্তি না করে তাদের প্রতিটি ব্যবহার করেন। উদাহরণস্বরূপ, [12, 34, 56, 7]যেমন হয়, বৈধ [1, 27, 6, 4, 35]এবং [1234, 567], কিন্তু না [123, 34567]বা [3, 2, 1476]। যে সংখ্যাগুলি তালিকাভুক্ত হয়েছে সেটির কোনও ব্যাপার নয়।

যদি N1-7 দিয়ে তৈরি না করা যায় তবে রিটার্ন বা আউটপুট কিছুই নয়।

অন্যান্য তথ্য

  • এটি কোড গল্ফ, তাই 15 ই অক্টোবর বৃহস্পতিবারের মধ্যে বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

  • মন্তব্যে কোনও প্রশ্ন জিজ্ঞাসা করুন।

  • চ্যালেঞ্জের মধ্যে আমি যা নির্দিষ্ট করে না তা আপনার উপর নির্ভর করে।

  • স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়।

উদাহরণ

এগুলি যে কোনও বিভ্রান্তি দূর করতে পারে:

ইনপুট

28

আউটপুট

[1, 2, 3, 4, 5, 6, 7]

ইনপুট

100

আউটপুট

[56, 7, 4, 31, 2]

ইনপুট

1234567

আউটপুট

[1234567]

ইনপুট

29

আউটপুট

কিছুই, 29 অবৈধ।

ইনপুট

1891

আউটপুট

[1234, 657]

ইনপুট

370

আউটপুট

[15, 342, 7, 6]

প্রয়োজনে আরও তৈরি করব।

এখানে এই সাত নম্বর, FryAmTheEggman সৌজন্যে সঙ্গে তৈরি করা সম্ভব সংখ্যার সমস্ত pastebin।


আউটপুট কি জন্য 29?
জিওবিটস

4
আপনি যদি আউটপুটটি কিছু না চান তবে আউটপুট (N/A)হিসাবে রাখবেন না ।
mbomb007

1
@ লুক্সটর্মস [1234566, 1]একটি বৈধ আউটপুট নয়, কারণ 6 টি পুনরাবৃত্তি হয়েছে। আপনি আউটপুটে সংখ্যার পুনরাবৃত্তি নাও করতে পারেন।
The_Basset_Hound

2
হতে পারে »... দশমিক অঙ্ক 1 থেকে 7 এর মধ্যে সংখ্যার একটি তালিকা যা N to পর্যন্ত যোগ করে তা বর্তমানে প্রশ্নের মধ্যে থাকা স্পষ্ট ভাষায়।
পাওলো ইবারম্যান

3
কিছুটা কম জোর বল সমাধানের জন্য: এটি প্রতিটিটির জন্য একটি 10-পাওয়ার গুণমান নির্ধারণের সমতুল্য 1, ..,, 7যাতে কমপক্ষে 1যতটা 10'গুলি, কমপক্ষে অনেকগুলি এর 10' এর মতো 100, ইত্যাদি।
xnor

উত্তর:


9

পাইথ, 18 14 বাইট

hfqSjkTjkS7./Q

2 বাইট বন্ধ করে আরও 2 টির পথ সুগম করার জন্য @ আইস্যাককে ধন্যবাদ জানাই।

কোডটি যদি কোনও আউটপুট তৈরি না করে তবে ক্রাশ হবে, যার ফলে কোনও আউটপুট উত্পাদিত হবে না।

আপনি যদি যথেষ্ট ধৈর্যশীল হন এবং যদি যথেষ্ট সময় এবং মেমরি দেওয়া হয় তবে এটি ছোট-ইশ ইনপুটগুলির জন্য কাজ করবে।

যাচাই করতে যে কোড কাজ হিসাবে উদ্দীষ্ট, আপনি প্রতিস্থাপন করতে পারেন 7একটি সঙ্গে 3জন্য ডিজিট 1 অঙ্কের 3 মাধ্যমে । একটি পরীক্ষা স্যুট জন্য এখানে ক্লিক করুন

উদাহরণ রান

$ time pyth/pyth.py -c 'hfqSjkTjkS7./Q' <<< 28
(1, 2, 3, 4, 5, 6, 7)

real    4m34.634s
user    4m34.751s
sys     0m0.101s
$ time pyth/pyth.py -c 'hfqSjkTjkS7./Q' <<< 29 2>/dev/null

real    9m5.819s
user    9m6.069s
sys     0m0.093s

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

           ./Q    Compute all integer partitions of the input.
 f                Filter the integer partitions:
    jkT             Join the integers with empty separator.
   S                Sort the characters of the resulting string.
      jkS7          Join [1, ..., 7] with empty separator.
  q                 Check both results for equality.
                  Keep the partition of `q' returned True.
h                 Retrieve the first element of the filtered list.
                  For a non-empty list, this retrieves the solution.
                  For the empty list, it causes an error and produces no output.

2
সাবাশ! বেশ একটি উদ্ভাবনী পদ্ধতির। `` `MS7`` এর চেয়ে ছোট r\1\8। এছাড়াও @ .. 0হিসাবে একই h
isaacg

ধন্যবাদ! আমি কীভাবে মিস করেছি তা নিশ্চিত নই h, তবে আপনি Sযেভাবে ব্যবহার করতে পারবেন তা আমার কোনও ধারণা ছিল না । (অনলাইন ইন্টারপ্রেটারে চর রেফারেন্সটি এর উল্লেখ করে নি)) jkS7এমনকি আরও ছোট বলে মনে হচ্ছে, যেহেতু আমার sআর দরকার নেই।
ডেনিস

5

পাইথন 3, 109

def f(n,s=set('1234567'),l='0,'):[f(n,s-{x},l+x+c)for c in(',','')for x in s]or n-sum(eval(l))or~print(l[2:])

একটি ফাংশন যা একটি সংখ্যা নেয় এবং পছন্দ মতো একটি টিপল আউটপুট করে 123,4567,। হ্যাঁ, এটি একটি বৈধ টিপল।

ধারণা সব সম্ভব স্ট্রিং মত উৎপন্ন হয় 43,126,7,5,যে সংখ্যা আছে 1মাধ্যমে 7দুই কমা পরপর সঙ্গে কমা দ্বারা পৃথক। এই অভিব্যক্তিটিকে একটি টিপল হিসাবে মূল্যায়ন করুন, এবং এর যোগফল সমান n, এটি মুদ্রণ করুন এবং ত্রুটির সাথে সমাপ্ত হবে।

এই জাতীয় সমস্ত স্ট্রিং তৈরির জন্য, আমরা sব্যবহারের জন্য অক্ষরের সেটটি ট্র্যাক করি এবং প্রত্যেককে একটি কমা দিয়ে সংযুক্ত করার চেষ্টা করি, যা অঙ্কটি প্রবেশের শেষ করে বা না করে, ভবিষ্যতের অঙ্কগুলি এতে সংলগ্ন হয়ে যায়।

শর্ট-সার্কিট যে চেক করতে ব্যবহার করা হয় sখালি কারণ তালিকা-Comp খালি, এবং যে n==sum(eval(l)), যে ক্ষেত্রে আমরা ছাপি lএবং গ্রহণ করে একটি ত্রুটি সাথে সাথে সমাপ্ত ~এর Noneমুদ্রণ দ্বারা ফিরে (এই জন্য Sp3000 ধন্যবাদ।)।

আমি বিশ্বাস করি পাইথন 3.5 তে দুটি অক্ষর রচনা দ্বারা সংরক্ষণ করা যায় s={*'1234567'}(ধন্যবাদ Sp3000)

কিছু ছোট বিরক্তি রয়েছে যা চরগুলি খায়। একটি হ'ল এমন ক্ষেত্রে যে কোনও কমা lনা 1234567দিয়ে দেখতে দেখতে এটি একক সংখ্যা হিসাবে পার্স করা হয় এবং কল করা sumত্রুটি দেয়। এটি lউপাদান দিয়ে শুরু করার হ্যাক 0এবং মুদ্রণের সময় এটিকে সরিয়ে দেওয়ার সাথে পরিচালিত হয় । এটির জন্য 6 টি অক্ষর খরচ হয়।

Iterating cকমা এবং খালি স্ট্রিং উপর annoyingly শব্দময় হয় for c in(',',''), যেহেতু পাইথন 3 এই tuple নগ্ন হতে অনুমতি দেয় না। আমি চাই যে এখানে এমন কিছু চর হোক ?যা সংখ্যায় উপেক্ষা করা হবে ',?'চারটি চর কম করার জন্য, তবে এমন চর বলে মনে হয় না।


পুরানো পদ্ধতি:

পাইথন 2, 117

def f(n,s={1,2,3,4,5,6,7},l=[],p=0):
 if{n,p}|s=={0}:print l;1/0
 if p:f(n-p,s,l+[p])
 for x in s:f(n,s-{x},l,p*10+x)

একটি ফাংশন সংজ্ঞা দেয় যা একটি সংখ্যা নেয় এবং একটি তালিকা মুদ্রণ করে।

প্রতিটি শাখার চেষ্টা করার জন্য পুনরাবৃত্তিটি ব্যবহার করা ধারণা। ভেরিয়েবল ট্র্যাক হয়

  • বাকি পরিমাণ nপ্রয়োজন
  • sব্যবহারের জন্য বাকি অঙ্কের সেট
  • lএখনও পর্যন্ত তৈরি সংখ্যাগুলির তালিকা
  • বর্তমান আংশিক গঠিত সংখ্যা p

কখন n==0এবং sখালি থাকে, lত্রুটি করে মুদ্রণ করুন এবং সমাপ্ত করুন।

যদি বর্তমান আংশিকভাবে গঠিত সংখ্যাটি pশূন্য নয়, এটি তালিকাতে যুক্ত করার চেষ্টা করুন এবং এটিকে অবশিষ্ট যোগফল থেকে সরানোর চেষ্টা করুন।

প্রতিটি অঙ্কের xজন্য যা থেকে আমরা ব্যবহার করতে পারি s, এটিকে যুক্ত করার pএবং এটিকে সরিয়ে দেওয়ার চেষ্টা করুন s


4

পাইথ, 23

#iRThfqQsiR10Ts./M.pS7q

নিষ্পাপ বর্বর বল, খুব ধীরে ধীরে অনলাইনে, আমার কম্পিউটারে প্রায় এক মিনিট সময় নেয়। পাইথ গল্ফগুলির প্যাটার্নের সাধারণ "ব্যতিক্রম চিরকাল অবধি অবধি" ব্যবহার করে যেখানে সংযুক্তিগুলির ফলিত ফিল্টার তালিকার অ্যাক্সেস অসম্ভব সংখ্যার জন্য ত্রুটির কারণ করে 29

পাইথোনিক তালিকার মতো ফলাফল, যেমন eg

1891
[1234, 657]
100
[1, 2, 34, 56, 7]
370
[12, 345, 6, 7]

এইভাবে তৈরি করা যেতে পারে এমন 10136 সংখ্যার সমস্তটির একটি পেস্ট এখানে দেওয়া হয়েছে ।


আমি উদাহরণের জন্য পেস্টবিন লিঙ্কটি ব্যবহার করতে পারি?
The_Basset_Hound

@ দ্য_বাসেট_হাউন্ড অবশ্যই এগিয়ে যান
FryAmTheEggman

3

পাইথন 2.7, 178 172 169 বাইট

n=input()
for i in range(8**7):
 for j in len(set('%o0'%i))/8*range(128):
    s=''
    for c in'%o'%i:s+='+'[:j%2*len(s)]+c;j/=2
    if eval(s)==n:print map(int,s.split('+'));1/0

নোট করুন যে শেষ তিনটি লাইন ট্যাবগুলিতে ইন্টেন্ট করা হবে বলে মনে করা হচ্ছে তবে এই সম্পাদকটিতে কীভাবে তা করব তা আমি বুঝতে পারি না।

সম্পাদনা করুন: Sp3000 এর সহায়তায় বাসা বাঁধার এক স্তর সমতল করুন


দুর্ভাগ্যক্রমে এসই ট্যাবগুলি সরিয়ে ফেলেছে, সুতরাং কেবল এটি কীভাবে ইন্টেন্ট করা হচ্ছে বোঝানো ঠিক আছে :)
Sp3000

আহ ঠিক আছে, এখনও এই সাইটটির চারপাশে আমার পথ নির্ধারণ করা।
xsot

3

জাভাস্ক্রিপ্ট (ES6), 165 196

সম্পাদনা একটু কমিয়ে দিয়েছেন। ব্যবহার করে খাটো করা যেতে পারে eval, তবে আমি দ্রুত এটি পছন্দ করি

ব্রুট ফোর্স, পিথ সংস্করণের চেয়ে লজ্জাজনকভাবে দীর্ঘ, তবে দ্রুত। নীচে স্নিপেট চলমান পরীক্ষা করুন একমাস্ক্রিপ্ট l অনুবর্তী ব্রাউজারে।

f=z=>{for(r=i=1e6;r&&++i<8e6;)for(m=/(.).*\1|[089]/.test(w=i+'')?0:64;r&&m--;t.split`+`.map(v=>r-=v,r=z))for(t=w[j=0],l=1;d=w[++j];l+=l)t+=l&m?'+'+d:d;return r?'':t}

function test() { O.innerHTML=f(+I.value) }

test()

// Less golfed

f=z=>{
  for(r=i=1e6; r&&++i<8e6;)
    for(m=/(.).*\1|[089]/.test(w=i+'')?0:64; r&&m--; t.split`+`.map(v=>r-=v,r=z))
      for(t=w[j=0],l=1;d=w[++j];l+=l)
        t+=l&m?'+'+d:d;
  return r?'':t
}
<input id=I value=28><button onclick=test()>-></button><span id=O></span>


ভাষার কারণে আর লজ্জা পাবে না, আমি আপনার জেএস উত্তরগুলি সত্যই উপভোগ করছি, +1
ফ্রাইআম দ্য এজিগম্যান

1

পাইথন 2, 270 268 বাইট

from itertools import*;P=permutations
x,d,f=range(1,8),[],input()
r=sum([[int(''.join(str(n)for n in i))for i in list(P(x,j))]for j in x],[])
z=1
while z:
 t=sum([[list(j)for j in P(r,z)]for i in x],[])
 v=filter(lambda i:sum(i)==f,t)
 if v:print v[0];break
 else:z+=1

এখনও গল্ফিং উপর কাজ।

কোনও ম্যাচ না পাওয়া পর্যন্ত এই লুপগুলি।


import asখুব কমই প্রয়োজনীয় - আপনি এটি করতে পারেনfrom itertools import*;P=permutations
Sp3000

map(str,i)তালিকা অনুধাবনের চেয়ে এটি খাটো এবং আপনি নেস্টেড তালিকা সমতল করার পরিবর্তে সরাসরি তালিকাটি তৈরি করতে পারেন: r=[int(''.join(map(str,i)))for j in x for i in P(x,j)]এবং টি এর জন্য একই জাতীয় জিনিস।
রূথ ফ্র্যাংকলিন

আপনি এর `n`পরিবর্তে ব্যবহার করতে পারেন str(n), যেহেতু nকখনই সর্বোচ্চ পূর্ণসংখ্যার উপরে হবে না।
mbomb007

1

হাস্কেল (145 বাইট)

main=getLine>>=print.head.f[1..7].read
f[]0=[[]]
f b s=[n:j|(n,g)<-m b,j<-f g$s-n]
m b=[(d+10*z,g)|d<-b,(z,g)<-(0,filter(/=d)b):m(filter(/=d)b)]

পুনরাবৃত্তি ব্যবহার করে।

অবরুদ্ধ (337 বাইট):

delete d = filter (/= d)
main = getLine >>= print . (`form` [1..7]) . read

form s [] | s == 0    = [[]]
form s ds | s <= 0    = []
form s ds | otherwise = [n:ns | (n, ds') <- makeNumbers ds, ns <- form (s-n) ds']

makeNumbers [] = []
makeNumbers ds  = [(d + 10 * n',ds') | d <- ds, (n',ds') <- (0,delete d ds):makeNumbers (delete d ds)]

0

স্কালা, 195 বাইট

এটি সবচেয়ে দক্ষ নয় এবং 29 টির জন্য আউটপুট পেতে 15 মিনিটের বেশি সময় লেগেছিল তবে এটি কার্যকর হয় works

def g(s: Seq[Int]): Iterator[Seq[Int]]=s.combinations(2).map(c=>g(c.mkString.toInt +: s.filterNot(c.contains))).flatten ++ Seq(s)
def f(i: Int)=(1 to 7).permutations.map(g).flatten.find(_.sum==i)

এখানে কিছু আউটপুট দেওয়া হয়

scala> f(100)
res2: Option[Seq[Int]] = Some(Vector(46, 35, 12, 7))

scala> f(1891)
res3: Option[Seq[Int]] = Some(Vector(567, 1324))

scala> f(370)
res4: Option[Seq[Int]] = Some(Vector(345, 12, 6, 7))

scala> f(29)
res5: Option[Seq[Int]] = None

0

রুবি, 105 বাইট

পাশবিক বল! 1 এবং 7654321 এর মধ্যে পূর্ণসংখ্যার 0 এবং 7 এর মধ্যে দৈর্ঘ্যের প্রতিটি উপসেট পরীক্ষা করে এবং তাদের কোনওটি আমাদের মানদণ্ডের সাথে মেলে কিনা matches আপনি সম্ভবত এটি শেষ হওয়ার জন্য অপেক্ষা করতে চান না।

->n{8.times{|i|[*1..7654321].permutation(i){|x|return x if
x.join.chars.sort==[*?1..?7]&&eval(x*?+)==n}}}

অ্যালগরিদমটি চালনা ও যাচাই করতে আপনি সন্ধানের স্থানটি সংক্ষিপ্ত করতে পারবেন 7654321আপনার জানা সবচেয়ে বড় সংখ্যার পরিবর্তে উত্তরটি হবে। উদাহরণস্বরূপ, এন = 100 এর জন্য 56, অথবা এন = 1891 এর জন্য 1234। এখানে পরবর্তীগুলির একটি ট্রায়াল রান:

$ ruby -e "p ->n{8.times{|i|[*1..1234].permutation(i){|x|return x if x.join.chars.sort==[*?1..?7]&&eval(x*?+)==n}}}[gets.to_i]" <<< 1891
[657, 1234]

0 থেকে 7 পূর্ণসংখ্যা? আপনার
বহির্মুখী

@ edc65 আপনার অর্থ হ'ল 7 ডিজিট । ফলাফলটি পূর্ণসংখ্যার একটি সেট এবং সেটটির আকার ইনপুটটির উপর নির্ভর করে।
ডানিরো

আমি রুবি কথা বলি না, আমি অনুমান করি প্রোগ্রামটি কাজ করে তবে আমি এর ব্যাখ্যা পাই না। যদি আপনার পূর্ণসংখ্যা 1234567 এর চেয়ে কম হয় তবে আপনি কীভাবে 7654321 পাবেন?
edc65

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