আরও হার্ড অবজেক্টস বা সফট অবজেক্টস রয়েছে


19

হোয়াট-ইফ বইয়ের উদ্বোধন থেকে উত্সাহিত Tan

ইনপুটটি স্ট্রিং, স্ট্রিংয়ের তালিকা ইত্যাদি হিসাবে ফাঁকা স্থানগুলির একটি আয়তক্ষেত্র যার #অভ্যন্তরের অভ্যন্তরে তৈরি জিনিসগুলি :

########          
#      #          
########          

   ###        ####
   ###        ####
   ###             

অবজেক্টগুলি সর্বদা আন্তঃ ছেদযুক্ত, অ-স্পর্শকৃত, আয়তক্ষেত্রগুলির হবে। একটি নরম অবজেক্ট এমন একটি উপাদান হিসাবে সংজ্ঞায়িত করা #হয় যা মাঝখানে পূর্ণ হয় না এবং এটি কেবল একটি সীমানা, একটি হার্ড অবজেক্ট এমন একটি যা পূর্ণ হয়। প্রস্থ বা উচ্চতা সহ <=2একটি বিষয় কঠোর বিবেচনা করা হয়। সমস্ত বস্তু হয় শক্ত বা নরম।

যদি ইনপুট, আউটপুট "Hard", আরও বেশি নরম, আউটপুট "Soft", যদি তারা সমান হয় তবে আউটপুট আরও শক্ত বস্তু থাকে "Equal"

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোড !

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

এই কেসগুলি সম্পূর্ণ ইনপুট নয়, বরং প্রতিটি বস্তুকে কী হিসাবে চিহ্নিত করা উচিত। আসল ইনপুটটি প্রশ্নের শীর্ষে আসকি-আর্টের মতো হবে।

কঠিন

#

####

##
##

##########
##########
##########

নরম

###
# #
###

###################
#                 #
#                 #
#                 #
###################

####
#  #
#  #
#  #
#  #
#  #
#  #
#  #
####

আসল পরীক্ষার কেস

########          
#      #          
########          

   ###        ####
   ###        ####
   ###             

Hard

###                
###                
###                

###################
#                 #
#                 #
#                 #
###################

Equal

   ######    
   #    #    
   ######    
          ###
   ##  #  # #
          ###


 ########    
 #      #    
 ########  

Soft

2
আউটপুটগুলি কি কঠোর, বা কোনও 3 টি দ্ব্যর্থহীন আউটপুট ব্যবহার করা যেতে পারে (যেমন এইচ / এস / ই বা -1/0/1)?
ট্রাইকোপলাক্স

@ ট্রাইকোপ্লেক্স তারা কঠোর
মালটিসেন

3
জটিল I / O ফর্ম্যাটের মেটা উত্তর (আপনি যা পছন্দ করেন তা আপনি করতে পারবেন না তা বলার অপেক্ষা রাখে না, তবে তারা ইচ্ছা করলে লোকেরা আরও সূক্ষ্ম মতামত প্রকাশের জন্য জায়গা দেয়)।
ট্রাইকোপল্যাক্স

যোগ করেছেন!
মাল্টেসেন

যোগ করুন
মালটিসেন

উত্তর:


8

এমএটিএল , 105 104 58 50 49 বাইট

@ নীলকে এমন একটি পরামর্শের জন্য ধন্যবাদ যা আমাকে 46 বাইট অপসারণ করতে দিয়েছে!

2\TTYaEq4:HeqgEqZ+K/Zot0>+ss'Soft Hard Equal'Ybw)

ইনপুটটি 2D চর অ্যারে, সারিগুলি পৃথক করে পৃথক করে ;। চ্যালেঞ্জের উদাহরণ হ'ল

['########          ';'#      #          ';'########          ';'                  ';'   ###        ####';'   ###        ####';'   ###            ']

এখানে আরও একটি উদাহরণ:

['###                ';'###                ';'###                ';'                   ';'###################';'#                 #';'#                 #';'#                 #';'###################']

এটি অনুরূপ

###                
###                
###                

###################
#                 #
#                 #
#                 #
###################

এবং এইভাবে দেওয়া উচিত 'Equal'

তৃতীয় উদাহরণ হিসাবে, সম্পর্কিত 'Soft',

['   ######    ';'   #    #    ';'   ######    ';'          ###';'   ##  #  # #';'          ###';'             ';'             ';' ########    ';' #      #    ';' ########    ']

এটাই,

   ######    
   #    #    
   ######    
          ###
   ##  #  # #
          ###


 ########    
 #      #    
 ########  

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

ব্যাখ্যা

আকারগুলি সনাক্ত করতে এটি 2 ডি কনভোলজেশন ব্যবহার করে। ইনপুটটি 2D অ্যারেতে 1নির্দেশিত #এবং -1স্থানের সাথে রূপান্তরিত হয় ; এবং -1মানগুলির একটি ফ্রেমযুক্ত প্যাডযুক্ত । এটি আশ্বাস দেয় যে মূল ক্ষেত্রের প্রান্তে আকারগুলিও সনাক্ত করা হয়েছে।

একটি নরম বস্তু মুখোশ দ্বারা সনাক্ত করা হয়

 1   1
 1  -1

যা একটি খালি অভ্যন্তর বিন্দুর সাথে অবজেক্টের উপরের-বাম কোণে মিলে যায়। নোট করুন যে কনভলশনটি মাস্ককে উল্টে দেয়, তাই এটি [-1 1; 1 1]কোড হিসাবে সংজ্ঞায়িত করা হয়। অবস্থানগুলির সংখ্যা এস যেখানে কনভোলশন সমান 4, নরম বস্তুর মোট সংখ্যা।

একটি বস্তু (নরম বা শক্ত) মাস্ক দ্বারা সনাক্ত করা হয়

-1  -1
-1   1

যা কিছু খালি বহির্মুখী পয়েন্টের সাথে অবজেক্টের উপরের-বাম কোণে সংশোধন করে। এই মুখোশটি পূর্বেরটির উপেক্ষিত সংস্করণ, সুতরাং পূর্ববর্তী সমঝোতার ফলাফলটি পুনরায় ব্যবহার করা যেতে পারে। বিশেষত, পজিশনের টি টিতে যে ফলাফলটির সমান -4হয় তা হ'ল সামগ্রীর সংখ্যা।

শক্ত বস্তুর এইচ সংখ্যা টি - এস । আউটপুট স্ট্রিংটি এস - এইচ = 2 * এস - টি এর চিহ্ন দ্বারা নির্ধারিত হয় ।

2\                 % Input. Modulo 2: '#' gives 1, ' ' gives 0
TTYa               % Add a frame of zeros
Eq                 % Convert 0 to -1
4:HeqgEq           % Generate mask [-1 1; 1 1], for soft objects
Z+                 % 2D convolution, preserving size
K/Zo               % Divide by 4 and round towards 0. Gives 1 or -1 for 4 or -4
t0>                % Duplicate. 1 for positive entries (soft objects), 0 otherwise
+                  % Add. This corresponds to the factor 2 that multiplies number S
ss                 % Sum of 2D array. Gives 2*S-T
'Soft Hard Equal'  % Push this string
Yb                 % Split by spaces. Gives cell array
w)                 % Swap. Apply (modular) index to select one string

1
সুতরাং, কোন সমঝোতা কী তা আমার কোনও ধারণা নেই তবে আপনি কেবলমাত্র সমস্ত বস্তু গণনা করতে পারেন নি (উদাহরণস্বরূপ উপরের বাম কোণটি আবিষ্কার করে) এবং নরম বস্তুর দ্বিগুণ সংখ্যার সাথে তুলনা করতে?
নীল

@ নিল যা খুব আশাব্যঞ্জক দেখাচ্ছে, ধন্যবাদ! এইভাবে আমি 5 থেকে 2 টি কনভোলিউশন হ্রাস করতে পারি। (নির্দিষ্টভাবে কোনও প্যাটার্নে কোনও অবস্থানের সাথে মেলে কিনা একটি কনভলশনটি মূলত তা দেখছে)। আমি পরে এটি চেষ্টা করব
লুইস মেন্ডো

... বা এমনকি মাত্র 1 সমঝোতা! অনেক ধন্যবাদ! 46 বাইট বন্ধ :-) @ নীল
লুইস মেন্ডো

3
এটি প্রায় জেএসের সাথে সমান ছিল ... @ নীল আপনি কোন দিকে আছেন ;-)
এডসি 65

6

জাভাস্ক্রিপ্ট (ES6), 123 121 118 বাইট

s=>s.replace(/#+/g,(m,i)=>s[i+l]>" "?0:n+=!m[1]|s[i-l+1]==s[i-l]||-1,n=l=~s.search`
|$`)|n>l?"Hard":n<l?"Soft":"Equal"

@ Edc65 এর জন্য 2 বাইট সংরক্ষণ করা হয়েছে!

একটি গ্রিড গঠনের জন্য ফাঁকা স্থানগুলি সহ মাল্টিলাইন স্ট্রিং হিসাবে ইনপুট নেয়।

ব্যাখ্যা / পরীক্ষা

এমএটিএল দৈর্ঘ্যের খুব কাছে! মূলত, এটি #প্রতিটি বস্তুর উপরের রেখার সন্ধান করে এবং উপরের লাইনের দৈর্ঘ্য যদি 2 এর কম হয় বা উপরের লাইনের নীচে প্রথম 2 টি অক্ষর একই হয় তবে তা শক্ত, অন্যথায় নরম।

var solution =

s=>
  s.replace(/#+/g,(m,i)=>        // for each run of consecutive # characters
    s[i+l]>" "?                  // if the position above the match contains a #
      0                          // do nothing (this object has already been counted)
    :n+=                         // add 1 to the counter (hard) if
      !m[1]                      // the match is only 1 # wide
      |s[i-l+1]==s[i-l]          // or the characters below are the same
      ||-1,                      // else decrement the counter (soft)
    n=                           // n = counter, hard objects increase n, soft decrease
    l=~s.search`\n|$`            // l = (negative) line length
  )
  |n>l?"Hard":n<l?"Soft":"Equal" // return the result string

// Test
document.write("<pre>" + [`

########          
#      #          
########          
                  
   ###        ####
   ###        ####
   ###            

`,`

###                
###                
###                
                   
###################
#                 #
#                 #
#                 #
###################

`,`

   ######    
   #    #    
   ######    
          ###
   ##  #  # #
          ###
             
             
 ########    
 #      #    
 ########    

`,`

########          
#      #          
########          
                  
   ###        ####
   # #        ####
   ###            

`,`

########          
#      #          
########          
                  
   ###  ###   ####
   ###  # #   ####
   ###  ###       

`,`

#

`,`

##

`,`

#
#

`,`

###
# #
###

`].map((test) => solution(test.slice(2, -2))).join("\n")
)


একক-লাইন ইনপুট নিয়ে সমস্যা আছে বলে মনে হচ্ছে; ###আয় Equal
ডেনিস

@ ডেনিস আপনি ঠিক বলেছেন দেখে মনে হচ্ছে একক লাইন ইনপুটটির জন্য আমার আগের কোডটি আমি ঠিক করা বাগের উপর নির্ভর করেছি। এখনই স্থির।
ব্যবহারকারী81655

আইএমএইচও এর ~g.search(/$/m)চেয়ে কিছুটা বেশি পঠনযোগ্য ~g.search`\n`||-1
নীল

নিল ট্রু একটি ত্রুটি ছিল তাই আমি তাড়াহুড়া ||-1করে এটি ঠিক করার জন্য চেষ্টা করেছি, তবে আপনার পরামর্শ আমাকে বুঝতে পেরেছিল যে |$রেজেক্সে যুক্ত করা যাইহোক 2 বাইট সংরক্ষণ করতে পারে। ধন্যবাদ!
ব্যবহারকারী 81655

আপনি কেবল 1 কাউন্টার ব্যবহার করতে পারেনn=l=... n>l?...:n<l?...:...
edc65

4

জেলি, 50 49 46 43 38 34 34 33 32 বাইট

Ḥ+ḊZ
>⁶ÇÇFµċ7_ċ4$Ṡị“¤Ỵf“¢*ɦ“¡⁺ƒ»

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

পটভূমি

আছে 16 বিভিন্ন 2 × 2 ব্লক এবং স্পেস নিদর্শন:

|  |  |  | #|  | #| #|# | #|# |# |##|# |##|##|##|
|  | #|# |  |##| #|# |  |##| #|# |  |##| #|# |##|

এর মধ্যে যেহেতু দুটি বস্তু কখনই স্পর্শ করবে না,

| #|# |
|# | #|

ইনপুটটিতে কখনই ঘটবে না, আমাদের 14 টি সম্ভাব্য নিদর্শন রেখে ।

বরাদ্দ করা    একটি মান 0 এবং #মান 1 , আমরা একটি এনকোড করতে 2 × 2 প্যাটার্ন

|ab|
|cd|

হিসাবে 2 (2a + সি) + (2 বি + ডি) = 4 এ + 2 বি + 2 সি + ডি , 14 নিদর্শনগুলির জন্য নিম্নলিখিত মানগুলি রেখে ।

|  |  |  | #|  | #|# | #|# |##|# |##|##|##|
|  | #|# |  |##| #|  |##|# |  |##| #|# |##|
  0  1  2  2  3  3  4  5  6  6  7  7  8  9

আংশিক 2 × 1 , 1 × 2 এর জন্যনীচের এবং / বা ডান সীমানায় বা 1 × 1 নিদর্শনগুলির জন্য, আমরা তাদের সাথে যথাযথভাবে 4a + 2 বি , 4 এ + 2 সি এবং 4 হিসাবে এনকোড করে ফাঁকা জায়গাগুলির মতো আচরণ করব them ।

এইভাবে, প্রতিটি বস্তুর (নরম বা শক্ত) ঠিক একটি 4 প্যাটার্ন থাকবে (এর নীচের ডান কোণে); প্রতিটি নরম বস্তু ঠিক দুই থাকবে 7 নিদর্শন (তার নিচের বাম এবং তার উপরের ডান দিকের কোণায়)।

সুতরাং, 7 সংখ্যা থেকে 4 নিদর্শনগুলির পরিমাণ বিয়োগ করে নিদর্শন ইনপুট সম্মুখীন সমর্পণ করা হবে 2s = জ - - (গুলি + H) গুলি: = D , যেখানে এবং গুলি হার্ড এবং নরম বস্তুর পরিমাণ তারা রূপ।

তাই আমরা ছাপি হার্ড যদি ঘ> 0 , নরম যদি ঘ <0 এবং সমান যদি D = 0

কিভাবে এটা কাজ করে

Ḥ+ḊZ                         Helper link. Input: M (n×m matrix)

Ḥ                            Unhalve; multiply all entries of M by 2.
  Ḋ                          Dequeue; remove the first row of M.
 +                           Perform vectorized addition.
                             This returns 2 * M[i] + M[i + 1] for each row M[i].
                             Since the M[n] is unpaired, + will not affect it,
                             as if M[n + 1] were a zero vector.
   Z                         Zip; transpose rows with columns.


>⁶ÇÇFµċ7_ċ4$Ṡị“¤Ỵf“¢*ɦ“¡⁺ƒ»  Main link. Input: G (character grid)

>⁶                           Compare each character with ' ', yielding 1 for '#'
                             and 0 for ' '.
  Ç                          Call the helper link.
                             This will compute (2a + c) for each pattern, which is
                             equal to (2b + d) for the pattern to its left.
   Ç                         This yields 2(2a + c) + (2b + d) for each pattern.
    F                        Flatten; collect all encoded patterns in a flat list.

     µ                       Begin a new, monadic link. Argument: A (list)
      ċ7                     Count the amount of 7's.
         ċ4$                 Count the amount of 4's.
        _                    Subtract the latter from the former.
            Ṡ                Yield the sign (1, -1 or 0) of the difference.
              “¤Ỵf“¢*ɦ“¡⁺ƒ»  Yield ['Hard', 'Soft', Equal'] by indexing into a
                             built-in dictionary.
             ị               Retrieve the string at the corresponding index.

1

জুলিয়া, 99 95 93 বাইট

~=t->2t'+[t[2:end,:];0t[1,:]]'
!x=("Hard","Equal","Soft")[sign(~~(x.>32)∩(4,7)-5.5|>sum)+2]

! যুক্তি হিসাবে দ্বিমাত্রিক চর অ্যারে প্রত্যাশা করে। এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

এটি আমার জেলি উত্তর হিসাবে প্রায় একই ধারণা ব্যবহার করে , একটি উন্নতি করে:

পরিবর্তে পরিমাণ বেড়ে চলেছে এর 4 's এবং 7 এর, আমরা সব অন্যান্য সংখ্যার অপসারণ, তারপর বিয়োগ 5.5 ম্যাপ (4, 7) থেকে (-1.5, 1.5) । এইভাবে, ফলাফলের পার্থক্যের যোগফলের চিহ্নটি সঠিক আউটপুট নির্ধারণ করে।


0

টিএসকিউএল, 328 249 বাইট

ভেরিয়েবল এবং পরীক্ষার ডেটা ঘোষণা করে:

DECLARE @l int = 20
DECLARE @ varchar(max)=''
SELECT @+=LEFT(x + replicate(' ', @l), @l)
FROM (values
(' xxxx'),
(' xxxx'),
(' xxxx'),
('x'),
(''),
('xxx'),
('x x  xxx'),
('xxx  x x'),
('     xxx    ')) x(x)

কোড:

SELECT substring('Soft EqualHard',sign(sum(iif(substring(@,N,@l+2)like'xx'+replicate('_', @l-2)+'x ',-1,1)))*5+6,5)FROM(SELECT row_number()OVER(ORDER BY Type)N FROM sys.all_objects)x WHERE n<=len(@)AND' x'=substring(@,N-1,2)AND''=substring(@,N-@l,1)

কোড অপসারণ:

SELECT
  substring('Soft EqualHard',
    sign(sum(iif(substring(@,N,@l+2)like'xx'+replicate('_', @l-2)+'x ',-1,1)))*5+6,5)
FROM(SELECT row_number()OVER(ORDER BY Type)N FROM sys.all_objects)x
WHERE n<=len(@)AND' x'=substring(@,N-1,2)AND''=substring(@,N-@l,1)

Explaination:

স্ক্রিপ্ট প্যাটার্নটির জন্য পাঠ্যটি স্ক্যান করছে:

      space
space x

এগুলির প্রত্যেকটিই একটি বাক্সের শুরু

এই অবস্থানগুলির জন্য, স্ক্রিপ্টটি তখন প্যাটার্নটি যাচাই করে নিচ্ছে, প্রথম x এর জন্য পরীক্ষা করার দরকার নেই:

  x
x space 

যখন এটি বিদ্যমান তখন এটি একটি নরম বস্তু, অন্যথায় এটি একটি হার্ড অবজেক্ট।

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