এএসসিআইআই সূর্যকে প্রসারিত করুন


43

একটি প্রোগ্রাম লিখুন যা (এসটিডিএন / কমান্ড লাইনের মাধ্যমে) একটি অ-নেতিবাচক পূর্ণসংখ্যক এন।

যখন এন 0 হয়, আপনার প্রোগ্রামটি মুদ্রণ করা উচিত O(এটি মূলধন ওহ, শূন্য নয়)।

যখন এন 1 হয়, আপনার প্রোগ্রামটি মুদ্রণ করা উচিত

\|/
-O-
/|\

যখন এন 2 হয় আপনার প্রোগ্রামটি মুদ্রণ করা উচিত

\ | /
 \|/
--O--
 /|\
/ | \

যখন এন 3 হয় আপনার প্রোগ্রামটি মুদ্রণ করা উচিত

\  |  /
 \ | /
  \|/
---O---
  /|\
 / | \
/  |  \

বৃহত্তর এন এর জন্য, এই প্যাটার্নটি একই সঠিক ফ্যাশনে অব্যাহত রয়েছে। "সূর্য" আট রে প্রত্যেকটি উপযুক্ত এর এন এর তৈরি করা উচিত -, |, /, অথবা \অক্ষর।

বিস্তারিত

  • কোনও প্রোগ্রামের পরিবর্তে, আপনি কোনও ফাংশন লিখতে পারেন যা পূর্ণসংখ্যা লাগে takes ফাংশনটি সূর্যের নকশাটি সাধারণত মুদ্রণ করে বা স্ট্রিং হিসাবে ফিরে আসে।
  • আপনার অবশ্যই হয়

    • মোটামুটি কোনও পিছনে স্থান নেই, বা
    • কেবলমাত্র পর্যাপ্ত স্থানের স্থান রয়েছে তাই নিদর্শনটি একটি নিখুঁত (2N + 1) * (2N + 1) আয়তক্ষেত্র।
  • যে কোনও বা সমস্ত এন এর আউটপুটে allyচ্ছিকভাবে একটি পেছনের নতুন লাইন থাকতে পারে।

স্কোরিং

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।


একটি শীর্ষস্থানীয় নিউলাইন অনুমোদিত? বিশেষত আকর্ষণীয় N=0
জাকুব

কেবলমাত্র জাকুব নং ট্রেলিং।
ক্যালভিনের

উত্তর:


12

পাইথ, 39 38 36 বাইট

jbXmXXj\|m*\ Q2d\\_hd\/JhyQQX*\-JQ\O

এটি অনলাইনে ব্যবহার করে দেখুন: পাইথ সংকলক / নির্বাহক

ব্যাখ্যা

jbXmXXj\|m*\ Q2d\\_hd\/JhyQQX*\-JQ\O   implicit: Q = input
                       JhyQ            J = 1 + 2*Q
    m                  J               map each d of [0,1,...,2*Q] to:
          *\ Q                           " "*input
         m    2                          list with twice " "*input
      j\|                                join this list by "|"
     X         d\\                       replace the value at d to "\"
    X             _hd\/                  replace the value at -(d+1) to "/"
  X                        Q           replace line Q by:
                             *\-J        "-"*J
                            X    Q\O     replace element at Q with "O"
jb                                     join by "newlines"

আরও 36 বাইট সমাধান হবে:

jbmXXj\|m*?\-KqdQ\ Q2d\\_hd?\OK\/hyQ

26

সি: 116 102 99 95 92 90

s(n){for(int c=-n,r=c;r<=n;c++)putchar(c>n?c=-c,r++,10:c?r?c-r?c+r?32:47:92:45:r?124:79);}

আমি মনে করি যে এই পদ্ধতির সাহায্যে আমি ন্যূনতম সমাধানের কাছে মোটামুটি কাছাকাছি পৌঁছে যাচ্ছি, তবে আমি অনুভূতি থামাতে পারছি না যে সি এর চেয়ে আরও ভাল পদ্ধতির রয়েছে U

void s(int n) {
  for(
    int c = -n, r = c;
    r <= n;
    c++
  )
    putchar(
      c > n
        ? c = -c, r++, '\n'
        : c
          ? r
            ? c - r
              ? c + r
                ? ' '
                : '/'
              : '\\'
            : '-'
          : r
            ? '|'
            : 'O'
    );
}

7
"সি ++" সি তে ... হি!
bjb568

আমি খুশি যে আপনি এলোমেলো করেছেন। সেই ত্রিনিদী ইফস কি পাগল!
lmad

আপনি আরও 2 টি বাইট সংরক্ষণ করতে এবং এটি 2012 এর উপযোগী করে তুলতে পারেন;)c,r;s(n){for(r=c=-n;r<=n;c++)putchar(c>n?c=-c,r++,10:c?r?c-r?c+r?32:47:92:45:r?124:79);}
জোহান ডু টোইট

21

জিএনইউ সেড, 252 + 1

ভাই - আমি পিএইচপি উত্তর মারলাম!

-rপ্যারামিটারটি ব্যবহারের জন্য স্কোর + 1 ।

কুসংস্কারের সীমাবদ্ধতার কারণে আমাদের প্রায় 100 বাইট জ্বালাতে হবে কেবল এন স্পেসের স্ট্রিংতে N রূপান্তর। বাকিটা মজাদার জিনিস।

/^0/{y/0/O/;q}
s/./<&/g
s/9/8 /g
s/8/7 /g
s/7/6 /g
s/6/5 /g
s/5/4 /g
s/4/3 /g
s/3/2 /g
s/2/1 /g
s/1/ /g
s/0//g
:t
s/ </<          /g
tt
s/<//g
:
s/ //
s^.*^\\&|&/^;ta
:a
/\\$/q
p
s^\\\|/^-O-^;tn
s^(\\)? (/)?^\2 \1^g;ta
:n
y/ /-/
p
s^-O-^/|\\^
y/-/ /
ta

ব্যাখ্যা

  • প্রথম লাইনটি এন = 0 কেসের প্রাথমিক প্রস্থান।
  • পরবর্তী 15 টি লাইন (অবধি :) N কে স্পেসের স্ট্রিংয়ে রূপান্তর করে
  • s/ // একটি স্থান সরিয়ে দেয়
  • s^.*^\\&|&/^;taN-1 স্পেসগুলিকে রূপান্তর করে: \+ N-1 স্পেস + |+ এন -1 স্পেস +/
  • প্রতিটি পুনরুক্তি মুদ্রণ করা, এবং \একটি স্থান ডানদিকে এবং /একটি স্থান বাম দিকে সরানো ...
  • ... যতক্ষণ না আমরা মিলছি \|/, যা প্রতিস্থাপন করা হয়েছে -O-এবং nলেবেলে ঝাঁপ দাও
  • সঙ্গে প্রতিস্থাপন -এবং মুদ্রণ
  • প্রতিস্থাপন -0-সঙ্গে /|\, এবং প্রতিস্থাপন সঙ্গে -এবং প্রধান লুপ ফিরে তিড়িং লাফ
  • প্রতিটি পুনরুক্তি মুদ্রণ করা, এবং \একটি স্থান ডানদিকে এবং /একটি স্থান বাম দিকে সরানো ...
  • ... যতক্ষণ না আমরা ম্যাচ করি \$যা নির্দেশ করে যে শেষ হয়েছে, এবং প্রস্থান করুন।

আউটপুট

 $ for i in {0..3}; do sed -rf asciisun.sed <<< $i ; done
 O
 \|/
 -O-
 /|\
 \ | /
  \|/ 
 --O--
  /|\ 
 / | \
 \  |  /
  \ | / 
   \|/  
 ---O---
   /|\  
  / | \ 
 /  |  \
 $

16

জে, 37 34 40 বাইট

1:echo('O\/-|'{.@#~0=+&|,-,+,[,])"*/~@i:

ব্যবহার:

   (1:echo('O\/-|'{.@#~0=+&|,-,+,[,])"*/~@i:) 2  NB. prints to stdout:
\ | /
 \|/ 
--O--
 /|\ 
/ | \

ব্যাখ্যা (বাম থেকে ডানে):

  • i: তালিকা তৈরি করে -n, -(n-1), ..., n-1, n
  • ( )"*/~@i:i এর ডেসকার্টেস পণ্য তৈরি করে: নিজের সাথে একটি ম্যাট্রিক্স বিন্যাসে, যেমন n = 1নীচের 3-by-3ম্যাট্রিক্স তৈরি করে

    ┌─────┬────┬────┐
    │-1 -1│-1 0│-1 1│
    ├─────┼────┼────┤
    │0 -1 │0 0 │0 1 │
    ├─────┼────┼────┤
    │1 -1 │1 0 │1 1 │
    └─────┴────┴────┘
    
  • পূর্ণসংখ্যা সহ প্রতিটি ম্যাট্রিক্স-এলিমেন্টের জন্য x yআমরা নিম্নলিখিতটি করি

  • +&|,-,+,[,] বৈশিষ্ট্যগুলির একটি তালিকা গণনা করুন

    • +&| abs(x)+abs(y), 0iff এর সমান (যদি এবং কেবলমাত্র) x=0এবংy=0
    • -xy, 0if if এর সমান হয় x=yআমরা ত্রিভুজটিতে আছি
    • +x + y এর সমান, 0if if x=-yআমরা অ্যান্টি- ডায়াগোনাল এ আছি
    • [x, সমান 0iff x=0অর্থাত্ আমরা মাঝের সারিতে আছি
    • ]y, সমান 0iff y=0অর্থাত্ আমরা মাঝের কলামে আছি
  • 'O\/-|'#~0=উপরের এই বৈশিষ্ট্যগুলির মানগুলির সাথে তুলনা করুন 0এবং যদি তম সম্পত্তিটি সত্য হয় iতবে স্ট্রিং থেকে অক্ষরটি গ্রহণ করুন ।'O\/-|'i

  • ফলস্বরূপ স্ট্রিংয়ের প্রথম অক্ষরটি সর্বদা আমাদের প্রয়োজন মতো হবে, যদি স্ট্রিং ফাঁকা থাকে তবে আমাদের একটি স্থান প্রয়োজন
  • {. একটি স্ট্রিংয়ের প্রথম অক্ষরটি গ্রহণ করে এবং যদি কোনও না থাকে তবে এটি আমাদের প্রয়োজন মতো প্যাডিংয়ের মতো স্থান অক্ষরকে ফিরিয়ে দেয়
  • আমাদের এখন আমাদের কাছে সঠিক ম্যাট্রিক্স রয়েছে তাই এটি একবার প্রেরণে প্রিন্ট করব 1:echo

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


5
এটি কি অসম্পূর্ণ সংস্করণ ?! আমি অনেক সময় একজন গড় গড় প্রোগ্রামার এর মত অনুভব করি এবং তারপরে কোনও কারণে আমি কোডগল্ফ এ গিয়ে দেখি যে ছেলেরা যে জিনিসগুলি সরিয়ে নিয়েছে এবং সাহায্য করতে পারে না তেমন একটা নির্বোধের মতো বোধ করে।
জাস্টসিড

@ জাস্টসিড ওয়েল, পাঠ্যটি কোডের সাথে আপ টু ডেট ছিল না তবে প্রযুক্তিগতভাবে আমি কখনই লিখিনি যে কোডটি বিলোপযুক্ত। :)
এলোমেলো

এটি এখনও শক্তিশালী চিত্তাকর্ষক
যেকোন

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

11

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

এটি আমার প্রথম উত্তরের জন্য একটি মজাদার ক্রিয়াকলাপ বলে মনে হয়েছিল। আমার কোড মন্তব্য মন্তব্য স্বাগত।

<?php function s($n){$e=2*$n+1;for($i=0;$i<$e*$e;$i++){$x=$i%$e;$y=floor($i/$e);echo$y==$x?($x==$n?"O":"\\"):($e-1==$x+$y?"/":($y==$n?"-":($x==$n?"|":" ")));echo$x==$e-1?"\n":"";}}?>

মন্তব্যগুলির সাথে আন-গল্ফ কোড এখানে:

<?php
function s($n) {
    $e=2*$n+1; //edge length
    for($i=0;$i<$e*$e;$i++) {
        $x = $i%$e; // current x coordinate
        $y = floor($i/$e); // current y coordinate

        if ($y==$n&&$x==$n) {
            // center of square
            echo'O';
        }
        else if ($y==$n) {
            // horizontal line
            echo'-';
        }
        else if ($x==$n) {
            // vertical line
            echo'|';
        }
        else if ($y==$x) {
            // diagonal line from top-left to bottom right
            echo'\\';
        }
        else if (($y-$n)==($n-$x)) {
            // diagonal line from bottom-left to top-right
            echo'/';
        }
        else {
            // empty space
            echo' ';
        }
        if ($x==$e-1) {
            // add new line for the end of the row
            echo"\n";
        }
    }
}?>
<pre>
<?php s(10); ?>
</pre>

রইহউই কোড সহ সম্পাদনা করেছেন


3
হাই :-) প্রথম প্রথম চেষ্টা। যদিও আপনার কোডটি বেশ কয়েকটি জায়গায় সঙ্কুচিত করতে পারেন। উদাহরণস্বরূপ if(($y-$h)==($x-$h))হিসাবে একই করে if(($y==$x)। আপনি প্রতিস্থাপন দ্বারা অন্য চরিত্র সংরক্ষণ করতে পারবেন if($x==y$)foo();else bar();সঙ্গে if($x^$y)bar();else foo();। আপনার বক্তব্যগুলির পরিবর্তে টার্নারি অপারেটরগুলি ব্যবহার করার চেষ্টা করা উচিত if .. else
চটজলদি ossifrage

টার্নারি অপারেটররা একটি ভাল টিপ
নিক

174 বাইট:function s($n){$e=2*$n+1;for($i=0;$i<$e*$e;$i++){$x=$i%$e;$y=floor($i/$e);echo$y==$x?($x==$n?"O":"\\"):($e-1==$x+$y?"/":($y==$n?"-":($x==$n?"|":" ")));echo$x==$e-1?"\n":"";}}
রোহউই

1. প্রয়োজন নেই $r; শুধু ব্যবহার করুন echo( $r.=বাইট হিসাবে একই পরিমাণ echo)। 2. ব্যবহৃত টেরিনারি অপারেটর (প্রচুর অক্ষর সংরক্ষণ করে)। ৩. $hএটি সমান হওয়ার কারণে অকেজো ছিল $n। 4. আপনি ব্যবহার করতে হবে না floorজন্য $x = floor($i%$e);, যেহেতু একটি পূর্ণসংখ্যা একটি মডুলাস বৃত্তাকার ডাউন হতে করার প্রয়োজন হবে না।
রোহউই

পছন্দ করেছেন টিপস জন্য ধন্যবাদ!
কোডস জনসন

9

পাইথন 2, 99

n=input()
R=range(-n,n+1)
for i in R:print''.join("O\|/ -"[[R,i,0,-i,j].index(j)^(i==0)]for j in R)

প্রিন্ট, পাতিপাতি কিনা তা পরীক্ষা করে তুল্য দ্বারা প্রতিটি লাইন তৈরি (i,j)(কেন্দ্রীভূত (0,0)) সন্তুষ্ট j==-i, j==0, j==i, অথবা কেউ না, একটি হ্যাক সঙ্গে কেন্দ্র লাইন কাজ করতে।


আমি মনে করি আপনি 1 বাইট সংরক্ষণ করার Rপরিবর্তে ব্যবহার করতে পারেন .5
এলোমেলো

@ আর্যান্ডোমরা এটি চালাক, ধন্যবাদ দুই অঙ্কে নিচে!
xnor


7

স্পেসবিএএস - 117 বাইট

1 INPUT s: LET t=s*2: FOR y=0 TO t: PRINT AT y,y;"\";AT y,t/2;"|";AT t-y,y;"/";AT t/2,y;"-": NEXT y: PRINT AT s,s;"O"

এটি এক লুপে স্ল্যাশগুলি এবং ড্যাশগুলি মুদ্রণ করে এবং তারপরে মাঝখানে "ও" টিপ দেয়।

1, 2 এবং 9 ব্যবহার করে আউটপুট

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


একজন অজ্ঞাতনামা ব্যবহারকারী দুটি বাইট সংরক্ষণ করতে পরিবর্তন "-": NEXT y: PRINT AT s,s;"O"করার পরামর্শ দিয়েছেন "-";AT s,s;"O": NEXT y
মার্টিন ইন্ডার

7

জাভাস্ক্রিপ্ট (ES6) 97 98

এটি যথেষ্ট আলাদা বলে মনে হচ্ছে ...

// GOLFED
f=n=>(y=>{for(t='';++y<n;t+='\n')for(x=-n;++x<n;)t+='-O /\\|'[y?x?x-y?x+y?2:3:4:5:+!x]})(-++n)||t

// Ungolfed

F=n=>{
  ++n;
  t = '';
  for (y = -n; ++y < n; t += '\n')
    for (x = -n; ++x < n; )
      if (y != 0)
        if (x != 0)
          if (x != y)
            if (x != -y)
              t += ' '
            else
              t += '/'
          else
            t += '\\'
        else
          t += '|'
      else
        if (x != 0)
          t += '-'
        else 
          t += 'O'
  return t;
}
    
// TEST
function test(){ OUT.innerHTML = f(N.value|0); }
test()
input { width: 4em }
N: <input id=N value=5><button onclick="test()">Go</button>
<pre id="OUT"></pre>


সুন্দর। লুপগুলির জন্য সাধারণ ব্যবহার করার জন্য আমার একটি বন্ধের কথা ভাবা উচিত ছিল।
nderscore

আমার এটা ভাল লেগেছে. আমি একটি স্ট্রিং ব্যবহার করে একটি লিখতে এবং নির্দিষ্ট সূচকটি অ্যাক্সেস করার চেষ্টা করেছি, তবে আপনার চেয়ে অনেক ছোট।
রোহউই

6

"চিটারের সংস্করণ" এর জন্য ওএস / 2 ক্লাসিক রেজিক্স, 102 ... বা 14

লাইনফিডগুলি এটি "গল্ফ" এ বের করুন।

w='%1'
o=center('O',w,'-')
m='center(space("\|/",w),%1)'
do w
  w=w-1
  interpret "o="m"|o|"m
end l
say o

চিটারের সংস্করণ, 255 অক্ষরের অধীনে আপনি যে উত্স কোডটি চান তা নামটির স্ক্রিপ্টটির নাম দিন (এইচপিএফএস ডিস্কের প্রয়োজন):

interpret '%0'

সম্পাদনা: কেবল স্পষ্ট করে বলতে গেলে, প্রতারকের সংস্করণ গণনা করার উদ্দেশ্যে নয়! এটি কেবল নির্বোধ হতে দেখাতে এবং কোনও বৃদ্ধ কুকুরটি এখনও কৌশলগুলি করতে পারে তা দেখানো। :)

উদাহরণস্বরূপ আসল মজা এবং গেমসের জন্য, জাভা -8 / সি 11 স্টাইল "ল্যাম্বডা" এক্সপ্রেশনগুলির একটি তালিকা পুনরাবৃত্তকারীটিতে প্রয়োগ করা। পরীক্ষিত নয়, তবে এটি একটি সার্কায় ১৯৯৯ আইবিএম মেইনফ্রেমে চালানো উচিত। ;)

ForEachInList( 'Months.January.Days', 'Day' -> 'SAY "You have an appointment with" Day.Appointment.Name "on" Day.Appointment.Date' )
EXIT

ForEachInList: 
    SIGNAL ON SYNTAX
    PARSE ARG MyList "," MyVar "->" MyCommand
    INTERPRET ' MyListCount = ' || MyList || '.Count'
    DO ListIndex = 1 TO MyListCount
       INTERPRET MyVar || ' = ' || MyList || '.' || ListIndex
       INTERPRET MyCommand
    END
    RETURN
SYNTAX:
    SAY MyCommand ' is not a valid expression. '
    EXIT

- কলিং কোড ধরে নেওয়া আপনি প্রাকৃতিকভাবে ইতিমধ্যে একটি স্টেম (অ্যারে) তৈরি করেছেন।


আপনার চিটার সংস্করণের জন্য: যদি কোনও প্রোগ্রামের ফাইলের নামটি স্বেচ্ছাচারিতা না হয় তবে এটি বাইট গণনায় অন্তর্ভুক্ত করতে হবে
মার্টিন ইন্ডার

যথেষ্ট ফর্সা। চিটার সংস্করণটি মোটেই গুরুতর হিসাবে চিহ্নিত করা হয়নি! :) ... এই কারণেই আমি 102 এ "আসল" উত্তর পোস্ট করেছি It এটি কেবল অভিনবতার জন্য ছিল।
লিসা

@ লিসা ছাড়া এটি কোনওভাবেই উপন্যাস নয়;)। এছাড়াও, যদি এই চ্যালেঞ্জটি ব্যবহার করা হয় তবে লিডারবোর্ড স্ক্রিপ্টটি ভঙ্গ হবে।
অপ্টিমাইজার

6

হাস্কেল, 109 98 96 বাইট

নিমী এবং মরিসকে তাদের সহায়তার জন্য ধন্যবাদ!

0#0='O'
0#_='-'
_#0='|'
i#j|i==j='\\'|i== -j='/'|1<2=' '
f n=unlines[map(i#)[-n..n]|i<-[-n..n]]

ব্যাখ্যা:

অপারেটর #সূর্যকে কেন্দ্র করে (0,0) স্থানাঙ্ক (i, j) এ কোন অক্ষর প্রদর্শিত হবে তা নির্দিষ্ট করে। ফাংশন fফলাফলটি স্ট্রিং তৈরি করে #-n থেকে এন পর্যন্ত সকল জোড় স্থানাঙ্কের ম্যাপিংয়ের মাধ্যমে ring

ব্যবহার:

ghci> putStr $ f 2
\ | /
 \|/ 
--O--
 /|\ 
/ | \

আপনি একটি পোতা অপারেটর ব্যবহার পরিবর্তে দ্বারা কয়েক বাইট সংরক্ষণ করতে পারবেন sযেমন, 0#0='O', 0#_='-', ইত্যাদি এবং 1<2পরিবর্তে True
নিমি

হয়ত map(i#)[-n..n]দুটো বাইট বাঁচাতে হবে।
লিন

4

আর, 177 149 বাইট

লোকটি মিকি টি! তিনি আমাকে আমার মূলত ভুল সমাধান ঠিক করতে এবং 28 বাইট সংরক্ষণ করতে সহায়তা করেছেন । ধন্যবাদ, মিকি!

m=matrix(" ",(w=2*(n=scan()+1)-1),w);m[row(m)==rev(col(m))]="/";diag(m)="\\";m[,n]="|";m[n,]="-";m[n,n]="O";m[,w]=paste0(m[,w],"\n");cat(t(m),sep="")

অবহেলিত + ব্যাখ্যা:

# Create a matrix of spaces, read n from stdin, assign w=2n+1
m <- matrix(" ", (w <- 2*(n <- scan() + 1) - 1), w)

# Replace the opposite diagonal with forward slashes
m[row(m) == rev(col(m))] <- "/"

# Replace the diagonal with backslashes
diag(m) <- "\\"

# Replace the vertical center line with pipes
m[, n] <- "|"

# Replace the horizontal center line with dashes
m[n, ] <- "-"

# Put an O in the middle
m[n, n] <- "O"

# Collapse the columns into single strings
m[, w] <- paste0(m[, w], "\n")

# Print the transposed matrix
cat(t(m), sep = "")

আরও কোনও পরামর্শ স্বাগত!


1
দুঃখিত অ্যালেক্স, আপনি উল্লম্ব রশ্মি মিস করেছেন। সাধারণ প্রক্রিয়া পরিবর্তন না করে এটিকে সংক্ষিপ্ত করতে কয়েকটি জিনিস পরিবর্তন করা যেতে পারে। scanসত্যিই দরকার নেই w=। এটি কমান্ডের আরও গভীরে স্থানান্তরিত হতে পারে। ifযদি আপনি পথ ম্যাট্রিক্স দৃষ্টান্ত কয়েক পরিচালিত হয় পরিবর্তন ditched করা যেতে পারে। এগুলি প্রয়োগ করে আমি পাই m=matrix(" ",(w=2*(n=scan()+1)-1),w);m[row(m)-rev(col(m))==0]='/';diag(m)="\\";m[,n]='|';m[n,]="-";m[n,n]="O";m[,w]=paste0(m[,w],'\n');cat(t(m),sep='')। আরও গল্ফিং সম্ভব আমি মনে করি।
মিকিটি

@ মিকিটি: এটি দুর্দান্ত। আমার ভুল লক্ষ্য করে এবং আরও ভাল সমাধান প্রমাণ করার জন্য আপনাকে অনেক ধন্যবাদ! আমি উত্তর সম্পাদনা করেছি।
অ্যালেক্স এ।

4

সি #, 230 226 বাইট

string g(int n){string r="";int s=n*2+1;for(int h=0;h<s;h++){for(int w=0;w<s;w++){if(h==w){if(w==n){r+="O";}else{r+="\\";}}else if(w==s-h-1){r+="/";}else if(w==n){r+="|";}else if(h==n){r+="-";}else{r+=" ";}}r+="\n";}return r;}

অনুরোধ অনুসারে, অবারিত সংস্করণ: স্ট্রিং ug (int n) {

        // The sting we'll be returning
        string ret = ""; 

        // The width and height of the output
        int s = n * 2 + 1; 

        // for loop for width and height
        for (int height = 0; height < s; height++) 
        {
            for (int width = 0; width < s; width++) 
            {
                // Matches on top-left to bottom-right diagonal line
                if (height == width) 
                {
                    // If this is the center, write the 'sun'
                    if (width == n) 
                    {
                        ret += "O"; 
                    }
                    // If this is not the center, add the diagonal line character
                    else 
                    {
                        ret += "\\"; 
                    }
                }
                // Matches on top-right to bottom-left diagonal line
                else if (width == s - height - 1) 
                { 
                    ret += "/";
                }
                // Matches to add the center line
                else if (width == n) 
                { 
                    ret += "|";
                }
                // Matches to add the horizontal line
                else if (height == n) 
                { 
                    ret += "-";
                }
                // Matches all others
                else 
                { 
                    ret += " "; 
                } 
            } 
            // Add a newline to separate each line
            ret += "\n"; 
        } 
        return ret; 
    }

এটি আমার প্রথম পোস্ট তাই ক্ষমা চাই যদি আমি কিছু ভুল করে থাকি। কোন মন্তব্য এবং সংশোধন খুব স্বাগত।


এছাড়াও, s=2*n+1পরিবর্তে s=(n*2)+1এবং w==s-h-1পরিবর্তে w==(s-h)-1এটিকে আরও খাটো করে তুলবে।
অ্যালেক্স এ।

সুন্দর, আপনার স্ট্রিং বিল্ডিং পদ্ধতি চুরি করতে পারে। এটি আমাকে বিরক্ত করে যে লিনক লুপগুলির চেয়ে দীর্ঘ :(
ইওয়ান

আমি অবারিত সংস্করণ যুক্ত করেছি :)
সংক্রমণ

4

রুবি: 98 92 টি অক্ষর

প্রোক যা সূর্যের সাথে একটি স্ট্রিং প্রদান করে

f=->n{x=(0..m=n*2).map{|i|s=?|.center m+1
s[i]=?\\
s[m-i]=?/
s}
x[n]=?O.center m+1,?-
x*?\n}

নমুনা রান:

irb(main):001:0> f=->n{x=(0..m=n*2).map{|i|s=?|.center m+1;s[i]=?\\;s[m-i]=?/;s};x[n]=?O.center m+1,?-;x*?\n}
=> #<Proc:0x000000020dea60@(irb):1 (lambda)>
irb(main):002:0> (0..3).each {|i| puts f[i]}
O
\|/
-O-
/|\
\ | /
 \|/ 
--O--
 /|\ 
/ | \
\  |  /
 \ | / 
  \|/  
---O---
  /|\  
 / | \ 
/  |  \
=> 0..3

4

মরিচা, 215 টি অক্ষর

fn a(n:usize){for i in 0..n{println!("{}\\{}|{1}/{0}",s(i),s(n-i-1))}println!("{}O{0}",vec!["-";n].concat());for i in(0..n).rev(){println!("{}/{}|{1}\\{0}",s(i),s(n-i-1))}}fn s(n:usize)->String{vec![" ";n].concat()}

আমি স্ট্রিং স্লাইসিং পদ্ধতিটি ব্যবহারের চেষ্টা করেছি ( n-1স্পেসগুলির একটি স্ট্রিং তৈরি করে এবং সূচীতে এবং এর থেকে স্লাইস করে):

fn a(n:usize){let s=vec![" ";n-(n>0)as usize].concat();for i in 0..n{println!("{}\\{}|{1}/{0}",&s[..i],&s[i..])}println!("{}O{0}",vec!["-";n].concat());for i in(0..n).rev(){println!("{}/{}|{1}\\{0}",&s[..i],&s[i..])}}

তবে এটি আসলে 3 টি চর বেশি।

অবহেলিত কোড:

fn asciisun_ungolfed(n: usize) {
    for i in 0..n {
        println!("{0}\\{1}|{1}/{0}", spaces(i), spaces(n-i-1))
    }
    println!("{0}O{0}", vec!["-"; n].concat());
    for i in (0..n).rev() {
        println!("{0}/{1}|{1}\\{0}", spaces(i), spaces(n-i-1))
    }
}
fn spaces(n: usize) -> String { vec![" "; n].concat() }

আমি যে অংশটি পছন্দ করি তা হ'ল আমি কীভাবে ফর্ম্যাটিং স্ট্রিংগুলিতে কয়েকটি চর শেভ করব। উদাহরণ স্বরূপ,

f{0}o{1}o{1}b{0}ar

সমতুল্য

f{}o{}o{1}b{0}ar

কারণ ফর্ম্যাট স্ট্রিং আর্গুমেন্ট পজিশনের জন্য "অটো-ইনক্রিমেন্টার" ম্যানুয়ালি নম্বর নির্দিষ্ট করে প্রভাবিত হয় না এবং সম্পূর্ণ স্বাধীনভাবে কাজ করে।


4

অক্টোব 85

বোল্ডিং ম্যাট্রিক্স বরাবরের মতো =) eyeএকটি পরিচয় ম্যাট্রিক্স উত্পন্ন করে, বাকিটি আমার নিজের মতো করে ব্যাখ্যাযোগ্য।

m=(e=eye(2*(k=input('')+1)-1))*92+rot90(e)*47;m(:,k)='|';m(k,:)=45;m(k,k)='o';[m,'']

আমার চেয়ে দুটি বাইট আরও ভাল :( আমি আসলে প্রাথমিকভাবে এর অনুরূপ কিছু চেষ্টা করেছি, তবে এটি যথেষ্ট ছোট করতে পারিনি - আমি বুঝতে পারিনি যে আমি "এম (:, কে) = '|'" করতে পারি N
ওবেলে

4

আইডিএল 8.3, 135 বাইট

ডান্নো যদি আরও গল্ফ করা যায় ... এটি খুব সোজা। প্রথমে আমরা খালি স্ট্রিংগুলির একটি m x mঅ্যারে ( m=2n+1) তৈরি করি ; তারপর, আমরা লাইনে অক্ষর আঁকা ( y=x, y=-x, y=n, এবং x=n)। তারপরে আমরা ওকে বিন্দুতে ফেলে দিই (n, n)এবং mপ্রতিটি লাইনে 1 দৈর্ঘ্যের স্ট্রিং হিসাবে ফর্ম্যাট করে পুরো জিনিসটি মুদ্রণ করি যাতে স্থানীয়ভাবে অ্যারে প্রিন্ট করা থেকে কোনও অতিরিক্ত ব্যবধান থাকে না।

pro s,n
m=2*n+1
v=strarr(m,m)
x=[0:m-1]
v[x,x]='\'
v[x,m-x-1]='/'
v[n,x]='|'
v[x,n]='-'
v[n,n]='O'
print,v,f='('+strtrim(m,2)+'A1)'
end

টেস্ট:

IDL> s,4
\   |   /
 \  |  / 
  \ | /  
   \|/   
----O----
   /|\   
  / | \  
 /  |  \ 
/   |   \

"কোনও প্রোগ্রামের পরিবর্তে, আপনি কোনও ফাংশন লিখতে পারেন যা একটি পূর্ণসংখ্যার লাগে The
sirpercival


3

মতলব, 93 87 বাইট

দুঃখের সাথে ফাংশন শিরোনামটি এত বড় হতে হবে ... এগুলি ছাড়াও আমি মনে করি এটি বেশ ভালভাবে গল্ফ হয়েছে। আমি অবাক হলাম, যদি এটি অক্টোভায় কিছু সিনট্যাক্স পার্থক্য নিয়ে আরও ভাল করা যায় done

N=input('');E=eye(N)*92;D=rot90(E)*.52;H=ones(1,N)*45;V=H'*2.76;[E V D;H 79 H;D V E '']

আপনি কেবল N=input('')2 টি অক্ষর বাঁচাতে একটি প্রোগ্রাম তৈরি করতে পারেন । এর বাইরে আপনি কেবল [E V D;H 79 H;D V E '']পুরো ম্যাট্রিক্সকে একটি চর অ্যারে রূপান্তর করার জন্য লিখতে পারেন , যা আপনাকে অন্য একটি বা দুটি বাট সাশ্রয় করবে। (আমি কিছুটা ভিন্ন পদ্ধতির সাথে সবেমাত্র একটি অষ্টাভে প্রোগ্রাম জমা দিয়েছি, তবে আমি আপনারটি খুঁজে পাওয়ার আগেই =)
flawr

আমার কাছে প্রথমে ইনপুট লাইন ছিল, তবে কোনও কারণে আমি ভুল করে ভেবেছিলাম এটি অনুমোদিত নয় ... যদিও অন্য টিপটির জন্য ধন্যবাদ!
ওবেলে

3

জাভাস্ক্রিপ্ট ( ES7 খসড়া ) 115

f=l=>[['O |/\\-'[y^x?z+~x^y?y^l?x^l?1:2:5:3:x^l&&4]for(x in _)].join('')for(y in _=[...Array(z=2*l+1)])].join('\n')


// Snippet demo: (Firefox only)
for(var X of [0,1,2,3,4,5])
    document.write('<pre>' + f(X) + '</pre><br />');


2

পাইথ - 52 বাইট

হার্ড অংশটি প্রতিটি পক্ষের স্ল্যাশগুলি কীভাবে স্যুইচ করা যায় তা নির্ধারণ করছিল। আমি ল্যাম্বডা সংজ্ঞায়নের জন্য স্থির হয়েছি যা প্রতীকগুলি ব্যবহার করে।

KdMms[*Kt-QdG*Kd\|*KdH)_UQjbg\\\/p\O*Q\-*\-Qjb_g\/\\

সম্ভবত আরও গল্ফ করা যেতে পারে, ব্যাখ্যা শীঘ্রই আসছে।

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


2

পার্ল, 94

এখানে অনেক নেস্টেড টের্নারি অপারেটর রয়েছে তবে আমি মনে করি কোডটি যুক্তিসঙ্গতভাবে সোজা।

$n=<>;for$x(-$n..$n){for$y(-$n..$n){print$x^$y?$x+$y?$x?$y?$":'|':'-':'/':$x?'\\':'O'}print$/}

এটি এখানে চেষ্টা করে দেখুন: ideone.com/E8MC1d


1
88 বি: for$x(-($n=<>)..$n){map{print$x^$_?$x+$_?$x?$_?$":'|':'-':'/':$x?'\\':O}-$n..$n;print$/}- কয়েকটি টুইট: ম্যাপের জন্য অভ্যন্তরীণ রূপান্তর করুন এবং $ y $ _ এ পরিবর্তন করুন; ইনলাইন ($n=<>)
আলেকজান্ডার-ব্রেট

2

সি # - 291 (সম্পূর্ণ প্রোগ্রাম)

using System;using System.Linq;class P{static void Main(string[] a){Func<int,int,int,char>C=(s,x,i)=>x==(2*s+1)?'\n':i==s?x==s?'O':'-':x==s?'|':x==i?'\\':x==2*s-i?'/':' ';int S=int.Parse(a[0])*2;Console.Write(Enumerable.Range(0,(S+1)*(S+1)+S).Select(z=>C(S/2,z%(S+2),z/(S+2))).ToArray());}}

চেষ্টা করছি!!
ইওয়ান

1

জাভাস্ক্রিপ্ট (ES6), 139 135 140 + 1 বাইট

(+1 -pকনসোলে নোড সহ পতাকাটির জন্য )

সংশোধন করা হয়েছে:

t=(n,m)=>(m=2*n+1,(A=Array).from(A(m),(d,i)=>A.from(A(m),(e,j)=>i==j?j==n?"O":"\\":m-1==j+i?"/":i==n?"-":j==n?"|":" ").join("")).join("\n"))

ব্যবহার:

t(3)
/*
\  |  /
 \ | / 
  \|/  
---O---
  /|\  
 / | \ 
/  |  \
*/

ungolfed:

var makeSun = function (n, m) {
    m = 2 * n + 1;    // there are 2*n+1 in each row/column
    return Array.from(Array(m), function (d, i) {
        return Array.from(Array(m), function (e, j) {
            // if i is j, we want to return a \
            // unless we're at the middle element
            // in which case we return the sun ("O")
            if (i == j) {
                return j == n ? "O" : "\\";
            // the other diagonal is when m-1 is j+i
            // so return a forward slash, /
            } else if (m - 1 == j + i) {
                return "/";
            // the middle row is all dashes
            } else if (i == n) {
                return "-";
            // the middle column is all pipes
            } else if (j == n) {
                return "|";
            // everything else is a space
            } else {
                return " ";
            }
        }).join("");
    }).join("\n");
}

2
আপনি দুটি রশ্মি নিখোঁজ বলে মনে হচ্ছে।

ওহ, হাহাকার, আমি
এটিকে

(A=Array).from(A(m))
শ্মিদ্দী


@ শ্মিদ্দী পরামর্শের জন্য ধন্যবাদ! যা অনেকগুলি অক্ষর সংরক্ষণ করেছে
রোহউই

1

পাইথন 3, 193 186 বাইট

Golfed

def f(n):
 s,b,e,d,g=' \\/|-';p,r,i='',int(n),0
 while r:print(s*i+b+s*(r-1)+d+s*(r-1)+e);r-=1;i+=1
 print(g*n+'O'+g*n);r+=1;i=n-1
 while r<n+1:print(s*i+e+s*(r-1)+d+s*(r-1)+b);r+=1;i-=1

আউটপুট

>>> f(3)
\  |  /
 \ | /
  \|/
---O---
  /|\
 / | \
/  |  \

>>> f(5)
\    |    /
 \   |   /
  \  |  /
   \ | /
    \|/
-----O-----
    /|\
   / | \
  /  |  \
 /   |   \
/    |    \

Ungolfed

def f(n):
    s, b, e, d, g = ' \\/|-'
    p, r, i = '', int(n), 0
    while r:
        print(s*i + b + s*(r-1) + d + s*(r-1) + e)
        r -= 1
        i += 1
    print(g*n + 'O' + g*n)
    r += 1
    i = n-1
    while r < n+1:
        print(s*i + e + s*(r-1) + d + s*(r-1) + b)
        r += 1
        i -= 1

1
এখানে গল্ফ করার মতো কয়েকটি জিনিস রয়েছে তবে সবচেয়ে বড়টি হ'ল আপনার ডিফল্ট যুক্তি। s=' ',b='\\',f='/',d='|',g='-'হয় খুব , দীর্ঘ যাতে আপনি যোগ করে এটি সরানোর ভাল হতে চাই s,b,f,d,g=" \/|-"দ্বিতীয় লাইন করতে।
Sp3000

আমি " \/|-"এটি একটি পৃথক অক্ষরে বিভক্ত না করে একক স্ট্রিং হিসাবে বোঝাতে চাইছি । তোমার মত স্ট্রিং থেকে প্যাকমুক্ত করতে x,y,z="123", তোলে যা x="1", y="2"এবং z="3"
Sp3000

আবার সম্পাদিত। ধন্যবাদ @ এসপি 3000
জ্যাচ গেটস

1

সিজেম, 59 55 বাইট

ri:A,W%{_S*"\|/"\*\A\-(S*_@@++}%_Wf%W%['-A*_'O\++]\++N*

এটি যেমন কোনও পুরষ্কার জিততে পারে না তবে আমি এতে যথেষ্ট খুশি ছিলাম!

গল্ফিং টিপস জন্য Sp3000 ধন্যবাদ।


1
চমৎকার কাজ! এখানে কয়েকটি টিপস S''-A*'O'-A'-A*_'O\
রইল

1

পাইথন, 175 129 127 125 বাইট

s,q,x=' ','',int(input())
for i in range(x):d=(x-i-1);q+=(s*i+'\\'+s*d+'|'+s*d+'/'+s*i+'\n')
print(q+'-'*x+'O'+'-'*x+q[::-1])

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


1

রুবি - 130 বাইট

def f(n);a=(0...n).map{|i|' '*i+"\\"+' '*(n-1-i)+'|'+' '*(n-1-i)+'/'+' '*i};puts(a+['-'*n+'O'+'-'*n]+a.reverse.map(&:reverse));end

ব্যবহার:

irb(main):002:0> f(3)
\  |  /
 \ | /
  \|/
---O---
  /|\
 / | \
/  |  \

1
পুরানো f=->n{a=(0...n).map{|i|(s=' ')*i+?\\+s*(m=n-1-i)+?|+s*(m)+?/+s*i};puts(a+[?-*n+'O'+?-*n]+a.reverse.map(&:reverse))}
কৌতূহলের

1

পার্ল 85 91 90 89 86 বি

map{$_=$r||O;s/^|$/ /mg;s/ (-*O-*) /-$1-/;$r="\\$s|$s/
$_
/$s|$s\\";$s.=$"}1..<>;say$r

Ungolfed:

# usage: echo 1|perl sun.pl

map {
    $_ = $r || O;  # no strict: o is "o". On the first run $r is not defined
    s/^|$/ /mg;    # overwriting $_ saves characters on these regexes
    s/ (-*O-*) /-$1-/;
    $r = "\\$s|$s/
$_
/$s|$s\\";         # Embedded newlines save 1B vs \n. On the first run $s is not defined.
    $s .= $"
} 1..<>;
say $r

1

প্রোলোগ, 219 বাইট

না, এটি কোনও গল্ফ ভাষা নয়। তবে আমি মনে করি এই সাইটের আরও প্রোলোগ দরকার।

s(N,N,N,79).
s(R,R,_,92).
s(R,C,N,47):-R+C=:=2*N.
s(N,_,N,45).
s(_,N,N,124).
s(_,_,_,32).
c(_,C,N):-C>2*N,nl.
c(R,C,N):-s(R,C,N,S),put(S),X is C+1,c(R,X,N).
r(R,N):-R>2*N.
r(R,N):-c(R,0,N),X is R+1,r(X,N).
g(N):-r(0,N).

swiplলিনাক্স দিয়ে পরীক্ষা করা । তাই মত ডাকা: swipl -s asciiSun.prolog; তারপরে আপনার পছন্দসই সূর্যের জন্য জিজ্ঞাসা করুন:

?- g(3).
\  |  /
 \ | /
  \|/
---O---
  /|\
 / | \
/  |  \
true .

Ungolfed:

 % Args to sym/4 are row, column, N and the character code to be output at that location.
sym(N,N,N,79).
sym(R,R,_,'\\').
sym(R,C,N,'/') :- R+C =:= 2*N.
sym(N,_,N,'-').
sym(_,N,N,'|').
sym(_,_,_,' ').

 % Args to putCols/3 are row, column, and N.
 % Recursively outputs the characters in row from col onward.
putCols(_,C,N) :- C > 2*N, nl.
putCols(R,C,N) :- sym(R,C,N,S), put_code(S), NextC is C+1, putCols(R,NextC,N).

 % Args to putRows/2 are row and N.
 % Recursively outputs the grid from row downward.
putRows(R,N) :- R > 2*N.
putRows(R,N) :- putCols(R,0,N), NextR is R+1, putRows(NextR,N).

putGrid(N) :- putRows(0,N).

1

জাভাস্ক্রিপ্ট (ES6), 142 140 134 117 বাইট

n=>(g=x=>x?`${t=` `[r=`repeat`](n-x--)}\\${s=` `[r](x)}|${s}/${t}
`+g(x):`-`[r](n))(n)+`O`+[...g(n)].reverse().join``

এটি চেষ্টা করুন

f=
n=>(g=x=>x?`${t=` `[r=`repeat`](n-x--)}\\${s=` `[r](x)}|${s}/${t}
`+g(x):`-`[r](n))(n)+`O`+[...g(n)].reverse().join``
i.addEventListener("input",_=>o.innerText=f(+i.value))
o.innerText=f(i.value=1)
<input id=i type=number><pre id=o>

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