मुझे (अजीब) यूनिट सर्कल बनाएं!


20

परिचय

आप अपने सामान्य इकाई चक्र को जान सकते हैं और पसंद कर सकते हैं। लेकिन गणितज्ञ पागल हैं और इस तरह उन्होंने अवधारणा को किसी भी बिंदु पर संतुष्ट कर दिया है जो संतुष्ट करता है x*x+y*y=1। क्योंकि क्रिप्टोग्राफर्स 1 भी अजीब हैं, वे परिमित फ़ील्ड और कभी-कभी परिमित छल्ले से प्यार करते हैं (ऐसा नहीं है कि उनके पास हालांकि बहुत पसंद है), तो चलिए इसे जोड़ते हैं!

चुनौती

इनपुट

एक सकारात्मक पूर्णांक आपके पसंदीदा एन्कोडिंग में एक से बड़ा है। चलो इस नंबर पर कॉल करें n।

उत्पादन

आप इकाई चक्र modulo के इनपुट चित्र को "चित्र" (जिसमें n वर्णों के होते हैं) को आउटपुट करेंगे ASCII- कला के रूप में "X" (ऊपरी स्थिति लैटिन X) और "" (एक स्थान) का उपयोग कर। अनुगामी रिक्त स्थान और newlines की अनुमति है।

अधिक जानकारी

आपको नीचे-बाएं से ऊपर-दाएं तक एक समन्वित प्रणाली का विस्तार करना होगा। जब भी कोई बिंदु सर्कल समीकरण को पूरा करता है, तो स्थिति पर एक एक्स रखें, अन्यथा एक स्थान रखें।

एक बिंदु के लिए शर्त चक्र सीमा का हिस्सा माना जा रहा है:
mod(x*x+y*y,n)==1

यहाँ समन्वय प्रणाली का एक त्वरित चित्रण है:

(0,4)(1,4)(2,4)(3,4)(4,4)
(0,3)(1,3)(2,3)(3,3)(4,3)
(0,2)(1,2)(2,2)(3,2)(4,2)
(0,1)(1,1)(2,1)(3,1)(4,1)
(0,0)(1,0)(2,0)(3,0)(4,0)

यदि यह आपकी मदद करता है, तो आप कुल्हाड़ियों में से किसी की दिशा में भी पलट सकते हैं, लेकिन उदाहरण इस अभिविन्यास को मानते हैं।

किसी जीत?

यह इसलिए बाइट जीत में सबसे छोटा कोड है! केवल डिफ़ॉल्ट I / O विधियों की अनुमति है और सभी मानक कमियां प्रतिबंधित हैं।

उदाहरण

इनपुट: २

X 
 X

इनपुट: ३

X  
X  
 XX

इनपुट: ५

X    


X    
 X  X

इनपुट: 7

X      
  X  X 


  X  X 
X      
 X    X

इनपुट: ११

X          

     XX    

   X    X  
   X    X  

     XX    

X          
 X        X

इनपुट: ४२

X                                         
         X                       X        


            X                 X           
       X                           X      
      X                             X     
                     X                    
  X             X         X             X 


     X             X   X             X    
X                                         
               X           X              
              X             X             
         X                       X        


            X                 X           
                     X                    
        X           X X           X       
                     X                    
            X                 X           


         X                       X        
              X             X             
               X           X              
X                                         
     X             X   X             X    


  X             X         X             X 
                     X                    
      X                             X     
       X                           X      
            X                 X           


         X                       X        
X                                         
 X           X               X           X

1 मेरा सुझाव है कि यदि आप यहाँ सोच रहे हैं तो आप मेरी प्रोफ़ाइल पर एक नज़र डालें।


यदि आप मेरी राय में डोमेन [0, n] का उपयोग करते हैं तो बहुत अच्छा लगता है। यहाँ इनपुट 42 के साथ एक उदाहरण है।
आर। कप।

"मानक I / O" से क्या आपका मतलब डिफ़ॉल्ट I / O विधियों से है, या आप वास्तविक STDIN / STDOUT से मतलब रखते हैं? मैं पूर्व को मान रहा हूं, लेकिन मुझे लगता है कि नीचे किसी ने इसे बाद के रूप में व्याख्या किया है।
अर्जन जोहानसन

@ .RjanJohansen वास्तव में पूर्व।
SEJPM

क्या पूर्ववर्ती समाचारों को अनुमति दी गई है?
फर्ग्यूसक

@fergusq के रूप में वे (काफी) एक दृश्य तरीके से उत्पादन आंकड़ा बदल जाएगा, नहीं।
SEJPM

जवाबों:




3

हास्केल , 68 बाइट्स

f n|r<-[0..n-1]=unlines[[last$' ':['X'|mod(x*x+y*y)n==1]|y<-r]|x<-r]

इसे ऑनलाइन आज़माएं! Y- अक्ष को फ़्लिप किया गया है। उपयोग: f 42एक नई सीमांकित स्ट्रिंग लौटाता है।

यह एक नेस्टेड सूची समझ जहां दोनों है xऔर yसीमा से लिए गए हैं [0..n-1]last$' ':['X'|mod(x*x+y*y)n==1]का छोटा रूप है if mod(x*x+y*y)n==1 then 'X' else ' '। सूची की समझ, स्ट्रिंग की एक सूची का मूल्यांकन करती है, जिसे एक ही नई पंक्ति में बदलकर स्ट्रिंग द्वारा अलग कर दिया जाता है unlines


3

गणितज्ञ, ५६ ४ 56 बाइट्स

संपादित करें: ग्रेग मार्टिन और मार्टिन एंडर को 8 बाइट बचाने के लिए धन्यवाद।

Grid@Array[If[Mod[#^2+#2^2,x]==1,X]&,{x=#,#},0]&

मूल समाधान:

Grid@Table[If[Tr[{i-1,j-1}^2]~Mod~#==1,X,],{i,#},{j,#}]&

मनोरंजक टिप्पणी: आपको X:) के बाद अल्पविराम की आवश्यकता नहीं है
ग्रेग मार्टिन

1
मुझे लगता है कि आप बेहतर हैं Arrayऔर Norm:Grid@Array[If[Mod[Norm@{##}^2,x]==1,X]&,{x=#,#},0]&
मार्टिन एंडर

2
अभी भी इसे उखाड़ फेंकना ... #^2+#2^2सबसे छोटा है।
मार्टिन एंडर

@GregMartin तो अगर पहली दलील Ifन तो है Trueया False, आपको चौथे तर्क की जरूरत है या यह निर्विवाद है, लेकिन If[False,_]रिटर्न Null। अजीब।
ngenisis

@MartinEnder मैंने शुरू में कोशिश की थी Arrayलेकिन एक चर के लिए तर्क सेट करने के लिए नहीं सोचा था।
ngenisis

2

सीजेएम , 23 बाइट्स

ri:X,2f#_ff{+X%(S'X?}N*

इसे ऑनलाइन आज़माएं!

ri:X    e# Read input, convert to integer, store in X.
,       e# Turn into range [0 1 ... X-1].
2f#     e# Square each value in the range.
_ff{    e# 2D map over all pairs from that list.
  +     e#   Add the two values in the current pair.
  X%    e#   Take the sum modulo X.
  (     e#   Decrement, so that x^2+y^2==1 becomes 0 (falsy) and everything
        e#   else becomes truthy.
  S'X?  e#   Select space of 'X' accordingly.
}
N*      e# Join rows with linefeeds.

2

जावास्क्रिप्ट (ईएस 6), 81 बाइट्स

f=
n=>[...Array(n)].map((_,x,a)=>a.map((_,y)=>(x*x+y*y)%n-1?` `:`X`).join``).join`
`
<input type=number oninput=o.textContent=f(+this.value)><pre id=o>

Y- अक्ष ओपी का उल्टा है।




2

जेली , 14 13 बाइट्स

R²+þ`%=1ị⁾X Y

एक्स-एक्सिस उल्टा है।

इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

R²+þ`%=1ị⁾X Y  Main link. Argument: n

R              Range; yield [1, ..., n].
 ²             Square; yield [1², ..., n²].
  +þ`          Self table addition; compute x+y for all x and y in [1², ..., n²],
               grouping by the values of y.
     %         Take all sums modulo n.
      =1       Compare them with 1, yielding 1 or 0.
        ị⁾X    Index into "X ".
            Y  Separate by linefeeds.


1

MATL , 13 बाइट्स

:qU&+G\1=88*c

मूल शीर्ष पर है। इसलिए चुनौती में उदाहरणों की तुलना में आउटपुट को उल्टा कर दिया जाता है।

MATL पर ऑनलाइन प्रयास करें !

व्याख्या

:      % Input n implicitly. Push [1 2 ... n]
q      % Subtract one (element-wise)
U      % Square (element-wise)
&+     % Matrix of pairwise sums
G      % Push n
\      % Modulo
1=     % Equal to 1? (element-wise)
88*    % Multiply by 88 (ASCII code of 'X')
c      % Convert to char. Char 0 will be displayed as a space
       % Display implicitly

1

पायथन 3 , ( 102 98 95 बाइट्स)

y- अक्ष उलटा

n=int(input());r=range(n);p=print
for i in r:
 for j in r:p(end=' 'if(i*i+j*j)%n-1else'X')
 p()

इसे ऑनलाइन आज़माएं!

  • सहेजे गए 4 बाइट्स: c = '' में छोड़ा गया वेरिएबल c = 'अगर ( i + j j)% n-1else'X'
  • सहेजे गए 3 बाइट्स: ओव्स के लिए धन्यवाद (संशोधित प्रिंट स्टेटमेंट)

1
p(end=' 'if(i*i+j*j)%n-1else'X')के लिए 95 बाइट्स
OVS

1

लिथ , 125 बाइट्स

#N::((join(map(seq(- N 1)0)(scope #Y::((join(map(seq 0(- N 1))(scope #X::
((?(== 1(@(+(* X X)(* Y Y))N))"X" " "))))""))))"\n")

पठनीयता के लिए लाइनब्रेक।

इसे ऑनलाइन आज़माएं!

सबसे छोटा नहीं। मुझे लगता है कि मुझे किसी प्रकार के शॉर्टहैंड मॉड्यूल की आवश्यकता है। आगे की व्याख्या, अनलॉक्ड संस्करण और कुछ परीक्षणों के लिए इसे ऑनलाइन लिंक देखें। सर्वोत्तम परिणामों के लिए, अधिक देखने के लिए आउटपुट विंडो का विस्तार करें।



1

जीएनयू एपीएल , 41 चार्ट, 59 बाइट्स

एक पूर्णांक पढ़ता है और सर्कल प्रदर्शित करता है।

N←⎕◊⌽{(⍵+1)⊃' ' 'X'}¨{1=(N|(+/⍵*2))}¨⍳N N

Ungolfed

N←⎕
⌽                           ⍝ flip the X axis so 0,0 is bottom left
{
    (⍵+1) ⊃ ' ' 'X'         ⍝ substitute space for 0, X for 1
} ¨ {
    1=(N|(+/⍵*2))           ⍝ mod(x*x+y*y, 1)==1
} ¨ ⍳N N                    ⍝ generate an NxN grid of coordinates

0

हास्केल, 115 बाइट्स

n#(a,b)|mod(a*a+b*b)n==1='X'|1>0=' '
m n=map(n#)<$>zipWith(zipWith(,))(replicate n[0..n-1])(replicate n<$>[0..n-1])

Y अक्ष उलटा है।

इसे ऑनलाइन आज़माएं!

उन सभी कोष्ठकों मुझे परेशान कर रहे हैं ...

व्याख्या

n#(a,b)|mod(a*a+b*b)n==1='X'|1>0=' '
n#(a,b)                                 --Operator #, takes a number n and a tuple (a,b)
       |mod(a*a+b*b)n==1                --Test if the mod equals 1
                        ='X'            --If so, return 'X'
                            |1>0=' '    --Otherwise, return ' '

m n=map(n#)<$>zipWith(zipWith(,))(replicate n[0..n-1])(replicate n<$>[0..n-1])
m n=                                                                           --Make a new function m with argument n
                                 (replicate n[0..n-1])                         --Make a list of [[0,1,2,3..n-1],[0,1,2,3..n-1],(n times)]
                                                      (replicate n<$>[0..n-1]) --Make a list of [[0,0,0(n times)],[1,1,1(n times)]..[n-1,n-1,n-1(n times)]
              zipWith(zipWith(,))                                              --Combine them into a list of list of tuples
    map(n#)<$>                                                                 --Apply the # operator to every tuple in the list with the argument n

आप अंतिम mapको ए <$>, सही से बदल सकते हैं ?
k_g

गोल्फ मैं / PPCG पर हे है - जब तक मैं सवाल नियमों की गलत व्याख्या कर रहा हूँ, मैं आप सभी कि मैं / हे की जरूरत नहीं लगता कि विशेष चूक भाग लेने के लिए संभव के रूप में कई भाषाओं के रूप में अनुमति देने के लिए। उदाहरण के लिए, आपका मुख्य कार्य पूर्णांक तर्क ले सकता है और एक स्ट्रिंग लौटा सकता है।
अर्जन जोहानसन

@k_g हाँ धन्यवाद
जेनेरिक डिस्प्ले नाम

@ --RjanJohansen ने विधिवत :) :)
सामान्य प्रदर्शन नाम


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