একটি ঘন্টাঘড়ি আঁকুন


32

আবার প্রোগ্রামিং 101 এর জন্য একটি কার্য দ্বারা অনুপ্রাণিত এখানে আরও একটি চ্যালেঞ্জ।

ইনপুট:

  • একটি ধনাত্মক পূর্ণসংখ্যা n >= 3। (বিজোড় হতে হবে)

আউটপুট:

  • nনক্ষত্রের রেখাগুলি, যেখানে প্রথম রেখায় রয়েছে nনক্ষত্র এবং প্রতিটি নতুন লাইনে আগের রেখার চেয়ে দুটি নক্ষত্র রয়েছে। 1 টি তারকাচিহ্ন আঘাত করা অবধি। সেখান থেকে প্রতিটি নতুন লাইনের অ্যাসিরিস্কে ফিরে যাওয়ার আগে রেখার চেয়ে আরও দুটি নক্ষত্র রয়েছে n। স্পেসস বা স্পেসের মতো কোনও কিছুকে অ্যাসিস্ট্রিকগুলি সারিবদ্ধ করার জন্য ব্যবহার করতে হবে যাতে এটি সত্যিই একটি ঘন্টাঘড়ির মতো দেখায়।

সাধারাইওন রুল:

  • ট্রেলিং করা নতুন লাইনের অনুমতি রয়েছে তবে এটি ব্যবহার করতে হবে না।
  • ইন্ডেন্টেশন একটি আবশ্যক।
  • এটি কোড-গল্ফ, তাই বাইট জেতে সংক্ষিপ্ত উত্তর।
  • যেহেতু কোর্সটি সি ++ তে পড়ানো হয়, তাই আমি সি ++ তে সমাধান দেখতে আগ্রহী।

পরীক্ষার কেস (n = 5):

*****
 ***
  *
 ***
*****

তদনুসারে সম্পাদিত, ধন্যবাদ :-)
সিকবয়


3
@ অলিভার বিবেচনা করে ওপি লিখেছেন "একটি তারকাচিহ্ন আঁকুন", আমি পুরোপুরি নিশ্চিত নই যে এই চ্যালেঞ্জটিকে সদৃশ বলা ন্যায্য। যদিও এটি অবশ্যই সম্পর্কিত।
শার্লক 9

19
যেহেতু এখানে প্রত্যেকে পুরোপুরি প্রসঙ্গটি জানে না, ওপি মূলত "একটি তারকাচিহ্ন আঁকুন" পোস্ট করেছিলেন এবং অতিরিক্ত চ্যালেঞ্জ হিসাবে এই চ্যালেঞ্জটি সম্পাদনা করেছিলেন। আমরা তাদের বলেছিলাম যে অংশটি সরিয়ে ফেলুন এবং এটিকে একটি আলাদা চ্যালেঞ্জ করুন (যা তারা করেছিলেন)। এই চ্যালেঞ্জ না সদৃশ। বহু উচ্চ প্রতিনিধি ব্যবহারকারী ওপি সেইগুলি করছে যা এমনকি কয়েকটি মোডের পরামর্শ দেওয়া হয়েছে।
ডিজেএমসিএমহেম

2
@ জেডিএল: না, আপনি কেন করবেন? আহ, এখন আমি বুঝতে পারছি আপনি বর্গ দ্বারা কী বোঝাতে চেয়েছিলেন ... :
ডি

উত্তর:


20

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

G↘←↗N*

মরা সহজ। একটি বহু আঁকুন জি এর উপর *, এক ইনপুট থেকে নেওয়া পাশ দৈর্ঘ্য সঙ্গে এন আমভের, যেখানে পক্ষের যেতে নিচে-এবং-ঠিক আছে, অনুভূমিকভাবে ছেড়ে উঠে-এবং-ডানে:

*   *
 * *
  *
 * *
*****

তারপরে আউটলাইনটি স্বতঃপূরণ করুন এবং এটি পূরণ করুন।

*****
 ***
  *
 ***
*****

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


হাহ, বেশ সুন্দর!
CT14.IT

6
এই ভাষা খুব আকর্ষণীয়! আমি এখন থেকে এটিকে খুব কাছ থেকে দেখছি: পি।
আদনান

এই ভাষাটি আগে দেখেনি ... দেখে মনে হচ্ছে আকর্ষণীয়! আমি অবাক হয়েছি আপনি যদি কোনওভাবে এটি জেলির সাথে মিশ্রিত করেন তবে আপনি কী পাবেন ...
ফলস্বরূপ ফল

12

পাইথন 2, 57 বাইট

N=n=input()
exec"print('*'*max(n,2-n)).center(N);n-=2;"*n

একটি সম্পূর্ণ প্রোগ্রাম। লম্বরেখায় যায়, কেন্দ্রের উপরের সঠিক সংখ্যাটি মুদ্রণ করে।

একটি পুনরাবৃত্ত ফাংশন দীর্ঘ ছিল (67 বাইট):

f=lambda n,p='':p+n*'*'+'\n'+(1%n*' 'and f(n-2,p+' ')+p+n*'*'+'\n')

অথবা

f=lambda n,p='':1/n*(p+'*\n')or f(n-2,p+' ').join([p+n*'*'+'\n']*2)

আমি maxabsabs(n-1)+1
একটিটি

@ njzk2 আপনি কাজ করে প্যারেন্স কেটে ফেলতে পারেন '*'*-~abs(n-1)তবে তার দৈর্ঘ্যের সমান '*'*max(n,2-n)
xnor

এখানে def f(n,s=''):r=s+'*'*n+'\n';return 1/n*r or r+f(n-2,s+' ')+rby১ বাইট রয়েছে, তবে এটি আরও দীর্ঘ। এমনকি শীর্ষস্থানীয় নিউলাইন সহ def f(n,s='\n'):r=s+'*'*n;return 1/n*r or r+f(n-2,s+' ')+rএখনও 58 বাইট রয়েছে ...
ডেনিস

আমাকে সম্পর্কে শেখানোর জন্য +1 center। এটি এখনও অবধি জানত না।
DLosc

11

ভি , 12 বাইট

Àé*hòl3Äjxx>

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

আমি এর মতো চ্যালেঞ্জ পছন্দ করি কারণ আমি ভি এর 2 ডি প্রকৃতির সুবিধাগুলি তুলে ধরছি। ব্যাখ্যা। প্রথমত, আমাদের এন স্ট্রিস্কগুলির একটি স্ট্রিং তৈরি করতে হবে । সুতরাং, আমরা এটি করি:

À           " Arg1 times:
 é          " Insert the following single character:
  *         " '*'

পার্শ্ব নোট হিসাবে এটি সরাসরি ভিমে সমতুল্য @ai*<esc>, এবং @aনিবন্ধটি প্রাক-ইনিশিয়াল্ট করা হয় "আরজি 1" তে। এটি সংখ্যার ইনপুটটিকে অনেক বেশি সুবিধাজনক করে তুলেছে।

তারপরে, আমরা সঙ্গে অক্ষরে ডানে সরানো h। মজার অংশটি এখানে:

ò           " Until an error is thrown:
 l          "   Move one character to the right. This will throw an error on anyline with only one asterisk in it
  3Ä        "   Make 3 copies of this line
    j       "   Move down one line
     xx     "   Delete two characters
       >    "   Indent this line once.

প্রযুক্তিগতভাবে, এই শেষ অংশটি

òl3Äjxx>>ò

কারণ ইনডেন্ট কমান্ডটি আসলে >>। ভি সুবিধামতভাবে অনুমান করে যে অসম্পূর্ণ কমান্ডগুলি বর্তমান লাইনে প্রযোজ্য, এবং òলুপিংয়ের জন্য দ্বিতীয় অক্ষরও স্পষ্টতই পূরণ করে ।


10

সি ++ মেটাটেমপ্লেটস, 186 বাইট

আমার সি এর সুস্পষ্ট সূত্রের সাথে মেটাটেমপ্লেটগুলি প্রতিযোগিতা করছে!

template<int N,int X=N*N+N-1>struct H{enum{I=X/(N+1)-N/2,J=X%(N+1)-N/2-1};S s{(J==-N/2-1?'\n':((I>=J&I>=-J)|(I<=J&I<=-J)?'*':' '))+H<N,X-1>().s};};template<int N>struct H<N,-1>{S s="";};

Ungolfed:

using S=std::string;

template <int N, int X=N*N+N-1>
struct H{
 enum{I=X/(N+1)-N/2,J=X%(N+1)-N/2-1};
 S s{(J==-N/2-1 ? '\n' : ( (I>=J&I>=-J)|(I<=J&I<=-J) ?'*':' '))+H<N,X-1>().s};
};

template <int N> struct H<N,-1> {S s="";}; 

ব্যবহার:

std::cout << H<5>().s;

অ প্রতিদ্বন্দ্বী

শুধু মজা করার জন্য:

//T: Tuple of chars
template <char C, char...Tail> struct T { S r=S(1,C)+T<Tail...>().r; };

//specialization for single char
template <char C> struct T<C> { S r=S(1,C); };

//M: Repeated char
template <int N, char C> struct M { S r=S(N,C); };

//U: concatenates T and M
template <class Head, class...Tail> struct U { S r=Head().r+U<Tail...>().r; };

//specialization for Tail=M
template <int N, char C> struct U<M<N,C>> { S r{M<N,C>().r}; };

//specialization for Tail=T
template <char...C> struct U<T<C...>> { S r=T<C...>().r; };

//finally the Hourglass
template <int N, int I=0> struct H {
 S s=U<
       M<I,' '>,
       M<N,'*'>,
       T<'\n'>
      >().r;
 S r{s + H<N-2,I+1>().r + s};
};

//specialization for recursion end
template <int I> struct H<1,I> {
 S r=U<
       M<I,' '>,
       T<'*','\n'>
      >().r;
};

ব্যবহার:

std::cout << H<5>().r;

2
সি ++
-র

7

পাওয়ারশেল ভি 2 +, 54 বাইট

param($n)$n..1+2..$n|?{$_%2}|%{" "*(($n-$_)/2)+"*"*$_}

ইনপুট নেয় $n(একটি বিজোড় পূর্ণসংখ্যা হিসাবে গ্যারান্টিযুক্ত), এর সাথে দুটি রেঞ্জ তৈরি করে $n..1এবং 2..$nতাদের একত্রে সংমিশ্রিত করে, তারপরে Where-Objectকেবল বিজোড়গুলি নির্বাচন করতে ব্যবহার করে |?{$_%2}। এগুলিকে একটি লুপে খাওয়ানো হয়। প্রতিটি পুনরাবৃত্তি, আমরা ফাঁকাগুলির যথাযথ সংখ্যাটি তৈরি করি, স্ট্রিং-কনটেটেটেড যথাক্রমে তারকাচিহ্নগুলির সাথে। এই স্ট্রিংগুলি পাইপলাইনে রেখে গেছে, এবং Write-Outputপ্রোগ্রামের সমাপ্তির সময় তাদের মধ্যে অন্তর্ভুক্ত সন্নিবেশকারী নিউলাইনগুলির মাধ্যমে আউটপুট ।

উদাহরণ

PS C:\Tools\Scripts\golfing> 3,5,7|%{.\draw-an-hourglass.ps1 $_;""}
***
 *
***

*****
 ***
  *
 ***
*****

*******
 *****
  ***
   *
  ***
 *****
*******

7

পাইথন, 78 বাইট

সুতরাং কেবল ইনডেন্টেশন সহ:

f=lambda n,i=0:n>1and' '*i+'*'*n+'\n'+f(n-2,i+1)+' '*i+'*'*n+'\n'or' '*i+'*\n'

ব্যবহার:

print f(5)

6

সি, 114 109 বাইট

i,j;k(n){for(i=-n/2;i<=n/2;++i)for(j=-n/2;j<=n/2+1;++j)putchar(j==n/2+1?10:(i>=j&i>=-j)|(i<=j&i<=-j)?42:32);}

ungolfed:

i,j;
k(n){
 for(i=-n/2;i<=n/2;++i)
  for(j=-n/2;j<=n/2+1;++j)
   putchar(j==n/2+1?10:(i>=j&i>=-j)|(i<=j&i<=-j)?42:32);
}

পূর্ববর্তী পুনরাবৃত্ত সমাধান:

p(a,c){while(a--)putchar(c);}
f(n,i){p(i,32);p(n,42);p(1,10);}
g(n,i){if(n>1)f(n,i),g(n-2,i+1);f(n,i);}
h(n){g(n,0);}

5

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

f=(n,s="*".repeat(n))=>n>1?s+`
`+f(n-2).replace(/^/gm," ")+`
`+s:s

এখানে ধারণাটি হ'ল পূর্ব থেকে প্রতিটি ঘড়িঘড়ি তৈরি করা: প্রতিটি লাইনের শুরুতে একটি স্থান যুক্ত করুন, এবং তারা দুটি সংক্ষিপ্তসারগুলি সংযোজন এবং সংযোজন করা হবে n


4

05 এ বি 1 ই , 21 20 19 17 বাইট

কারুসোমপুটিংয়ের জন্য 2 বাইট সংরক্ষণ করা হয়েছে

;ƒ'*¹N·-×Nð×ì})û»

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

ব্যাখ্যা

;ƒ                   # for N in [0 ... floor(input/2)+1]
  '*                 # push an asterisk
    ¹N·-×            # repeat the asterisk input-N*2 times
         Nð×ì        # prepend N spaces
             }       # end loop
              )      # wrap stack in a list
               û     # palendromize
                »    # join with newlines

Ir"*"×.pRû- এখনই পেয়ে গেছি, মুখটা পলম হয়েছে যখন আমি বুঝতে পেরেছিলাম যে আমি কত দূরে আছি, আপনি দেখেছেন আপনি উত্তর দিয়েছেন, এখন এই উদাহরণটি ব্যবহার করে এই ভাষায় পুনরাবৃত্তি শেখার চেষ্টা করতে যাবেন। ধন্যবাদ!
ম্যাজিক অক্টোপাস উরন

4
আমি আসলে একবারে সাহায্য করতে পারি: ;ƒ'*¹N·-×Nð×ì})û»নতুন প্যালিনড্রাইজ কমান্ডটি ব্যবহার করুন। -২ বাইট।
ম্যাজিক অক্টোপাস উরন 18

@ কারাসোকম্পুটিং: ধন্যবাদ! আমি প্যালেন্ড্রোমাইজ কমান্ড সম্পর্কে জানতাম না (আমি ডক্সটি রিফ্রেশ করি নি)। খুব দরকারী. এর আগে বেশ কয়েকবার এর দরকার
পড়েছে

9 বাইট এমনকি উত্তরাধিকারসূত্রেও। যদিও আমি নিশ্চিত যে বিল্টিনগুলি ÅÉএবং .cসম্ভবত আপনি পোস্ট করার সময় এটি এখনও উপলভ্য ছিল না। :)
কেভিন ক্রুইজসেন

4

এমএটিএল , 12 বাইট

Q2/Zv&<~42*c

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

ব্যাখ্যা

এটি সাম্প্রতিক যোগ করা প্রতিসম রেঞ্জ ফাংশনটি ব্যবহার করে।

Q     % Input n implicitly. Add 1
      % STACK: 6
2/    % Divide by 2
      % STACK: 3
Zv    % Symmetric range
      % STACK: [1 2 3 2 1]
&<~   % Matrix of all pairwise "greater than or or equal to" comparisons
      % STACK: [1 1 1 1 1
                0 1 1 1 0
                0 0 1 0 0
                0 1 1 1 0
                1 1 1 1 1]
42*   % Multiply by 42 (ASCII code of '*')
      % STACK: [42 42 42 42 42
                 0 42 42 42  0
                 0  0 42  0  0
                 0 42 42 42  0
                42 42 42 42 42]
c     % Convert to char. Implicitly display, with char 0 shown as space
      % STACK: ['*****'
                ' *** '
                '  *  '
                ' *** '
                '*****']

নিস! এটি দুর্দান্ত বৈশিষ্ট্য। এটি আমার ভি উত্তরের কাছাকাছি এসেছিল এমন একমাত্র উত্তর, সুতরাং এখন আমি এক বা দুটি বাইট বন্ধ করে নিতে আগ্রহী হতে চলেছি। : ডি
ডিজেএমসিএমহেম

@ ডিজেএমসিএমহেম হেহ, আমি মনে করি না যে আমি এটির একটিতে বাইট গণনা হ্রাস করতে সক্ষম হব
লুইস মেন্ডো

হ্যাঁ, আমিও পারি না বলে মনে করি। যাইহোক, কয়েক মিনিটের মধ্যে সম্ভবত 4-বাইট জেলি উত্তর থাকবে,
হাহাহাহা

4

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

for($c=str_pad,$m=$n=$argv[1];$n<=$m;$n+=$d=$d>0||$n<2?2:-2)echo$c($c('',$n,'*'),$m,' ',2)."
";

সারিগুলিকে একটি অ্যারেতে সংরক্ষণ এবং তারপরে সবকিছু আউটপুট করার পরিবর্তে লুপটি 1 অবধি নীচে নেমে যায় এবং তারপরে মূল সংখ্যাটিতে ফিরে যায়।


3

সি ++ 11, 93 বাইট

#include<string>
using S=std::string;S f(int n,int i=0){S s=S(i,32)+S(n,42)+'\n';return n>1?s+f(n-2,i+1)+s:s;}

সামান্য শৃঙ্খলাবদ্ধ:

std::string f(int n,int i=0){
 auto s=std::string(i,' ') + std::string(n,'*') + '\n';
 return n>1 ? s+f(n-2,i+1)+s : s;
}

ব্যবহার:

std::cout << f(5);

নিস! এক বাইট হওয়া ASCII অভিমানী এবং প্রতিস্থাপন সংরক্ষণ করা যাবে '\n'সঙ্গে 10:)
কোয়েন্টিন

3

আপনি সম্প্রতি প্রবর্তিত প্রতিসম রেঞ্জ ফাংশনটির সাহায্যে কয়েকটি বাইট সংরক্ষণ করতে পারেন: কিউ 2 / জেডভি & <~ 42 * সি
লুইস মেন্ডো

@ লুইস মেন্ডো এটি দুর্দান্ত! যেহেতু এটি সম্পূর্ণ ভিন্ন পদ্ধতির, তাই আমি আপনাকে এটির অনুমতি দেব।
ডিজেএমসিএমহেম

ঠিক আছে, আমি পোস্ট করব!
লুইস মেন্ডো 21

3

আর, 77 বাইট

M=matrix(" ",n<-scan(),n);for(i in 1:n)M[i:(n-i+1),i]="*";cat(M,sep="",fill=n)

একটি অক্ষর ম্যাট্রিক্স তৈরি করে, যা এরপরে এটি প্রিন্ট করে cat, fill=nলাইনগুলি সঠিকভাবে প্রান্তিক হয় তা নিশ্চিত করে। নোট করুন যে উপাদানগুলি ম্যাট্রিক্স কলামে প্রথম-এ সংরক্ষণ করা হয় (যেমন প্রথম দুটি উপাদান হ'ল M[1,1]এবং M[2,1]তা নয় M[1,2]))


3

জাভা 7, 170 165 164 বাইট

5 হাই বাইন বাঁচানোর জন্য হাইপিনোকে ধন্যবাদ
কেভিনকে ধন্যবাদ 1 বাইট সঞ্চয় করার জন্য।

String c(int n,int x){String s,c,t=c=s=" ";int i=0;for(;i++<n;s+="*");for(i=x;i-->=0;c+=" ");for(i=x;i-->0;t+=" ");return(n=n-2)>=0?s+"\n"+c+c(n,++x)+"\n"+t+s:"*";} 

আপনি সরিয়ে 2 বাইট সংরক্ষণ করতে পারবেন s=থেকে s=s+"\n"পরিবর্তন করে এবং 2 আরও বাইট return(n=--n-1)থেকে return(n=n-2)4 বাইট মোট জন্য।
হাইপিনো

হাই। আপনি গলফ দুটি অংশ: String s="",c="",t="";থেকে String s,c,t=s=c="";( -2 বাইট ), এবং return(n=n-2)>=0?s+"\n"+c+c(n,++x)+থেকে return n-1>0?s+"\n"+c+c(n-2,++x)+( -2 বাইট আবার)
কেভিন Cruijssen

তবে @ কেভিন ক্রুজসেন প্যাটার্নটি পরিবর্তনের পরে প্রত্যাশার মতো নয় n=n-2-> n-1>0কারণ কোনও ফাংশনের অন্য যুক্তিতে এন ব্যবহার করা উচিত।
নোট

@Numberknot আমি জানি, কিন্তু আমি এও পরিবর্তিত nকরার n-2যে অংশ এ। return(n=n-2)>=0 ... nপরিবর্তিত করা return n-1>0 ... n-2এখনও খাটো। পিএস: আপনি বাইটস সংরক্ষণের জন্য আমাকে ধন্যবাদ জানিয়েছেন, কিন্তু আপনার সম্পাদনায় আপনার কোড পরিবর্তন করেন নি। ;)
কেভিন ক্রুইজসেন

@ নাম্বারকনোট উম্মে .. আপনি এখনও আমার দ্বিতীয় টিপটি ভুলে গেছেন। যাই হোক, এখানে একটি সংক্ষিপ্ত বৈকল্পিক হল: String c(int n,int x){String s,c=s="";int i=0;for(;i++<n;s+="*");for(i=x;i-->0;c+=" ");return n>1?s+"\n "+c+c(n-2,x+1)+"\n"+c+s:"*";}ছাড়া t( ideone পরীক্ষা - 133 বাইট )
কেভিন Cruijssen

3

পিএইচপি - 95 বাইট

$c=2;for($i=$a=$argv[1];$i<=$a;$i-=$c*=$i<2?-1:1)echo str_pad(str_repeat("*",$i),$a," ",2)."
";

এর পরিবর্তে একটি আসল নতুন লাইন ব্যবহার করে একটি বাইট সংরক্ষণ করা হয়েছে "\r"


2

পাইথ, 22 বাইট

j+J.e+*dk*b\*_:1hQ2_PJ

একটি প্রোগ্রাম যা STDIN- তে একটি পূর্ণসংখ্যার ইনপুট নেয় এবং ফলাফলটি মুদ্রণ করে।

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

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

j+J.e+*dk*b\*_:1hQ2_PJ  Program. Input: Q
              :1hQ2     Range from 1 to Q+1 in steps of 2. Yields [1, 3, 5, ..., Q]
             _          Reverse
   .e                   Enumnerated map with b as elements and k as indices:
      *dk                 k spaces
         *b\*             b asterisks
     +                    Concatenate the spaces and asterisks
  J                     Store in J
                    PJ  All of J except the last element
                   _    Reverse
 +                      Concatenate J and its modified reverse
j                       Join on newlines
                        Implicitly print

2

সি, 195 191 বাইট

গল্ফটি কিছুটা ছোট হওয়া উচিত

x,y,i;f(n){for(i=0;i<n;i+=2,puts("")){for(y=n-i;y<n;y+=2,putchar(32));for(x=i;x++<n;putchar(42));}for(i=n-2;~i;i-=2,puts("")){for(y=n-i+2;y<n;y+=2,putchar(32));for(x=i-1;x++<n;putchar(42));}}

আমরা এটা পরীক্ষা করতে পারেন এখানে ideone উপর


2

সি, 79 বাইট

h(m,n,k){for(n=m++,k=n*m;--k;putchar(k%m?abs(k%m-m/2)>abs(k/m-n/2)?32:42:10));}

এটি কাউন্টডাউন ভেরিয়েবলকে kসারি এবং কলাম সূচকগুলিতে বিভক্ত করে । যদি কলাম সূচক 0 হয় (একটি সারিতে শেষ চর), এটি একটি নতুন লাইনের অক্ষর (10) আউটপুট করে। তারপরে এটি কেন্দ্রের নক্ষত্রের চারপাশে থাকা সারি এবং কলাম সূচকগুলি সামঞ্জস্য করে। তারপরে, abs(x) < abs(y)কোনও স্থান আউটপুট করার জন্য একটি সংক্ষিপ্ত শর্ত।



2

জাভা 7, 156 বাইট

মোটামুটি সহজ। এর সাথে রেখাগুলি n, তারার সাথে j, স্পেসগুলি sএবং দিকনির্দেশ দিয়ে রাখে d। আমি সত্যিই বোর্ডে একটি নন-রিকার্সেভ জাভা উত্তর চেয়েছিলাম, তবে তাতে ক্ষতি হয় না যে এটিও কিছুটা খাটো :)

String f(int n){String o="";int j=n,s=0,i,d=0;for(;n-->0;o+="\n"){for(i=0;i++<s;)o+=" ";for(i=0;i++<j;)o+="*";d+=j<2?1:0;j+=d<1?-2:2;s+=d<1?1:-1;}return o;}

লাইন বিরতি সহ:

String f(int n){
    String o="";
    int j=n,s=0,i,d=0;
    for(;n-->0;o+="\n"){
        for(i=0;i++<s;)
            o+=" ";
        for(i=0;i++<j;)
            o+="*";
        d+=j<2?1:0;
        j+=d<1?-2:2;
        s+=d<1?1:-1;
    }
    return o;
}

2

এপিএল, 19 বাইট

' *'[1+∘.≤⍨(⊢⌊⌽)⍳⎕]

টেস্ট:

      ' *'[1+∘.≤⍨(⊢⌊⌽)⍳⎕]
⎕:
      5
*****
 *** 
  *  
 *** 
*****

ব্যাখ্যা:

                 ⎕   ⍝ read number  
                ⍳    ⍝ 1..N
           ( ⌊ )     ⍝ at each position, minimum of
            ⊢        ⍝ 1..N
              ⌽      ⍝ and N..1 (this gives 1..N/2..1)
       ∘.≤⍨          ⍝ outer product with ≤
     1+              ⍝ add 1 to each value
' *'[             ]  ⍝ 1→space, 2→asterisk

কেবল 1+একটি এপিএল সরান এবং ব্যবহার করুন ⎕IO←0
অ্যাডম

2

হাস্কেল, 84 বাইট

f n|l<-div n 2,k<-[-l..l]=putStr$unlines[[" *"!!(fromEnum$abs x<=abs y)|x<-k]|y<-k]

চমৎকার সমাধান! কিন্তু আমি নিশ্চিত আপনি প্রয়োজন নেই আছি putStrএবং আপনি পরিত্রাণ পেতে পারেন fromEnumমত এই
ბიმო



2

পিএইচপি ,104 88 বাইট

for(;$i++<$argn;$a.='**',$i++>1?$o=$s.$o:1)$o.=$s=str_pad("*$a",$argn,' ',2)."
";echo$o;

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

এটি এই চ্যালেঞ্জের উপর পিএইচপি-র সর্বনিম্ন স্কোরকে পরাভূত করে না, তবে আমার ফেলে দেওয়া আমার পক্ষে খুব পাগল।

ঠিক আছে, তাই আমি এখন এই চ্যালেঞ্জের উপর পিএইচপি-র সবচেয়ে কম স্কোর (দীর্ঘকাল নয়) হিসাবে গল্ফ করেছি, তবে এটি এখনও পাগল হওয়ার সত্যটি পরিবর্তন করে না।

$ echo 7|php -nF hour.php
*******
 *****
  ***
   *
  ***
 *****
*******

83? এছাড়াও হু, পিএইচপি এর বর্নওয়ার্ডসও রয়েছে, যদিও এটি এখানে কার্যকর নয়
ASCII- কেবল

@ এএসসিআইআই-ইঁদুরই! দেখে মনে হচ্ছে আমি আরও কিছু কাজ করেছি! lol
640KB



@ এএসসিআইআই-ইয়েল, হ্যাঁ, খুব সুন্দর! এটি নিশ্চিতভাবে সঠিক পন্থা!
640 কেবি

1

গ্রোভি, 66 বাইট

{n->((n..1)+(2..n)).each{if(it%2>0){println(("*"*it).center(n))}}}

এটি ব্যবহার করে দেখুন: https://groovyconsole.appspot.com/script/5145735624392704

ব্যাখ্যা:

((n..1)+(2..n)) - উল্টানো palindromize এন [n,..,1,..,n]

.each{if(it%2>0){...} - বিজোড় উপাদান মাধ্যমে Iterate।

println(("*"*it).center(n)) - কেন্দ্রের তারাগুলি এবং প্রতিটি নতুন লাইনে মুদ্রণ করুন।


.eachএর কোড ব্লক হতে পারে {it%2&&println(("*"*it).center(n))}
manatwork

1

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

$b=[];for($i=$a=$argv[1]+1;$i>0;$i--){$i--;if($i<=1){$c=str_pad("*",$a," ",2)."\n";break;}$b[]=str_pad(str_repeat("*",$i),$a," ",2)."\n";}echo implode("",$b).$c.implode("",array_reverse($b));

মত দৌড়াও php -f golf_hourglass.php 15

# php -f golf_hourglass.php 15
***************
 *************
  ***********
   *********
    *******
     *****
      ***
       *
      ***
     *****
    *******
   *********
  ***********
 *************
***************

এর পেছনের ধারণাটি হ'ল উপরের অর্ধেক (এককালের আগে অংশ *) তৈরি করা, তারপরে কেবল উপরের অংশটি দু'বার প্রতিধ্বনি করুন, তবে দ্বিতীয়বার বিপরীত ক্রমে in


আমি মনে করি এটি এই কাজের জন্য আরও ভাল শুরুfor(;$i<$a=$argv[1];$i+=2){$t=str_pad(str_pad("",$i+1,"*"),$a," ",2)."\n";$i?$s.=$t:$r=$t;}echo strrev($s)."\n".$r.$s;
Jurg Hülsermann

for(;$i<$a=$argv[1];$i++){$t=str_pad(str_pad("",$i+1+$i%2,"*"),$a," ",2)."\n";$i%2?$s.=$t:$s=$t.$s;}echo$s;এটি আরও ভাল
Jurg Hserlsermann

6 বাইট সংরক্ষণ করার জন্য ইমপ্লোড () জয়েন () এর সাথে প্রতিস্থাপন করুন।
অ্যালেক্স হাওয়ানস্কি

\nবাইট সংরক্ষণ করতে একটি আসল নতুন লাইন দিয়ে প্রতিস্থাপন করুন ।
অ্যালেক্স হাওয়ানস্কি


1

সি, 117 বাইট

void p(c,n){while(n--)putchar(c);}void h(n){for(int i=n;i>=-n;i-=i==1?4:2){p(32,(n-abs(i))/2);p(42,abs(i));p(10,1);}}

Ungolfed

void printNum(c, n) {
  while (n--)
    putchar(c);
}

void hourGlass(n) {
  for (int i = n; i >= -n; i-=i==1?4:2) {
    printNum(32, (n - abs(i)) / 2);
    printNum(42, abs(i));
    printNum(10, 1);
  }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.