অঙ্ক ত্রিভুজ


26

চ্যালেঞ্জ:

ইনপুট: একটি ধনাত্মক পূর্ণসংখ্যাn

আউটপুট:

সীমাতে একটি তালিকা তৈরি করুন এবং এটিকে একত্রে স্ট্রিংয়ের সাথে যুক্ত করুন (অর্থাত্ স্ট্রিংটি হবে )।[1,n]n=1312345678910111213

এখন আমরা ইনপুট পূর্ণসংখ্যার ভিত্তিতে নিম্নলিখিত চারটি ওরিয়েন্টেশনগুলির মধ্যে একটিতে এই স্ট্রিংয়ের উপসর্গ বা প্রত্যয় ব্যবহার করে একটি ত্রিভুজ আউটপুট করি:

  • যদি n0(mod4) , এটিকে ত্রিভুজ আকারে আউটপুট করুন ◣
  • যদি n1(mod4) , ত্রিভুজ আকৃতির এটা আউটপুট ◤
  • যদি n2(mod4) , এটিকে ত্রিভুজ আকারে আউটপুট করুন ◥
  • যদি n3(mod4) , এটিকে ত্রিভুজ আকারে আউটপুট করুন ◢

উদাহরণ:

ইনপুট: n=13

কারণ 131(mod4) , আকৃতিটি হবে ◤। এখানে সম্ভাব্য তিনটি বৈধ আউটপুট:

12345678910111213    11111111111111111    12345678910111213
1234567891011121     2222222222222222     2345678910111213
123456789101112      333333333333333      345678910111213
12345678910111       44444444444444       45678910111213
1234567891011        5555555555555        5678910111213
123456789101         666666666666         678910111213
12345678910          77777777777          78910111213
1234567891           8888888888           8910111213
123456789            999999999            910111213
12345678             11111111             10111213
1234567              0000000              0111213
123456               111111               111213
12345                11111                11213
1234                 1111                 1213
123                  222                  213
12                   11                   13
1                    3                    3

চ্যালেঞ্জ বিধি:

  • আপনি উপরের তিনটি বৈধ আউটপুটগুলিতে দেখতে পাচ্ছেন, কেবল সঠিক আকার এবং সঠিক ক্রমে সমস্ত অঙ্ক ব্যবহার করা গুরুত্বপূর্ণ। তা ছাড়া আপনি উপসর্গ বা প্রত্যয় ব্যবহার করতে পারবেন; উল্টিয়ে / প্রতিফলিত; তির্যক মুদ্রণ; ইত্যাদি ইত্যাদি প্রতিটি আকারের জন্য সম্ভাব্য ছয়টি আউটপুটগুলির মধ্যে যে কোনওটির অনুমোদিত ( আকৃতির উপর ভিত্তি করে সমস্ত বৈধ আউটপুটগুলি দেখতে নীচের পরীক্ষার কেসটি দেখুন )। এটি ঘূর্ণন অন্তর্নিহিত ভাষাগুলি এটির ব্যবহারের অনুমতি দেয়, তবে এগুলি ছাড়াও নীচের থেকে নীচে থেকে সঠিক আকারের উপসর্গগুলি ব্যবহার করার জন্য, বা দুটি আকারের উপসর্গগুলি ব্যবহার করে তবে অন্য দুটি আকারের জন্য প্রত্যয় ব্যবহার করতে পারে । আপনার ভাষার জন্য সবচেয়ে উপযুক্ত আউটপুট বিকল্প নির্বাচন করা গল্ফ প্রক্রিয়াটির অংশ part :)
  • ইনপুটটি ইতিবাচক পূর্ণসংখ্যা হিসাবে গ্যারান্টিযুক্ত। জন্য কেবলমাত্র আমরা আউটপুট ।n=11
  • পর্দার কোথাও কোথাও সঠিক ত্রিভুজটি (উল্লম্ব বা অনুভূমিক সীমানা ছাড়াই!) প্রিন্ট করা অবধি কোনও প্রকারের শীর্ষস্থানীয় / পিছনের নিউলাইন / স্পেসের অনুমতি রয়েছে।

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

  • এটি , তাই বাইট জেতে সংক্ষিপ্ত উত্তর।
    কোড-গল্ফ ভাষাগুলি আপনাকে নন-কোডগলফিং ভাষার সাথে উত্তর পোস্ট করতে নিরুৎসাহিত করবেন না। 'যে কোনও' প্রোগ্রামিং ভাষার পক্ষে যতটা সম্ভব সংক্ষিপ্ত উত্তর নিয়ে আসার চেষ্টা করুন।
  • আপনার উত্তরটির জন্য ডিফল্ট আই / ও বিধিগুলি সহ মানক বিধিগুলি প্রযোজ্য , সুতরাং আপনাকে সঠিক পরামিতি এবং ফিরতি-টাইপ, সম্পূর্ণ প্রোগ্রাম সহ STDIN / STDOUT, ফাংশন / পদ্ধতি ব্যবহারের অনুমতি দেওয়া হবে। আপনার কল
  • ডিফল্ট লুফোলগুলি নিষিদ্ধ।
  • যদি সম্ভব হয় তবে আপনার কোডের (যেমন টিআইও ) একটি পরীক্ষার সাথে একটি লিঙ্ক যুক্ত করুন ।
  • এছাড়াও, আপনার উত্তরের জন্য একটি ব্যাখ্যা যুক্ত করা অত্যন্ত প্রস্তাবিত।

পরীক্ষার কেস:

ইনপুট: সমস্ত সম্ভাব্য বৈধ আউটপুট:n=5

12345    54321    12345    54321    11111    55555
1234     5432     2345     4321     2222     4444
123      543      345      321      333      333
12       54       45       21       44       22
1        5        5        1        5        1

ইনপুট: সমস্ত সম্ভাব্য আউটপুট:n=6

123456    654321    123456    654321    111111    666666
 12345     65432     23456     54321     22222     55555
  1234      6543      3456      4321      3333      4444
   123       654       456       321       444       333
    12        65        56        21        55        22
     1         6         6         1         6         1

ইনপুট: সমস্ত সম্ভাব্য আউটপুট:n=7

      1          1          7          7          7          1
     12         21         67         76         66         22
    123        321        567        765        555        333
   1234       4321       4567       7654       4444       4444
  12345      54321      34567      76543      33333      55555
 123456     654321     234567     765432     222222     666666
1234567    7654321    1234567    7654321    1111111    7777777

ইনপুট: সমস্ত সম্ভাব্য আউটপুট:n=8

1           1           8           8           8           1
12          21          78          87          77          22
123         321         678         876         666         333
1234        4321        5678        8765        5555        4444
12345       54321       45678       87654       44444       55555
123456      654321      345678      876543      333333      666666
1234567     7654321     2345678     8765432     2222222     7777777
12345678    87654321    12345678    87654321    11111111    88888888

ইনপুট: শুধুমাত্র সম্ভাব্য আউটপুট:n=1

1

ইনপুট: সমস্ত সম্ভাব্য আউটপুট:n=2

12    21    12    21    11    22
 1     2     2     1     2     1

আমরা কি বিভিন্ন ত্রিভুজগুলির জন্য অন্যান্য মানগুলি ব্যবহার করতে পারি, যেমন 1 এর জন্য ◤ ইত্যাদি?
অবজ্ঞানের

@ এম্বোডিমেন্টফ অজ্ঞতা দুর্ভাগ্যজনক উদাহরণ, যেহেতু অনুমানের বক্তব্য এটিই। আমি মনে করি আপনি জিজ্ঞাসা করতে চেয়েছিলেন যে আমরা যতক্ষণ এই ধারাবাহিকতা বজায় রাখি ততক্ষণ আমরা চারটি বিন্যাসের ক্রম পরিবর্তন করতে পারি (আমি মনে করি এটি একটি হবে না)।
এরিক আউটগলফার

1
যদি n==13, শীর্ষতম সারিটি '33333333333333333'(বা, সমতুল্য, '31211101987654321') হতে পারে ?
চ্যাস ব্রাউন

@ এম্বোডিমেন্টফ অজানা দুঃখিত, তবে আমি এই ক্ষেত্রে কিছু বলব না। আকার এবং তাদের সম্পর্কিত mod 4এই চ্যালেঞ্জের জন্য কঠোর জোড়। সুতরাং আপনি চারটি mod 4ক্ষেত্রে চারটি আকার পরিবর্তন করতে পারেন না । তবে ভাল প্রশ্ন।
কেভিন ক্রুইজসেন

@ চ্যাশব্রাউন হ্যাঁ, দু'জনই ভাল আছেন। আমি কেবল জন্য তিনটি সম্ভাব্য উদাহরণ দিয়েছি , তবে সমস্ত ছয়টি বিকল্প (যেমন পরীক্ষার ক্ষেত্রে) বৈধ আউটপুট। এন = 5n=13n=5
কেভিন ক্রুইজসেন

উত্তর:


9

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

অক্ষরের একটি ম্যাট্রিক্স প্রদান করে।

n=>[...(g=n=>n?g(n-1)+n:'')(n)].map((d,y,a)=>a.map(_=>y-(n&2)*y--<0?' ':d)).sort(_=>-n%2)

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

বিকল্প প্যাটার্ন (একই আকার):

n=>[...(g=n=>n?g(n-1)+n:'')(n)].map((_,y,a)=>a.map(d=>y-(n&2)*y--<0?' ':d)).sort(_=>-n%2)

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

মন্তব্য

n =>                 // n = input
  [...               // split the result of ...
    ( g = n =>       //   ... a call to the recursive function g, taking n
      n ?            //     if n is not equal to 0:
        g(n - 1)     //       append the result of a recursive call with n - 1
        + n          //       append n
      :              //     else:
        ''           //       stop recursion and return an empty string
    )(n)             //   initial call to g
  ].map((d, y, a) => // for each digit d at position y in this array a[]:
    a.map(_ =>       //   for each character in a[]:
      y -            //     we test either y < 0 if (n AND 2) is not set
      (n & 2)        //     or -y < 0 (i.e. y > 0) if (n AND 2) is set
      * y-- < 0      //     and we decrement y afterwards
      ?              //     if the above condition is met:
        ' '          //       append a space
      :              //     else:
        d            //       append d
    )                //   end of inner map()
  )                  // end of outer map()
  .sort(_ => -n % 2) // reverse the rows if n is odd

আকারের সংক্ষিপ্তসার

নীচে প্রতিটি এর জন্য বেস শেপ (নেস্টেড mapলুপ দ্বারা উত্পন্ন ) এবং চূড়ান্ত আকৃতির (এর পরে sort) এর :nmod4

 n mod 4  | 0     | 1     | 2     | 3
----------+-------+-------+-------+-------
 n & 2    | 0     | 0     | 2     | 2
----------+-------+-------+-------+-------
 test     | y < 0 | y < 0 | y > 0 | y > 0
----------+-------+-------+-------+-------
 base     | #.... | #.... | ##### | #####
 shape    | ##... | ##... | .#### | .####
          | ###.. | ###.. | ..### | ..###
          | ####. | ####. | ...## | ...##
          | ##### | ##### | ....# | ....#
----------+-------+-------+-------+-------
 n % 2    | 0     | 1     | 0     | 1
----------+-------+-------+-------+-------
 reverse? | no    | yes   | no    | yes
----------+-------+-------+-------+-------
 final    | #.... | ##### | ##### | ....#
 shape    | ##... | ####. | .#### | ...##
          | ###.. | ###.. | ..### | ..###
          | ####. | ##... | ...## | .####
          | ##### | #.... | ....# | #####

1
আপনার বিস্তারিত ব্যাখ্যা করার জন্য আপনাকে ধন্যবাদ।
চাউ গিয়াং


7

জাপট , 8 বাইট

লাইনের একটি অ্যারে প্রদান করে।

õ ¬å+ zU

চেষ্টা করে দেখুন

কেভিন কে ধন্যবাদ 2 বাইট সংরক্ষণ করা হয়েছে ।

õ ¬å+ zU     :Implicit input of integer U
õ            :Range [1,U]
  ¬          :Join to a string
   å+        :Cumulatively reduce by concatenation
      zU     :Rotate clockwise by 90 degrees U times

1
Is úপ্রয়োজনীয়? দেখে মনে হচ্ছে ঘোরানো কি এই নিখুঁতভাবে করে?
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন, হুম ... সুতরাং এটি হয়। আমি সর্বদা তা ভুলে যাই; খুব কমই ব্যবহার করতে হবে z
শেগি

1
ঠিক আছে, আমি জাপটকে মোটেই জানি না। মজা করার জন্য প্যাডিং ছাড়াই আউটপুটটি দেখতে কেমন কৌতূহল ছিল এবং দেখেছিল ঠিক একই রকম ..;)
কেভিন ক্রুইজসেন



3

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

Nθ≔⭆θ⊕ιηGLLηη⟲⊗θ‖

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

Nθ

ইনপুট n

≔⭆θ⊕ιη

সংখ্যার 1সাথে যুক্ত করে একটি স্ট্রিং তৈরি করুন n

GLLηη

স্ট্রিং দিয়ে সেই দৈর্ঘ্যের একটি ত্রিভুজটি পূরণ করুন।

⟲⊗θ

n*90ডিগ্রি দ্বারা ত্রিভুজটি অ্যান্টিকলোকের দিকে ঘোরান ।

সমস্ত কিছু প্রতিবিম্বিত করুন, এইভাবে একটি ত্রিভুজটি সমাপ্ত হবে যা ঘড়ির কাঁটাটি n*90ডিগ্রি দ্বারা ঘোরানো হয় ।




3

আর , 152 139 137 134 বাইট

function(n,N=nchar(s<-Reduce(paste0,1:n,'')),A=!n%%4%%3)for(i in 1:N)cat(rep('',(M=c(N-i+1,i))[1+!A]*(n%%4>1)),substr(s,1,M[1+A]),'
')

নিবন্ধভুক্ত কোড:

function(n){
  s = Reduce(paste0,1:n,'')      # concat the digits from 1 to n into a string s

  N = nchar(s)                   # store the length of s

  A = !n%%4%%3                   # A = TRUE if n MOD 4 == 1 or 2 

  for(i in 1:N){                 # for 1 to N (length of s)

    M = c(N-i+1,i)               # store N-i+1 and i into a vector

    nSpaces = M[1+!A]*(n%%4>1)   # if n MOD 4 == 1 or 2 then nSpaces = i else nSpaces = N-i+1, 
                                 # but if n MOD 4 == 0 or 1, then force nSpaces = 0

    nDigits = M[1+A]             # if n MOD 4 == 1 or 2 then nDigits = N-i+1 else nDigits = i

    prfx = rep('',)              # create a character vector repeating '' nSpaces times

    sufx = substr(s,1,M[1+A])    # substring s by taking the first nDigits characters

    cat(pr,su,'\n')              # print prfx and sufx using space as separator for the values 
                                 # contatenation (cat function default) and append a newline
  }

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


... স্পষ্টভাবে, গল্ফ করার জন্য আমার দিনটি হয়নি।
জিউসেপ্পে

@ জিউস্পেপ: আহা সেখানে ছিলেন ... এবং তারপরে আপনি সাধারণত আমাকে ছাড়িয়ে যান: পি
ডিগএম সব


2

পাওয়ারশেল , 108 বাইট

param($n)0..($y=($x=-join(1..$n)).length-1)|%{' '*(0,0,$_,($z=$y-$_))[$n%4]+-join$x[0..($_,$z,$z,$_)[$n%4]]}

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

প্রান্তের চারপাশে কিছুটা রুক্ষ কিন্তু কাজ করে। 1 সংখ্যার সাথে nএকটি স্ট্রিংয়ে যোগদান করে তারপরে 0 থেকে সেই স্ট্রিং -1 এর দৈর্ঘ্য পর্যন্ত পুনরাবৃত্তি হয়। প্রতিবার, এটি আমাদের নতুন স্ট্রিং টুকরো টুকরো করতে ব্যবহৃত সঠিক ব্যবধান পদ্ধতি এবং নম্বর পরিসরে অদলবদল করতে তালিকা সূচক ব্যবহার করে।



2

05 এ বি 1 ই (উত্তরাধিকার) , 14 12 10 বাইট

পুনর্লিখন হিসাবে লিগ্যাসি ভেরিয়োনটি ব্যবহার করা কোনও কারণে এটির জন্য অত্যন্ত ধীর।

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

LSηsFRζ}J»

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

ব্যাখ্যা

L           # push range [1 ... input]
 S          # split to list of individual digits
  η         # calculate prefixes
   sF  }    # input times do:
     R      # reverse list
      ζ     # and transpose it
        J   # join to list of strings
         »  # and join on newlines

অন্তর্নিহিতভাবে চ্যাপ্টা হওয়া থেকে LJη€Sআপনি 2 বাইট পরিবর্তন করে সংরক্ষণ করতে পারেন । LSηS
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন: ওহ হ্যাঁ, ধন্যবাদ! আমি এটি সম্পর্কে ভুলে গিয়েছিলাম। আমি চেষ্টা করেছিলাম €Sযা খুব ভালভাবে কার্যকর হয়নি;)
এমিগিনা


2

পাওয়ারশেল , 105 101 95 বাইট

-4 বাইট ধন্যবাদ বাছাই সঙ্গে কৌশল জন্য Arnauld ধন্যবাদ ।

param($n)($x=1..$n-join'')|% t*y|%{($s+="$_")}|sort -d:($n%4-in1,2)|% *ft($x.Length*($n%4-ge2))

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

কম গল্ফড:

param($n)
$x=1..$n-join''
$x|% toCharArray |% {
    ($s+="$_")
} | sort -Descending:($n%4-in1,2) |% PadLeft ($x.Length*($n%4-ge2))

2

আর , 175 172 154 বাইট

function(n)write(c(" ",0:9)[1+(x=utf8ToInt(Reduce(paste0,1:n,""))-47)*!upper.tri(diag(y<-sum(x|1)))["if"(n%%4>1,1:y,y:1),"if"(!n%%4%%3,y:1,1:y)]],1,y,,"")

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

এক ভয়ঙ্কর ইন-লাইন মেস!

ঘূর্ণন শর্ত পরিবর্তন করে -3 বাইট

-17 বাইট ধন্যবাদ ডিগএমএল এর পরামর্শ, এবং আরও গল্ফ পরে আরও একটি বাইট


আমি এই উচ্চতর ট্রাইএঙ্গেল পদ্ধতিটি পছন্দ করি এবং এটি 155 বাইটে সংক্ষিপ্ত করা যেতে পারে ... সম্ভবত আরও বেশি, আমি নিশ্চিত যে আমি
স্পষ্টত

@digEmAll অই, অনেক উন্নত, কিন্তু এখনও দীর্ঘ :-(
: Giuseppe






1

জাভা (জেডিকে) , 247 209 188 186 160 148 বাইট

i->{String s="";int l=0,w;for(;l<i;s+=++l);for(w=s.length(),l=0;l<w;)System.out.printf("%"+(1>i%4/2?1:w)+"s\n",s.substring(0,1>~-i%4/2?w-l++:++l));}

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

-38 bytes@KevinCruijssen ধন্যবাদ
-21 bytesলেট করে printfপ্যাডিং হ্যান্ডেল।
-2 bytesপ্রতিস্থাপনের আগে সাবস্ট্রিংয়ের মাধ্যমে, আমাদের lদুটি পরিবর্তে এক জায়গায় বাড়ানোর অনুমতি দেয় ।
-26 bytes- printfপ্যাডিংয়ের সাহায্যে স্পেসে পূর্ণ স্ট্রিংগুলির আর প্রয়োজন ছিল না, এবং অঙ্কের স্ট্রিংগুলি সংক্ষিপ্ত আকারে দৃশ্যত উত্পন্ন করা যেতে পারে।
-12 bytesআমাদের কাছে ইতিমধ্যে পরিপূর্ণভাবে সার্ভিসযোগ্য অঙ্কের স্ট্রিংয়ের সাবস্ট্রিংগুলি মুদ্রণের পরিবর্তে একক অঙ্কের সাথে গোলমাল না করে।

Ungolfed

input->{
    // Lambda expression with target type of IntConsumer
    String allDigits = "";
    int lineLength, line = 0;

    // Collect a list of all digits in order.
    for (;line < input; allDigits += ++line) {}

    // Save the max length of a line, and create a string of that many spaces.
    for (lineLength=allDigits.length(), line=0; line < lineLength;) {
        System.out.printf(   "%" // construct a format string to handle the padding
                           + (   1 > input%4/2
                               ? 1 // No padding
                               : w // Yes padding
                             )
                           + "s\n"
                         , allDigits.substring( 0
                                              ,   1 > (i-1)%4/2
                                                ? w - l++
                                                : ++l
                                              ) // A string containing only the digit we want.
                         );
    }
}

1
চমৎকার উত্তর. গল্ফ করার জন্য আরও কিছু জিনিস রয়েছে, যদিও: পরে স্থানগুলি for(অপসারণ করা যায়। জাভা 11+ ব্যবহার করা new String(new char[w=s.length()]).replace('\0',' ')যেতে পারে " ".repeat(w=s.length())। আপনি টের্নারি-চেকগুলির চারপাশে প্রথম বন্ধনী সরাতে পারেন। 1>(i-1)%4/2হতে পারে 1>~-i%4/2w-1-l++হতে পারে w+~l++। এবং আপনাকে বাইট-কাউন্টে অনুগমনকারী সেমিকোলনটি গণনা করতে হবে না। যা সব মিলিয়ে 209 বাইট হয়ে যায় ।
কেভিন ক্রুইজসেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.