এটি একটি স্ব-রেফারেন্সিয়াল সমস্যা


49

টিউপের স্ব-রেফারেন্সিয়াল সূত্র (উইকিপিডিয়া থেকে অনুলিপি করা)

টুপারের স্ব-রেফারেন্সিয়াল সূত্রটি জেফ টুপার দ্বারা সংজ্ঞায়িত একটি সূত্র যা বিমানের খুব নির্দিষ্ট স্থানে দুটি মাত্রায় আঁকড়ে ধরলে, সূত্রটি দৃশ্যত পুনরুত্পাদন করার জন্য "প্রোগ্রাম করা" যেতে পারে। গ্রাফিং সূত্রগুলির অনুশীলন হিসাবে এটি বিভিন্ন গণিত এবং কম্পিউটার বিজ্ঞান কোর্সে ব্যবহৃত হয়।

টিপার স্ব-রেফারেন্সিয়াল সূত্র

মেঝে মেঝের কাজ যেখানে ।

যাক kনিম্নলিখিত 543-সংখ্যার নম্বর হতে: 960939379918958884971672962127852754715004339660129306651505519271702802395266424689642842174350718121267153782770623355993237280874144307891325963941337723487857735749823926629715517173716995165232890538221612403238855866184013235585136048828693337902491454229288667081096184496091705183454067827731551705405381627380967602565625016981482083418783163849115590225610003652351370343874461848378737238198224849863465033159410054974700593138339226497249461751545728366702369745461014655997933798537483143786841806593422227898388722980000748404719

এক পয়েন্ট সুত্রাবলী নকশা তাহলে (x, y)মধ্যে 0 <= x < 106এবং k <= y < k + 17অসাম্য দেওয়া উপরোক্ত পরিতৃপ্ত, ফলে গ্রাফ ভালো দেখায় (মনে রাখবেন যে এই ষড়যন্ত্রের সাথে অক্ষ বিপরীত হয়েছে, অন্যথায় ছবি আউট ছত্রখান আসে):

টুপারের স্ব-রেফারেন্সিয়াল সূত্রের ফলাফল

তাতে কি?

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

  1. আপনার চিত্রের প্রথম কলামের নীচে পিক্সেল থেকে শুরু করুন।
  2. পিক্সেলটি সাদা হলে কে-মানটিতে একটি 0 যুক্ত করা হবে। যদি এটি কালো হয় তবে একটি 1 যুক্ত করুন।
  3. পদক্ষেপ 2 পুনরাবৃত্তি করে কলামটি উপরে সরান।
  4. কলামটির শেষে, পরবর্তী কলামে যান এবং একই প্রক্রিয়াটি অনুসরণ করে নীচে থেকে শুরু করুন।
  5. প্রতিটি পিক্সেল বিশ্লেষণ করার পরে, এই বাইনারি স্ট্রিংকে দশমিক রূপান্তর করুন, এবং কে-মান পেতে 17 দ্বারা গুণ করুন।

কি আমার কাজ?

আপনার কাজটি এমন একটি প্রোগ্রাম তৈরি করা যা কোনও 106x17 চিত্র নিতে পারে এবং এর সাথে সম্পর্কিত কে-মান আউটপুট করে। আপনি নিম্নলিখিত অনুমানগুলি করতে পারেন:

  1. সমস্ত চিত্র হুবহু 106x17 হবে
  2. সমস্ত চিত্রগুলিতে কেবল কালো (# 000000) বা সাদা (#FFFFFF) পিক্সেল থাকবে, এর মধ্যে কিছুই নেই।

কয়েকটি বিধিও রয়েছে:

  1. আউটপুট কেবল কে-মান। এটি অবশ্যই সঠিক বেসে থাকতে পারে তবে এটি কোনও ফর্ম্যাটে হতে পারে।
  2. চিত্রগুলি অবশ্যই কোনও পিএনজি বা পিপিএম থেকে পড়তে হবে।
  3. কোনও মানক ফাঁক নেই।

চিত্র পরীক্ষা করুন

[ ছুটিতে নিরাপত্তার] ~ 1.4946x10 542 উত্পাদন করা উচিত

[ একটি বড় সংখ্যা] ~ 7.2355x10 159 উত্পাদন করা উচিত

[ 2 ^ 1801 * 17] 2 1801 * 17 উত্পাদন করা উচিত

[ 2 ^ 1802 - 1 * 17] উত্পাদন করা উচিত (2 1802 -1) * 17

সঠিক সমাধানগুলির জন্য এই গিস্টটি দেখুন।

এটি , তাই কমপক্ষে সংখ্যা বাইট জেতে।


সাহা্য্যকারী লিংক

উইকিপিডিয়া

ওল্ফ্রাম ম্যাথওয়ার্ল্ড


আমি কি পিপিএম নিতে পারি?
মাল্টেসেন

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

3
আমি যখন এই প্রশ্নটি পড়ছিলাম, "আমার কাজ কী" অংশ পাওয়ার আগে, আমি ইতিবাচক ছিলাম আমি quineকোথাও শব্দটি দেখতে যাচ্ছি ।
জ্যাকব

আমি এমন প্রোগ্রামার হওয়ার ভান করব না যারা এই ধরণের জিনিসগুলি করতে পারে, পরিবর্তে আমি কেবল একটি নির্দোষ, আন্তরিক প্রশ্ন উপস্থাপন করব: হ্যাঁ, তবে কি এটি বিপরীতে করা যেতে পারে? অর্থাৎ সমাধানে খাওয়ানো এবং ফলাফল হিসাবে উত্পন্ন * .png দেখছেন?

@ নোটএশার্পএস ইউজুইস: আপনার যদি স্বেচ্ছাচারিত নির্ভুলতা গাণিতিক হয় তবে এটি তুচ্ছ, প্রতিটি পিক্সেলের জন্য আপনাকে সেই সূত্রের ফলাফলটি পরীক্ষা করতে হবে এবং ফলাফলের চিত্রটি আউটপুট করতে হবে।
মেটেও ইটালিয়া

উত্তর:


12

সিজেম, 16

l,l~q:~f*/W%ze_b

ডেনিসকে বড় ধন্যবাদ সহ এটি অনলাইনে চেষ্টা করুন

ইউআরএল নিয়ে যদি আপনার সমস্যা হয় তবে এটি আমার পরীক্ষিত ইনপুট:

P1
106 17
0000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000011111100000000000000000000000
0000000000000000000000000000000000000000000000000000000000000111111000
0000011111100110000000000000000000000000000000000000000000000000000000
0000000000000000000000000110011111100000100111100001000000000000001100
0110000000000000000000000000000000000000000000000000000000001000011110
0100010011111100001000000000000100101001110000000000000000000000000000
0011000000000000000000000100001111110010010110000110001000000000000100
0110010010000000011000000000000000000100100000000000000000000100011000
0110101111000000111111000000000001000110010011111100100100111001111100
0111001011110000000000000011111100000011111111000000110111000000000001
0000100111100000110000110001100000101000001100001000000000000011101100
0000111110110000001000010000000000010010000100100110011001100100100110
0100110010011001000000000000100001000000110110011000011000010000000000
0100110001001001100110011000001001100100110010011001000000000000100001
1000011001100111111111001100000000000100110001001001100110011001111001
1001001100100110010000000000001100111111111001101111111111111100000000
0001001010010010011001100101000110011001100000110000100000000000001111
1111111111010111001001001110000000000000110001101101100110011000111001
1001100111110011110000000000000001110010010011100010001001000100000000
0000000000000000000000000000000000000000000000000000000000000000000000
1000100100010000100000000001000000000000000000000000000000000000000000
0000000000000000000000000000000000001000000000010000010000000010000000
0000000000000000000000000000000000000000000000000000000000000000000000
0001000000001000000011111111000000000000000000000000000000000000000000
0000000000000000000000000000000000000000111111110000

আমি ASCII পিবিএম হিসাবে রফতানি করার সময় জিমপ যে ফর্ম্যাটটি তৈরি করেছিল তা ব্যবহার করেছিলাম, মন্তব্যটি সরানো হয়েছে।

ব্যাখ্যা:

l,    read the first line ("P1" magic number) and get its length (2)
l~    read and evaluate the second line (106 17)
q     read the rest of the input (actual pixels)
:~    evaluate each character ('0' -> 0, '1' -> 1, newline -> nothing)
f*    multiply each number by 17
/     split into rows of length 106
W%    reverse the order of the rows
z     transpose
e_    flatten (effectively, concatenate the lines)
      now we have all the pixels in the desired order, as 0 and 17
b     convert from base 2 "digits" to a number

আমি আপনার জন্য ইউআরএল এটি পেয়েছি।
mbomb007

@ mbomb007 ধন্যবাদ, কী ভুল হয়েছে তা নিশ্চিত নয়।
অদিতসু

আপনার যদি মন্তব্যগুলির সাথে ডিল করতে না l;l~\qN-/W%zs:~2b*হয় তবে পাশাপাশি কাজ করা উচিত।
ডেনিস

@ ডেনিস ওএমজি, সেখানে বেশ কয়েকটি স্তরের উজ্জ্বলতা রয়েছে :) এটি নিজের দ্বারা পোস্ট করতে চান?
অদিতসু

আমি মনে করি না যে একটি পৃথক উত্তর আপনার থেকে যথেষ্ট আলাদা হবে।
ডেনিস

17

পাইথ - 21 বাইট

পাইথের iবেস রূপান্তর করতে সহজ Simple PBMফাইলের নাম হিসাবে ইনপুট নেয় এবং 'কমান্ড ব্যবহার করে পড়তে পারে । আমাকে !Mকৃষ্ণাঙ্গ ও সাদাকে অবহেলা করার জন্য ব্যবহার করতে হয়েছিল। অন্য সব কিছু স্ব-বর্ণনামূলক।

*J17i!MsC_cJrstt.z7 2

এটি এখানে অনলাইনে চেষ্টা করে দেখুন । (ওয়েব ইন্টারপ্রেটার ফাইল পড়তে পারে না, তাই পরিবর্তিত হয় এবং ফাইলকে ইনপুট হিসাবে গ্রহণ করে)।


60
পাইথের কোনও কিছুই স্ব-বর্ণনামূলক বলে আমি মনে করি না। : /
অ্যালেক্স এ।

3
আমার জানা কোন ভাষাই এটিকে মারতে পারে না। তবে তারপরে আমি যে ভাষা জানি তার কোনওটিই "গল্ফের জন্য তৈরি" নয়।
মহেশ

খোলা যাচ্ছে না লিঙ্ক, পথ অতি দীর্ঘ, Dang (সাফারি 8.1)
Kametrixom

আপনার উদাহরণ চিত্রটি ভুল বলে মনে হচ্ছে। আপনি কি পি 3 ব্যবহার করার পরিবর্তে পি 2 ব্যবহার করবেন?
অদিতসু

ওহ অপেক্ষা করুন, এটি এমনকি পি 2 নয়, এটি পি 1 এর মতো দেখায় তবে উল্টে গেছে
অদিতসু

9

পাইথন 2: 133 110 বাইট

পিআইএল ব্যবহার করে অজগরটিতে প্রথম প্রচেষ্টা:

from PIL.Image import*
j=open(input()).load()
a=k=0
while a<1802:k=(j[a/17,16-a%17][0]<1)+k*2;a+=1
print k*17

নীচে সহায়ক মন্তব্যকারীদের ধন্যবাদ


2
আপনি কেবল একবার Image.open (ইনপুট ()) ব্যবহার করুন load লোড করুন এবং আপনি এটি পরিবর্তন করছেন এমনটি দেখে মনে হচ্ছে না, এটি একটি var j ব্যবহার না করে এটি যেমন ব্যবহার করা ভাল তবে কি ভাল হবে? এটি এমন কিছু হবেfrom PIL import Image k=0 for a in range(1802):y=a%17;x=a/17;k=(0 if Image.open(input()).load()[x,16-y][0]else 1)+k*2 print k*17
কাটেনকিয়ো

3
@ কেটেনকিওর বক্তব্য অব্যাহত রেখে আপনি কেবল উপযুক্ত স্থানগুলিতে a/17এবং প্লাগ a%17করতে পারেন এবং 1 সত্যবাদী এবং 0 টি মিথ্যা বলে সত্যকে আপনি অপব্যবহার করতে পারেন। এই পরিবর্তনগুলির ফলাফল এখানেই আপনি 111 বাইটে নেমে যাবেন :)
কেড

@ ক্যাটায়েনকো, দুঃখের input()সাথে সেই পরিবর্তনটির সাথে লুপের প্রতিটি পুনরাবৃত্তির দিকে আহ্বান জানালেন । অন্যান্য টিপস সহ সম্পাদনা, ধন্যবাদ।
জোক

1
(...<1) --> 0**...হতে পারে?
Sp3000

7

সি #, 199

এই মজা ছিল! একটি বিটম্যাপ 106 * 17 বার পুনরায় লোড করার কোনও সমস্যা নেই, তাই না? আমি কিছু বাইট সংরক্ষণ করার জন্য এটি একটি ফাংশন হিসাবে করেছি, নিশ্চিত না যে এটি আইনী কিনা।

BigInteger s(string i){return (Enumerable.Range(0,106).SelectMany(x=>Enumerable.Range(0,17).Select(y=>new BigInteger(new Bitmap(i).GetPixel(x,y).B==0?1:0)).Reverse()).Aggregate((x,y)=>(x<<1)+y)*17);}

i ইনপুট ফাইলের নাম।

এছাড়াও, একটি একক অভিব্যক্তি হিসাবে, কেবল এটি iসরবরাহ করা বা সাবড (167 বাইট) সহ একটি এক্সপ্রেশন

(Enumerable.Range(0,106).SelectMany(x=>Enumerable.Range(0,17).Select(y=>new BigInteger(new Bitmap(i).GetPixel(x,y).B==0?1:0)).Reverse()).Aggregate((x,y)=>(x<<1)+y)*17)

1
প্রশ্নটি বলেছে "আপনার কাজ একটি প্রোগ্রাম তৈরি করা ..."
শান ল্যাথাম

1

গণিত 69 বাইট

17*FromDigits[1-Flatten[Reverse/@Transpose[ImageData@Binarize@#]],2]&

চিত্রটি একরঙা ফর্ম্যাট হলে বাইনারি @ কে ছেড়ে দেওয়া যেতে পারে।

এই ফাংশনটি চিত্রটির পুনরুত্পাদন করবে:

   ArrayPlot[Table[Boole[1/2<Floor[Mod[Floor[y/17]2^(-17Floor[x]-Mod[Abs[y],17]),2]]],{y,1+#,17+#},{x,106,1,-1}]]&
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.