আমাকে (অদ্ভুত) ইউনিট সার্কেল আঁকুন!


20

ভূমিকা

আপনি আপনার সাধারণ ইউনিট চেনাশোনাটি জানেন এবং পছন্দ করতে পারেন। তবে গণিতবিদরা পাগল এবং সুতরাং তারা সন্তুষ্ট যে কোনও বিন্দুতে ধারণাটিকে বিমূর্ত করেছেন x*x+y*y=1। কারণ cryptographers 1 এছাড়াও অদ্ভুত, তারা ভালবাসেন সসীম ক্ষেত্র এবং মাঝে মাঝে সসীম রিং (এটা হচ্ছে এরা কত পছন্দ যদিও আছে নয়), তাই এই একত্রিত করা যাক!

চ্যালেঞ্জ

ইনপুট

আপনার প্রিয় এনকোডিংয়ের ক্ষেত্রে একের চেয়ে বড় ধনাত্মক পূর্ণসংখ্যা। আসুন এই নাম্বারে কল করুন।

আউটপুট

আপনি ইউনিট বৃত্তের "চিত্র" (যা এন টাইম এন অক্ষর নিয়ে গঠিত) ইনপুট পূর্ণসংখ্যাকে "এক্স" (আপার কেস ল্যাটিন এক্স) এবং "" (একটি স্পেস) ব্যবহার করে ASCII-আর্ট হিসাবে ইনপুট পূর্ণসংখ্যাকে আউটপুট দেবেন। ট্রেলিং স্পেস এবং নিউলাইনগুলি অনুমোদিত।

আরো বিস্তারিত

নীচে-বাম থেকে উপরে-ডানদিকে আপনাকে একটি সমন্বিত সিস্টেম স্প্যান করতে হবে। যখনই কোনও বিন্দু বৃত্তের সমীকরণটি পূরণ করে, তখন একটি অবস্থানে একটি এক্স রাখুন, অন্যথায় একটি স্থান দিন।

একটি বিন্দু জন্য শর্ত বৃত্ত সীমান্তের অংশ হিসেবে বিবেচনা করা হয়:
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 পদ্ধতি অনুমোদিত এবং সমস্ত স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ করা হয়েছে।

উদাহরণ

ইনপুট: 2

X 
 X

ইনপুট: 3

X  
X  
 XX

ইনপুট: 5

X    


X    
 X  X

ইনপুট: 7

X      
  X  X 


  X  X 
X      
 X    X

ইনপুট: 11

X          

     XX    

   X    X  
   X    X  

     XX    

X          
 X        X

ইনপুট: 42

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 এর একটি উদাহরণ রয়েছে
আর। কাপ

"স্ট্যান্ডার্ড আই / ও" দ্বারা আপনি কি ডিফল্ট আই / ও পদ্ধতিগুলি বোঝাতে চান, বা আপনি কি সত্যিকারের STDIN / STDOUT বলতে চান? আমি প্রাক্তনটিকে ধরে নিচ্ছি, তবে আমি মনে করি নীচের কেউ এটি পরবর্তীকালে ব্যাখ্যা করেছেন।
আরজান জোহানসেন

@ আরজান জোহেনসেন আসলেই প্রাক্তন।
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 48 বাইট

সম্পাদনা করুন: গ্রেট মার্টিন এবং মার্টিন ইন্ডারকে 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এবং এর থেকে ভাল NormGrid@Array[If[Mod[Norm@{##}^2,x]==1,X]&,{x=#,#},0]&
মার্টিন এন্ডার

2
তবুও এটিকে ওভারটিনিং করা ... #^2+#2^2সংক্ষিপ্ততম।
মার্টিন ইন্ডার

@ গ্রেগমার্টিন সুতরাং যদি প্রথম তর্কটি যদি Ifনা হয় Trueবা হয় তবে Falseআপনার চতুর্থ যুক্তি প্রয়োজন হয় বা এটি অবমূল্যায়িত থেকে যায় তবে If[False,_]ফিরে আসে Null। রহস্যময়।
নেজেনিসিস

@ মার্টিনএন্ডার আমি প্রথমে চেষ্টা করেছিলাম Arrayকিন্তু তর্কটিকে কোনও ভেরিয়েবলের সাথে সেট করার কথা ভাবি নি।
নেজেনিসিস

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

জাভাস্ক্রিপ্ট (ES6), 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>

ওয়াই-অক্ষটি অপের বিপরীত।




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

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

:qU&+G\1=88*c

উত্সটি বাম দিকে আছে। সুতরাং চ্যালেঞ্জের উদাহরণগুলির সাথে তুলনা করে আউটপুট উল্টে উল্টে যায়।

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

ব্যাখ্যা

:      % 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 টি বাইট সংরক্ষণ করা হয়েছে: সি = '' এ বাদ দেওয়া চলক সি যদি (i 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

জিএনইউ এপিএল , ৪১ টি চর, ৫৯ বাইট

একটি পূর্ণসংখ্যা পড়ে এবং বৃত্তটি প্রদর্শন করে।

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সাথে একটি দিয়ে <$>ঠিক করতে পারেন , তাই না?
কে_জি

যতক্ষণ না আমি প্রশ্নের বিধিগুলি ভুল ব্যাখ্যা করি, আমি মনে করি না যে আপনার / আই / ও - পিপিসিজিতে গল্ফিংয়ের যতটা সম্ভব ভাষাগুলিকে অংশগ্রহণের অনুমতি দেওয়ার জন্য বিশেষ খেলাপি রয়েছে special উদাহরণস্বরূপ, আপনার প্রধান ফাংশনটি একটি পূর্ণসংখ্যার যুক্তি নিতে পারে এবং একটি স্ট্রিং ফিরে আসতে পারে।
janrjan জোহানসেন

@ কে_জি হ্যাঁ আপনাকে ধন্যবাদ
জেনেরিক প্রদর্শনের নাম

@ JanrjanJohansen যথাযথভাবে উল্লেখ করেছেন :)
জেনেরিক প্রদর্শন নাম


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