বক্ররেখার বিন্দুর অ্যান্টিপোড গণনা করুন


14

একটি বক্ররেখা একটি বর্গক্ষেত্র গ্রিডে পয়েন্টগুলির একটি সেট যা প্রতিটি পয়েন্টে চার প্রতিবেশী প্রতিবেশে ঠিক দু'জন প্রতিবেশী থাকে এবং পয়েন্টগুলি একটি সংযুক্ত উপাদান গঠন করে। এটি হ'ল গ্রিড গ্রাফের পয়েন্টগুলি দ্বারা উত্সাহিত গ্রাফটি একটি একক চক্রের জন্য বিচ্ছিন্ন। "প্ররোচিত" অর্থ দুটি চক্রের প্রতিবেশী না হয়ে ইনপুটটিতে স্পর্শ করতে পারে না।

গ্রাফের একটি ভার্টেক্স ভিটির একটি অ্যান্টিপোড ভি থেকে খুব দূরে একটি ভার্টেক্স। অন্তর্নিহিত বর্গ গ্রিডের সম্মান না করেই দূরত্বটি চক্র দ্বারা প্ররোচিত হিসাবে পরিমাপ করা হবে।

আপনার ইনপুটটি একটি বক্ররেখার চিত্র হবে। স্থান চিহ্ন ( #) এর বাইরে একটি ব্যাকগ্রাউন্ডে বক্ররেখাটি সংখ্যা সাইন অক্ষরগুলির ক্রম দিয়ে চিহ্নিত করা হবে । বক্ররেখার একটি বিন্দু Pঅক্ষরের সাথে চিহ্নিত করা হবে ("পোড")। আপনার আউটপুট একই বক্ররেখার বিন্দু ব্যতীত ইনপুট একই হবে A("অ্যান্টিপোড")।

আপনি ধরে নিতে পারেন অক্ষরগুলি একটি আয়তক্ষেত্রাকার আকারে প্যাড হবে। আপনি ধরে নিতে পারেন প্রথম এবং শেষ সারি এবং ইনপুটটির কলামটি ফাঁকা স্থানের (সম্পূর্ণরূপে ইনপুট প্যাডযুক্ত) তৈরি হবে। বিকল্পভাবে আপনি ধরে নিতে পারেন যে প্রথম এবং শেষ সারি এবং কলামে প্রতিটি একটি বক্ররেখায় থাকবে (ইনপুটটিতে ন্যূনতম প্যাডিং রয়েছে)।

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

সম্ভাব্য ইনপুট:

P#    P##   #P#   #####      #####P# #######   #####P#########   #####P#########
##    # #   # #   #   #      #     # #     #   #             #   #             #
      ###   ###   ## ##      # ### # # ### #   # ### ### ### #   #             #
###                # # ###   # # # # # # # #   # # # # # # # #   #             #
# P#    ### ###    # ### #   # # ### ### # #   # # ### ### # #   #             #
## #    # ### #    #     #   # #         # #   # #         # #   #             #
 # #    P     #    ##### P   # ########### #   # ##### ##### #   #             #
 ###    #######        ###   #             #   #     # #     #   #             #
                             ###############   ####### #######   ###############

সংশ্লিষ্ট আউটপুট:

P#    P##   #P#   #A###      #####P# #A#####   #####P#########   #####P#########
#A    # #   # #   #   #      #     # #     #   #             #   #             #
      ##A   #A#   ## ##      # ### # # ### #   # ### ### ### #   #             #
###                # # ###   # # # # # # # #   # # # # A # # #   #             #
# P#    ### ##A    # ### #   # # ### ### # #   # # ### ### # #   #             #
## #    # ### #    #     #   # #         # #   # #         # #   #             #
 A #    P     #    ##### P   # ########### #   # ##### ##### #   #             #
 ###    #######        ###   #             #   #     # #     #   #             #
                             ###############   ####### #######   #########A#####

পোডগুলি থেকে ভার্টেক্স দূরত্ব (মডিউল 10) (এগুলি আউটপুট দেয় না):

P1    P12   1P1   5A543      54321P1 9A98765   54321P123456789   54321P123456789
1A    1 3   2 2   4   2      6     2 8     4   6             0   6             0
      23A   3A3   32 01      7 109 3 7 109 3   7 901 789 543 1   7             1
321                1 9 543   8 2 8 4 6 2 8 2   8 8 2 6 A 6 2 2   8             2
4 P1    234 89A    0 876 2   9 3 765 543 7 1   9 7 345 987 1 3   9             3
56 2    1 567 9    9     1   0 4         6 0   0 6         0 4   0             4
 A 3    P     8    87654 P   1 56789012345 9   1 54321 56789 5   1             5
 654    1234567        321   2             8   2     0 4     6   2             6
                             345678901234567   3456789 3210987   345678901A10987

উত্তর:


4

জাভাস্ক্রিপ্ট (ES6), 193 181 বাইট

f=s=>s==(`P#1P#21#12#221A`[r=`replace`](/.../g,([n,f,t])=>s=s[r](eval(`/([${n+=f}])([^]{${s.search`\n`}})?(?!\\1)[${n}]/`),m=>m[r](eval(`/^${f}|${f}$/`),t))),s)?s[r](/\d/g,`#`):f(s)

একটি লুপিং অ্যানিমেশন সরবরাহ করে এমন সংস্করণ:

f=s=>s==(`#A#1#12#221AP#1P#2`[r=`replace`](/.../g,([n,f,t])=>s=s[r](eval(`/([${n+=f}])([^]{${s.search`\n`}})?(?!\\1)[${n}]/`),m=>m[r](eval(`/^${f}|${f}$/`),t))),s)?s[r](/\d/g,`#`):s
;setInterval(_=>i.value=f(i.value),1e3)
<textarea rows=10 cols=20 id=i style="font-family:monospace"></textarea>


4

পাইথন 2 , 333 221 215 বাইট

-17 বাইটস @ জনডভোরাককে ধন্যবাদ

g=input()
y=map(max,g).index('P')
x=g[y].index('P')
m=[k[:]for k in g]
v=x;w=y
while'#'in sum(m,[]):x,y,(v,w)=v,w,[(x+a,y+b)for a,b in((1,0),(-1,0),(0,1),(0,-1))if'#'==m[y+b][x+a]][0];m[w][v]='_'
g[w][v]='A'
print g

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


পাইথন 3 , 402 288 282 বাইট, স্ট্রিং আইও

g=[[*k]for k in open(0).read().split('\n')]
y=[max(k)for k in g].index('P')
x=g[y].index('P')
m=[k[:]for k in g]
v=x;w=y
while'#'in sum(m,[]):x,y,(v,w)=v,w,[(x+a,y+b)for a,b in((1,0),(-1,0),(0,1),(0,-1))if'#'==m[y+b][x+a]][0];m[w][v]='_'
g[w][v]='A'
print('\n'.join(map(''.join,g)))

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


কোড চলমান অ্যানিমেশন:

কোড চলমান অ্যানিমেশন


4

এমএটিএল , 43 42 বাইট

32-I#fbbJ*+!w3>y"&)yy-|&X<]vJQ2/)G65b&Zj&(

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

#####   
#   #   
## ##   
 # # ###
 # ### #
 #     #
 ##### P
     ###

হিসাবে প্রতিনিধিত্ব করা হয়

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

বা, একটি লাইনে (যাতে এটি STDIN এর মাধ্যমে প্রবেশ করা যেতে পারে),

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

এটি অনলাইন চেষ্টা করুন! বা শেষ চারটি কেস যাচাই করুন: 1 , 2 , 3 , 4 (এগুলি বেছে নেওয়া হয়েছে কারণ তাদের মধ্যে সবচেয়ে জটিল কার্ভ রয়েছে; শেষেরটিতে কিছু স্পেস প্যাডিং রয়েছে)।

ব্যাখ্যা

টিএল; ডাব্লুআর: জটিল সংখ্যা, প্রচুর সূচী, কোনও সমঝোতা।

32-     % Implicitly input char matrix. Subtract 32. Space becomes zero
I#f     % 3-output find: pushes nonzero values, their row indices,
        % and their column indices, as column vectors
bb      % Bubble up twice, so row and column indices are on top
J*+     % Times 1j, add. This transforms row and column indices into
        % complex numbers, where real is row and imaginary is column
!       % Transpose into a row vector
w       % Swap, so vector of nonzero values is on top
3>      % Logical index of elements exceeding 3. ASCII codes of space,
        % '#' and 'P0 are 32, 35 and 80 respectively. Since 32 was
        % subtracted these became 0, 3 and 48. So the only entry with
        % value exceeding 3 is that corresponding to the original 'P'.
y"      % Do this as many times as the number of complex positions
        %   The stack now contains the vector of complex positions and an
        %   index into that vector. The index points to the complex position 
        %   to be processed next.
  &)    %   Two-output reference indexing: pushes the indexed entry and
        %   a vector with the remaining entries. This pulls off the
        %   current complex position, which is initially that of 'P'
  yy    %   Duplicate top two elements, i.e. current position and vector
        %   of remaining positions
  -|    %   Absolute differences
  &X<   %   Index of minimum. Gives the index of the complex position
        %   that is closest to the current one. In case of tie (which
        %   only happens in the first iteration) it picks the first. The 
        %   result is the index of the complex position to be processed in 
        %   the next iteration. This index will be empty if this is the last
        %   iteration.
]       % End
        % The stack now contains the complex positions as individual
        % values, starting from 'P' and sorted as per the curve; plus two 
        % empty arrays. These empty arrays have been produced by the last
        % iteration as the index for the "next" iteration and the array of
        % "remaining" complex positions
v       % Concatenate into a column vector. The empty arrays have no effect.
        % The resulting vector contains the sorted complex positions
JQ      % Push 1j and add 1
2/      % Divide by 2. This gives (1+1j)/2. When used as an index this is
        % interpreted as (1+end)/2. Since the length of the curve is even
        % this gives a non-integer number, which will be implicitly
        % rounded up (because of .5 fracctional part). As an example, for
        % length 32 this gives 16.5, which rounded becomes 17. Position 17
        % along the curve is the antipode of position 1
)       % Reference indexing. Gives the complex position of the antipode
G       % Push input char matrix again
65      % Push 65 (ASCII for 'A')
b       % Bubble up, so complex position is on top
&Zj     % Separate into real and imagimary parts, corresponding to row and
        % column indices
&(      % 4-input assignment indexing. This writes 'A' at the specified row
        % and column of the char matrix. Implicitly display

0

পাইথন 3 , 421 বাইট

l,e=len,enumerate
r=open(0).read()
n=lambda x:[(x[0]-1,x[1]),(x[0]+1,x[1]),(x[0],x[1]-1),(x[0],x[1]+1)]
p=a={(i,j):y for i,x in e(r.split('\n'))for j,y in e(x)}
t=l(r.split('\n'));s=l(r.split('\n')[0])
for i in a:p=[p,i][a[i]=='P']
w=[p]
while l(w)!=r.count('#')+1:
 for x in a:
  if x in n(w[-1])and a[x]!=' 'and x not in w:w+=[x]
a[w[(l(w)+1)//2]]='A';print('\n'.join(''.join(a[j,i]for i in range(s))for j in range(t)))

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


0

গণিত, 234 223 বাইট

(p=Position;v=p[#,"#"|"P"];n=Length@v;q=v[[#]]&;h=FindCycle[Graph[v,Join@@Table[If[Norm[q@i-q@j]==1,q@i<->q@j,Nothing],{i,n},{j,i-1}]]][[1,#,1]]&;ReplacePart[#,h@Mod[p[Table[h@x,{x,n}],p[#,"P"][[1]]][[1,1]]+n/2,n,1]->"A"])&

এই কোড তোলে vসূচকের: গ্রাফের জন্য প্রান্তবিন্দু তালিকা হতে "#"এবং "P"গুলি। তারপরে nদৈর্ঘ্য (অগত্যা এমনকি) এবংq ইনপুট-তম শীর্ষস্থানটি বের করে (সুতরাং লুপের আকারটিকে উপেক্ষা করে)।

তারপরে hএমন একটি ফাংশন যা vসূচক জোড়ার পার্থক্যের দৈর্ঘ্য হুবুহু 1 (যখন তাদের পার্থক্যটি কিছুটা {-1,0}বা এর মতো কিছু হয় {0,1}) এবং তখন সমস্ত চক্রের একটি তালিকা খুঁজে বের করে এবং প্রথমটি সরবরাহ করে, তখন উল্লম্বের মধ্যে শীর্ষে এবং ডায়ারেক্টেড প্রান্তগুলি সহ গ্রাফ তৈরি করে then (কেবল) চক্র (প্রান্তগুলির তালিকা হিসাবে) এবং তারপরে ইনপুট-প্রান্তটি নেয় এবং প্রথম প্রান্তটি সেই প্রান্তটি তৈরি করে।

অ্যান্টিপোডটি সন্ধান করে hআমরা "P"চক্রের ইনডেক্সটি সন্ধান করতে পারি এবং অর্ধেক পথ ধরে (আমরা যদি চক্র তালিকার সীমানা পেরিয়ে যাই তবে মোড় ব্যবহার করে মোড ব্যবহার করি), এবং তারপরে আমরা মূলটির সাথে সম্পর্কিত এন্ট্রিটি প্রতিস্থাপন করতে পারি ইনপুট mসঙ্গে"A"

আপনি ওল্ফ্রাম ক্লাউড স্যান্ডবক্সে নিম্নলিখিতটি আটকানো এবং "মূল্যায়ন ঘর" ক্লিক করে বা শিফট + এন্টার বা নম্প্যাড এন্টার টিপুন দিয়ে অনলাইনে চেষ্টা করে দেখতে পারেন :

(p=Position;v=p[#,"#"|"P"];n=Length@v;q=v[[#]]&;h=FindCycle[Graph[v,Join@@Table[If[Norm[q@i-q@j]==1,q@i<->q@j,Nothing],{i,n},{j,i-1}]]][[1,#,1]]&;ReplacePart[#,h@Mod[p[Table[h@x,{x,n}],p[#,"P"][[1]]][[1,1]]+n/2,n,1]->"A"])&@{{"#","#","#","#","#"," "," "," "},{"#"," "," "," ","#"," "," "," "},{"#","#"," ","#","#"," "," "," "},{" ","#"," ","#"," ","#","#","#"},{" ","#"," ","#","#","#"," ","#"},{" ","#"," "," "," "," "," ","#"},{" ","#","#","#","#","#"," ","P"},{" "," "," "," "," ","#","#","#"}}//MatrixForm

বিকল্প ধারণা, 258 বাইট

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

f[m_]:=(x="#";t=ReplacePart;p=Position;l=t[m,p[m,"P"][[1]]->0];v=p[l,x|0];n=Length[v];q=v[[#]]&;r=l[[q[#][[1]],q[#][[2]]]]&;y=t[l,q@#->(r@#2+1)]&;Do[If[Norm[q@i-q@j]==1&&Xor[r@i==x,r@j==x],If[r@i==x,l=y[i,j],l=y[j,i]]],n,{i,n},{j,n}];t[m,p[l,n/2][[1]]->"A"])`

এই কোডটি খুব অদক্ষ। মূলত, এটি এর সাথে প্রতিস্থাপন "P"করে 0এবং এরপরে "#"এমন কোনও "#"কিছুর সন্ধান করে যা পুরো জিনিসটি দু'বার লুপিং করে না করে এবং প্রতিস্থাপন করে এমন সংখ্যার সাথে তাদের প্রতিস্থাপন করে "P"এবং এটি শেষ হয়ে যায় তা নিশ্চিত করার জন্য, এটি প্রক্রিয়াটির nসময়গুলি করে। এটি প্রকৃতপক্ষে দূরত্বগুলিও সঠিকভাবে গণনা করে না কারণ একটি শাখা অ্যান্টিপোড পেরিয়ে যেতে পারে, তবে কেবল একটিই অবস্থান নির্ধারণ করা হবে তা n/2যাই হোক না কেন।

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