পেন্টোমিনো 6x10 সমাধান নরমালাইজার


19

আপনি সম্ভবত এখন হিসাবে, 6x10 গ্রিডে পেন্টোমিনো ধাঁধাটির 2339 টি সমাধান রয়েছে। 12 টি পেন্টোমিনোজের জন্য বিভিন্ন লেবেলিং স্কিম রয়েছে, এর মধ্যে দুটি নীচের চিত্রটিতে দেখানো হয়েছে:

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

চিত্র ক্রেডিট: উইকিপিডিয়া

বর্তমান কাজের উদ্দেশ্যে আমরা বলব যে একটি সাধারণ পেন্টোমিনো সলিউশন হল এমন একটি সমাধান যা দ্বিতীয় লেবেলিং স্কিম (কনওয়ের) ব্যবহার করে।

উদাহরণ:

O O O O O S S S Z Z
P P R R S S W W Z V
P P P R R W W Z Z V
U U X R T W Y V V V
U X X X T Y Y Y Y Q
U U X T T T Q Q Q Q

Oপরিকল্পিতভাবে 5 স্কোয়ারযুক্ত টুকরোটি স্কিম অনুসারে অক্ষর দ্বারা চিহ্নিত করা হয় । সমস্ত টুকরা জন্য একই।

টাস্ক:

6x10 পেন্টোমিনোতে একটি সমাধান দেওয়া হয়েছে যাতে টুকরোটি এলোমেলো শিমযুক্ত লেবেলযুক্ত রয়েছে, এটিকে স্বাভাবিক করুন যাতে সমস্ত টুকরা কনওয়ের লেবেলিং স্কিমের লেবেলযুক্ত হয়। আপনাকে টুকরোগুলি সনাক্ত করতে হবে এবং নির্দিষ্ট টুকরোটির প্রতিটি বর্গক্ষেত্রটি চিহ্নের চিহ্ন সহ চিহ্নিত করতে হবে।

ইনপুট:

সমাধানটি সাধারণ করার জন্য, আপনার পক্ষে উপযুক্ত যে কোনও বিন্যাসে, উদাহরণস্বরূপ:

  • একটি মাল্টলাইন স্ট্রিং

  • স্ট্রিংগুলির একটি তালিকা

  • অক্ষরের তালিকার একটি তালিকা

ইত্যাদি

আউটপুট:

একই সমাধান (সমস্ত টুকরো পজিশন এবং ওরিয়েন্টেশন সংরক্ষিত) তবে প্রতিটি টুকরা কনওয়ের লেবেলিং স্কিম অনুযায়ী লেবেলযুক্ত। দ্রষ্টব্য: আউটপুটটি 6x10 টি অক্ষরের গ্রিড হিসাবে মুদ্রিত হওয়া আবশ্যক। শীর্ষস্থানীয় এবং পিছনে থাকা নতুন লাইনের এবং স্থানগুলিকে অনুমোদিত। উপরের উদাহরণ হিসাবে আপনি অক্ষরগুলির মধ্যে একটি ফাঁকা জায়গা (তবে খালি লাইন নয়) মুদ্রণ করতে পারেন।

পরীক্ষার কেস:

1. ইনপুট:

6623338888
6222344478
66A234BB70
1AAA94B770
11A99BB700
1199555550

আউটপুট:

UURTTTQQQQ
URRRTVVVSQ
UUXRTVZZSY
PXXXWVZSSY
PPXWWZZSYY
PPWWOOOOOY

2. ইনপুট:

45ookkkk00
455ooogk00
4a55gggdd0
4aaa3gnnd.
4am333ndd.
mmmm3nn...

আউটপুট:

OWSSQQQQPP
OWWSSSRQPP
OTWWRRRUUP
OTTTXRZZUV
OTYXXXZUUV
YYYYXZZVVV

জয়ের মানদণ্ড:

প্রতিটি ভাষার বাইটের মধ্যে সংক্ষিপ্ততম সমাধানটি জয়লাভ করে। গল্ফিং ভাষা দ্বারা নিরুত্সাহিত করবেন না। অ্যালগরিদমের ব্যাখ্যা এবং বাস্তবায়ন স্বাগত।



@ কেভিন ক্রুজসেন আপনাকে ধন্যবাদ! (আমি টেট্রোমোনো সম্পর্কিত প্রশ্নগুলির জন্য যাচাই করিনি)
গ্যালেন ইভানভ

উত্তর:


12

এপিএল (ডায়ালগ ক্লাসিক) , 54 53 50 বাইট

⍴⍴{'OXRYTPZQUWSV'[⌊5÷⍨⍋⍋,{×/+⌿↑|(⊢-+/÷≢)⍸⍵}¨⍵=⊂⍵]}

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

ইনপুটে প্রতিটি পেন্টোমিনোর জন্য একটি অদমিকার গণনা করুন: এর প্রতিটি স্কোয়ার থেকে মাধ্যাকর্ষণ কেন্দ্র পর্যন্ত পরিমাপ করুন (∆x, ∆y), অ্যাবস ()x) এবং অ্যাবস (∆y) নিন, এক্স উপাদানগুলি যোগ করুন এবং পৃথকভাবে y উপাদান, এবং দুটি যোগফল গুণ। এটি 12 স্বতন্ত্র ফলাফল দেয়। তারপরে, সমস্ত আক্রমণকারীদের বাছাই করা সংগ্রহে প্রতিটি পেন্টোমিনোর আক্রমণকারীটির সূচকটি সন্ধান করুন। 0 এর সাথে 'O'1 'X', 2 সাথে 2 'R'ইত্যাদি প্রতিস্থাপন করুন


দ্রুত উত্তর এবং ব্যাখ্যাটির জন্য আপনাকে ধন্যবাদ, আমার কাছ থেকে +1! আমি বোঝাতে চাইছি সমাধানটি স্পষ্টভাবে 6x10 গ্রিড হিসাবে মুদ্রিত করা হবে। আমি স্বাদ পরিবর্তন করেছি, দয়া করে আপনার সমাধানটি আপডেট করুন - অসুবিধার জন্য আমি দুঃখিত।
গ্যালেন ইভানভ

@ গ্যালেনিভানভ কিন্তু ... এটি একটি গ্রিড । আমার পরীক্ষাগুলি ফলাফল মুদ্রণের পরিবর্তে "ঠিক আছে" - সম্ভবত এটি খুব বিভ্রান্তিকর?
এনজিএন

হ্যাঁ, আমি পরীক্ষাগুলিতে বিভ্রান্ত হয়ে পড়েছিলাম।
গ্যালেন ইভানভ

3
এখন তারা ফলাফলটি যাচাইয়ের আগে মুদ্রণ করবে
ngn

4

জেলি , 37 বাইট

ŒĠZÆmạƊ€ḅı§AỤỤị“æṂ⁾+’Œ?¤+78Ọ,@FQṢƊyⱮY

স্ট্রিংগুলির একটি তালিকা নেওয়ার একটি সম্পূর্ণ প্রোগ্রাম (কারণ আমাদের অবশ্যই মুদ্রণ করতে হবে - অন্যথায় ট্রেইলিংটি সরিয়ে ফেলতে হবে Yএবং আপনার কাছে একটি মোনাদ রয়েছে যা সংখ্যার বা অক্ষরের তালিকার একটি তালিকা গ্রহণ করে যা অক্ষরের তালিকাগুলির তালিকার তালিকা দেয়) returns

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

কিভাবে?

আমি বিশ্বাস করি যে এটি পেন্টোমিনোসের একই শ্রেণিবিন্যাসকে এনজিএন এর এপিএল সমাধান হিসাবে ব্যবহার করে কাজ করে , কিছুটা ভিন্ন উপায়ে (যদিও আমি এপিএলকেও জানি না তাই আমি জানি না যে পদ্ধতিটি শ্রেণিবদ্ধকরণের বাইরে কীভাবে অনুরূপ)।

(মনে রাখবেন যে “æṂ⁾+’Œ?¤+78Ọএটি ওয়ান-বাইট সংরক্ষণের চেয়ে বেশি “XRPTZWUYSVQO”!)

ŒĠZÆmạƊ€ḅı§AỤỤị“æṂ⁾+’Œ?¤+78Ọ,@FQṢƊyⱮY - Main Link: list of lists of characters L
ŒĠ                                    - group multidimensional indices by value
      Ɗ€                              - last three links as a monad for €ach i.e. f(x):
  Z                                   -   transpose x
   Æm                                 -   mean (vectorises) (i.e. the average of the coordinates)
     ạ                                -   absolute difference with x (vectorises) (i.e. [dx, dy])
         ı                            - square root of -1 (i)
        ḅ                             - convert from base (vectorises) (i.e a list of (i*dx+dy)s)
          §                           - sum each
           A                          - absolute value (i.e. norm of the complex number)
            Ụ                         - grade up (sort indices by value)
             Ụ                        - grade up (...getting the order from the result of A back,
                                      -              but now with one through to 12)
                       ¤              - nilad followed by links as a nilad:
               “æṂ⁾+’                 -   base 250 literal = 370660794
                     Œ?               -   permutation@lex-index = [10,4,2,6,12,9,7,11,5,8,3,1]
              ị                       - index into
                        +78           - add seventy-eight
                           Ọ          - cast to characters (character(1+78)='O', etc...)
                                 Ɗ    - last three links as a monad (i.e. f(L)):
                              F       -   flatten
                               Q      -   de-duplicate
                                Ṣ     -    sort
                            ,@        - pair (with sw@pped @rguments) (giving a list of 2 lists)
                                   Ɱ  - Ɱap across L with:
                                  y   -   translate i.e. swap the letters as per the the pair)
                                    Y - join with new lines
                                      - implicit print

2

ওল্ফ্রাম ভাষা (গণিত) , 103 বাইট a

""<>Riffle[(t=#)/.Thread[SortBy[Union@@t,Tr@Kurtosis@Position[t,#]&]->Characters@"UPSWZVRTQXYO"],"\n"]&

অক্ষরের তালিকার তালিকা হিসাবে ইনপুট নেয়।

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

এখানে মূল ধারণাটি হ'ল ইনপুটটির প্রতিটি চরিত্রের জন্য, আমরা যেখানে স্থানাঙ্কগুলি ঘটে তা সন্ধান করি, কুর্তোসিসটি গ্রহণ করি এবং এর স্থানাঙ্কগুলি যোগ করি। এটি আমাদের প্রতিটি টুকরো জন্য একটি আক্রমণকারী দেয়।

(পরিসংখ্যানগুলি থেকে কুর্তোসিস বেশিরভাগ ক্ষেত্রে অপ্রাসঙ্গিক অপারেটর - মূলটি হ'ল এটি অনুবাদের অধীনে অপরিবর্তনীয়, তবে প্রতিচ্ছবি এবং ঘূর্ণন বেশিরভাগ স্থানাঙ্কগুলির ক্রমকে স্যুইচ করতে পারে We আমরা স্থানাঙ্কগুলির সংমিশ্রণ করি, সুতরাং আক্রমণকারী কখনই পরিবর্তন হয় না))

যাইহোক, অদ্ভুত আক্রমণকারী বাদে, এই সমাধানটি অন্যদের সাথে সমান: আমরা অক্ষরগুলি এবং প্রতিটি টুকরো টুকরোগুলি প্রতিটি আক্রমণকারী দ্বারা বাছাই করি, তারপরে প্রতিটি চরিত্রের সাথে সম্পর্কিত চরিত্রটি প্রতিস্থাপন করুন "UPSWZVRTQXYO": টুকরা, কুরটোসিস যোগফল অনুসারে সাজানো।

অবশেষে, ""<>Riffle[...,"\n"]একটি গ্রিড কোড হিসাবে মুদ্রণ।


এমন কোনও অপারেশন সম্পর্কে জানার জন্য যা আমি কখনও শুনিনি এবং এটি ভাল ব্যবহারের জন্য রেখেছি
ব্ল্যাক আউল কাই

একটি সমাধানে আমার প্রথম প্রয়াসটি তার Sort@Varianceজায়গায় হয়েছিল Tr@Kurtosisএবং সম্ভবত আরও লোকেরা বৈচিত্রের কথা শুনেছেন। তবে Tr@Varianceকাজ করে না কারণ বেশ কয়েকটি পেন্টোমিনোয়াস (যেমন পি এবং এক্স) এর এক্স-ভেরিয়েন্স এবং ওয়াই-ভেরিয়েন্সের সমষ্টি রয়েছে। তাই আমি ম্যাথমেটিকার ডকুমেন্টেশনগুলি সন্ধানের জন্য কিছু ফ্যানসিয়ারের জন্য গিয়েছিলাম।
মিশা লাভরভ 21

2

পাইথন 2 , 191 বাইট

def y(o):print"".join(['XPRTWZUYSVQO\n'[[w for v,w in sorted([sum(abs(u-sum(t)/5)for t in[[complex(r%11,r/11)for r,q in enumerate(o)if q==p]]for u in t),p]for p in o)].index(x)/5]for x in o])

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

একটি চলন্ত নিউলাইন সহ একটি বহু-লাইন স্ট্রিং নেয় এবং ছয়টি নেস্টেড তালিকা বোধগম্যতা করে।

অবহেলিত সংস্করণ

def pentomino_normalizer(input_string):
    # input_string is a multi-line string with a trailing newline

    results = []  # For saving the results of the for loop
    for current_char in input_string:
        # current_char = p in the golfed version

        # The python data type complex stores a real and a imaginary value and
        # is used for storing the x and y coordinates.
        # In the end, the positions list contains a complex number for every
        # occurence of current_char in the string
        # positions_list = t in the golfed version
        positions_list = [complex(i % 11, i / 11) for i, c
                          in enumerate(input_string) if c == current_char]
        # average_pos is the midpoint of all occurences of current_char, 
        # to get rid of translations
        average_pos = sum(positions_list)/5
        # Calculates a value for each tile that is invariant under 
        # translations and rotations,
        # simply the sum of all the distances between the midpoint
        # and the positions
        invariant = sum(abs(pos - average_pos) for pos in positions_list)

        # Saves the invariant value to a list
        results.append(invariant, current_char)

    # This new list contains the characters occuring in the string, sorted
    # by the invariant value. Because this was done with each char in the 
    # input string, this lists contains every value five times and also 
    # contains six newlines
    # at the end of the list
    sorted_results = [w for v, w in sorted(results)]

    # This code snippet maps each char from the input string to its according
    # output and prints to stdout
    chars = ['XPRTWZUYSVQO\n'[sorted_results.index(c)/5] for c in input_string]
    print "".join(chars)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.