Hitori ধাঁধা সমাধান করুন


21

ভূমিকা

কমপক্ষে বাইট ব্যবহার করে হিটারি ধাঁধাগুলির জন্য একটি solver লিখুন ।

চ্যালেঞ্জ

আপনার কাজটি হিটারির (ひ と り, জাপানি ভাষায় "একা" শব্দের জন্য শব্দটির সমাধান) রচনা করা; গেমের নামটির অর্থ "আমাকে একা ছেড়ে দিন") যৌক্তিক ধাঁধা। নিয়মগুলি নিম্নরূপ:

  • আপনাকে কোষের এন-বাই-এন গ্রিডের সাথে উপস্থাপন করা হবে, প্রতিটি ঘরে 1 এবং n এর মধ্যে পূর্ণসংখ্যা থাকে (সমেত)।
  • আপনার লক্ষ্যটি নিশ্চিত করা হয় যে প্রতিটি সারি এবং গ্রিডের প্রতিটি কলামে কোনও সংখ্যা একবারে দেওয়া হয়নি, প্রদত্ত গ্রিড থেকে সংখ্যাগুলি সরিয়ে, পরবর্তী দুটি নিয়মে বর্ণিত বিধিনিষেধের অধীনে,
  • আপনি দুটি সংলগ্ন (অনুভূমিকভাবে বা উল্লম্বভাবে) ঘর থেকে দুটি সংখ্যা সরাতে পারবেন না।
  • অবশিষ্ট সংখ্যাযুক্ত কক্ষগুলি অবশ্যই একে অপরের সাথে সংযুক্ত থাকতে হবে। এর অর্থ হ'ল যে কোনও দুটি অবশিষ্ট কোষটি একটি বক্ররেখার সাথে সংযুক্ত থাকতে পারে যা সংলগ্ন অবশিষ্ট সংখ্যাগুলি (অনুভূমিকভাবে বা উলম্বভাবে) সংযোগকারী একক খণ্ডের সমন্বয়ে গঠিত। (এটি অনুপস্থিত দেখিয়ে দেওয়ার জন্য @ ইউজার ২০২27২৯ toকে ধন্যবাদ)

আমি আশা করি নিয়মগুলি এতক্ষণে পরিষ্কার হয়ে গেছে। যদি নিয়মগুলি সম্পর্কে অস্পষ্ট কিছু থাকে তবে উইকিপিডিয়া পৃষ্ঠাটি দেখুন

পরীক্ষার মামলা

যে কক্ষগুলি থেকে সংখ্যাগুলি সরানো হয় সেগুলি 0 গুলি দিয়ে প্রতিনিধিত্ব করা হয়।

Input  ->  Output

4
2 2 2 4      0 2 0 4
1 4 2 3  ->  1 4 2 3
2 3 2 1      2 3 0 1
3 4 1 2      3 0 1 2

4
4 2 4 3      0 2 4 3
4 1 1 2  ->  4 1 0 2
3 1 2 1      3 0 2 1
4 3 1 3      0 3 1 0

5
1 5 3 1 2      1 5 3 0 2
5 4 1 3 4      5 0 1 3 4
3 4 3 1 5  ->  3 4 0 1 5
4 4 2 3 3      4 0 2 0 3
2 1 5 4 4      2 1 5 4 0

8
4 8 1 6 3 2 5 7      0 8 0 6 3 2 0 7
3 6 7 2 1 6 5 4      3 6 7 2 1 0 5 4
2 3 4 8 2 8 6 1      0 3 4 0 2 8 6 1
4 1 6 5 7 7 3 5  ->  4 1 0 5 7 0 3 0
7 2 3 1 8 5 1 2      7 0 3 0 8 5 1 2
3 5 6 7 3 1 8 4      0 5 6 7 0 1 8 0
6 4 2 3 5 4 7 8      6 0 2 3 5 4 7 8
8 7 1 4 2 3 5 6      8 7 1 4 0 3 0 6

9
8 6 5 6 8 1 2 2 9      8 0 5 6 0 1 2 0 9
5 6 2 4 1 7 9 8 3      5 6 2 4 1 7 9 8 3
5 8 2 5 9 9 8 2 6      0 8 0 5 0 9 0 2 0
9 5 6 6 4 3 8 4 1      9 5 6 0 4 3 8 0 1
1 1 6 3 9 9 5 6 2  ->  0 1 0 3 9 0 5 6 2
1 1 4 7 3 8 3 8 6      1 0 4 7 0 8 3 0 6
3 7 4 1 2 6 4 5 5      3 7 0 1 2 6 4 5 0
3 3 1 9 8 7 7 4 5      0 3 1 9 8 0 7 4 5
2 9 7 5 3 5 9 1 3      2 9 7 0 3 5 0 1 0 

এই পরীক্ষার কেসগুলি যথাক্রমে কনসেপ্ট ইজ প্রহেলিকা , ধাঁধাপুত্র , কনসেপ্ট ইজ পজলিজ , উইকিপিডিয়া এবং ইউটিউব থেকে নেওয়া হয়েছে।

চশমা

  • ব্যতিক্রম হ্যান্ডলিং সম্পর্কে চিন্তা করার দরকার নেই।

  • আপনি ধরে নিতে পারেন যে ইনপুটটি সর্বদা একটি অনন্য সমাধান সহ একটি বৈধ ধাঁধা এবং আপনি আপনার কোড লেখার ক্ষেত্রে এটির সুবিধা নিতে পারেন।

  • এটি , সর্বনিম্ন সংখ্যা বাইট জিতেছে।

  • 4 <= n <= 9 (১ 16 মূলত, স্টিভি গ্রিফিনের পরামর্শ অনুসারে 9 এ পরিবর্তিত হয়েছে, আইওতেও কিছুটা সমস্যা বাঁচায়)

  • আপনি কোনও স্ট্যান্ডার্ড ফর্মের মাধ্যমে ইনপুট নিতে এবং আউটপুট সরবরাহ করতে পারেন , এবং আপনি বিন্যাসটি চয়ন করতে পারেন নিখরচায়।

  • আউটপুট বিন্যাসের জন্য কিছু পরামর্শ হ'ল (তবে আপনি এগুলিতে সীমাবদ্ধ নন)

    • চূড়ান্ত গ্রিড আউটপুট করা হচ্ছে
    • সমস্ত সরানো নম্বর সহ গ্রিড আউটপুট করা
    • উপরের একটির স্থানাঙ্কের একটি তালিকা আউটপুট করুন
  • যথারীতি এখানে ডিফল্ট লুফোলগুলি প্রয়োগ হয়।


সম্পর্কিত (এই চ্যালেঞ্জ দ্বারা অনুপ্রাণিত): ম্যাট্রিক্সের সমস্ত উপাদান সংযুক্ত রয়েছে কিনা তা পরীক্ষা করুন

আমার শেষ চ্যালেঞ্জ: গেম অফ সেভেনের এক্সটেনশন


2
আমি আপনাকে পরামর্শ দিচ্ছি যে আপনার ডিটারমিনিস্টিক রানটাইম প্রয়োজন, বা প্রয়োজন যে সবচেয়ে বড় পরীক্ষার কেসটি 1 মিনিটের বেশি (বা সম্ভবত আরও / কম) এর মধ্যে সমাধান করা যায় না। এছাড়াও, আপনি বলতে 4 <= n <= 16, কিন্তু বৃহত্তম পরীক্ষা ক্ষেত্রে জন্য n=9। আমি আপনাকে প্রস্তাব দিচ্ছি হয় কোনও n=16পরীক্ষার কেস পোস্ট করুন , বা বলুন 4 <= n <= 9। উপায় দ্বারা দুর্দান্ত চ্যালেঞ্জ :)
স্টিভি গ্রিফিন

1
@ স্টেভি গ্রিফিন কীভাবে কেবল একটি পৃথক দ্রুততম অ্যালগরিদম চ্যালেঞ্জ গ্রহণ করবেন?
জোনাথন অ্যালান

@ স্টেভিগ্রিফিন একটি 16x16 যুক্ত করার চেষ্টা করেছে তবে এখনও বেশ প্রস্তুত নয়। এখন 9 এ পরিবর্তিত হয়েছে।
ওয়েজুন চাউ

@ জোনাথান অ্যালান আপনার ইচ্ছামত
ওয়েজুন চাউ

পুনরায় "আমি আরও ভাল হবে কিনা তা দেখার জন্য একটি পরিবর্তন করার সিদ্ধান্ত নিয়েছি": এটি অবশ্যই আরও খারাপ হবে। এছাড়াও আপনার ইতিমধ্যে পোস্ট করা চ্যালেঞ্জটি পরিবর্তন করা উচিত নয়।
ব্যবহারকারী 202729

উত্তর:


3

হাস্কেল , 374 বাইট

import Data.Array;import Data.List;r=range;p=partition
c(e,f)=p(\(b,p)->any(==1)[(b-d)^2+(p-q)^2|(d,q)<-e])f
n#g=[s|(o,(e:f))<-[p((==0).(g!))$indices g],
 null.fst$c(o,o),null.snd$until(null.fst)c([e],f),
 s<-case[((l,c),d)|((l,c),h)<-assocs g,h>0,
 d<-[filter((==h).(g!))$r((l,c+1),(l,n))++r((l+1,c),(n,c))],d/=[]]
 of[]->[g];((c,d):_)->n#(g//[(c,0)])++n#(g//[(c,0)|c<-d])]

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


ধন্যবাদ. খুব চিত্তাকর্ষক. ব্যক্তিগতভাবে আমি একজন শিক্ষানবিস, তবে হাস্কেলের একটি বড় অনুরাগী।
ওয়েইজুন চাউ


1
উপরেরটি অনেকগুলি অক্ষর ছিল পাশাপাশি একটি মন্তব্য রেখে। এটি কেবল কিছু সাদা স্থান সরিয়ে
দিচ্ছে


2

এপিএল (ডায়ালগ ইউনিকোড) , 133 বাইট এসবিসিএস

{q←{⊢/4 2⍴⍵}⌺3 3g←⍵=⊂∪,⍵⋄⍵×~1⊃{((⌈/q b)⌈b<{2<≢∪0,,(⍵×⊢⌈⌈/∘q)⍣≡⍵×(⍴⍵)⍴1+⍳≢,⍵}¨~b∘⌈¨⊂⍤2∘.≡⍨⍳⍴b)(+/↑w<g×⌈.⌈⍨w×g)⌈w b←⍵}⍣≡×\(⌈/=∘⌽⍨q⍵)0}

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

নিয়ম # 4 এর আমার প্রয়োগগুলি (কোষগুলিকে অবশ্যই একটি একক সংযুক্ত উপাদান গঠন করতে হবে) বরং অপচয়যোগ্য, তবুও এটি টিআইওর প্রায় 10 সেকেন্ডের মধ্যে সমস্ত পরীক্ষায় উত্তীর্ণ হয়।


সামগ্রিক অ্যালগরিদম: দুটি বুলিয়ান ম্যাট্রিক্স bএবং wযথাক্রমে কালো এবং সাদা নিশ্চিত কোষগুলির জন্য সঞ্চয় করুন । bঅল-শূন্য হিসাবে শুরু করুন । wবিপরীতে মিলে যাওয়া প্রতিবেশীদের মধ্যে কেবল সেগুলিই 1 হিসাবে শুরু করুন ।

যতক্ষণ না পুনরাবৃত্তি করুন bএবং wস্থির হন:

  • bএকই লাইনে (অনুভূমিক বা উল্লম্ব) এবং একই ঘরে একটি ঘর হিসাবে একই মানের কক্ষগুলিতে যুক্ত করুনw

  • যোগ wসমস্ত কোষ অবিলম্বে প্রতিবেশীদেরb

  • যোগ wসব cutpoints - কোষ যার অপসারণের একাধিক সংযুক্ত উপাদান মধ্যে অ কালো কোষ গ্রাফ বিভক্ত হবে

অবশেষে, আউটপুট not(b)মূল ম্যাট্রিক্স দ্বারা গুণিত।


আপনার আগ্রহ এবং ব্যাখ্যার জন্য আপনাকে অনেক ধন্যবাদ। আমি মনে করি আপনি যা বর্ণনা করেছেন তা একটি সাধারণ অ্যালগরিদমও ব্যবহৃত হয় যদি হাতের ধাঁধাটি সমাধান করতে হয়।
ওয়েইজুন চিউ

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

2

জেলি , 62 বাইট

ব্যবহারকারী 202729 এর অন্য প্রশ্ন থেকে সংযুক্ত monadic লিঙ্ক ব্যবহার করে।


FJṁa@µ«Ḋoµ€ZUµ4¡ÐLFQL<3
ḟ0ĠḊ€
¬T€œ&2\;Ç€FȦ
ZÇȯÇ_1Ŀ
2ḶṗLṗLa⁸ÇÞḢ

তালিকার তালিকার একটি উপস্থাপনা মুদ্রণের একটি সম্পূর্ণ প্রোগ্রাম।
নিষ্ঠুর শক্তি দ্বারা কাজ করে এবং নির্বোধভাবে অদক্ষ।

এটি অনলাইন চেষ্টা করুন! - একটি 3 বাই 3, যেহেতু 60 সেকেন্ডের টিআইও সীমার মধ্যে 4 মাপের এমনকি 4 টি চালানোও খুব অদক্ষ!

কিভাবে?

FJṁa@µ«Ḋoµ€ZUµ4¡ÐLFQL<3 - Link 1 isConnected? List of lists
...                     - 1 if connected 0 if not -- see linked answer in the header

ḟ0ĠḊ€ - Link 2, helperFor-AnyRepeatedValues: list
ḟ0    - filter out zeros
  Ġ   - group indices by value (i.e. [[indices of min],...,[indices of max]]
   Ḋ€ - dequeue €ach -- leaving a list of empty lists iff no repeated values
      -                 any remaining values are non-zero (1-based indexing in Jelly)

¬T€œ&2\;Ç€FȦ - Link 3, columnwiseAnyAdjacentZerosOrRowwiseAnyRepeatedValues: list of lists
¬            - logical not (convert all zeros to ones and all others to zeros)
 T€          - for €ach row get a list of truthy indexes (i.e. indexes of original zeros)
     2\      - pairwise reduction (i.e. for neighbouring rows) with:
   œ&        -   intersection (empty if no columnwise adjacent original zeros
             -                 any remaining values are non-zero due to 1-based indexing)
        Ç€   - call last link (1) as a monad for €ach row
       ;     - concatenate
          F  - flatten into a single list (empty iff no columnwise adjacent original zeros
             -                                   AND no rowwise repeated values)
           Ȧ - any and all (0 if empty [or contains any zero -- never] else 1)

ZÇȯÇ_1Ŀ - Link 4, validity check? list of lists
Z       - transpose
 Ç      - call last link (2) as a monad rowwiseAnyAdjacentZerosOrColumnwiseAnyRepeatedValues?
   Ç    - call last link (2) as a monad columnwiseAnyAdjacentZerosOrRowwiseAnyRepeatedValues?
  ȯ     - logical OR
     1Ŀ - call link 1 as a monad (isConnected?)
    _   - subtract
        - this yields -1 for valid, while it yields 0 or 1 if not.

2ḶṗLṗLa⁸ÇÞḢ - Main link: list of lists
2Ḷ          - lowered range of 2 -> [0,1]
   L        - length (number of rows in the input)
  ṗ         - Cartesian power (all lists of zeros and ones of length L)
     L      - length (number of rows in the input again)
    ṗ       - Cartesian power (all grids of zeros and ones of same shape as the input)
       ⁸    - the input
      a     - logical AND -- effectively uses each of the formed grids as a mask
         Þ  - sort by:
        Ç   -   last link (3) as a monad
          Ḣ - head
            - implicit print

শুরু হিসাবে নি। ধন্যবাদ. আমি একবার দেখবো.
ওয়েজুন চাউ

আপনি চতুর্থ বিধি ভুলে গেছেন। (সংযুক্ত)
ব্যবহারকারী 202729


ওহ ... কম্পিউটারে গেলে মুছবে। ধন্যবাদ।
জোনাথন অ্যালান

হ্যাঁ, আমি মনে করি না এটি সম্ভব, বলুন <জেলির <60 বাইট, <100 ... না বলার জন্য ...
এরিক দ্য আউটগল্ফার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.