কচ্ছপগুলির জন্য ফিজ বাজ


35

সমস্যার বিবরণ

কল্পনা করুন আপনি কোনও গ্রিডের কচ্ছপ। আপনাকে দুটি নম্বর এফ এবং বি দেওয়া হয়েছে এবং আপনি পূর্ব দিকে মুখোমুখি হয়েছেন। নীচের নিয়ম অনুসারে আপনি গ্রিড জুড়ে একটি মার্চ সঞ্চালন করেন, আপনার মুখোমুখি হওয়া প্রতিটি কক্ষ গণনা করছেন:

  • ডিফল্টরূপে, আপনি নিজের ঘরে থাকা ঘরে গণনা লিখুন, তারপরে এগিয়ে যান।
  • যদি গণনাটি দ্বারা বিভাজ্য হয় তবে Fআপনি যে ঘরে রয়েছেন সেটিতে লিখুন , তারপরে ডানদিকে ঘুরুন, তারপরে এগিয়ে যান।
  • যদি বি দ্বারা গণনাটি বিভাজ্য হয় , আপনি Bআপনার যে ঘরে উপস্থিত সেটিতে লিখুন , তারপরে বাম দিকে ঘুরুন, তারপরে এগিয়ে যান।
  • যদি গণনাটি f এবং b উভয় দ্বারা বিভাজ্য হয় তবে FBআপনি যে কক্ষে প্রবেশ করছেন তাতে লিখুন , তারপরে এগিয়ে যান।
  • আপনি যদি ইতিমধ্যে যে কোনও স্কোয়ারে পৌঁছে থাকেন তবে আপনি থামবেন।

উদাহরণস্বরূপ, f = 3 এবং b = 5 ব্যবহার করে এই বিধিগুলি অনুসরণ করা এর মতো একটি প্যাটার্ন তৈরি করবে:

    F 28 29 FB  1  2  F
   26                 4
 F  B                 B  F
23                       7
22                       8
 F  B                 B  F
   19                11
    F 17 16 FB 14 13  F

চ্যালেঞ্জ

একটি প্রোগ্রাম বা ফাংশন লিখুন যা f এবং b এর সাথে মিল রেখে দুটি সংখ্যা ইনপুট হিসাবে গ্রহণ করে এবং উপরের বিধি দ্বারা প্রদত্ত এই সংখ্যাগুলির আউটপুট হিসাবে প্যাটার্ন উত্পাদন করে।

বিন্যাস প্রয়োজনীয়তা:

  • প্রতিটি ঘর দুটি অক্ষর প্রশস্ত
  • এই দুটি অক্ষরের মধ্যে ঘরের বিষয়বস্তুগুলি ডানদিকে সংযুক্ত থাকে
  • একই সারিতে ঘরগুলি একটি স্থান দ্বারা সীমিত করা হয়
  • কক্ষের প্রথম কলামে একটি খালি খালি ঘর থাকতে হবে
  • সমস্ত সারিতে অবশ্যই শূন্য খালি ঘর থাকতে হবে
  • শ্বেতস্থান অনুসরণ করার প্রয়োজন নেই, তবে অনুমোদিত
  • তবে, প্রতিটি সারির মোট প্রস্থ অবশ্যই খালি নয় কলামগুলির সংখ্যার 3 গুণ অতিক্রম করবে না

আপনার কোড অবশ্যই সরবরাহিত পরীক্ষার ক্ষেত্রে কাজ করবে work

স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়।

এটি কোড গল্ফ; বাইট জিতে সংক্ষিপ্ত উত্তর।

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

(চ = 3, খ = 5 কেস সৌজন্য সুবিধার হিসাবে এখানে পুনরাবৃত্তি)।

f=3, b=5 ->
    F 28 29 FB  1  2  F
   26                 4
 F  B                 B  F
23                       7
22                       8
 F  B                 B  F
   19                11
    F 17 16 FB 14 13  F

f=4, b=10 ->
 F 25 26 27  F
23          29
22        1  2  3  F
21                 5
FB                 6
19                 7
18           B  9  F
17          11
 F 15 14 13  F

f=3, b=11 ->
 F 16 17  F
14       19
13     1  2  F
 F  B        4
   10        5
    F  8  7  F

f=5, b=9 ->
    F 41 42 43 44  1  2  3  4  F
   39                          6
   38                          7
   37                          8
 F  B                          B  F
34                               11
33                               12
32                               13
31                               14
 F 29 28  B              B 17 16  F
         26             19
          F 24 23 22 21  F

f=5, b=13 ->
    F 31 32 33 34  F
   29             36
   28        1  2  3  4  F
   27                    6
 F  B                    7
24                       8
23                       9
22              B 12 11  F
21             14
 F 19 18 17 16  F

1
আমরা কী গ্যারান্টিযুক্ত যে ইনপুটটি আমাদের 100 এ যাওয়ার আগে সর্বদা সংঘর্ষের দিকে পরিচালিত করে?
মার্টিন ইন্ডার

হ্যাঁ। আরও সাধারণভাবে, যতক্ষণ আপনার কোড সরবরাহিত পরীক্ষাগুলির জন্য কাজ করে ততক্ষণ আপনি ভাল।
এইচ ওয়াল্টার্স

1
আপনি (কচ্ছপ) শুরু করার কোনও নির্দিষ্ট জায়গা আছে?
ক্রিটিক্সী লিথোস

@ ক্রিটিক্সিলিথোস নং। গ্রিডের বাম / উপরে / ডান / নীচে কচ্ছপ কীভাবে ভ্রমণ করে তা দ্বারা সংজ্ঞায়িত করা হয়েছে, যা চ এবং খ এর উপর নির্ভর করে।
এইচ ওয়াল্টার্স

চ এবং খ সবসময় পূর্ণসংখ্যা হয়?
করভাস_192

উত্তর:


1

জাভাস্ক্রিপ্ট (ES6), 230 240

(f,b)=>(d=>{for(g=[s=x=y=d];!(r=g[y]=g[y]||[])[x];d&1?d&2?y?--y:g=[,...g]:++y:d&2?x?--x:g=g.map(r=>[,...r]):++x)o=++s%f?'':(++d,'F'),s%b||(--d,o+='B'),r[x]=o||s})(0)||g.map(r=>[...r].map(c=>` ${c||' '}`.slice(-2)).join` `).join`
`

কম গল্ফড

(f,b)=>{
  for(g=[s=x=y=d=0]; !(r = g[y]= g[y]||[])[x]; )
  {
    o=++s%f?'':(++d,'F')
    s%b||(--d,o+='B')
    r[x]=o||s,
    d&1
      ? d&2 ? y ? --y : g=[,...g] : ++y
      : d&2 ? x ? --x : g=g.map(r=>[,...r]) : ++x
  }
  return g.map(r=>[...r].map(c=>` ${c||' '}`.slice(-2)).join` `)
          .join`\n`
}

পরীক্ষা

F=
(f,b)=>(d=>{for(g=[s=x=y=d];!(r=g[y]=g[y]||[])[x];d&1?d&2?y?--y:g=[,...g]:++y:d&2?x?--x:g=g.map(r=>[,...r]):++x)o=++s%f?'':(++d,'F'),s%b||(--d,o+='B'),r[x]=o||s})(0)||g.map(r=>[...r].map(c=>` ${c||' '}`.slice(-2)).join` `).join`
`


function update()
{
  var i = I.value.match(/\d+/g)||[],f=+i[0],b=+i[1]
  O.textContent = (f>0 & b>0) ? F(f,b) : ''
}  

update()
<input id=I value="3 5" oninput="update()">
<pre id=O></pre>


5

পাইথন 2, 379 338 326 বাইট

কমা দ্বারা আলাদা করে দুটি সংখ্যা হিসাবে ইনপুট নেয়। যেমন। 4,5অথবা(4,5)

d=x=y=i=q=Q=e=E=0
p={}
f,b=input()
while(x,y)not in p:
 i+=1;l,r=i%b<1,i%f<1;d=(d+r-l)%4;p[x,y]=[[`i`,'F'][r],' F'[r]+'B'][l].rjust(2);q=min(q,x);Q=max(Q,x);e=min(e,y);E=max(E,y)
 if d%2:x+=(d==1)*2-1
 else:y+=(d!=2)*2-1
h,w=E-e+1,Q-q+1
A=[h*['  ']for x in' '*w]
for x,y in p:A[x-q][y-e]=p[x,y]
print'\n'.join(map(' '.join,A))

সংস্করণ যা পাথটি 99, 384 343 330 বাইটের চেয়ে দীর্ঘ হয় works

2 টি উল্লেখযোগ্য সংখ্যা দেখায়।

d=x=y=i=q=Q=e=E=0
p={}
f,b=input()
while(x,y)not in p:
 i+=1;l,r=i%b<1,i%f<1;d=(d+r-l)%4;p[x,y]=[[`i%100`,'F'][r],' F'[r]+'B'][l].rjust(2);q=min(q,x);Q=max(Q,x);e=min(e,y);E=max(E,y)
 if d%2:x+=(d==1)*2-1
 else:y+=(d!=2)*2-1
h,w=E-e+1,Q-q+1
A=[h*['  ']for x in' '*w]
for x,y in p:A[x-q][y-e]=p[x,y]
print'\n'.join(map(' '.join,A))

উদাহরণ:

input=(4,16)

 F 21 22 23  F
19          25
18          26
17          27
FB  1  2  3  F
15           5
14           6
13           7
 F 11 10  9  F

input=(6,7) (সংক্ষিপ্ত সংস্করণ)

                                              F 63 64 65 66 67 FB  1  2  3  4  5  F                                             
                               F 57 58 59 60  B                                   B  8  9 10 11  F                              
                              55                                                                13                              
                   F 51 52 53  B                                                                 B 15 16 17  F                  
                  49                                                                                        19                  
                  48                                                                                        20                  
          F 45 46  B                                                                                         B 22 23  F         
         43                                                                                                          25         
         42                                                                                                          26         
         41                                                                                                          27         
    F 39  B                                                                                                           B 29  F   
   37                                                                                                                      31   
   36                                                                                                                      32   
   35                                                                                                                      33   
   34                                                                                                                      34   
 F  B                                                                                                                       B  F
31                                                                                                                            37
30                                                                                                                            38
29                                                                                                                            39
28                                                                                                                            40
27                                                                                                                            41
FB                                                                                                                            FB
25                                                                                                                            43
24                                                                                                                            44
23                                                                                                                            45
22                                                                                                                            46
21                                                                                                                            47
 F  B                                                                                                                       B  F
   18                                                                                                                      50   
   17                                                                                                                      51   
   16                                                                                                                      52   
   15                                                                                                                      53   
    F 13  B                                                                                                           B 55  F   
         11                                                                                                          57         
         10                                                                                                          58         
         09                                                                                                          59         
          F 07 06  B                                                                                         B 62 61  F         
                  04                                                                                        64                  
                  03                                                                                        65                  
                   F 01 00 99  B                                                                 B 69 68 67  F                  
                              97                                                                71                              
                               F 95 94 93 92  B                                   B 76 75 74 73  F                              
                                              F 89 88 87 86 85 FB 83 82 81 80 79  F                                             

@ এডিট: জোনাথন অ্যালান, কপার এবং শুকি আমাকে একগুচ্ছ বাইট সঞ্চয় করার জন্য ধন্যবাদ।


হেই, those এন, 4 এন নিদর্শনগুলি দুর্দান্ত।
স্টেইনবার্গ

ভাল করেছ. আপনি এবং এ পরিবর্তন while((x,y)not in p.keys()):করতে পারেন । আপনি এবং এ পরিবর্তন করতে পারেন । আপনি পরিবর্তন করতে পারেন । আরও থাকতে পারেwhile(x,y)not in p:for x,y in p.keys():for x,y in pl,r=i%b==0,i%f==0l,r=i%b<1,i%f<1d=(d+[0,1][r]-[0,1][l])%4d=(d+r-l)%4s=[[`i`,'F'][r],' F'[r]+'B'][l].rjust(2);p[(x,y)]=sp[(x,y)]=[[`i`,'F'][r],' F'[r]+'B'][l].rjust(2)
জোনাথন অ্যালান

এর h*[' ']for x in rangeপরিবর্তে আপনি একটি বাইট সংরক্ষণ করতে পারেন [' ']*h for x in range। এছাড়াও, এর x+=[-1,1][d==1]সাথে প্রতিস্থাপন করা যেতে পারে x+=(d==1)*2-1, এবং y+=[1,-1][d==2]প্রতিস্থাপন করা যেতে পারে y+=(d!=2)*2-1। এছাড়াও, f,b=inputttএকটি টাইপো হয়?
তামা

p[(x,y)]=> p[x,y](যদিও এটি পাইথন 2 তে কাজ করে কিনা তা নিশ্চিত নয়)
shooqie

4

এক্সেল ভিবিএ, 347 421 বাইট

হোয়াইটস্পেস-প্রয়োজনীয়তাগুলি মোকাবেলা করার জন্য নতুন সংস্করণ। আমার প্রথম সংস্করণে এটি না থাকা আমার তত্ত্বাবধানের অংশ ছিল, তবে এটি বাইটোকন্টে এটির পরিমাণ নেয় ... এটি এখন ব্যবহৃত পরিসীমাটি সেলকে কাটা এবং আটকায় A1

Sub t(f, b)
x=70:y=70:Do:s=s+ 1
If Cells(y,x).Value<>"" Then
ActiveSheet.UsedRange.Select:Selection.Cut:Range("A1").Select:ActiveSheet.Paste:Exit Sub
End If
If s Mod f=0 Then Cells(y,x).Value="F":q=q+1
If s Mod b=0 Then Cells(y,x).Value=Cells(y,x).Value & "B":q=q+3
If Cells(y,x).Value="" Then Cells(y,x).Value=s
Select Case q Mod 4
Case 0:x=x+1
Case 1:y=y+1
Case 2:x=x-1
Case 3:y=y-1
End Select:Loop:End Sub

এখানে পুরানো সংস্করণ যা শেষ ফলাফলটিকে সরান নি A1

Sub t(f,b)
x=70:y=70:Do:s=s+1:if Cells(y,x).Value<>"" then exit sub
If s Mod f=0 Then
Cells(y,x).Value="F":q=q+1
End If
If s Mod b=0 Then
Cells(y,x).Value=Cells(y,x).Value & "B":q=q+3
End If
If Cells(y,x).Value="" Then Cells(y,x).Value=s
Select Case q mod 4
Case 0:x=x+1
Case 1:y=y+1
Case 2:x=x-1
Case 3:y=y-1
End Select:Loop:End Sub

70, 70 (বা এক্সেলের মধ্যে বিআর 70) থেকে শুরু হয়ে এর চারপাশে চলে। ফাংশনটি সাথে fএবং bপরামিতি হিসাবে ডাকা হয় :Call t(4, 16)

@ নীল আমাকে সবেমাত্র একগুচ্ছ বাইট সংরক্ষণ করেছে, ধন্যবাদ!


1
আপনি যদি এর q=q-1সাথে q=q+3এবং এর Select Case qসাথে প্রতিস্থাপন করেন Select Case q Mod 4তবে আপনি পূর্ববর্তী দুটি বিবৃতি থেকে মুক্তি পেতে পারেন।
নিল

However, the total width of each row must not exceed 3 times the number of non-empty columnsআমি অনুমান করি যে এটি কেবলমাত্র একটি বড় গ্রিড সেটআপ করতে এবং সীমান্ত থেকে কিছুটা দূরে শুরু করার জন্য যুক্ত করা হয়েছিল
কার্ল নেপফ

1
@ কার্লনাপফ ফিক্সড
স্টেইনবার্গ

3

এক্সেল ভিবিএ, 284 278 277 261 259 255 254 253 251 বাইট

Subরুটিন যে মূল্যবোধ, ইনপুট নেয় F, Bউপর কোষ এবং আউটপুট Sheets(1)অবজেক্ট (যা অবধি সীমিত থাকবেSheets(1) বস্তুর 2 বাইট সংরক্ষণ করতে)

Sub G(F,B)
Set A=Sheet1
R=99:C=R
Do
I=I+1
Y=Cells(R,C)
If Y<>""Then A.UsedRange.Cut:[A1].Select:A.Paste:End
If I Mod F=0Then Y="F":J=J+1
If I Mod B=0Then Y=Y+"B":J=J+3
Cells(R,C)=IIf(Y="",i,Y)
K=J Mod 4
If K Mod 2Then R=R-K+2 Else C=C+1-K
Loop
End Sub

ব্যবহার:

Call G(3, 4)

2

সি, 349 বাইট

জিসিসি সহ সংকলন (প্রচুর সতর্কতা সহ)

#define z strcpy(G[x][y],
char G[99][99][3];d=3,x=49,y=49,i=1,q,s=99,t,u=99,v;F(f,b){for(;!*G[x][y];i++){q=(!(i%f))<<1|!(i%b);q==3&&z"FB");if(q==2)z"F"),d=(d+3)%4;if(q==1)z"B"),d=(d+1)%4;!q&&sprintf(G[x][y],"%d",i);if(d%2)x+=d-2;else y+=d-1;s=s>x?x:s;t=t<x?x:t;u=u>y?y:u;v=v<y?y:v;}for(y=u;y<=v;puts(""),y++)for(x=s;x<=t;x++)printf("%2s ",G[x][y]);}

কিছুটা বেশি ইন্ডেন্টেড সংস্করণ:

#define z strcpy(G[x][y],
char G[99][99][3];
d=3,x=49,y=49,i=1,q,s=99,t,u=99,v;

F(f,b)
{
    for(;!*G[x][y];i++)
    {
        q=(!(i%f))<<1|!(i%b);
        q==3&&z"FB");
        if(q==2)z"F"),d=(d+3)%4;
        if(q==1)z"B"),d=(d+1)%4;
        !q&&sprintf(G[x][y],"%d",i);
        if(d%2)x+=d-2;else y+=d-1;
        s=s>x?x:s;t=t<x?x:t;u=u>y?y:u;v=v<y?y:v;
    }
    for(y=u;y<=v;puts(""),y++)for(x=s;x<=t;x++)printf("%2s ",G[x][y]);
}

এখানে একটি 364 বাইট সংস্করণ যা 100 এর চেয়ে বড় সংখ্যককে পরিচালনা করে

#define g G[x][y]
#define z strcpy(g,
char G[99][99][9];d=3,x=49,y=49,i=1,q,s=99,t,u=99,v;F(f,b){for(;!*g;i++){q=(!(i%f))<<1|!(i%b);q==3&&z"FB");if(q==2)z" F"),d=(d+3)%4;if(q==1)z" B"),d=(d+1)%4;!q&&sprintf(G[x][y],"%2d",i);if(d%2)x+=d-2;else y+=d-1;s=s>x?x:s;t=t<x?x:t;u=u>y?y:u;v=v<y?y:v;}for(y=u;y<=v;puts(""),y++)for(x=s;x<=t;x++)printf("%2s ",g+strlen(g)-2);}

1

পার্ল, 275 বাইট

পাঠযোগ্যতার জন্য সূচক সরবরাহ করা হয় এবং কোডের অংশ নয়।

($f,$e)=@ARGV;
for($i=$x=1,$y=0;!$m{"$x,$y"};$i++){
    ($g,$m{"$x,$y"})=$i%$e&&$i%$f?($g,$i):$i%$f?($g+1,B):$i%$e?($g-1,F):($g,FB);
    ($g%=4)%2?($y+=$g-2):($x+=1-$g);
    ($a>$x?$a:$b<$x?$b:$x)=$x;
    ($c>$y?$c:$d<$y?$d:$y)=$y
}
for$k($c..$d){
    printf("%*s",1+length$i,$m{"$_,$k"})for$a..$b;
    say
}

ব্যাখ্যা:

কোড সব জায়গায় কচ্ছপ হয়েছে একটি হ্যাশ পালন ট্র্যাক, এবং সঠিক মান, সঞ্চিত করে কাজ করে %m। উদাহরণস্বরূপ: ইন 3 5, $m{0,2}রয়েছে 2, এবং $m{1,-3}= 26। এটি ইতিমধ্যে সংজ্ঞায়িত করা এমন কোনও জায়গায় পৌঁছানো অবধি এই ফ্যাশনে অবিরত থাকে। অতিরিক্ত হিসাবে, এটি $a,$b,$c,$dসর্বাধিক এবং সর্বনিম্ন হিসাবে ব্যবহার করে কচ্ছপের পাথের বর্তমান সীমানা ট্র্যাক করে ।

এটি একবারে এমন জায়গায় পৌঁছে গেলে এটি সীমানা ব্যবহার করে পথটি মুদ্রণ করে, সমস্ত কিছু স্পেস দিয়ে প্যাড করে।

পাথের আকার বা সংখ্যার আকারের সীমা নেই।


1

পিএইচপি , 292 বাইট

for($x=$y=$u=$l=0;!$q[$x][$y];$s="") {
    ++$i%$argv[1]?:$a-=1+$s="F";
    $i%$argv[2]?:$a+=1+$s.="B";
    $q[$x][$y]=$s?:$i;
    $z=[1,-2,-1,2][$a=($a+4)%4];
    $y+=$z%2;
    $x+=~-$z%2;
    $u>$y?$u=$y:$d>$y?:$d=$y;
    $l>$x?$l=$x:$r>$x?:$r=$x;
}
for(;$l++<=$r;print"\n")for($j=$u-1;$j++<=$d;)echo str_pad($q[$l-1][$j],3," ",0);

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

সূচকগুলি স্পষ্টতার জন্য, গণনা করা হয় না।

পার্ল উত্তরের মতো একই অ্যালগরিদম অনুসরণ করে। কচ্ছপটি 2D অ্যারেতে $aকোথায় ছিল সেগুলি $u, $d, $l, $rট্র্যাক করুন , কচ্ছপটি কোথায় রয়েছে তা ট্র্যাক করুন এবং মুদ্রণের জন্য সীমানা সন্ধান করুন। str_padআমাদের প্রতিটি এন্ট্রি মুদ্রণ বিন্যাসের জন্য ঠিক 3 স্পেস প্রশস্ত তা নিশ্চিত করতে সহায়তা করে।

কোনও কারণে আমি বুঝতে পারি না, পিএইচপি আমার অর্ধেক ভেরিয়েবল 0 টি আরম্ভ করার কথা মনে করে না, তবে আমি অন্যকে আরম্ভ না করলে ফরম্যাটিংটি স্ক্রু আপ করি, যদিও এটি প্রথমে যখন অনির্ধারিত ভেরিয়েবলগুলিকে 0 হিসাবে গণ্য করে তবে ব্যবহার করা হয়েছে। সুতরাং $x=$y=$u=$l=0বিট।


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