Y ছাড়াই এক্স করুন


52

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

চ্যালেঞ্জ: একটি বিজোড় পূর্ণসংখ্যা দেওয়া n1 এর চেয়ে বড় বা সমান আউটপুট পার্শ্ব দৈর্ঘ্যের প্রাক্তন nর্যান্ডম মুদ্রণযোগ্য ASCII অক্ষর Sans "Y" এবং "Y" এর, এবং স্থান। সমস্ত অনুমোদিত অক্ষরের অবশ্যই ঘটনার ননজারো সুযোগ থাকতে হবে, তবে অভিন্ন অভিন্ন নয়। এটি একটি তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী। আপনার অবশ্য প্রতিটি চরকে এলোমেলো করা উচিত - অর্থাৎ প্রাক্তনদের স্ট্রুটগুলি সমান হওয়া উচিত নয়, যদি না সুযোগ হয়।

চরিত্রগুলি উপস্থিত হতে

!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXZ[\]^_`abcdefghijklmnopqrstuvwxz{|}~"

প্রাক্তন নির্মাণ

পার্শ্ব দৈর্ঘ্য 1:

x

পার্শ্ব দৈর্ঘ্য 3:

x x
 x
x x

পার্শ্ব দৈর্ঘ্য 5:

x   x
 x x
  x
 x x
x   x

প্রভৃতি

উদাহরণ আউটপুট

input
output
empty line

3
h 2
 ^
9 5

1
:

5
D   1
 W z
  W
 q j
W   1

উদাহরণ বাস্তবায়ন

আপনার অবৈধ ইনপুট হ্যান্ডেল করার দরকার নেই।


কোন অক্ষরগুলি উপস্থিত হওয়ার জন্য অবশ্যই যোগ্য হতে হবে?
xnor

@xnor থেকে অক্ষর !থেকে ~Sans yএবংY
কোনোর ব্রায়েন

@ LegionMammal978 না, কারণ নন-ওয়াই অক্ষর অন্তর্ভুক্ত yএবং
লিকি নুন


14
অপেক্ষা করুন !? আমাদের কোডে "Y" এবং "y" ব্যবহারের অনুমতি রয়েছে?
অ্যাডাম

উত্তর:


3

পাইথ, 28 27 26 25 বাইট

jmuXGHO-rF "! ~" "Yy" d, d-tQd *; Q 
VQLXGHO-rF "! ~" "Yy" {, N-tQN * d 
VQuXGHO-r \! \ "Yy" {, N-tQN * ঘ
VQuXGHO-R \! \ ~ "YY", এন-tQN * ঘ

পরীক্ষা স্যুট.


5
আমি নিশ্চিত যে এটি কখনই ~চরিত্রটি তৈরি করতে পারে না , কারণ পরিসীমাটি এতে অন্তর্ভুক্ত করে না। আপনি ~কোডটি আক্ষরিক DEL অক্ষরে পরিবর্তন করে এটি ঠিক করতে পারেন ।
FryAmTheEggman

10

রুবি, ১০২ বাইট

Array#sampleচরিত্রের সেট থেকে নমুনার জন্য পুনরাবৃত্তি করে না, তবে এটি ঠিক আছে কারণ চরিত্র বিতরণ পুরোপুরি অভিন্ন হতে হবে না! রিকার্সিভ ফাংশন, রেখার একটি অ্যারে প্রদান করে।

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

f=->l{w,x,y,z=([*?!..?~]-%w"y Y").sample 4
l<2?[w]:[w+(s=' '*(l-2))+x,*f[l-2].map{|e|" #{e} "},y+s+z]}

7

আসলে, 62 বাইট

"!⌂"♂┘ix♂c"Yy"@-╗½≈u;r2@∙`i=`M╪k`;dXR@+`M;dXR@+`"╜J' aI"£MΣ`Mi

এটি আমার দীর্ঘতম বাস্তব প্রোগ্রামগুলির মধ্যে একটি।

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

ব্যাখ্যা:

পর্ব 1 : অক্ষর তালিকা সেট আপ

"!⌂"♂┘ix♂c"Yy"@-
"!⌂"              push the string "!⌂"
    ♂┘            CP437 ordinal of each character ([21, 127])
      ix          range(21, 127)
        ♂c        character at each ordinal (list of printable ASCII characters)
          "Yy"@-  set difference with ["Y", "y"] (printable ASCII except "Y" and "y")

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

পার্ট 2 : এক্স এর জন্য বুলিয়ান অ্যারে তৈরি করা

½≈u;r2@∙`i=`M╪k`;dXR@+`M;dXR@+
½≈u;                            two copies of int(input/2)+1
    r                           range
     2@∙                        Cartesian product with itself
        `i=`M                   for each sublist: push 1 if both elements are equal, else 0
             ╪k                 split into int(input/2)+1-length chunks
                                (at this point, we have one quarter of the X)
               `;dXR@+`M        mirror each sublist (one half of the X)
                        ;dXR@+  mirror the entire list (the whole X)

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

পার্ট 3 : এলোমেলো অক্ষর বাছাই

`"╜J' aI"£MΣ`Mi
`"╜J' aI"£MΣ`M   for each row:
 "╜J' aI"£M        for each column:
  ╜J                 push a random value from the character list
    '                push a space
      a              invert the stack
       I             take the character if the value is 1, else take the space
           Σ       concatenate the strings
              i  flatten the list and let implicit output take care of the rest

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


1
"ভিজ্যুয়ালাইজ বিট বুনন" ছিল 69 বাইট ;-)
অ্যাডমবর্কবর্ক

6

গণিত, 146 বাইট

a:=RandomChoice[33~CharacterRange~126~Complement~{"Y","y"}];StringRiffle[Normal@SparseArray[{{b_, b_}:>a,{b_,c_}/;c-1==#-b:>a},{#,#}," "],"
",""]&

বেনামে ফাংশন। ইনপুট হিসাবে একটি সংখ্যা নেয় এবং আউটপুট হিসাবে একটি স্ট্রিং প্রদান করে।


6

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

from random import*
def x(n):
 w=range(-n/2+1,n/2+1)
 for i in w:
  o=''
  for j in w:c=randint(33,124);c+=(c>88)+(c>119);c=[c,32][bool(i^j and i^-j)];o+=chr(c)
  print o

অভিন্ন সম্ভাবনার সাথে এলোমেলো অক্ষর চয়ন করার গ্যারান্টিযুক্ত।

এটি এখানে চেষ্টা করে দেখুন: আদর্শ লিঙ্ক

সম্পাদনা: সংশোধনের জন্য মরগান থ্র্যাপকে ধন্যবাদ।


from random import*2 বাইট সংরক্ষণ আপনি jকিছু বাইট সংরক্ষণ করতে একটি সেমিকোলন দিয়ে লুপের প্রথম দুটি লাইনে যোগ দিতে পারেন । (এছাড়াও আমি বিশ্বাস করি Zএবং {অন্য কয়েকটি চিঠির চেয়ে বেশি হওয়ার সম্ভাবনা রয়েছে, এটি যে প্রশ্নের জন্য গুরুত্বপূর্ণ তা নয়)
ফ্রাইআম দ্য এজিগম্যান

আপনি বেশ কয়েকটি ছোট পরিবর্তনগুলি 163-তে নেমে যেতে পারেন mothereff.in/…
মরগান থ্রাপ

2
প্রকৃতপক্ষে, সমস্ত পরীক্ষার ক্ষেত্রে আপনার আউটপুট ভুল। আপনি প্রতিটি পাটি মোট পাশের আকারের পরিবর্তে n এর সমান করে দিচ্ছেন।
মরগান থ্রাপ

@ মরগানথ্রাপ আহ, আপনি ঠিক বলেছেন আমি যে ঠিক করব
খুঁতখুঁতে ossifrage

4 বাইট: bool(i^j and i^-j)->i not in(j,-j)
জোনাথন অ্যালান

6

পাইথন, 142 139 135 বাইট

এটি একটি সোজা ফরোয়ার্ড বাস্তবায়ন যা অক্ষর অনুসারে বর্গক্ষেত্র তৈরি করে। চরিত্রটি যদি তির্যক হয় : একটি এলোমেলো চর ব্যবহার করুন, অন্যথায় : একটি স্থান ব্যবহার করুন। এটি নন- Yচরিত্রগুলি তৈরি করতে একটি রেজেক্স বিকল্প এবং এলোমেলো ইন্ট ব্যবহার করে :

import re,random
lambda x:''.join('\n'*(i%x<1)+re.sub("y|Y","t",chr(random.randint(33,126))+' ')[i%x!=i/x!=x-i%x-1]for i in range(x*x))

ব্যাখ্যা [পুরাতন]

"\n".join( ... for i in range(x)) # Create 'x' lines 
''.join( ... for j in range(x))   # Create 'x' chars on each line
(...)[j!=i!=x-j-1]                # Not on diagonals? 2nd char in "? "; Else, choose the 1st
j!=i                              # Not on downward diagonal
i!=x-j-1                          # Not on upward diagonal
re.sub("y|Y","t", ... )           # Replace y or Y for t
chr(random.randint(33,126))+' '   # Random char + a space

হালনাগাদ

  • -4 [16-07-30] শর্তসাপেক্ষে নতুন লাইনের সংক্ষিপ্তকরণ
  • -3 [16-07-30] একক-লুপে পরিবর্তিত হয়েছে
  • -6 [১-0-০7-২৯] ত্রয়ী অপের পক্ষে বিবৃতি দেওয়া হলে এক্সচেঞ্জ করা হয়েছে। @ রুটটোকে ধন্যবাদ
  • -11 [16-07-27] অতিরিক্ত বন্ধনী / স্পেসগুলি সরানো হয়েছে এবং বিবৃতি দিলে উল্টে গেছে
  • -49 [১-0-০7-২7] বর্গ ধাপে ধাপে তৈরি করে স্কোয়ামিশোসিফ্রিজের পদ্ধতিটি বিহীন, ধন্যবাদ!
  • -10 [১-0-০7-২7] @ কনরও'ব্রায়েন থেকে এলোমেলো চর ল্যাম্বদা + ম্যাথ স্টাফ
  • -22 [16-07-26] একটি ল্যাম্বডা + মিস্ক গল্ফিংয়ে স্কোয়াজ করুন
  • -6 [16-07-26] import*- কেভিনলউকে ধন্যবাদ

1
randintআপনার উদ্দেশ্যে সম্ভবত সংক্ষিপ্ত, প্লাস from random import*। এছাড়াও, কিছু অপ্রয়োজনীয় সাদা স্থান মুছে ফেলুন।
মান কালি

2
[i,33][i in(89,121)]পরিবর্তে আপনার fফাংশনে একটি দীর্ঘ-ঘূর্ণিত ত্রিভুজ প্রয়োজন ! আপনার printবক্তব্যের ঠিক পরে স্থানটি সরিয়ে ফেলতে পারেন কিনা তা দেখুন
মান কালি

আমি আপনার কোড ব্যাখ্যার জন্য একটি ভিন্ন ফর্ম্যাট চেষ্টা করার পরামর্শ দেব। এটি খুব পঠনযোগ্য নয়। অন্যান্য ব্যবহারকারীরা কীভাবে তাদের কাজ করে তা দেখার চেষ্টা করুন। এমনকি এটি আরও ভাল হবে।
mbomb007

1
re.sub("y|Y","t",chr(random.randint(33,126))+' ')[j!=i!=x-j-1]... if ... else ...কনস্ট্রাক্টের উপরে 6 বাইট সাশ্রয় করে ।
রুটটউ

5

ডায়ালগ এপিএল , 35 বাইট

⎕UCS 32+(⊢+∊∘57 89)⌊?95×(⊢∨⌽)∘.=⍨⍳⎕


এই সংখ্যার
∘.=⍨সমতা টেবিলের মাধ্যমে 1 নম্বর প্রম্পট করুন (যেমন তির্যকটি 1s রয়েছে)
(⊢∨⌽)বা তার আয়না চিত্রটি (দুটি তির্যক দেয়) ত্রিভুজগুলির জন্য 1 থেকে 95 এর মধ্যে
95×95
?রেন্ড ইন্টি দ্বারা গুণিত করে , বাকি
মেঝেতে 0 থেকে 1 এর মধ্যে র‌্যান্ড ভাসে ভাসা থেকে মুক্তি পান
(⊢+∊∘57 89){57,89} এর সদস্য হিসাবে থাকা উপাদানগুলিতে একটি যুক্ত করুন (ইয়াই - 32)
32+0 কে ফাঁকা জায়গায় তৈরি করতে 32 যোগ করুন এবং অন্যান্য সংখ্যাকে যথাযথ পরিসরে
⎕UCSপাঠ্যে রূপান্তর করুন

ট্রাইএপিএল !


আমি পছন্দ করি এটি কীভাবে এমনকি সংখ্যার সাথে কীভাবে প্রতিক্রিয়া জানায়, যদিও এটি সমস্যার অংশ ছিল না (এবং এমনকি অনিচ্ছাকৃতও হতে পারে)। সাবাশ! যদিও, অদ্ভুতভাবে, এটি কখনও কখনও অন্য কোনও ইনপুটের চেয়ে 4 এর ইনপুটটিকে আলাদাভাবে আচরণ করে।
কিরকপ্যাট

@ কিরকপ্যাট হ্যাঁ, আমি "অদ্ভুত-কেবল"
খেয়ালও করিনি


3

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

6Y2'Yy 'X-iZr1MZrXdwXdP2$X>c

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

সমস্ত অনুমোদিত অক্ষরের উপস্থিতির একই সম্ভাবনা রয়েছে। এমনকি ইনপুট জন্য কাজ করে।

6Y2     % Predefined literal of ASCII chars from 32 to 126
'Yy '   % Not allowed chars
X-      % Set difference. Produces the set of allowed chars
i       % Input number, n
Zr      % Random sample without replacement. Gives a string with n chars taken from 
        % the allowed set
1MZr    % Do the same
Xd      % Diagonal matrix. Zeros will be displayed as spaces
wXd     % Diagonal matrix with the other string
P       % Flip vertically
2$X>    % Maximum of the two matrices
c       % Convert to char. Implicitly display

3

সি, 154 বাইট (বা বয়লার-প্লেট ছাড়াই 119)

o(w,c){c=rand()%94+33;printf("%*c",w,w?c+!(c&95^89):10);}main(h){scanf("%d",&h);srand(time(0));for(int n=h,p;n--;)p=abs(h/2-n),o(h/2-p+1),p&&o(p*2),o(0);}

বা অন্য কোথাও যত্ন নেওয়ার X(h)সাথে ফাংশন হিসাবে 119 বাইট srand(time(0)):

o(w,c){c=rand()%94+33;printf("%*c",w,w?c+!(c&95^89):10);}X(h,n,p){for(n=h;n--;)p=abs(h/2-n),o(h/2-p+1),p&&o(p*2),o(0);}

ভাঙ্গন:

o(w,c){                         // "Output" function, for all printing
    c=rand()%94+33;             // Generate random char, whether we need it or not
    printf("%*c",               // Print a char with some number of leading spaces
           w,                   // Use "w" (width) - 1 leading spaces
           w?                   // Either print the random char...
             c+!(c&95^89)       // (exclude "y" and "Y" by incrementing to "z"/"Z")
                         :10    // ...or print a newline if called with w = 0
    );
}
main(h){                        // Main function; repurpose argc to store grid size
    scanf("%d",&h);             // Get grid size from stdin
    srand(time(0));             // Boiler-plate for random number seeding
    for(int n=h,p;n--;)         // Loop over all lines (count down to save chars)
        p=abs(h/2-n),           // Calculate half-distance between "X" bars
        o(h/2-p+1),             // Output the first half of the "X" (">")
        p&&                     // If we are not in the centre:
           o(p*2),              //   output the second half of the "X" ("<")
        o(0);                   // Output a newline
}

3

x86 মেশিন কোড, 70 বাইট

60 89 d7 31 db 43 88 ce b2 fe 49 d1 e1 87 da 0f
c7 f0 24 7f 3c 22 72 f7 48 3c 79 74 f2 3c 59 74
ee aa 49 7c 1c 00 df 79 06 86 f7 42 43 eb f6 f6
c3 01 74 03 b0 0a aa 51 88 f9 b0 20 f3 aa 59 eb
cc c6 07 00 61 c3

আমার নির্বাহযোগ্য কোড, বিচ্ছিন্ন:

0000003d <myheh>:                                       
  3d:   60                      pusha                   
  3e:   89 d7                   mov    %edx,%edi        
  40:   31 db                   xor    %ebx,%ebx        
  42:   43                      inc    %ebx             
  43:   88 ce                   mov    %cl,%dh          
  45:   b2 fe                   mov    $0xfe,%dl        
  47:   49                      dec    %ecx             
  48:   d1 e1                   shl    %ecx             

0000004a <myloop>:                                      
  4a:   87 da                   xchg   %ebx,%edx        

0000004c <myrand>:                                      
  4c:   0f c7 f0                rdrand %eax             
  4f:   24 7f                   and    $0x7f,%al        
  51:   3c 22                   cmp    $0x22,%al        
  53:   72 f7                   jb     4c <myrand>      
  55:   48                      dec    %eax             
  56:   3c 79                   cmp    $0x79,%al        
  58:   74 f2                   je     4c <myrand>      
  5a:   3c 59                   cmp    $0x59,%al        
  5c:   74 ee                   je     4c <myrand>      
  5e:   aa                      stos   %al,%es:(%edi)   
  5f:   49                      dec    %ecx             
  60:   7c 1c                   jl     7e <mydone>      

00000062 <mylab>:                                       
  62:   00 df                   add    %bl,%bh          
  64:   79 06                   jns    6c <myprint>     
  66:   86 f7                   xchg   %dh,%bh          
  68:   42                      inc    %edx             
  69:   43                      inc    %ebx             
  6a:   eb f6                   jmp    62 <mylab>       

0000006c <myprint>:                                     
  6c:   f6 c3 01                test   $0x1,%bl         
  6f:   74 03                   je     74 <myprint1>    
  71:   b0 0a                   mov    $0xa,%al         
  73:   aa                      stos   %al,%es:(%edi)   

00000074 <myprint1>:                                    
  74:   51                      push   %ecx             
  75:   88 f9                   mov    %bh,%cl          
  77:   b0 20                   mov    $0x20,%al        
  79:   f3 aa                   rep stos %al,%es:(%edi) 
  7b:   59                      pop    %ecx             
  7c:   eb cc                   jmp    4a <myloop>      

0000007e <mydone>:                                      
  7e:   c6 07 00                movb   $0x0,(%edi)      
  81:   61                      popa                    
  82:   c3                      ret                     

এটি এমন একটি ফাংশন যা এক্সেক্সে এক্স এর আকার এবং এডেক্সে আউটপুট বাফারের পয়েন্টার গ্রহণ করে।

এটি আউটপুট বাফারটি যথাযথভাবে বাইট সহ পূরণ করে। আছে 2 * n - 1পুনরাবৃত্তিও (আউটপুট অ-স্পেস অক্ষরের সংখ্যা সমান)। প্রতিটি পুনরাবৃত্তিতে এটি নিম্নলিখিতগুলি করে:

  • একটি এলোমেলো সংখ্যা তৈরি করুন
  • পরিসরের সাথে এটি ফিট করার জন্য নম্বর সহ ফিডল; যদি এটি খারাপ হয় তবে ফিরে গিয়ে নতুনভাবে উত্পন্ন করুন
  • এলোমেলো অক্ষর মুদ্রণ করুন
  • একটি নতুন লাইন মুদ্রণ করুন (প্রতিটি অন্যান্য পুনরাবৃত্তি)
  • জায়গাগুলির যথাযথ সংখ্যা মুদ্রণ করুন

একটি এলোমেলো সংখ্যা থেকে একটি এলোমেলো অক্ষরে রূপান্তর লক্ষণীয় নয়:

myrand:
    rdrand eax;
    and al, 7fh;
    cmp al, 22h;
    jb myrand;
    dec eax;
    cmp al, 'y';
    je myrand;
    cmp al, 'Y';
    je myrand;

আকর্ষণীয় অংশটি স্থানগুলির সংখ্যা গণনা ulation এটি অবশ্যই নিম্নলিখিত সংখ্যাগুলি উত্পন্ন করবে (উদাহরণস্বরূপ এন = 9):

7    1
5    2
3    3
1    4

     3
1    2
3    1
5    0
7

দুটি গাণিতিক অগ্রগতি থেকে সংখ্যাগুলি পর্যায়ক্রমে নেওয়া হয়। প্রথমটি ধাপ -২ দিয়ে নেমে যায় এবং দ্বিতীয়টি ধাপ ১ দিয়ে উপরে যায় যখন প্রথম অগ্রগতিটি -১ এ পৌঁছে যায় (এক্স এর মাঝখানে), সেখানে একটি ত্রুটি থাকে (-1 সরানো হয়), এবং তারপরে অগ্রগতি দিক পরিবর্তন।

Progressions, রেজিস্টার সংরক্ষিত হয় ebxএবং edx- উচ্চ যন্ত্রাংশ bhএবং dhবর্তমান সংখ্যা, এবং কম পার্টসের দোকান bldlপদক্ষেপ সংরক্ষণ করি। অগ্রগতিগুলির মধ্যে বিকল্প হিসাবে, কোডটি নিবন্ধগুলির সাথে অদলবদল করে xchg

অগ্রগতিটি যখন -1 এ পৌঁছে যায় ( mylabলেবেলের চারপাশে ), তখন এটি উভয় নিবন্ধকেই বাড়িয়ে দেয়, পদক্ষেপগুলি থেকে সরিয়ে -2, 1নিয়ে যায় -1, 2। এটি রেজিস্টারের ভূমিকাও পরিবর্তন করে, সুতরাং এটি নিবন্ধগুলির উচ্চতর অংশগুলিকে অদলবদল করে।

ফাংশন শেষে, এটি স্ট্রিংয়ের শেষ নির্দেশ করতে শূন্য বাইট সঞ্চয় করে।


2

লুয়া, 277 বাইট

ভাল ... লুয়া স্ট্রিং ম্যানিপুলেট করার ক্ষেত্রে খুব ভাল: ডি। প্রথমবারের মতো আমাকে localবিবৃতিতে ব্যবহার করতে হয়েছিল! আমি 5.3 এর পরিবর্তে লুয়া 5.1 ব্যবহার করে কিছু বাইট সংরক্ষণ করতে পারি কারণ তারা গ্লোবাল ফাংশনটিকে লুয়া 5.2-তে unpackবস্তুতে স্থানান্তরিত করেছে table। তবে আমি আমার সর্বশেষতম সংস্করণটি আটকে রাখতে পছন্দ করি :)।

একটি ফাংশন সংজ্ঞা দেয় যা একক প্যারামিটার দিয়ে কল করা উচিত (দ্বিতীয়টি পুনরাবৃত্তির উদ্দেশ্যে ব্যবহৃত হয়) এবং একটি স্ট্রিং প্রদান করে।

function f(n,N)N=N or n e=" "p="\n"r=math.random C=e.char
R={}for i=1,4 do x=r(33,126)R[i]=x~=89 and x~=121 and x or r(33,88)end
local s,S,a,b,c,d=e:rep((N-n)/2),e:rep(n-2),table.unpack(R)return
n<2 and s..C(a)..p or s..C(a)..S..C(b)..s..p..f(n-2,N)..s..C(c)..S..C(d)..s..p
end

Ungolfed

function f(n,N)                       
  N=N or n                          -- N is equal to the n we had on the first call
  e=" "                             -- shorthand for the space
  p="\n"                            -- shorthand for the newline
  r=math.random                     -- shorthand for math.random
  C=e.char                          -- uses the string e to obtain the function string.char
  R={}                              -- define an array for our random values
  for i=1,4                         -- iterate 4 times (for the random characters)
  do
    x=r(33,126)                     -- random between ASCII "!" and "~"
    R[i]=x~=89 and x~=121           -- if we didn't pick y or Y
           and x                    -- keep this number
         or r(33,88)                -- or roll for a character between "!" and "X"
  end
  local s,S                         -- these variables have to be local
          ,a,b,c,d                  -- or the recursion would change them
         =e:rep((N-n)/2),e:rep(n-2) -- s and S are the number of spaces for the X
           ,table.unpack(R)         -- a,b,c and d are the 4 random characters
  return n<2                        -- if n==1 
           and s..C(a)..p           -- we're at the center of the X, time to end recursion
         or                         -- else
           s..C(a)..S..C(b)..s..p   -- concatenate the topmost line for n
           ..f(n-2,N)               -- with the inner X
           ..s..C(c)..S..C(d)..s..p -- and the bottom line
end

2

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

n=>[...Array(n)].map((_,i,a)=>String.fromCharCode(...a.map((r=Math.random()*94,j)=>i-j&&i+j+1-n?32:(r+72&95&&r)+33))).join`\n`

যেখানে \nআক্ষরিক নিউলাইন চরিত্রের প্রতিনিধিত্ব করে। সম্পাদনা: অভিব্যক্তিটির ' 'ভিতরে সরিয়ে 1 বাইট সংরক্ষণ করা হয়েছে String.fromCharCode। আমার এলোমেলো চরিত্র প্রজন্মটি অ-ইউনিফর্ম করে 5 বাইট সংরক্ষণ করেছেন; অভিব্যক্তি r+72&95মান যে মানচিত্রের জন্য শূন্য হয় Yএবং yএবং একটি !তাদের জায়গায় উৎপন্ন হয়। 4 টি বাইট সংরক্ষিত হয়েছে যখন আমি বুঝতে পারি যে ছড়িয়ে ছিটিয়ে থাকা String.fromCharCodeএড়ানো যায় join। @ এডসি 65 থেকে একটি ট্রিক চুরি করে 2 বাইট সংরক্ষণ করা হয়েছে।


2

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

Param($i)function f{Random(33..126-ne121-ne89|%{[char]$_})};1..$i|%{$a=,' '*$i;$a[$_-1]=f;$a[$i-$_]=f;$a-join''}

কমান্ড লাইন বন্ধ ইনপুট পড়ুন।

প্রতিটি লাইনের জন্য, ফাঁকের একটি অ্যারে তৈরি করা হয়, ফাংশন থেকে টানা অক্ষরের সাথে ভরাট সঠিক সূচকগুলি f, তারপরে চর অ্যারে এক লাইনের হিসাবে আউটপুটে যুক্ত হবে।


আপনি চলন্ত 6 বাইট সংরক্ষণ করতে পারবেন [char]বাইরে ঢালাই Random, এবং আলোকসম্পাতের দ্বারা -joinএকটি ইউনারী অপারেটর হতে ---Param($i)function f{[char](Random(33..126-ne121-ne89))};1..$i|%{$a=,' '*$i;$a[$_-1]=f;$a[$i-$_]=f;-join$a}
AdmBorkBork

প্রকৃতপক্ষে, আপনি functionএকটি ল্যাম্বডা সমতুল্য পাওয়ারশেলের সমপরিমাণের পরিবর্তে আরেকটি দম্পতি বাইট সংরক্ষণ করতে পারেন এবং কল করার জন্য কল-অপারেটরটি ব্যবহার করতে &পারেন। নিম্নলিখিতটি 103 বাইট -Param($i)$z={[char](Random(33..126-ne121-ne89))};1..$i|%{$a=,' '*$i;$a[$_-1]=&$z;$a[$i-$_]=&$z;-join$a}
অ্যাডমবর্কবর্ক

আসলে, আসলে ;-), আপনি কিছু আরো অনেক কিছু আপনার ধ্বসে দ্বারা সংরক্ষণ করতে পারেন -neচলন্ত, [char]Cast হল একটি হতে [char[]]ফেলে $a(সোয়াপিং ' 'জন্য 32, প্রক্রিয়া মধ্যে) এবং চলন্ত $zএকটি বাম বন্ধনী মধ্যে 's সংজ্ঞা প্রথমবার এটা বলা হচ্ছে। 99 এর নিচে ( Param($i)1..$i|%{$a=,32*$i;$a[$_-1]=&($z={Random(33..126-ne121,89)});$a[$i-$_]=&$z;-join[char[]]$a}

হ্যাঁ, $aপ্রথমবারের মতো এটি ব্যবহার করার সময় কোনও প্যারেন্সের সংজ্ঞাটি সরিয়ে অন্য বাইট সংরক্ষণ করুন । এখন 98-এর নিচে - Param($i)1..$i|%{($a=,32*$i)[$_-1]=&($z={Random(33..126-ne121,89)});$a[$i-$_]=&$z;-join[char[]]$a}আমি মনে করি আমি এখানেই থামব ;-)
হি

2

ম্যাটল্যাব, 86 বাইট

a=@(n)(char(changem(randi(92,n),33+[0:55 57:87 89:93],1:92).*(eye(n)|fliplr(eye(n)))))

কিছু উদাহরণ:

>> a(1)

ans =

i


>> a(3)

ans =

~ {
 Z 
* ^


>>a(5)

ans =

k   E
 | M 
  }  
 ] s 
b   t


>> a(10)

ans =

Q        k
 +      a 
  j    w  
   X  [   
    rO    
    %3    
   P  d   
  K    q  
 r      & 
?        v

সুতরাং, একটি ফাংশন যা কিছু নিয়ম অনুসারে ম্যাট্রিক্সে মান পরিবর্তন করে তাকে বলা হয় changem! দুর্দান্ত নাম!
অ্যানাটলিগ

2

পিপ , 33 বাইট

কোডের 32 বাইট, -lপতাকাটির জন্য +1 । আশ্চর্যজনকভাবে যথেষ্ট, কোডটি শুরু হয় Yএবং এর সাথে শেষ হয় y...

Ya{$=a|$+a=y-1?RCPARM-`y`s}MMCGy

কমান্ড-লাইন আর্গুমেন্ট হিসাবে ইনপুট নেয়। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

উপযুক্ত আকারের গ্রিড গঠন করে; এলোমেলো উপাদানগুলিকে এলোমেলো নন-ওয়াই অক্ষর এবং স্থান সহ অন্যান্য সমস্ত উপাদানকে প্রতিস্থাপন করে।

                                  a is 1st cmdline arg; PA is printable ASCII characters;
                                  s is space (implicit)
Ya                                Yank a into y (global var, accessible within functions)
                             CGy  y by y coordinate grid
  {                       }MM     To each coordinate pair, map this function:
   $=a                             Fold on equality (true if both elements are equal)
      |                            Logical OR
       $+a                         Fold on +
          =y-1                     and test if equal to size - 1
              ?                    If the preceding expression is true, then:
                 PARM               From printable ASCII chars, remove         
                     -`y`           regex matching y, case-insensitive
               RC                   Take a random choice from the resulting string
                         s         Else, space
                                  The whole expression returns a nested list, which is
                                  autoprinted as lines of concatenated items (-l flag)

1

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

<?php for(;$i<$n=$argv[1];){$s=str_pad('',$n);$s[$i?:0]=chr(rand(33,126));$s[$n-++$i]=chr(rand(33,126));echo str_ireplace(Y,X,"$s
");}

মোটামুটি সরল পদ্ধতিতে প্রয়োজনীয় দৈর্ঘ্যের ব্যবধানের স্ট্রিং তৈরি করতে str_pad ব্যবহার করে, প্রয়োজনীয় অক্ষরগুলিকে এলোমেলোভাবে প্রতিস্থাপন করে তারপরে কোনও ওয়াইস (কেস সংবেদনশীল) এর পরিবর্তে এক্স এবং লাইনটি প্রতিধ্বনিত করে।
2n + 3 বিজ্ঞপ্তি উত্পন্ন করে তবে যথারীতি, এটি ঠিক আছে।


1

ইমাস লিস্প, 269 বাইট

(defalias'n'number-sequence)(set'c(mapcar'string(delq 89(delq 121(n 33 126)))))(defun c()(nth(random(length c))c))(defun s(x)" ")(defun x(l)(let((s(mapcar's(n 1 l))))(dotimes(i l)(set'x(copy-seq s))(setf(nth i x)(c)(nth(-(length x)i 1)x)(c))(message(apply'concat x)))))

অবহেলিত এবং সামান্য পরিবর্তিত:

(defvar c (mapcar 'string (delq 89 (delq 121 (number-sequence 33 126)))))
(defun c() (nth (random (length c)) c))
(defun s(x)" ")
(defun x(l)
  (let ((s(mapcar's(n 1 l)))
        x)
    (dotimes (i l)
      (set 'x (copy-seq s))
      (setf (nth i x) (c)
            (nth (- (length x) i 1) x) (c))
      (message (apply 'concat x)))))

1

জাভাস্ক্রিপ্ট (ES6), 128 131

সম্পাদনা করুন 3 বাইট সংরক্ষিত ধন্যবা @Neil

এত বড়, সম্ভবত সেরা পদ্ধতির না। বোনাস - এটি বিজোড় বা এমনকি ইনপুট সহ কাজ করে।

n=>[...Array(n)].map((_,i,z)=>String.fromCharCode(...z.map((r=1+Math.random()*94,j)=>32+(j==i|j==n+~i&&(r+7&31?r:25))))).join`
`

F=n=>[...Array(n)].map((_,i,z)=>String.fromCharCode(...z.map((r=1+Math.random()*94,j)=>32+(j==i|j==n+~i&&(r+7&31?r:25))))).join`\n`

Z=_=>{
    o=F(+S.value),O.textContent=o,/y/i.test(o)||setTimeout(Z,100)
}
setTimeout(Z,100)
<input id=S value=15 type=number>
<pre id=O></pre>


আমি মনে করি r+7&31একই ফলাফল দেয় (r&31)-25
নীল

@ নিল ভাল শোনাচ্ছে, ধন্যবাদ
edc65

আমি এটি এলোমেলো যে সত্যটি চিত্রিত করে তা পছন্দ করি! +1
কনার ও'ব্রায়ান

1

সি, 268 বাইট

V(c){for(c=89;c==89||c==121;c=rand()%95+33);return c;}p(n,s){n^1?s-n?printf("%*.c",s-n,32):0,printf("%c%*.c%c\n",V(),n*2-3,32,V()),p(n-1,s),s-n?printf("%*.c",s-n,32):0,printf("%c%*.c%c\n",V(),2*n-3,32,V()):printf("%*.c%c\n",s-n,32,V());}f(n){srand(time(NULL));p(n,n);}

অঙ্কনের f()আকারের সাথে কল করুন x


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

আপনি কি আপনার সংকলকের সংস্করণ যুক্ত ইজারা দিতে পারেন? উপর gcc version 4.8.1Windows এর জন্য এবং gcc version 5.3.0Cygwin জন্য এটি কাজ করে না ... (IdeOne ওয়ার্কস দিকে)
Giacomo, Garabello

আমি জানি এটি জিসিসি 6.1.0 এর সাথে কাজ করে তবে এটি কমপক্ষে> 4.9 এর সাথে কাজ করা উচিত। এটি ঝাঁকুনি 3.8.1 এর সাথেও কাজ করে। আপনি কি ত্রুটি দেখতে পাচ্ছেন?
owacoder

1

ম্যাট্রিক্স , by৯ বাইট (প্রতিদ্বন্দ্বী)

Matricks excels x এবং সব এলোমেলো মানের উপার্জন শুরুতে কিন্তু flops যখন এটি কন্ডিশন আসে ...

আমি এটিকে নন-কেপটিটিং হিসাবে চিহ্নিত করেছি কারণ আমাকে কয়েকটি বাগ ঠিক করতে হয়েছিল এবং এই চ্যালেঞ্জ পোস্ট হওয়ার পরে নতুন সমস্ত বৈশিষ্ট্য কাজ করতে হয়েছিল।

m:n;:1;mr=c:L:L;k({}|{X;})*{m_?33:126;;:L:l;miC<121,89>:gr:c;;:49:gr:c;;:L:l;};

সাথে চালাও python matricks.py x.txt [[]] <input> --asciiprint

ব্যাখ্যা:

m:n;:1;mr=c:L:L;                   #Initialize matrix to be a square with
                                   #a diagonal of 1s
k...;                              #Set the output to...
({}|{X;})*                         #The boolean x matrix multiplied by...
{m_?33:126;;:L:l;                  #A bunch of random characters
miC<121,89>:gr:c;;:49:gr:c;;:L:l;} #But make sure they are not y or Y

এটি এমনকি সংখ্যার সমর্থন করে।


1

পাইথন 2, 204 191 183 বাইট

ঠিক আছে, পাইথনের প্রতিযোগিতা এখানে তীব্র হচ্ছে। এখানে যতটা সম্ভব বাইট শেভ করার আমার প্রচেষ্টা attempt এতক্ষণে আমি আটকে আছি (ঠিক আছে, আবার আটকে)।

এলোমেলো অক্ষরগুলি যেভাবে নির্বাচন করা হয় তার জন্য @ ননলাইনারফ্র্টকে জমা দেওয়া।

183 বাইট সংস্করণ:

import re,random
s=i=input();t=lambda:re.sub("y|Y","t",chr(random.randint(33,126)))
while i>-s:i-=2;u=abs(i);z=(s-u)/2-1;print('',' '*-~z+t()+'\n')[-1==i]+(' '*z+t()+' '*u+t())*(i>-s)

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

মূল পরিবর্তনটি হচ্ছে শর্তাধীন পুনর্লিখন to

(" "*(z+1)+t()+"\n"if -1==i else"") 

যেমন

(""," "*-~z+t()+'\n')[-1==i]

যা 7 বাইট সংরক্ষণ করে।

191 বাইট সংস্করণ:

import re,random
s=i=input();t=lambda:re.sub("y|Y","t",chr(random.randint(33,126)))
while i>-s:
 i-=2;u=abs(i);z=(s-u)/2-1;print(' '*(z+1)+t()+'\n'if -1==i else'')+(' '*z+t()+' '*u+t())*(i>-s)

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

প্রধান পরিবর্তনগুলি হল এলোমেলো অক্ষর নির্বাচন করার উপায় এবং কিছু কোড পুনর্বিন্যাস যেমন s=input();i=s;হয়ে s=i=input();ওঠা, r=rangeঅ্যাসাইনমেন্টটি আর প্রয়োজন হয় না তাই মুছে ফেলা এবং absকোডের কম বাইটের ফলে এটি সরাসরি কল করা।

পাইথনের আগের সংক্ষিপ্ত উত্তরটি 1 বাইট দ্বারা প্রহার! @R। এলোমেলো অক্ষর তৈরির জন্য কাপের পদ্ধতির ব্যবহার হয়। লুপের প্রতিটি পুনরাবৃত্তি প্রাক্তনের একটি সারি মুদ্রিত হয়।

204 বাইট সংস্করণ :

from random import*
s=input();i=s;a=abs;r=range;t=lambda:chr(choice(r(33,89)+r(90,121)+r(122,128)))
while i>-s:
 i-=2;z=(s-a(i))/2-1;print(' '*(z+1)+t()+'\n'if -1==i else'')+(' '*z+t()+' '*a(i)+t())*(i>-s)

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

এটি কীভাবে কাজ করে তার একটি ধারণা পেতে অবহেলিত সংস্করণ:

from random import *
random_character = lambda : chr(choice(range(33,89)+range(90,121)+range(122,128)))

size = input()
current_row = size

while current_row > -size:
    current_row-=2
    n_leading_spaces = (size-abs(current_row)/2)-1 
    row_to_print = ''
    if current_row == -1:
        row_to_print = ' ' * (n_leading_spaces+1) + random_chr() + '\n'
    if current_row > -size:
        row_to_print += ' ' * n_leading_spaces + random_chr()+' '*abs(current_row)+random_chr()
    print row_to_print

1-চরিত্রের কেসটি পরিচালনা করা শক্ত ছিল!


1

স্মাইলব্যাসিক, 97 বাইট

INPUT S
FOR X=1TO S
FOR Y=1TO S
Q=RND(93)+33?CHR$((Q+!(Q-121&&Q-89))*(X==Y||X+Y==S+1));
NEXT?NEXT

প্রতিটি চরিত্র বা কোনও কিছুর মধ্যে ফাঁকের সংখ্যা গণনা করার পরিবর্তে, আমি ঠিক করেছি যেখানে সমস্ত স্থানে মুদ্রণ করব X==Y বাX+Y==Size+1
এলোমেলো চরিত্রের জেনারেটর যদি 1 টি যোগ করে তবে তা উত্পন্ন হয় yবা Yতাই, zএবং Zএটি স্বাভাবিকের চেয়ে কিছুটা সাধারণ।


1

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

for(;($x%=$n=$argv[1])?:$y++<$n&print"\n";)echo strtr(chr($y+$x++-$n&&$x-$y?32:rand(33,126)),yY,zZ);

কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নেয়; দিয়ে চালানো -nr

সম্মিলিত লুপ অবস্থানের উপর নির্ভর করে অক্ষর মুদ্রণ করে

ভাঙ্গন

for(;
    ($x%=$n=$argv[1])       // inner loop
        ?
        :$y++<$n&print"\n"  // outer loop; print newline
;)
    echo strtr(chr(             // 2. replace Y with Z; print
        $y+$x++-$n&&$x-$y       // 1: if position is not on diagonals
            ?32                 // then space
            :rand(33,126)       // else random printable
    ),yY,zZ);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.