0, 3, 7 সংখ্যা ছাড়াই বিট-জোর দিয়ে একটি সংখ্যা বিভক্ত করুন


20

চ্যালেঞ্জ

একটি ফাংশন বা প্রোগ্রাম একটি ইতিবাচক দশমিক সংখ্যা লাগে লিখুন, সেটিতে কল একটি , এবং আউটপুট দুই ইতিবাচক নম্বর, বি এবং সি , এই ধরনের যে:

  • == বি বিটক্সর সি
  • বি এবং সি এর দশমিক উপস্থাপনায় অবশ্যই 0, 3 বা 7 সংখ্যার একটিও থাকতে হবে না।

উদাহরণ

>>> decompose(3)
1, 2
>>> decompose(7)
1, 6
>>> decompose(718)
121, 695
>>> decompose(99997)
2, 99999
>>> decompose(4294967296)
4294968218, 922
>>> decompose(5296080632396965608312971217160142474083606142654386510789497504098664630388377556711796340247136376)
6291484486961499292662848846261496489294168969458648464915998254691295448225881546425551225669515922,
1191982455588299219648819556299554251659915414942295896926425126251962564256469862862114191986258666

যেহেতু পচনটি অনন্য নয়, তাই আপনার কার্য / প্রোগ্রামটির সরবরাহ করা উদাহরণগুলির মতো সঠিক ফলাফলগুলি আউটপুট করার দরকার নেই।

খুব বিস্তারিত বিধি

  1. জমাগুলি একটি সম্পূর্ণ ফাংশন বা প্রোগ্রাম আকারে হওয়া উচিত । importবিবৃতি চূড়ান্ত স্কোর দিকে গণনা না

  2. আপনি ইনপুট ধরে নিতে পারেন সর্বদা 0, 3 বা 7 এর কমপক্ষে একটি সংখ্যা থাকে।

  3. আপনি ধরে নিতে পারেন একটি পচন সর্বদা বিদ্যমান।

  4. যদি আপনি ভাষার মানক পাঠাগারগুলির অংশ হন বা ভাষার ডি জুর প্যাকেজ ম্যানেজারের মাধ্যমে ইনস্টল করা যায় তবে আপনি বিগইন্ট ব্যবহার করতে পারেন ।

  5. ফাংশনটি দ্রুত হওয়া উচিত। ১০০-সংখ্যার নম্বর খাওয়ানো হলে যুক্তিযুক্ত আধুনিক কম্পিউটারে চালাতে 20 সেকেন্ডের বেশি সময় নেওয়া উচিত নয় এবং 10-সংখ্যার নম্বর খাওয়ানোর সময় 2 সেকেন্ডের বেশি নয়।

  6. ফাংশন / প্রোগ্রামটির কমপক্ষে 100 টি সংখ্যা পর্যন্ত ইনপুট সমর্থন করা উচিত ।

    • ফাংশন / প্রোগ্রাম মাত্র 100 টি সংখ্যা এন পর্যন্ত পূর্ণসংখ্যার সমর্থন করতে পারে এমন <, একটি হতে হবে শাস্তি এর আবহাওয়া 10 × (100 / এন - 1) চূড়ান্ত স্কোর করার বাইট। এটি হ'ল গল্ফারকে সংখ্যার বিস্তৃত পরিসর সমর্থন করতে উত্সাহিত করার জন্য এমনকি আমদানি ভারবজ হতে পারে।
  7. দশমিক উপস্থাপনা যতক্ষণ না স্পষ্টভাবে ইনপুট / আউটপুট উপস্থাপনের ক্ষেত্রে কোনও বাধা নেই

    • যদি অন্তর্নির্মিত পূর্ণসংখ্যার ধরণের পরিমাণ পর্যাপ্ত না থাকে তবে ফাংশনটি স্ট্রিং / বিগআইন্টগুলি ইনপুট এবং আউটপুট দিতে পারে।
    • ইনপুটটি ফাংশন প্যারামিটার, কমান্ড লাইন আর্গুমেন্ট বা এসটিডিআইএন থেকে আসতে পারে।
    • ফাংশন ফলাফল ফিরিয়ে দিতে পারে, বা কেবল ফলাফলটি সরাসরি STDOUT এ মুদ্রণ করতে পারে।
    • তবে ইনপুট / আউটপুটগুলিতে স্বাক্ষরিত ওভারফ্লো অনুমোদিত নয়।
    • আনুমানিক উত্তরগুলি সহ্য করা হয় না, ইনপুট / আউটপুটগুলি অবশ্যই নির্ভুল হওয়া উচিত।

স্কোরিং

এটি একটি । বাইট জিতে সংক্ষিপ্ত সমাধান।

একটি পেনাল্টি রয়েছে যদি প্রোগ্রামটি কেবলমাত্র 100 টিরও কম সংখ্যাকে সমর্থন করতে পারে:

  • 64-বিট পূর্ণসংখ্যার (19 সংখ্যা) = +42 বাইট
  • 63-বিট পূর্ণসংখ্যার (18 সংখ্যা) = +45 বাইট
  • 53-বিট পূর্ণসংখ্যা (15 সংখ্যা) = +56 বাইট
  • 31/32-বিট পূর্ণসংখ্যার (9 সংখ্যা) = +101 বাইট

2
আপনি কি নিশ্চিত যে এ জাতীয় পচন সর্বদা সম্ভব? আপনি কি আমাকে একটি প্রমাণ স্কেচ করতে পারেন?
জন ডিভোরাক

95 মুভি কোটসের প্রশ্নের মধ্যে কেউ 1, 5, 9 টি ব্লক করেছেন then
জিমি 23013

3
100 অঙ্ক? এর অর্থ পাইথন সরাসরি সরাসরি জিতে যায়, কারণ এটি এখানে কেবলমাত্র ব্যবহৃত ভাষা যা নির্বিচারে নির্ভুলতার পূর্ণসংখ্যাকে সমর্থন করে। কেন 19 ডিজিট নয়, যা 64-সাইনযুক্ত স্বাক্ষর পূর্ণসংখ্যায় ফিট করে? (2 ^ 64 = 18 446 744 073 709 551 616)
স্তর নদী সেন্ট

5
@ স্টিভেভারিল ম্যাথমেটিকা ​​... গল্ফস্ক্রিপ্ট ... সিজে্যাম ...
মার্টিন এন্ডার

1
এবং জাভা (এটি বলতে হয়েছিল)
Ypnypn

উত্তর:


2

সিজেম, 70 বাইট

ri:Q{;Qmr_Q^`1$`+730`&}g_Q^p

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

এটি কোনও ম্যাচ না পাওয়া পর্যন্ত এলোমেলোভাবে পূর্ণসংখ্যা নির্বাচন করে। এটি সবেমাত্র 20-সেকেন্ডের 64-বিট পূর্ণসংখ্যার (জাভা ইন্টারপ্রেটার ব্যবহার করে) মেনে চলে, তাই আমি আসল বাইট গণনায় 42 যোগ করেছি।

উদাহরণ রান

$ cjam t <<< 7777777777; echo
2695665494
6161166119

10

কমন লিস্প, 240 224 183 173 169 বাইট

গল্ফিংয়ের জন্য কমন লিস্প কিছুটা ভার্জোজ। যাইহোক, এটি এক সেকেন্ডের অধীনে 100-সংখ্যার সংখ্যা এবং 10 সেকেন্ডেরও কম সময়ে 200-সংখ্যার পূর্ণসংখ্যাকে ক্ষয় করে, সুতরাং জরিমানার দরকার নেই। অ্যালগরিদম হ'ল নির্দোষ।

(defun s(z)(and #1=(some(lambda(q)(position q(format()"~a"z)))"037")(+ z(floor z(expt 10 #1#)))))
(defun d(x)(do((y x(or(s y)(s #3=(logxor x y))(return`(,y,#3#)))))(())))

ফাংশনগুলির মধ্যে লাইন ফিড কেবল টাইপোগ্রাফিক উদ্দেশ্যে for 100-সংখ্যার রেফারেন্স ইনপুট দিয়ে পরীক্ষা চালান:

(time (d 5296080632396965608312971217160142474083606142654386510789497504098664630388377556711796340247136376))
took 677,000 microseconds (0.677000 seconds) to run.
      20,989 microseconds (0.020989 seconds, 3.10%) of which was spent in GC.
During that period, and with 8 available CPU cores,
     671,875 microseconds (0.671875 seconds) were spent in user mode
           0 microseconds (0.000000 seconds) were spent in system mode
 54,221,104 bytes of memory allocated.
(1864921261592819619661568919418981552559955289196969112566252282429216186594265918444566258544614425
 5891958562486995519825158818455999516899524658151445485616155916296966645869599949958954491929662561)

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

(defun decompose (x)
  (flet ((s (z)
           (mapcan #'(lambda (c) (and #1=(position c #2=(format () "~a" z))
                                 (list (- (length #2#) #1# 1))))
                   '(#\0 #\3 #\7))))
    (do ((y x (let ((p (nconc (s y) (s #3=(logxor x y)))))
                (or p (return`(,y,#3#)))
                (+ y (expt 10 (apply #'max p))))))
        (nil))))

* (time (decompose (parse-integer (make-string 1000 :initial-element #\7))))
took 9,226,000 microseconds (9.226000 seconds) to run.
        90,966 microseconds (0.090966 seconds, 0.99%) of which was spent in GC.
During that period, and with 8 available CPU cores,
     9,234,375 microseconds (9.234375 seconds) were spent in user mode
             0 microseconds (0.000000 seconds) were spent in system mode
 487,434,560 bytes of memory allocated.
(8889898889152488921298888992819221914229899249999918899888899888888889999989141219898898888988988898888888888899142442899924898918898898988988895189988898888924192198992454114198911989191888889898888918888988988998888891421118891899122898888998989898888898988898888999988918888898889189918889888888899888989219188898998888988892119889198888988888894888912188898989952999888888888898899998988898889228918998949999998898898991141888898999988912121292118899889998989899999892889941898888911888898889118998898888911889889888891452888998889288921141888888942189888899988891918889118888888888989892198899199914111188988889421111188889118888918989988912989999998989891119888898888888892621229888988888999619888952462219889189899998899888889989898891118989218888888898962988891188899888888888999888888888888888888888891269188921288888888998898899214191188888888898992188998898889919888889989889899988892115549998888898889218899988998911898989199918898918988898888891889888989119899888889888998918889112189998
 4184469818464841952189561886965821566229261221619858498284264289194458622668559698924621446851546256444641488616184155821914881485164244662156846141894655485889656891849662551896595944656451462198891289692696856414192264846811616261884188919426294584158925218559295881946496911489245664261126565546419851585441144861859822815144162828551969425529258169849412525611662488849586554989254181228254465226521648916188265491499166186964881248156451994924294646681548996645996894665198811511522424996844864211629888924642289925565591484541149414914699289441561496451494562955652129199261462268846144518142486845251946444998812988291119592418684842524648484689261441456645518518812265495165189812912919529151991611962525419626921619824496626511954895189658691229655648659252448158451924925658586522262194585891859285841914968868466462442488528641466655911199816288496111884591648442984864269495264612518852292965985888414945855422266658614684922884216851481646226111486498155591649619266595911992489425412191)
* (apply #'logxor *)
7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777

2

পাইথন 2, 103 + 42 = 145 বাইট

পাইথন স্থানীয়ভাবে বিগিন্টকে সমর্থন করে তবে এই প্রোগ্রামটি 100-সংখ্যার সংখ্যার জন্য 20 সেকেন্ড অতিক্রম করে। তবে এটি প্রায় 2 সেকেন্ডের মধ্যে -৪-বিট পূর্ণসংখ্যার পচন করে omp

from random import *
def d(a):
 b=c=0
 while set(`b`+`c`)&set('037'):
    b=randint(1,a);c=a^b
 return b,c

1
এলোমেলো ব্যবহার করে চতুর ধারণা। যদি আপনি কোনও ফাংশন সংজ্ঞায়িত করেন তবে whileএলোমেলো মান চেষ্টা করে চলার জন্য আপনার একটি লুপের প্রয়োজন নেই - আপনি কেবলমাত্র ফাংশনটিতে কল করতে পারেন। নিয়ন্ত্রণ কাঠামো প্রয়োজন ছাড়াই, আপনি তারপর একটি ফাংশন ভেঙ্গে পারেন lambdaএবং একটি তিন: from random import* d=lambda a,b=0:set(`b`+`a^b`)&set(\'037\')and d(a,randint(1,a))or(b,a^b)। যদিও আপনি কেবল কোনও ফাংশন ব্যবহার না করাই ভাল।
xnor

আমি পুনরাবৃত্তি বিবেচনা করেছিলাম, তবে এটি বৃহত সংখ্যক (এমনকি মাত্র 11 ডিজিট) স্ট্যাকের ওভারফ্লোর কারণ ঘটায়।
রেমি

1

পাইথন 3 (132 বাইট)

(এটি কেবলমাত্র আরও ভাল সমাধানগুলি উদ্দীপনার জন্য AS ASCII মুভিতে আসল সমস্যাটি সমাধান করার সময় এটি আমার সমাধান))

def d(a):
 l=len(str(a));s=int('1'*l);u=10**(l-1)
 while u:
  while set(str(s)+str((a^s)//u))&set('037'):s+=u
  u//=10
 print(s,a^s)

দশমিক সিস্টেমে বিটওয়াইস জোরের আচরণ যদিও বেশ জটিল, তবুও একটি বড় পর্যবেক্ষণ রয়েছে: কম সংখ্যার সংশোধন করা উচ্চ অঙ্কগুলিকে প্রভাবিত করবে না । অতএব, আমরা টপ-ডাউন কাজ করতে পারি: শীর্ষ সংখ্যাগুলি 0, 3, 7-তে বিনামূল্যে তৈরি করার চেষ্টা করুন এবং তারপরে পুরো সংখ্যাটি কাজ শেষ না হওয়া পর্যন্ত পরবর্তী অঙ্কে কাজ করুন। এটি আমাদের রৈখিক সময়ে দৌড়তে দেয়, তারপরে সহস্র-সংখ্যার প্রসেসিং 1 সেকেন্ডের অধীনে সম্পূর্ণ হতে পারে। (প্রচলিত লিস্প সমাধানটিও আমি বিশ্বাস করি একই কৌশল ব্যবহার করে))


তবে কম সংখ্যক স্থির করা উচ্চ সংখ্যাকে প্রভাবিত করতে পারে। উদাহরণস্বরূপ 997^8 == 1005,। আমি মনে করি এখানে একটি ধারণার কর্নেল রয়েছে, তবে এটি সুস্পষ্ট নয়।
কীথ র্যান্ডাল

@ কিথরান্ডাল: হ্যাঁ এটি ঠিক 999… 999 + 1 এর মতো, তবে, পছন্দটি দেখলে {1,2,4,5,6,8,9}তাদের মধ্যে এমন কিছু থাকবে যা উচ্চ অঙ্কগুলিকে প্রভাবিত করবে না। (যেমন 997^2 == 999) whileউচ্চতর সংখ্যাগুলিকে বৈধ রাখে এমন পছন্দটি খুঁজে পেতে অভ্যন্তরীণ লুপ ক্লান্তি তৈরি করে।
কেনেটিএম

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