Y के बिना X करें


52

आमतौर पर, यह कहा जाता है कि "डूइंग एक्स विदाउट वाई" चुनौतियों ( स्रोत ) को लिखने वाले शुरुआती लोगों के लिए एक जाल हो सकता है । हालांकि, मैं अहंकारी हूं और सोचता हूं कि मैं निश्चित रूप से बिना किसी वाईएस के एक्स बना सकता हूं । बेतरतीब ढंग से। अरे हाँ, यह अच्छा रहेगा।

चुनौती:n 1 से अधिक या उसके बराबर एक विषम पूर्णांक को देखते हुए , एक पूर्व की ओर की लंबाई वाली लंबाई 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 से वर्ण !के ~बिना yऔरY
कोनोर ओ ब्रायन

@ LegionMammal978 नहीं, क्योंकि गैर-वाई वर्ण शामिल हैं yऔर
लीक नून


14
रुको!? हमें अपने कोड में "Y" और "y" का उपयोग करने की अनुमति है?
एडम जूल 27'16

जवाबों:


3

पायथ, 28 27 26 25 बाइट्स

jmuXGHO-rF! ~! "" Yy "{, d-tQd *; Q 
VQuXGHO-rF"! ~ "" Yy "{, N-tQN * d 
VQuXGHO-r \! \ ~" Yy "{, N-tQNN * घ
VQuXGHO-r \! \ ~ "Yy", एन TQN * घ

परीक्षण सूट।


5
मुझे पूरा यकीन है कि यह कभी भी ~चरित्र का निर्माण नहीं करेगा , क्योंकि सीमा में यह शामिल नहीं है। आप ~कोड को शाब्दिक DEL वर्ण में बदलकर इसे ठीक कर सकते हैं ।
FryAmTheEggman

10

रूबी, 102 बाइट्स

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
"विज़ुअलाइज़ बिट
वेटिंग

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

समान संभावना वाले यादृच्छिक वर्ण चुनने की गारंटी।

इसे यहाँ आज़माएँ : ideone लिंक

संपादित करें: सुधार के लिए मॉर्गन थ्राप को धन्यवाद।


from random import*2 बाइट्स बचाता है। आप jकुछ बाइट्स को बचाने के लिए अर्धविराम के साथ लूप की पहली दो पंक्तियों में शामिल हो सकते हैं । (यह भी मैं मानता हूं Zऔर {कुछ अन्य पत्रों की तुलना में होने की अधिक संभावना है, न कि यह सवाल के लिए मायने रखता है)
FryAmTheEggman

आप एक छोटे से संशोधन mothereff.in/…- के
मोर्गन थ्रैप

2
वास्तव में, आपका आउटपुट सभी परीक्षण मामलों के लिए गलत है। आप कुल पार्श्व आकार के बजाय प्रत्येक पैर को n के बराबर बना रहे हैं।
मॉर्गन थ्रैप

@ मॉर्गनट्रैप आह, आप सही कह रहे हैं। मैं ठीक करूँगा कि
स्क्वीश ossifrage

4 बाइट्स: bool(i^j and i^-j)->i not in(j,-j)
जोनाथन एलन

6

पायथन, 142 139 135 बाइट्स

यह एक सीधे आगे का कार्यान्वयन चरित्र द्वारा वर्ग चरित्र बनाता है। यदि वर्ण विकर्ण पर है : यादृच्छिक वर्ण का उपयोग करें , और : किसी स्थान का उपयोग करें। यह गैर- Yवर्ण उत्पन्न करने के लिए एक रेगेक्स प्रतिस्थापन और यादृच्छिक int का उपयोग करता है :

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 [१६-०ened-३०] शॉर्टलाइन नईलाइन सशर्त
  • -3 [16-07-30] एकल-पाश के लिए परिवर्तित
  • -6 [१६-० op-२९] एक्सचेंजरी सेशन के लिए स्टेटमेंट का आदान-प्रदान हुआ। @RootTwo को धन्यवाद
  • -11 [16-07-27] अतिरिक्त कोष्ठक / स्थान हटा दिए गए हैं और यदि कथन में फ़्लिप किया गया है
  • -49 [16-07-27] वर्ग-दर-चरण बनाकर @ squeamishossifrage की विधि को समाप्त कर दिया, धन्यवाद!
  • -10 [१६-०10-२B] @ कॉनोर’ब्रायन से लघु रैंडम लैंबडा + गणित सामान
  • -22 [१६-०22-२६] एक लैम्ब्डा + मिस गोल्फिंग में निचोड़
  • -6 [16-07-26] import*- @KevinLau को धन्यवाद

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

Dyalog एपीएल , 35 बाइट्स

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


उस नंबर
∘.=⍨समानता तालिका के माध्यम से नंबर 1 के लिए संकेत (यानी विकर्ण में 1s है)
(⊢∨⌽)या इसकी दर्पण छवि (दोनों विकर्ण देता है)
95×95
?रैंड int से 1 और 95 के बीच गुणा , विकर्ण के लिए रैंड फ्लोट 0 और 1 के बीच बाकी
मंजिल के लिए। फ़्लोट्स से छुटकारा पाने के लिए
(⊢+∊∘57 89){57,89} (Yy - 32) के सदस्य तत्वों को एक
32+जोड़ दें, 0 को स्पेस में बनाने के लिए 32 जोड़ें, और अन्य नंबरों को उचित रेंज
⎕UCSमें टेक्स्ट में बदलें।

TryAPL !


मुझे पसंद है कि यह एक भी संख्या के साथ कैसे प्रतिक्रिया करता है, भले ही वह समस्या का हिस्सा नहीं था (और अनजाने में भी हो सकता है)। बहुत बढ़िया! हालांकि, अजीब तरह से, यह कभी-कभी किसी भी अन्य इनपुट की तुलना में 4 के इनपुट को अलग तरीके से व्यवहार करता है।
किर्कपाट

@kirkpatt हाँ, मैंने "ऑड-ओनली" को नोटिस नहीं किया है ..
Adám


3

MATL , 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);}

या 119 एक समारोह के रूप बाइट्स X(h)के साथ 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;

दिलचस्प हिस्सा रिक्त स्थान की संख्या की गणना है। इसे निम्नलिखित संख्याएँ उत्पन्न करनी चाहिए (उदाहरण के लिए N = 9):

7    1
5    2
3    3
1    4

     3
1    2
3    1
5    0
7

संख्या को दो अंकगणितीय प्रगति से बारी-बारी से लिया जाता है। पहला चरण -2 के साथ नीचे जाता है, और दूसरा चरण 1 के साथ ऊपर जाता है। जब पहली प्रगति -1 (एक्स के मध्य में) आती है, तो एक गड़बड़ होती है (-1 हटा दी जाती है), और फिर प्रगति की दिशा बदल जाती है।

प्रगति रजिस्टरों में जमा हो जाती है ebxऔर edx- उच्च भागों bhऔर dhवर्तमान संख्या, और कम भागों की दुकान blऔर dlकदम की दुकान। प्रगति के बीच वैकल्पिक करने के लिए, कोड रजिस्टर को स्वैप करता है xchg

जब प्रगति -1 ( mylabलेबल के आसपास ) में आती है , तो यह दोनों रजिस्टरों को बढ़ाता है, जिससे चरणों को स्विच किया -2, 1जाता है -1, 2। इससे रजिस्टरों की भूमिका भी बदल जाती है, इसलिए यह रजिस्टरों के उच्च भागों को स्वैप करता है।

फ़ंक्शन के अंत में, यह स्ट्रिंग के अंत को इंगित करने के लिए एक शून्य बाइट संग्रहीत करता है।


2

लुआ, 277 बाइट्स

अच्छी तरह से ... लुआ sooooo है अच्छा हेरफेर स्ट्रिंग्स पर: डी। पहली बार मुझे 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

जावास्क्रिप्ट (ईएस 6), 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। @ Edc65 से एक ट्रिक चोरी करके 2 बाइट्स को बचाया।


2

PowerShell v2 +, 112 बाइट्स

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

कमांड लाइन से इनपुट पढ़ता है।

प्रत्येक पंक्ति के लिए, रिक्त स्थान की एक सरणी बनाई जाती है, सही सूचक जो फ़ंक्शन से खींचे गए वर्णों से भरे होते हैं f, फिर चार पंक्ति एक पंक्ति के रूप में आउटपुट में शामिल हो जाती है।


आप [char]कलाकारों को बाहर ले जाकर 6 बाइट्स बचा सकते हैं Random, और -joinएक Param($i)function f{[char](Random(33..126-ne121-ne89))};1..$i|%{$a=,' '*$i;$a[$_-1]=f;$a[$i-$_]=f;-join$a}
अपर

दरअसल, आप functionलैम्बडा के पॉवरशेल समकक्ष के साथ बदलकर एक और युगल बाइट्स बचा सकते हैं और &इसे कॉल करने के लिए कॉल-ऑपरेटर का उपयोग कर सकते हैं। निम्नलिखित 103 बाइट्स है -Param($i)$z={[char](Random(33..126-ne121-ne89))};1..$i|%{$a=,' '*$i;$a[$_-1]=&$z;$a[$i-$_]=&$z;-join$a}
AdmBorkBork 14

असल में ;-), आप अपने को टटोल कर कुछ और बचा सकते हैं -ne, [char]कास्ट को मूव [char[]]ऑन करने $a( प्रोसेस के ' 'लिए स्वैपिंग 32) करने के लिए, और $zपहली बार इसे कॉल करने वाली परेंस में परिभाषा को आगे बढ़ा रहे हैं। डाउन टू 99 (वू! सब -100!) -Param($i)1..$i|%{$a=,32*$i;$a[$_-1]=&($z={Random(33..126-ne121,89)});$a[$i-$_]=&$z;-join[char[]]$a}
AdmBorkBork

हाह, एक दूसरी बाइट $aको पहली बार उपयोग किए जाने वाले एक परेंस में ले जाकर बचाएं । नीचे 98 करने के लिए - Param($i)1..$i|%{($a=,32*$i)[$_-1]=&($z={Random(33..126-ne121,89)});$a[$i-$_]=&$z;-join[char[]]$a}मुझे लगता है कि मैं यहाँ रुक
जाऊंगा

2

MATLAB, 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 बाइट्स

-lध्वज के लिए कोड के 32 बाइट्स, +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

php, 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 का उपयोग करता है, आवश्यक वर्णों को यादृच्छिक लोगों के साथ बदलता है फिर किसी भी Ys (केस असंवेदनशील) को Xs और ईकोस लाइन के साथ बदलता है।
उत्पन्न करता है 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

जावास्क्रिप्ट (ईएस 6), 128 131

संपादित करें3 बाइट्स thx @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.1विंडोज के लिए और gcc version 5.3.0Cygwin के लिए यह काम करता है नहीं है ... (IdeOne वर्क्स पर)
गियाकोमो Garabello

मुझे पता है कि यह जीसीसी 6.1.0 के साथ काम करता है, लेकिन इसे कम से कम> 4.9 के साथ काम करना चाहिए। यह क्लेंग 3.8.1 के साथ भी काम करता है। आप क्या त्रुटियां देखते हैं?
उल्लू

1

मैट्रिक , 79 बाइट्स (गैर-प्रतिस्पर्धात्मक)

मैट्रिक एक्स और सभी यादृच्छिक मूल्यों को बनाने की शुरुआत के रूप में उत्कृष्टता देता है , लेकिन जब यह सशर्त आता है तो फ्लॉप ...

मैंने इसे नॉन-कमिंग के रूप में चिह्नित किया क्योंकि मुझे कुछ बग्स को ठीक करना था और इस चुनौती को पोस्ट करने के बाद काम करने वाली सभी नई सुविधाएँ प्राप्त करनी थीं।

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 बाइट्स

ठीक है, यहाँ पायथन प्रतियोगिता उग्र हो रही है। यहाँ संभव के रूप में कई बाइट्स शेविंग पर मेरा प्रयास है। अब तक मैं फंस गया हूं (ठीक है, फिर से अटक गया)।

जिस तरह से यादृच्छिक वर्णों का चयन किया जाता है, उसके लिए @NonlinearFruit को क्रेडिट।

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)

मुख्य परिवर्तन सशर्त को फिर से लिखना है

(" "*(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

PHP, 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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.