বর্ণমালা কামান


34

একটি কামানবুলটি নিক্ষেপ করা হয় যাতে বিমানের প্রথম চোখের পলকে এটি Nট্রিটপস দ্বারা N-1, দ্বিতীয় ট্রাইপিং ইত্যাদির মাধ্যমে দ্বিতীয় চোখের লিঙ্কের সময় ইত্যাদির দিকে অগ্রসর হয় যতক্ষণ না এটি তার ট্রাজেক্টোরোর সর্বোচ্চ পয়েন্টে পৌঁছায়। তারপরে এটি মাউন্টে না আসা পর্যন্ত এটি ভ্রমন প্রতি 1, 2, ইত্যাদি দ্বারা হ্রাস পেতে শুরু করে। একই সাথে 1 টি ট্রিটপ / আইব্লিংকের ধ্রুবক গতি নিয়ে কামানবল অনুভূমিকভাবে এগিয়ে চলেছে।

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

in:
5
out:
    OP
   N  Q
   M  R
  L    S
  K    T
  J    U
 I      V
 H      W
 G      X
 F      Y
E        Z
D        A
C        B
B        C
A        D

in:
1
out:
AB


2
কেন ও ও পি একই স্তরের উদাহরণে? আমি যদি অনুমানটি সঠিকভাবে পড়ে থাকি তবে মনে হয় এটি পি এর জন্য একটি ট্রিটপ উপরে উঠতে হবে এবং কিউয়ের জন্য একজনের নীচে নামতে হবে
স্কাইলার

2
@ স্কাইলার প্রতিটি টিকের সময় বর্ণমালা 1 টি ডানদিকে এবং N উল্লম্বভাবে যায়। N পাশাপাশি প্রতিটি টিক হ্রাস করে। মধ্যে Oএবং P, টিক্ টিক্ শব্দ ডানে 1 যায়, কিন্তু 0 up- বা ডাউন-ওয়ার্ড।
অলিভিয়ার গ্রাগোয়ার

4
বর্ণমালা তোপের মতো দেখতে এখন ক্যানন।
কার্ল উইথফটফট

উত্তর:


8

05 এ বি 1 ই , 33 32 29 28 বাইট

>*As∍2ä`R)ζRIL£vyε`N·úJ])˜.c

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

ব্যাখ্যা

>*                             # push input*(input+1)
  As∍                          # take that many characters from the alphabet (with wrap)
     2ä                        # split in 2 parts
       `R)                     # reverse the second part
          ζ                    # zip (gives a list of pairs)
           R                   # reverse
            IL£                # split into parts of sizes equal to [1,2...]
               vy              # for each (part y, index N)
                 ε             # for each pair in that part
                  `N·úJ        # insert N*2 spaces between the characters
                       ]       # end loops
                        )˜     # wrap in a flattened list
                          .c   # format as lines padded to equal length

আমার মতো মনে হচ্ছে Nú»বা এর পরিবর্তে প্রিন্ট করার জন্য এরকম কিছু ব্যবহার করা যেতে পারে])~.c
Magic Octopus Urn

আমি যে বাস্তবায়ন করতে পেরেছিলাম তা হ'ল এটি এখানে বাস্তবায়ন তবে এটি 2 বাইটের চেয়ে খারাপ।
ম্যাজিক অক্টোপাস উরন

8

স্ট্যাক্স , 29 24 বাইট

╦'♫ΓqπL⌂δ@╚n>DI∙Q┴òkεwö╔

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

একই প্রোগ্রামটির সংশ্লিষ্ট আসকি উপস্থাপনাটি এটি।

VA*xRr:m|/xH({rix/|1*_%:T)mMm

VA*                             repeat alphabet input times
   xRr:m                        [x ... 1, 1 ... x] where x=input
        |/xH(                   get consecutive substrings of specified sizes
             {           m      map substrings using block
              ix<|1*            reverse string if index<x
                    _%:T)       left-pad to appropriate triangular number
                          Mm    transpose and output

7

আর, 169 163 161 153 150 110 109 বাইট

এই পদ্ধতিটি একটি ম্যাট্রিক্সে পূরণ করে এবং তারপরে ম্যাট্রিক্স প্রিন্ট করে।

Golfed

function(n)write(`[<-`(matrix(" ",M<-2*n,k<-sum(1:n)),cbind(rep(1:M,c(n:1,1:n)),c(k:1,1:k)),LETTERS),1,M,,"")

153 এর জন্য @ জিউজ্পে ধন্যবাদ।

150 জনের জন্য @ জেডিএলকে ধন্যবাদ।

112 এর জন্য @ জিউসেপের মন্তব্য এবং এখন 110 এর জন্য কিছু সম্পাদনা 109 দেখুন original মূল কোডটি ছিড়ে।

function(n){a=matrix(" ",M<-2*n,k<-sum(1:n))
Map(function(x,y,z)a[x,y]<<-z,rep(1:M,c(n:1,1:n)),c(k:1,1:k),head(LETTERS,2*k))
cat(rbind(a,"
"),sep="")}

যদি কোনও বৈধ আউটপুট প্লট করে তবে 73 বাইট

function(n,k=sum(1:n))plot(rep(1:(2*n),c(n:1,1:n)),c(1:k,k:1),pc=LETTERS)

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


153 বাইট - আপনার সমাধানটি আমি শীর্ষে স্থির করেছিলাম এমন একটি অতিরিক্ত স্থান মুদ্রণ করেছে এবং তারপরে আমি কয়েকটি জিনিসও গল্ফ করেছিলাম। চমৎকার উত্তর!
জিউসেপে

আপনি কি Mapপরিবর্তে ব্যবহার করতে পারেন mapply?
জেডিএল

@ জেডিএল আপনি ঠিক বলেছেন আমি সবসময় মনে করি lapplyপরিবর্তে মানচিত্রটি একটি মোড়ক mapply। 150 এর জন্য ধন্যবাদ
ভ্লো

এটি আমাকে বিরক্ত করে চলেছে, কারণ আমি ভেবেছিলাম ম্যাট্রিক্সকে row,columnজোড় দিয়ে সরাসরি সূচি দেওয়ার কোনও উপায় হওয়া উচিত (বা ) এর [পরিবর্তে যাবার পরিবর্তে , তাই আমি এটি করার একটি উপায় খুঁজে পেয়েছি। আমি মনে করি এটি বিদ্যমান এবং 112 বাইটের জন্য প্রতিস্থাপন করতে পারে ! mapplyMapwritecat
জিউসেপ্পে

@ জিউসেপ্পে "" সম্পর্কে আমার মন্তব্য কাজ করে না, তবে [<- এর সাহায্যে আমরা কিছু পরিবর্তনশীল সংজ্ঞার প্রয়োজনীয়তা দূর করে এক লাইনের মধ্যে সমস্ত কিছু নিখুঁত করতে পারি। 110 বাইট: tio.run/##K/qfpmCj@z@tNC@5JDM/...
Vlo


5

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

,G:tPY"tf1Y2y@?tn+P])Z?]Pv1X!

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

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

,        % Do twice
  G:     %   Push [1 2 ... n], where n is the input
  tP     %   Duplicate, flip: pushes [n n-1 ... 1]
  Y"     %   Run-length decoding: gives vector with n ones, n-1 twos ... (*)
  tf     %   Duplicate, find: gives [1 2 3 ... n*(n-1)/2] (**)
  1Y2    %   Push string 'ABC...Z'
  y      %   Duplicate from below: pushes [1 2 3 ... n*(n-1)/2]  again
  @?     %   If we are in the second iteration
    tn   %     Duplicate, length: pushes n*(n-1)/2
    +    %     Add: gives [n*(n-1)/2+1 n*(n-1)/2+2 ... n*(n-1)*2] 
    P    %     Flip: gives [n*(n-1)/2 n*(n-1)/2-1 ... n*(n-1)/2+1]
  ]      %   End if
  )      %   Index (1-based, modular) into the string. Gives a substring
         %   with the letters of one half of the parabola (***)
  Z?     %   Sparse: creates a char matrix with the substring (***) written
         %   at specified row (*) and column (**) positions. The remaining
         %   positions contain char(0), which will be displayed as space
]        % End do twice. We now have the two halves of the parabola, but
         % oriented horizontally instead of vertically
P        % Flip the second half of the parabola vertically, so that the
         % vertex matches in the two halves
v        % Concatenate the two halves vertically
1X!      % Rotate 90 degrees, so that the parabola is oriented vertically.
         % Implicitly display

4

জাভা (ওপেনজেডিকে 8) , 121 বাইট

n->{for(int l=n*++n/2,r=l,i=1,j=0;l>0;j=j-->0?j:i++)System.out.printf("%"+(n-i)+"c%"+(2*i-1)+"c%n",--l%26+65,r++%26+65);}

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

ব্যাখ্যা

n->{                             // int-accepting consumer
 for(                            //  loop
   int l=n*++n/2,                //    declare l (left) is the first character to print.
                                 //              Oh, and n is increased to reduce byte count later.
       r=l,                      //            r (right) is the second character to print.
       i=1,                      //            i is the "outer-loop" index
       j=0;                      //            j is the "inner-loop" index
   l>0;                          //    while there are characters to print        
   j=j-->0?j:i++)                //    simulate two loops in one,
                                 //      where j starts from 0 and always decreases until it reaches 0
                                 //      at which point j is reset to i and i is increased
  System.out.printf(             //   Print...
   "%"+(n-i)+"c%"+(2*i-1)+"c%n", //    2 characters
                                 //    - the first with n-i-1 whitespaces (remember, n was increased)
                                 //    - the second characters with 2*i-2 whitespaces
   --l%26+65,                    //    the first character to print is the left one, we decrease it.
   r++%26+65                     //    the second character to print is the right one, we increase it.
  );                             //   
                                 //  end loop
}                                // end consumer

3

সি, 184 বাইট

i,j,k,l,m,h,o;f(n){char L[o=n*n][n*3];for(i=o;i--;)for(L[i][j=n*2]=h=k=0;j--;)L[i][j]=32;for(m=n;!h|~i;m-=1-h*2)for(h+(l=m)?++j:++h;l--;)L[h?i--:++i][j]=65+k++%26;for(;o--;)puts(L+o);}

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

Unrolled:

i, j, k, l, m, h, o;
f(n)
{
    char L[o=n*n][n*3];

    for (i=o; i--;)
        for (L[i][j=n*2]=h=k=0; j--;)
            L[i][j] = 32;

    for (m=n; !h|~i; m-=1-h*2)
        for (h+(l=m)?++j:++h; l--;)
            L[h?i--:++i][j] = 65 + k++%26;

    for (; o--;)
        puts(L+o);
}

আকর্ষণীয়, আমি এটি সংকলন করতে পারি না (কোনও মূল নেই) তবে টিআইও করতে পারে
nngn

1
@ngn এটি কেবল একটি ফাংশন , mainএটি সংকলনের জন্য আপনাকে এটি যুক্ত করতে হবে। টিআইও-তে, mainপাদচরণ বিভাগে রয়েছে।
স্টেডিবক্স

3

Clojure, 417 319 বাইট

(defn cannon[n](let[a(map #(char(+ 65 %))(iterate #(if(> % 24)0(inc %))0))m1(reverse(reduce #(concat %(repeat %2(- n %2)))[](range 0(inc n))))p1(map-indexed #(str(apply str(repeat %2 " "))(nth a %))m1)m2(reverse(reduce #(concat %(repeat %2(-(* 2 %2)2)))[](reverse(range 0(inc n)))))p2(reverse(map-indexed #(str(apply str (repeat %2 " "))(nth a(+(count p1)%)))m2))](doseq[x(reverse(map #(str % %2)p1 p2))](println x))))

কিছু সময়ে আমি reverseকলগুলিতে জড়িয়ে গেলাম এবং এটিকে যতটা সম্ভব সংক্ষিপ্ত করার জন্য ধারণাটি ছেড়ে দিলাম। আমি কেবল একটি কার্যনির্বাহী সমাধান চাই। আপনি এখানে যান ...

অবারিতদের বাছাই করুন

(defn cannon [n]
  (let [a (map #(char (+ 65 %)) (iterate #(if (> % 24) 0 (inc %)) 0))
        m1 (reverse (reduce #(concat % (repeat %2 (- n %2))) [] (range 0 (inc n))))
        p1 (map-indexed #(str (apply str (repeat %2 " ")) (nth a %)) m1)
        m2 (reverse (reduce #(concat % (repeat %2 (- (* 2 %2) 2))) [] (reverse (range 0 (inc n)))))
        p2 (reverse (map-indexed #(str (apply str (repeat %2 " ")) (nth a (+ (count p1) %))) m2))]
    (doseq [x (reverse (map #(str % %2) p1 p2))] (println x))))

হালনাগাদ

অলিভারের মন্তব্যে উদ্বুদ্ধ হয়ে আমি একাধিক reverseকল কাটতে এবং অক্ষরগুলি কাটাতে কিছু সাধারণ গল্ফিং কৌশল প্রয়োগ করতে সক্ষম হয়েছি । এছাড়াও আমি alias লেখা নির্মিত reverse, map-indexed, concat, repeatএবং strকারণ আমি তাদের একাধিক বার প্রতিটি ব্যবহৃত।

(defn c[n](let[a(map #(char(+ 65 %))(iterate #(if(> % 24)0(inc %))0))k #(reduce %[](range 0(inc n)))r #(apply str(repeat % " "))rv reverse m map-indexed c concat t repeat s str p(m #(s(r %2)(nth a %))(rv(k #(c %(t %2(- n %2))))))](rv(map #(s % %2)p(rv(m #(s(r %2)(nth a(+(count p)%)))(k #(c %(t %2(-(* 2 %2)2))))))))))

Ungolfed

(defn c [n]
  (let [a (map
           #(char (+ 65 %))
           (iterate
            #(if (> % 24) 0 (inc %))
            0))
        k #(reduce
            %
            []
            (range 0 (inc n)))
        r #(apply str (repeat % " "))
        rv reverse
        m map-indexed
        c concat
        t repeat
        s str
        p (m
           #(s
             (r %2)
             (nth a %))
           (rv (k #(c % (t %2 (- n %2))))))]
    (rv
     (map
      #(s % %2)
      p
      (rv
       (m
        #(s
          (r %2)
          (nth a (+ (count p) %)))
        (k #(c % (t %2 (- (* 2 %2) 2))))))))))

ফাংশন তৈরি করে cযা মান n গ্রহণ করে এবং লাইনের একটি তালিকা প্রদান করে।


এটি কোনও উত্তর নয় কারণ স্পষ্টতই গল্ফ দেওয়ার কোনও চেষ্টা নেই (আপনি এমনকি এটিও বলেছেন)।
অলিভিয়ের গ্রাগোয়ার

ঠিক আছে, এটি আরও ভাল! ;-)
অলিভিয়ার গ্রাগোয়ার

3

কাঠকয়লা , 33 31 বাইট

≔⁰ηF…±N⊕θ«¿ι→↓F↔ι«P§αη≦⊕η¿›ι⁰↓↑

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। সম্পাদনা করুন: কেবলমাত্র ASCII- এর জন্য 2 বাইট সংরক্ষণ করা হয়েছে ব্যাখ্যা:

≔⁰η

বড় অক্ষরে 0 থেকে বড় অক্ষরে সূচক হিসাবে বর্তমান চিঠিটি সূচনা করুন।

F…±N⊕θ«

ইনপুট অন্তর্ভুক্ত ইনপুট অবহেলা থেকে একটি লুপ করুন।

¿ι→↓

সাধারণত প্রতিটি কলাম পূর্ববর্তী ডানদিকে হয়। তবে শূন্যের জন্য কোনও কলাম নেই। পরিবর্তে, বাম এবং ডান পাশের সারিবদ্ধ হওয়া তা নিশ্চিত করার জন্য একটি সংশোধন প্রয়োজন।

F↔ι«

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

P§αη

বর্তমান চিঠিটি মুদ্রণ করুন।

≦⊕η

চিঠি সূচক বৃদ্ধি।

¿›ι⁰↓↑

ট্র্যাজেক্টোরির আমরা যে দিকে যাচ্ছি তার উপর নির্ভর করে উপরে বা নীচে সরান।


দেখে মনে হচ্ছে এটি করার একটি আরও ছোট উপায় হতে পারে তবে কীভাবে নিশ্চিত তা নয়: /
ASCII- কেবল


3

পার্ল 5 , -এন 112 92 90 88 বাইট

একবারের জন্য ভয়ঙ্কর দীর্ঘ printfজয় মনে হয়।

#!/usr/bin/perl -n
$p=$q=$_*($%=$_+1)/2;map{printf"%$%c%$.c
",--$p%26+65,$q++%26+65for--$%..$';$.+=2}//..$_

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


চমৎকার উন্নতি! আমি (A..Z)x9কাজ করার চেষ্টা করছিলাম , তবে এটি সীমা ছাড়িয়ে খুব কম ছিল! শুধুমাত্র 91 এর জন্য ছিল। :)
ডম হেস্টিংস

1
@ ডোমহাস্টিংস আপনার প্রায় দুটি পুনরাবৃত্ত অক্ষরের গণনার মধ্যে সমন্বয় করার চেষ্টা করেছিলেন। সে আমাকে খুব বিরক্ত করে।
টন হসপেল

2

পাইথন 3 + নপি, 124 115

from pylab import*
def i(N):
 x=zeros((N,2*N),'U');x[r_[N-1:-1:-1,0:N],r_[:2*N]]=map(chr,r_[0:2*N]%26+65)
 return x

এটি একটি উপযুক্ত আকারের অ্যারে তৈরি করে, ট্র্যাজেক্টোরির জন্য সূচকগুলি সন্ধান করে এবং তাদের জন্য উপযুক্ত চরিত্র নির্ধারণ করে। সবচেয়ে জটিল অংশটি এজেড অক্ষর উত্পন্ন করছে যা একটি স্ট্রিং টাইপের সংখ্যার খুব হ্যাকিশ castালাইয়ের উপর নির্ভর করে। ফিরে আসা অবজেক্টটি ইউনিকোড অ্যারে।

সম্পাদনা করুন : এখানে প্রস্তাবিত অনুসারে নমাই কোডের পরিবর্তে 9 টি বাইট সংরক্ষণ করা হয়েছে যা এজেড ( (r_[0:2*N]%26+65).view('U1')[::2]) অক্ষর তৈরি করে ।map


2

পাইথন 3 , 139 136 বাইট

f=lambda n,o=0:n and'\n'.join([f(n-1,o+n).replace('\n','\n ')]+[chr(65+(n+o+~i)%26)+'  '*~-n+chr(65+(n*n+o+i)%26)for i in range(n)])or''

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

আকার এবং অফসেট দিয়ে প্রতিটি স্তর পুনরাবৃত্তভাবে উত্পন্ন করে।

-3 বাইট জো কিংকে ধন্যবাদ জানায়


@ জোকিং ধন্যবাদ, আমি সর্বদা ~অপারেটরটির কথা ভুলে যাই !
ম্যাথু জেনসেন

এছাড়াও আপনি পরিবর্তন করতে পারেন n and ... or''করার n*' 'and ...জন্য অন্য বাইট
জো রাজা

2

জে , 78 75 বাইট

(26{.65|.a.)($~#)`(;/@])`(' '$~1+{:@])}i.@+:(,.~(|.,])@i.@-:@#)@#~1+i.@-,i.

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

-3 এনএনজি ধন্যবাদ


1
(,|.)@i.@-->i.@-,i.
এনজিএন

ধন্যবাদ @ জিএনএন এটি তাদের মধ্যে এমন এক যেখানে মনে হয়েছিল 40-50 বাইটে এর সমাধান হওয়া উচিত, তবে সেখানে থাকলে আমি এটি দেখতে সক্ষম হইনি ....
জোনাহ



1

ইয়াবাসিক , 125 বাইট

একটি সমাধান যা স্ক্রিনের সঠিক কলাম এবং সারিতে অক্ষরগুলি মুদ্রণের জন্য গ্রাফিক্স মোড ব্যবহার করে।

Input""n
Clear Screen
For i=-n To n
For j=1To Abs(i)
k=i>0
?@(i+n-k,(i^2-i)/2+j-2*j^(!k)+k)Chr$(c+65)
c=Mod(c+1,26)
Next
Next

কারণ এই সমাধান গ্রাফিক্স মোড ব্যবহার করে, এটি টিআইওতে কার্যকর করা যায় না uted

আউটপুট

নীচে ইনপুট জন্য আউটপুট দেওয়া হয় 7

প্রোগ্রাম আউটপুট (n = 7)




1

পাইথন 3 , 190 বাইট

j,r,c,s=int(input()),range,[],[];a=(j+1)*j;b=a//2
for i in r(j):k=i+1;c.extend([j-k]*k)
for i in r(a):s+=chr(ord('A')+(i%26))
for i in r(b):print(' '*c[i]+s[b-i-1]+' '*(2*(j-c[i]-1))+s[b+i])

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

আমি সর্বোত্তম চেষ্টা করেছি. কোনও অপ্টিমাইজেশন সম্ভব হলে আমাকে জানান know


1

k4, 76 71 বাইট

{+|:'p$(-k,|k:+\l)$(x#b),|:'x_b:(i:-1_0,+\l,|l)_a:(2*p:+/l:|1+!x)#.Q.a}

5 টি বাইট সংরক্ষণ করার জন্য কিছু পুনরায় সাজানো + কার্য assign


{+|:'(+/l)$(-k,|k:+\l)$(x#i_a),|:'((-x)#i:-1_0,+\l,|l)_a:(2*+/l:|1+!x)#.Q.a}

কয়েক বাইট মুণ্ডন করার জন্য কিছু প্রচেষ্টা সহ আধ ঘন্টা প্রচেষ্টা, তবে এখানে আরও অনেক কিছু করা যেতে পারে। এটি ফিরে আসবে। মজার চ্যালেঞ্জ!

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