আপনি কি বিন্দু সংযোগ করতে পারেন?


18

এই চ্যালেঞ্জটি ফ্লো ফ্রি ভিত্তিক। একটি অনলাইন সংস্করণ এখানে পাওয়া যাবে: http://www.moh97.us/

আপনাকে ধাঁধা দেওয়া হবে এবং 1ধাঁধাটি সমাধানযোগ্য বা 0যদি তা না হয় তবে আপনাকে অবশ্যই ফিরে আসতে হবে ।

একটি ধাঁধা সমাধানের জন্য, খেলোয়াড়কে অবশ্যই প্রতিটি খালি স্কয়ার ব্যবহার করে প্রতিটি সংখ্যার সংযোগের জন্য একটি পথ তৈরি করতে হবে।

আপনি বর্গক্ষেত্রের মাত্রায় পাস করেছেন এবং তারপরে প্রতিটি বিন্দুর x, y, c (যেখানে সি বর্ণকে উপস্থাপন করে এমন একটি সংখ্যা) is উদাহরণ স্বরূপ:

যদি 5,5 0,0,0 3,0,1 1,1,2 1,2,2 4,2,1 4,4,0আপনাকে দেওয়া হয়, তবে এটি উপস্থাপন করবে:

0..1.
.2...
.2..1
....0

এবং ফিরে আসা উচিত 1।


এখানে আরও কিছু পরীক্ষার সমস্যা রয়েছে:

5,2 2,0,1 0,1,2 4,1,2 প্রতিনিধিত্ব করে:

..1..
2...2

এবং সমাধানযোগ্য নয় কারণ এখানে কেবল ১ টি রয়েছে 1

4,2 0,0,0 3,0,0 0,1,0 3,1,0 প্রতিনিধিত্ব করে:

0..0
0..0

এবং দ্রবণযোগ্য নয় কারণ এতে 2 টিরও বেশি 0এস থাকে।

8,6 0,0,1 7,5,1 প্রতিনিধিত্ব করে:

1.......
........
........
........
........
.......1

এবং সমাধানযোগ্য নয় (যেমন আপনি প্রতিটি বর্গ ব্যবহার করতে পারবেন না)।

2,5 0,0,1 2,0,6 4,0,6 0,1,4 3,1,4 4,1,1 প্রতিনিধিত্ব করে:

1.6.6
4..41

এবং সমাধানযোগ্য নয় কারণ আপনি 1 টি সংযোগ করতে পারবেন না।

6,3 1,0,4 5,0,1 0,1,4 1,1,3 5,1,3 0,2,2 3,2,2 5,2,1 প্রতিনিধিত্ব করে:

.4...1
43...3
2..2.1

এবং দ্রবণযোগ্য নয় কারণ আপনি 1 টি (বা 3s) সংযুক্ত করতে পারবেন না, কারণ দুটি পাথ অবশ্যই অতিক্রম করবে cross

5,2 0,0,1 3,0,1 0,1,3 4,1,1 প্রতিনিধিত্ব করে:

1..1.
3...3

এবং সমাধানযোগ্য নয় কারণ আপনি কোনও পথ তৈরিতে সমস্ত স্কোয়ার ব্যবহার করতে পারবেন না।

2,2 0,0,0 1,1,0 প্রতিনিধিত্ব করে:

1.
.1

এবং সমাধানযোগ্য নয় কারণ আপনি এখানে সমস্ত স্কোয়ারও ব্যবহার করতে পারবেন না

এখানে আরও কিছু পরীক্ষা দেওয়া হল:

5,5 0,3,0 0,4,1 1,2,2 1,3,1 2,0,0 3,0,4 3,1,2 3,3,5 3,4,4 4,4,5 1 ফিরে আসা উচিত

13,13 1,1,0 9,1,1 10,1,2 11,1,3 1,2,4 2,2,5 5,2,6 7,2,7 3,3,0 5,4,6 6,4,1 9,6,3 4,7,8 5,8,9 12,8,8 11,9,10 2,10,4 4,10,2 9,10,5 11,10,7 1,11,9 12,12,10 1 ফিরে আসা উচিত

7,7 0,0,0 0,1,1 1,1,2 2,1,3 4,2,4 0,3,1 5,3,3 0,4,4 2,4,5 5,4,2 0,5,0 1,5,5 3,5,6 3,7,6 0 ফিরে আসা উচিত


এটি একটি কোড গল্ফ এবং মানক বিধিগুলি প্রযোজ্য।


2
কোনও সমাধানকে কি "বাস্তবসম্মতভাবে" সঠিক বা তাত্ত্বিকভাবে সঠিক হতে হবে? উদাহরণস্বরূপ, রাষ্ট্রীয় স্থানটি প্রতিটি খালি ঘরে একটি সম্ভাব্য ইনপুট-ইন-ইনপুট কনফিগারেশনগুলির মধ্যে একটি অর্পণ করে ভেঙে ফেলা যায়। সমাধানযোগ্যতা সহজেই সমস্ত 6 ^ N সংমিশ্রণের চেষ্টা করে এবং 1যদি তাদের মধ্যে যে কোনও একটিতে সমস্ত কোষ পরিদর্শন করে এবং সমস্ত টার্মিনাল সংযোগ করে তবে ফিরে আসার মাধ্যমে নির্ধারিত হয় । স্পষ্টতই এই পদ্ধতির সামান্যতম N(খালি কোষের সংখ্যা) ব্যতীত অন্য যে কোনও কিছুর জন্য যুক্তিসঙ্গত পরিমাণে সম্পূর্ণ হবে না , তবে আমাদের কাছে এখনও গাণিতিক গ্যারান্টি রয়েছে যে আলগোরিদম শেষ পর্যন্ত সঠিক মানটি ফিরিয়ে আনবে।
COTO

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

1
@ নাথানমারিল: সমস্যাটি স্যাট থেকে হ্রাসযোগ্য এবং এইভাবে এনপি কঠিন।
কোটো

3
@ নাথনমিরিল স্যাট-তে কোনও সমস্যা হ্রাস করার অর্থ সমস্যাটি এনপিতে রয়েছে, এটি এনপি-হার্ড নয় - এটি স্যাটকে এমন একটি সমস্যায় হ্রাস করে যা সমস্যার এনপি-কঠোরতা দেখায়। আপনি যে পৃষ্ঠায় লিঙ্ক করেছেন তাতে এনপি-সম্পূর্ণতার প্রমাণের লিঙ্ক রয়েছে।
পিচবোর্ড_বক্স

1
@ ভিজুয়েলমেলন ডিজিট রঙটি ভুল শব্দ। প্রতিটি রঙ ডিজিট নয়, আলাদা সংখ্যা দ্বারা প্রতিনিধিত্ব করা হয়।
নাথান মেরিল

উত্তর:


3

Haskell,

import Data.List.Split
import qualified Data.Sequence as Q
import Data.List
import Control.Monad

data A a = S a | E a | P a | X deriving Eq

sc = foldr1 (Q.><)
sp b x y p = Q.update y (Q.update x p $ b `Q.index` y) b
dt b c | S c `elem` sc b = E c
       | otherwise = S c
ad b [x, y, c] = sp b x y (dt b c)

ep b [x, y, c] = do
  let nps = filter ob [(x+1, y), (x-1, y), (x, y+1), (x, y-1)]
      ns = map gp nps
  [b | E c `elem` ns] ++ do
    (x', y') <- filter ((== X) . gp) nps
    ep (sp b x' y' (P c)) [x', y', c]
  where ob (u, v) = 0 <= u && u < length (b `Q.index` 0) && 0 <= v && v < length b
        gp (u, v) = b `Q.index` v `Q.index` u

rd i = let [c, r] : ps = (map read . splitOn ",") <$> words i :: [[Int]]
           e = Q.replicate r $ Q.replicate c X
           cs = map last ps
           ss = nubBy (\[_,_,c1] [_,_,c2] -> c1 == c2) ps
           b = foldl ad e ps
           bs = foldM ep b ss
       in if even (length cs) && length ss == length cs `div` 2 &&
             (all (\[j,k] -> j==k) . chunksOf 2 . sort $ cs) &&
             any (null . Q.elemIndicesL X . sc) bs
           then 1
           else 0

main = rd <$> getContents >>= print

মূল

  • এসসি: সিক কনট্যাট
  • এসপি: সেট অবস্থান
  • dt: বিন্দুর ধরণ (যেমন, শুরু বা রেখার শেষ)
  • বিজ্ঞাপন: বিন্দু যোগ করুন
  • এপি: পথ প্রসারিত
  • আরডি: রান বিন্দু (প্রাথমিক খাঁটি অ্যালগরিদম)

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

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

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