নক্ষত্রের সর্পিল


29

আকার Sএবং পদক্ষেপের সর্পিল দেওয়া, বাইরে থেকে অভ্যন্তরের ব্যাসার্ধের দিকে ঘড়ির কাঁটার দিকে নির্মিত N"স্কোয়ার" S*Sসর্পিলকে আউটপুট দিন Nas

পরীক্ষার কেস (উদাহরণ) নীচে।

  1. ইনপুট: 4 3

    আউটপুট:

    ***
    
  2. ইনপুট: 4 6

    আউটপুট:

    ****
       *
       *
    
  3. ইনপুট: 4 11

    আউটপুট:

    ****
       *
    *  *
    ****
    
  4. ইনপুট: 6 18

    আউটপুট:

    ******
         *
         *
    *    *
    *    *
    ******
    
  5. ইনপুট: 6 22

    আউটপুট:

    ******
    ***  *
    *    *
    *    *
    *    *
    ******
    
  6. ইনপুট: 6 27

    আউটপুট:

    ******
    ******
    *   **
    *   **
    *   **
    ******
    
  7. ইনপুট: 1 1

    আউটপুট:

    *
    

কেসগুলি পরিচালনা করার প্রয়োজন নেই যখন:

  • প্রদত্ত Nনক্ষত্রগুলি প্রদত্ত S*Sমাত্রার সর্পিলকে "ফিট" করতে পারে না ।

  • হয় Nবা Sশূন্য হয়।

চ্যালেঞ্জটি হ'ল কোড-গল্ফ, সংক্ষিপ্ততম বাইটস উত্তর জয়, যে কোনও ভাষা ব্যবহার করা যেতে পারে।

আপনার আউটপুটটিতে আপনার ইচ্ছামত অনেকগুলি ট্রেলিং (তবে নেতৃত্বাধীন নয়) স্পেস / নিউলাইন থাকতে পারে।


আমরা কি পিছনে স্থান / নিউলাইন পেতে পারি?
ব্যবহারকারী 202729

2
আমি ব্যাসার্ধের চেয়ে S আকার (বা কমপক্ষে ব্যাস ) কল করব
লুইস মেন্ডো

@ লুইস ফেয়ার পয়েন্ট!
নিকেল 16

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

2
শুধু আপনি তাই মনে হয়। একটি ভালভাবে গ্রহণযোগ্য এবং স্পষ্ট চ্যালেঞ্জ লেখা খুব কঠিন। (ঠিক এখানে মন্তব্য থ্রেডটি দেখুন, চ্যালেঞ্জটি পোস্ট হওয়ার পরে কিছু পরামর্শ রয়েছে)
ব্যবহারকারী 202729

উত্তর:


16

এমএটিএল , 17 16 বাইট

UGlYLGoQ&P->42*c

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

ব্যাখ্যা (উদাহরণ সহ)

ইনপুটগুলি 4এবং 11উদাহরণ হিসাবে বিবেচনা করুন ।

U       % Implicit input: S. Push S^2
        % STACK: 16
G       % Push S again
        % STACK: 16, 4
lYL     % Outward, clockwise, east-first spiral of that size
        % STACK: 16,
                 [ 7  8  9 10;
                   6  1  2 11;
                   5  4  3 12;
                  16 15 14 13]
GoQ     % Push S, compute parity, add 1. Gives 1 for even S, 2 for odd
        % STACK: 16,
                 [ 7  8  9 10;
                   6  1  2 11;
                   5  4  3 12;
                  16 15 14 13],
                 1
&P      % Flip along that dimension (1 is vertical, 2 is horizontal).
        % This corrects for the orientation of the spiral
        % STACK: 16,
                 [16 15 14 13;
                   5  4  3 12;
                   6  1  2 11;
                   7  8  9 10]
-       % Subtract, element-wise. The upper-left corner becomes 0
        % STACK: [ 0  1  2  3
                  11 12 13  4
                  10 15 14  5
                   9  8  7  6]
>       % Implicit input (below): N. Greater than?, element-wise.
        % This transforms the first N entries, starting from
        % upper-left, inward, east-first, into 1, and the rest
        % into 0
        % STACK: [1 1 1 1;
                  0 0 0 1;
                  1 0 0 1;
                  1 1 1 1]
42*     % Multiply each entry by 42
        % STACK: [42 42 42 42;
                   0  0  0 42;
                  42  0  0 42;
                  42 42 42 42]
c       % Convert to char. Char 0 will be displayed as space.
        % Implicit display
        % STACK: ['****';
                  '   *';
                  '*  *';
                  '****']

1
বাহ, আমি কখনই গল্ফ করাতে ভাল ছিলাম না, তবে 17 বাইট দিয়ে সমাধান করতাম ... যা ম্যাজিকের মতো মনে হয় :) (আমি জানি যে সম্ভবত ছোট উত্তরগুলি আসছে তবে আপনি প্রথম এবং এখানে আমার ইমপ্রেশনগুলি :)
নিকেল

1
কাজের অংশটি একটি অন্তর্নির্মিত সর্পিল ফাংশন দ্বারা সম্পন্ন হয়। আমি কেবল একটি ব্যাখ্যা যুক্ত করেছি
লুইস মেন্ডো

@ এনিকেল নির্দিষ্ট উদ্দেশ্যে লক্ষ্য করে গল্ফিংয়ের ভাষায় বিশ্বে স্বাগতম। :)
এরিক আউটগল্ফার

3
ব্যাখ্যার পাশাপাশি পুরো উদাহরণের জন্য +1
IanF1

1
@ ব্যবহারকারী 202729
লুইস মেন্ডো

6

স্ট্যাক্স , 19 বাইট

±♪☺ÿzMæ¡♠à╣♂7☼V♀§9↓

এটি চালান এবং এটি ডিবাগ করুন

এটি একটি স্ট্রিং তৈরি করে শুরু হয় যার ফলস্বরূপ সমস্ত অক্ষর সমস্ত বাম-বাঁকানো সঙ্গে বাঁকানো থাকে। তারপরে এটি স্ট্রিংয়ের শেষ থেকে ক্রমবর্ধমান বৃহত টুকরোগুলি নেয় এবং গ্রিডটি ঘোরানোর সাথে সাথে সেগুলি একটি গ্রিডের চারপাশে "মোড়ানো" করে।

এখানে একই প্রোগ্রামটি প্যাকেজবিহীন, অসম্পূর্ণ এবং মন্তব্য করা হয়েছে।

'**     repeat "*" specified number of times
,J(     square the top of the input stack, and right-pad string to that length
z       push an empty array - this is the result grid built up in the loop
{       begin a block to loop
  ~     push grid to the input stack
  ihNv  push -(i / 2) - 1 where i is the 0-based iteration index using integer division
  :/]   split the string at that index and wrap the second half in a singleton array
  ,     pop the grid from the input stack
  rM+   rotate the grid clockwise, then prepend the split string as the new first row
  n     copy what's left of the original string to top of stack for the loop condition
w       while; execute block until condition is truthy
m       display resulting grid

এটি চালান এবং এটি ডিবাগ করুন


2
এটি অসাধারণভাবে আমাকে আনন্দিত করে যে অ্যান্ড্রয়েডে এই উত্তরটিতে কমলা রঙের হাসি রয়েছে।
স্টারওয়েভার

@ স্টারওয়েভার স্ট্যাক্সে এমন অনেক উত্তর রয়েছে যা এটি করে।
ওয়েইজুন চিউ

আমি ব্যাখ্যাটি পড়তে পেরে সত্যিই বিভ্রান্ত হয়ে পড়েছিলাম এবং একটিও দেখিনি। আমি কেবল ভেবেছিলাম স্ট্যাক্সের সত্যিই একটি অদ্ভুত কোড পৃষ্ঠা রয়েছে!
ndm13

@ এনডিএম 13: আমি মনে করি এটির একটি অদ্ভুত কোড পৃষ্ঠা রয়েছে। এটি সিপি 437 থেকে প্রাপ্ত যা একটি "আসল" এনকোডিং যা এতে একই চরিত্রটি রয়েছে character আপনি যদি আপনার ফোনে সেই লিঙ্কটি অনুসরণ করেন তবে আপনার একই হাসি মুখটি দেখতে হবে।
পুনরাবৃত্তির


4

এপিএল (ডায়ালগ) , 65 বাইট

' *'[1+⎕>⊖∘⌽⍣o(⊖×⍨-,⍨⍴∘(⍋+\)×⍨↑(⌈2÷⍨×⍨),(+⍨⍴1,⊢,¯1,-)(/⍨)2/⍳)o←⎕]

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

সর্পিল ম্যাট্রিক্সের কোডটি আমার অন্য উত্তর থেকে নেওয়া হয়েছে ।


আপনার কোডটি Nবিজোড় হলে ভুল দিকে
সর্পিলটি আঁকায়

@ নিকেল স্থির করেছেন (আরও প্যাচানোর মতো)। ধন্যবাদ
উরিল 19


আমি কি ভুল উপায়ে ইনপুট ব্যবহার করছি?
নিকেল

@nicael arghh ঠিক আছে, আমি এখন এটি ঠিক আছে মনে করি।
উরিল

4

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

বর্ণমালা সর্পিলের জন্য আমার সমাধানটি সামঞ্জস্য এবং গল্ফ করেছে

for($w=$n=$argv[$s=1],$r="*";--$argv[2];$r[$p+=$s*$d+$s]="*")if(!$c=++$c%$n)($d^=$w)?$n--:$s=-$s;echo wordwrap($r,$w);

এটি দিয়ে চালান php -nr '<code>' <S> <N>বা অনলাইনে চেষ্টা করুন



3

কাঠকয়লা , 34 বাইট

NθFE⮌E⊗N∨ι¹÷⁺鬬겫F‹θι≔θι×ι*≧⁻ιθ↷

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

Nθ

ইনপুট N

FE⮌E⊗N∨ι¹÷⁺鬬겫

সর্পিল অস্ত্র (কোণে বাদে) এর লেন্থ হয় S-1, S-1, S-1, S-2, S-2, S-3, ..., 3, 2, 2, 1, 1, 1। এটি পরিসীমা থেকে শুরু করে 0বাদ দিয়ে শুরু করে 2S, 0 থেকে 1 পরিবর্তন করে, এটির বিপরীত করে, প্রথমটির পরে প্রতিটি উপাদানকে 1 যোগ করে এবং অবশেষে পূর্ণসংখ্যা 2 দিয়ে সমস্ত উপাদানকে বিভাজন করে This এই তালিকাটি পরে লুপ করা হবে।

F‹θι≔θι

যদি পরের বাহুর দৈর্ঘ্যের চেয়ে অঙ্কন করতে আরও কিছু কম বাকী থাকে তবে বাহুটিকে সেই দৈর্ঘ্যে হ্রাস করুন।

×ι*

তারার উপযুক্ত সংখ্যা আঁকুন।

≧⁻ιθ

বাকি তারার সংখ্যা থেকে বিয়োগ করুন।

আঁকার দিকটি 90 ° ঘড়ির কাঁটার দিকে ঘোরান।


3

জে, 60 56 বাইট

-4 সর্পিলের জন্য বিল্ড প্রসেসটি সংশোধন করে বাইটস যাতে এটি আপনার y ^ 2 থেকে বিয়োগ করা অপ্রয়োজনীয় ছিল

4 :'''* ''{~x<|."1|.(|:@|.,<:@{:@{:-i.@#)^:(+:<:y),.*:y'

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

ব্যাখ্যা শীঘ্রই আসছে ।

ব্যাখ্যা:

4 :'''* ''{~x<|."1|.(|:@|.,<:@{:@{:-i.@#)^:(+:<:y),.*:y'  | Explicit dyad definition
                    (|:@|.,<:@{:@{:-i.@#)^:(+:<:y),.*:y   | Generate a y by y inward spiral
                                                  ,.*:y   | The matrix [[y^2]]
                    (                   )^:(+:<:y)        | 2*(y-1) times...
                     |:@|.                                | Rotate
                          ,                               | Append
                                    i.@#                  | [0..len(n)-1]
                           <:@{:@{:-                      | Subtracted from the previous value and decremented
              |."1|.                                      | Flip around antidiagonal
            x>                                            | Test if each entry is less than x
    '' *''{~                                              | ' ' for 0, '*' for 1

উদাহরণ:

   3 :'(|:@|.,<:@{:@{:-i.@#)^:(+:<:y),.*:y' 4
7  8  9 10
6 15 16 11
5 14 13 12
4  3  2  1
   3 :'|."1|.(|:@|.,<:@{:@{:-i.@#)^:(+:<:y),.*:y' 4
1  2  3 4
12 13 14 5
11 16 15 6
10  9  8 7
   11(4 :'x<|."1|.(|:@|.,<:@{:@{:-i.@#)^:(+:<:y),.*:y') 4
0 0 0 0
1 1 1 0
0 1 1 0
0 0 0 0
   11(4 :'''* ''{~x<|."1|.(|:@|.,<:@{:@{:-i.@#)^:(+:<:y),.*:y') 4
****
   *
*  *
****

আপনি কি এক্সিকিউটেবল উদাহরণে একটি লিঙ্ক যুক্ত করতে পারেন?
নিকেল

@ এনিকায়েল যুক্ত হয়েছে :)
বোলস বুসিয়ের

2

কোটলিন , 361 355 353 334 বাইট

6 বাইট জনাথন
2 বাট যখন
19 বাইট ল্যাম্বডায় স্যুইচিং এবং বাইরের প্রান্তগুলি ট্র্যাকিং সংরক্ষণ করে তখন পরিবর্তিত সংরক্ষণ

{s:Int,n:Int->var a=Array(s,{_->Array(s,{_->' '})})
var r=0
var c=0
var d=0
var e=0
var f=1
var g=s-1
var h=g
for(i in 1..n){a[r][c]='*'
when(d){0->if(c<g)c++
else{d=1
r++
g--}
1->if(r<h)r++
else{d=2
c--
h--}
2->if(c>e)c--
else{d=3
r--
e++}
3->if(r>f)r--
else{d=0
c++
f++}}}
for(i in 0..s-1){for(j in 0..s-1)print(a[i][j])
println()}}

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


1
ইনপুট ক্ষেত্রটি খালি হওয়ায় এটি কীভাবে চেষ্টা করা যায় তা আমি সত্যই নিশ্চিত নই।
নিকেল 18

1
@nicael এটি একটি ফাংশন। এটি ব্যবহার করা সহজ হতে পারে - কলটি ফুটারে করা হয়েছে।
জোনাথন অ্যালান

1
আমি কোটলিনকে মোটেও জানি না তবে বিশ্বাস করে যে এটির ==' 'বদলে নেওয়া যেতে পারে <'*'। এছাড়াও d==0সঙ্গে d<1এবং d==3সঙ্গে d>2। এগুলি বেশ মৌলিক গল্ফগুলির মতো মনে হয় তাই অন্যরাও সম্ভবত আছেন!
জোনাথন অ্যালান

@ এনিকাএল আপনি ইনপুট ক্ষেত্রে দুটি পূর্ণসংখ্যা স্থাপন করতে পারেন, প্রথম লাইনে আকার, দ্বিতীয় স্থানে নম্বর রাখতে পারেন।
ওয়েলস

1
@ জোহানওয়েলস আসলে কাজ করে works একরকম এটি খুব ধীর, তবে এতে কিছু আসে যায় না।
নিকেল 21

2

জাভা 10, 284 282 281 263 বাইট

s->n->{var c=new char[s][s];for(var d:c)java.util.Arrays.fill(d,' ');for(int i=0,j=0,y=0,x=1,u=s-1,l=0;n-->0;c[j][i]=42,i+=x,j+=y,l+=i==l&x==0?1:0,u-=i==l&j==l&y<1?1:0)if(x!=0){var b=x>0?i<u:i>l;y=b?0:x;x=b?x:0;}else{var b=y>0?j<u:j>l;x=b?0:-y;y=b?y:0;}return c;}

একটি মজার চ্যালেঞ্জ!

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

18 বাইট গল্ফ করার জন্য কেভিন ক্রুইজসেনকে ধন্যবাদ ।

অবরুদ্ধ সংস্করণ:

s -> n -> { // lambda taking two integer arguments in currying syntax
    var c = new char[s][s]; // the matrix containing the spiral
    for(var d : c) // for every row
        java.util.Arrays.fill(d, ' '); // fill it with spaces
    for(int i = 0, j = 0, // the coordinates of the next '*'
            y = 0, x = 1, // the direction to move in
            u = s-1, l = 0; // the upper and lower bounds
        n-- > 0; // decrecement the length of the spiral and repeat as many times
        c[j][i] = 42, // draw the '*', 42 is ASCII code
        i += x, j += y, // move to the next cell
        l += i == l & x == 0 ? 1 : 0, // adjust lower bound if necessary
        u -= i == l & j == l & y < 1 ? 1 : 0) // adjust upper bound if necessary
        if(x != 0) { // if moving in x direction
            var b = x > 0 ? i < u : i > l; // if we hit the bounds
            y = b ? 0 : x; // flip directions,
            x = b ? x : 0; // turning around
        } else { // if moving in y direction
            var b = y > 0 ? j < u : j > l; // if we hit the bounds
            x = b ? 0 : -y; // flip directions,
            y = b ? y : 0;  // turning around
        }
    return c; // return the matrix
}

263 বাইট শেষ দুটি লুপগুলি মূলত পরিবর্তিত হয় এবং একটি var bযুক্ত হয় যাতে আপনাকে কেবল দুটি বারের পরিবর্তে কেবল একবার x>0?i<u:i>lএবং y>0?j<u:j>lএকবার করতে হবে ।
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন দুর্দান্ত গল্ফ, ধন্যবাদ!
ওব্লান্স

2

জাভাস্ক্রিপ্ট (নোড.জেএস) , 167 164 163 বাইট

  • @ এরিক আউটগল্ফার এবং স্পেসের জন্য @ নিকেলকে ধন্যবাদ (3 বাইট)
  • ,মানচিত্রের পরিবর্তে যোগদানের স্প্লিটের জন্য @ মিমাকে ধন্যবাদ (1 বাইট)
(l,s)=>{a=(b=[...Array(l)]).map(x=>b.map(_=>" "))
for(d=1,x=y=D=0;s--;x+=d,y+=D)a[y][x]="*",(a[y+D]||[])[x+d]!=" "?[d,D]=[-D,d]:0
return a.join`
`.split`,`.join``}

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


1
চমৎকার, এটি কাজ করে! এটিকে আরও খাটো করার জন্য আপনি কী স্পেস / নিউলাইনগুলি সরাতে পারবেন?
নিকেল 18


1
সুন্দর! কোটলিন এবং জাভা সংস্করণ যদি একই পদ্ধতি ব্যবহার করে তবে তারা অনেক কম হত! আপনি যখন সর্পিল বা সীমানায় আঘাত করেন এবং তারপরে "কচ্ছপ" ঘুরিয়ে আনেন তখন সনাক্তকরণের এই জাতীয় উপায়। খুব চালাক! এক বাইট কম: রিটার্নটি এতে পরিবর্তন করুন return a.join` `.split`,`.join``
মিচা

@ মিচা প্রথমে আপনাকে ধন্যবাদ :)। দ্বিতীয় a.join` .split, j .join`` সর্পিলকে "সুন্দরভাবে" আউটপুট দেয় না (নতুন লাইন দিয়ে) তাই আমি মনে করি এটি একটি সমস্যা
ড্যানিয়েলইন্ডি

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