গ্রিড-ট্যাংরাম সমাধান করুন


22

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

গ্রিড টেং্রামস

আমরা "স্ট্যান্ডার্ড" টাঙ্গরাম স্কোয়ারটি একটি বৃহত স্কোয়ারে আঁকতে পারি যা একটি গ্রিড দ্বারা 16 টি ছোট স্কোয়ারে বিভক্ত । গ্রিড ট্যাংগ্রামগুলি কেবল টেঙরামের টুকরো দিয়ে তৈরি আকারগুলি যেমন টুকরোগুলির সমস্ত শীর্ষাংশ গ্রিড পয়েন্টগুলিতে থাকে।

এই চ্যালেঞ্জের মধ্যে আমরা এই ধরণের ট্যাংরাম ধাঁধা বিবেচনা করতে চাই, কারণ তারা সম্ভবত সাধারণের চেয়ে বেশি সহজেই পরিচালনা করতে পারে।

পার্শ্ব দ্রষ্টব্য হিসাবে: চীনা গণিতবিদ চুয়ান-চিন হিসুং এবং ফু ট্রাইং ওয়াং ১৯৪২ সালে প্রমাণ করেছিলেন যে কেবল ১৩ টি উত্তল ট্যাংগ্রাম রয়েছে। তারা প্রথমে দেখিয়েছিল যে সমস্যাটি গ্রিড ট্যাংগ্রামগুলিতে হ্রাস করা যেতে পারে এবং তার পরে কিছু সংযুক্তি এবং জ্যামিতিক যুক্তি ব্যবহৃত হয়। এই 13 এর সমস্ত:

চ্যালেঞ্জ

একটি দ্রবণযোগ্য গ্রিড টেংরাম দেওয়া, গ্রাড টেং্রামের সাতটি টাঙ্গরাম টুকরো টুকরো টুকরো করে আউটপুট।

আই

উভয় পক্ষের 50px এর গুণক সহ একটি ট্যাংগ্রাম একটি কালো এবং সাদা চিত্র হিসাবে দেওয়া হয়েছে (আকৃতিটি কালো বর্ণের, সাদা রঙের পটভূমি)। গ্রিডটির প্রস্থ হ'ল 50px রয়েছে। গ্রিড লাইনগুলি চিত্রের পাশের সমান্তরাল।

সম্পাদনা: চিত্রটি ইনপুট হিসাবে গ্রহণযোগ্য হতে পারে এবং পিএনজি, টিআইএফএফ, পিবিএম ইত্যাদির মতো কোনও সুবিধাজনক রাস্টার চিত্রের ফর্ম্যাটে আউটপুট হিসাবে ফিরে আসতে পারে তবে বাইনারি 2 ডি অ্যারে বা স্ট্রিং বা ম্যাট্রিক্স হিসাবে উপস্থাপনা গ্রহণযোগ্য।

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

টুকরোগুলির সীমানায় অবস্থিত পিক্সেলগুলিকে আকৃতির সাথে একেবারে মিলাতে হবে না, এছাড়াও যদি এলিয়াসিং এফেক্টস বা অন্যান্য ফাজ থাকে তবে এটি ঠিক আছে।

ইনপুট এবং আউটপুট উদাহরণ:

উদাহরণ:

সম্ভাব্য সমাধান:


ইমেজ প্রক্রিয়াকরণ এই চ্যালেঞ্জের সম্পূর্ণ অপ্রয়োজনীয় বাধা। আপনি যদি কেবলমাত্র একটি ছোট বাইনারি অ্যারে হিসাবে ইনপুটটি নির্দিষ্ট করে থাকেন তবে আমি এটি আরও বেশি আবেদনময়ী মনে করব।
স্পার

1
আমি যেমন বলেছি, এটি স্যান্ডবক্সে থাকাকালীন আলোচনা হয়েছিল। তবে আমি সন্দেহ করি যে এটি অনেকগুলি বাইট যুক্ত করে, কারণ টাস্কটি নিজেই অনেক বেশি কঠিন।
flawr

3
আমি সেই ব্যক্তিদের মধ্যে একজনকে পরামর্শ দিয়েছিলাম যে ইনপুট এবং আউটপুটটি সেভাবেই হয় এবং আমি সেই সুপারিশটি করেছি কারণ এটি আমার মতে, টেংরাম চ্যালেঞ্জ উপস্থাপনের সবচেয়ে প্রাকৃতিক এবং উপযুক্ত উপায়। ইনপুট / আউটপুট যে কোনও ফর্ম একটি উল্লেখযোগ্য সংখ্যক বাইট নিতে হবে, তাই আমি এখানে সত্যিই এটি একটি সমস্যা মনে করি না।
এল'েন্দিয়া স্টারম্যান

1
আমি এলেন্ডিয়ার সাথে একমত গ্রাফিকাল I / O এর একমাত্র সমস্যা হ'ল এটি এমন ভাষা সীমিত করতে পারে যেগুলিতে গ্রাফিক্সের সুবিধা নেই facilities এটি বলেছিল, পিবিএম এবং পিজিএম এএসসিআইআই আর্টের এত কাছাকাছি যে কোনও সত্যিকারের সমস্যা নেই, যদি লোকেরা এই জাতীয় ফর্ম্যাট সম্পর্কে সচেতন হয়। en.wikedia.org/wiki/Netpbm_format
স্তরের নদী

1
@ লেভেলরিভারস্ট এটি একটি ভাল পয়েন্ট, আমার মনে হয় এই ফর্ম্যাটগুলি ব্যবহার করা এমনকি উদাহরণস্বরূপ 2 ডি অ্যারে / জিরো এবং স্ট্রিংগুলির স্ট্রিংটি সম্পূর্ণরূপে অ্যাক্সেসযোগ্য হবে।
flawr

উত্তর:


31

বিবিসি বেসিক, 570 514 490 বাইট ASCII

Http://www.bbcbasic.co.uk/bbcwin/download.htmlদোভাষীটি ডাউনলোড করুন

435 বাইট টোকেনাইজড

সম্পূর্ণ প্রোগ্রামটি L.bmpস্ক্রিন থেকে একটি ইনপুট প্রদর্শন করে, তারপরে সমাধান সন্ধানের জন্য এটি সংশোধন করে।

*DISPLAY L
t=PI/8q=FNa(1)
DEFFNa(n)IFn=7END
LOCALz,j,p,i,c,s,x,y,m,u,v
F.z=0TO99u=z MOD10*100v=z DIV10*100ORIGINu,v
F.j=0TO12S.4p=0F.i=j+3TOj+9S.2c=9*COS(i*t)s=9*SIN(i*t)p=p*4-(POINT(c,s)<>0)*2-(POINT(9*c,9*s)<>0)N.
m=n:IFn=5A.(43A.p)=0p=0m=7
IF(ASCM."??O|(C",n)-64A.p)=0THEN
F.i=-1TO0GCOL0,-i*n:c=99*COS(j*t)s=99*SIN(j*t)y=402/3^m MOD3-1MOVE-c-s*y,c*y-s:x=n<3MOVEc*x-s*x,s*x+c*x:x=2778/3^m MOD3-1y=5775/3^m MOD3-1PLOT85-32*(n MOD6>3),c*x-s*y,s*x+c*y:IFi q=FNa(n+1)ORIGINu,v
N.
ENDIF
N.N.=0

ব্যাখ্যা

নোট করুন যে বিবিসি মৌলিকভাবে 1 পিক্সেল = 2 ইউনিটের দূরত্ব, সুতরাং 50x50 পিক্সেল গ্রিডটি 100x100 গ্রিডে পরিণত হয়।

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

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

প্রতিটি আকারের স্থাপনের জন্য বিভিন্ন x, y স্থানাঙ্কে এবং 4 টি বিভিন্ন আবর্তনের চেষ্টা করা হয়। কোনও আকৃতি আঁকার জন্য ফাঁকা জায়গা আছে কিনা তা পরীক্ষা করতে আমরা 45 ডিগ্রি অ্যাঙ্গেল সহ নীচের টেম্পলেটটি ব্যবহার করি। আবর্তনগুলি প্রায় তৈরি হয় *এবং পরীক্ষিত 8 পিক্সেল 9 এবং 81 ইউনিটের ব্যাসার্ধের 2 টি অর্ধবৃত্তগুলিতে থাকে এবং এক্স এবং y অক্ষের 22.5 ডিগ্রি এর বিজোড় গুণে রেডিয়েটিং লাইনে পড়ে।

একটি বৃহত ত্রিভুজটির জন্য সমস্ত 8 টি স্পেস পরিষ্কার হওয়া দরকার। অন্যান্য আকারের জন্য কেবল কয়েকটি কক্ষ পরিষ্কার থাকতে হবে যাতে একটি মুখোশ প্রয়োগ করা হয়।

+----+----   Shape             Mask HGFEDCBA Mask decimal 
|\ E/|\G /  
| \/F|H\/    1,2. Large triangle    11111111    -1
|C/\ | /     3. Med triangle        00001111    15
|/ D\|/      4. Square              00111100    60
+----*       5. Parallelogram       11101000   -24
|\ B/        6. Small triangle      00000011     3
|A\/         7. Parallogr reversed  00101011    43
| /          Note: reversed parallelogram is checked/drawn at recursion depth n=5
|/           with a special check, but the coordinates are encoded as m=7.  

একবার এটি প্রতিষ্ঠিত হয়ে যায় যে কোনও আকৃতি ফিট হবে, এটি অবশ্যই আঁকতে হবে। যদি এটি একটি ত্রিভুজ হয় PLOT 85তবে এটি সমান্তরালগ্রাম হলে এটি প্লট করা হয়েছে , সংখ্যাটি 32 টি বেশি (লক্ষ্য করুন যে PLOTআমরা কোনও বর্গকে একটি বিশেষ সমান্তরাল হিসাবে বিবেচনা করি)। উভয় ক্ষেত্রেই পরপর 3 টি শীর্ষবিন্দু দিতে হবে। দ্বিতীয় *শীর্ষটি বৃহত ত্রিভুজের ক্ষেত্রে বাদ দিয়ে ( উপরের টেবিলটিতে চিহ্নিত ) আকৃতির উত্স , যেখানে (আবর্তনের পূর্বে) এটি -1,-1.অন্যান্য 2 টির সাথে x এবং y স্থানাঙ্ক থাকতে পারে -1,0 or 1যার বেস 3 থেকে বের করা হয় এনকোডেড সংখ্যা, তারপর 99 দ্বারা গুন করা এবং রূপান্তর দ্বারা প্রয়োজনীয় হিসাবে আবর্তিত cএবং s

অবহেলিত কোড

  *DISPLAY L
  t=PI/8                                          :REM Constant 22.5 degrees.
  q=FNa(1)                                        :REM Call function, return dummy value to q
  END                                             :REM End the program gracefully if no solution. Absent in golfed version.

  DEFFNa(n)                                       :REM Recursive function to place shapes.
  IFn=7END                                        :REM If n=7 solution found, end program.
  LOCALk,z,j,p,i,c,s,x,y,m,u,v                    :REM declare local variables for function.
  k=ASCMID$("??O|(C",n)-64                        :REM Bitmasks for big tri, big tri, med tri, sq, normal paralellogram, small tri.
  FORz=0TO99                                      :REM For each point on the grid
    u=z MOD10*100:v=z DIV10*100                   :REM calculate its x and y coordinates relative to bottom left of screen
    ORIGINu,v                                     :REM and set the origin to this point.
    FORj=0TO12STEP4                               :REM For each rotation 0,90,180,270deg
      p=0                                         :REM assume no non-black pixels found
      FORi=j+3TOj+9STEP2                          :REM test angles of 3,5,7,9 times 22.5 deg anticlockwise from right x axis.
        c=9*COS(i*t)                             :REM Coords of test points at radius ll
        s=9*SIN(i*t)
        p*=4                                      :REM Leftshift any existing data in p
        p-=(POINT(c,s)<>0)*2+(POINT(9*c,9*s)<>0)  :REM and check pixels at radius 11 and 99.
      NEXT
      m=n                                         :REM The index of the shape to plot normally corresponds with recursion depth n.
      IF n=5 AND (43ANDp)=0 p=0:m=7               :REM If n=5 check if a reverse parallelogram is possible (mask 43). If so, clear p and change m to 7.
      REM                                         :REM Check p against mask k, if the shape fits then...
      IF (k ANDp)=0 THEN
        FOR i=-1 TO 0                               :REM draw the shape in colour, and if deeper recursions prove unsuccesful, redraw it in black.
          GCOL0,-i*n                                :REM Colour is equal to n.
          c=99*COS(j*t)                             :REM Set parameters c and s for scaling by 99
          s=99*SIN(j*t)                             :REM and rotation by 0,90,180 or 270 as appropriate.
          x=-1                                      :REM For vertex 1, x=-1 always.
          y=402/3^m MOD3-1                          :REM Lookup y value for vertex 1.
          MOVEc*x-s*y,s*x+c*y                       :REM Use c and s to transform the vertex and move to it.
          x=n<3                                     :REM For vertex 2, coords are 0,0 except for large triangle where they are -1,-1
          y=x                                       :REM in BBC BASIC, TRUE=-1
          MOVEc*x-s*y,s*x+c*y                       :REM Use c and s to transform the vertex and move to it.
          x=2778/3^m MOD3-1                         :REM Lookup x and y value for vertex 3.
          y=5775/3^m MOD3-1                         :REM PLOT85 uses last 2 points + specified point to make triangle, PLOT85+32 makes paralelogram (or square.)
          PLOT85-32*(n MOD6>3),c*x-s*y,s*x+c*y      :REM Use c and s to transform the vertex and draw shape.
          IFi q=FNa(n+1):ORIGINu,v                  :REM If i=-1 recurse to next level. If it fails, reset the origin before replotting this level's shape in black.
        NEXT
      ENDIF
    NEXT
  NEXT
  =0                                                :REM Dummy value to return from function

আউটপুট

এটি পরীক্ষার কেসগুলির জন্য প্রোগ্রামের দ্বারা পাওয়া সমাধানগুলির একটি পূর্ণাঙ্গতা। গল্ফিং কারণে 100 এর পরিবর্তে 99 এর ব্যবহারের ফলে কিছু ছোট কালো ফাঁক পড়ে যায়। অনুসন্ধানগুলি চলাকালীন আকারগুলি আবার অঙ্কিত হওয়ার কারণে এটি কিছু ক্ষেত্রে চালাতে কয়েক সেকেন্ড সময় নিতে পারে এবং এটি দেখতে বেশ আকর্ষণীয়।

এখানে চিত্র বর্ণনা লিখুন


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