पाठ का मंडलियाँ


10

कंसोल में वर्णों का उपयोग करके किसी दिए गए त्रिज्या के वृत्त बनाने का तरीका खोजें। कृपया फ़ॉन्ट नाम और आकार निर्दिष्ट करें। इसके अलावा, कृपया आउटपुट का कम से कम एक उदाहरण प्रदान करें।

उदाहरण के लिए:

इनपुट:

3

आउटपुट:

   ******
 **      **
**        **
*          *
**        **
 **      **
   ******

... खैर, कुछ बेहतर लग रहा है कि "हाथ खींचा" "सर्कल" 3 के त्रिज्या के साथ।


बोनस प्रश्न: एलिप्स। :)


दिलचस्प रूप से पर्याप्त है, मेरा त्रिज्या -3 सर्कल भी बिना कोशिश किए हुए आपके लिए बिल्कुल समान है :)
मेलामोकब


हो सकता है कि फॉन्ट-पार्ट को स्पष्ट किया जा सके। यहां कॉपी किया गया है, सभी फोंट समान होंगे; फ़ॉन्ट-आकार के लिए भी यही है।
उपयोगकर्ता अज्ञात

जवाबों:


5

जावास्क्रिप्ट (360)

function c(r){var f=1.83;var e=2*Math.PI/(r*r*r*r*r);var s=r*2+1;var g=Array(s);for(var i=0;i<s;i++){g[i]=Array(Math.round(s*f))};for(var i=0;i<=2*Math.PI;i+=e) {var x=Math.round(f*r*Math.cos(i)+f*r);var y=Math.round(r*Math.sin(i))+r;g[y][x]=1;}for(var j=0;j<g.length;j++){for(var i=0;i<g[j].length;i++)document.write((g[j][i]==1)?'*':' ');document.writeln()}}

http://jsfiddle.net/YssSb/3/ ( fलाइन-ऊंचाई / फ़ॉन्ट-चौड़ाई अनुपात के लिए एक सुधार कारक है। यदि आप एक वर्ग फ़ॉन्ट सेटिंग का उपयोग करते हैं, अर्थात, लाइन-ऊंचाई = फ़ॉन्ट-आकार सेट करें, तो आप सेट कर सकते हैं। f = 1 और "वर्ग" मंडलियां प्राप्त करें। या fमनमाने ढंग से सेट करें ।

3 के लिए आउटपुट (दिलचस्प रूप से पर्याप्त, गलती से ओपी के समान आकार), 5, 15:

   ******    
 **      **  
**        ** 
*          * 
**        ** 
 **      **  
   ******    

     *********      
   ***       ****   
 ***            **  
**               ** 
*                 * 
*                 * 
*                 * 
**               ** 
 ***            **  
   ***       ****   
     *********      

                    ***************                      
               ******             ******                 
            ****                       *****             
          ***                              ***           
        ***                                  ***         
      ***                                      ***       
     **                                          **      
    **                                            **     
   **                                              **    
  **                                                **   
 **                                                  **  
 *                                                    *  
**                                                    ** 
*                                                      * 
*                                                      * 
*                                                      * 
*                                                      * 
*                                                      * 
**                                                    ** 
 *                                                    *  
 **                                                  **  
  **                                                **   
   **                                              **    
    **                                            **     
     **                                          **      
      ***                                      ***       
        ***                                  ***         
          ***                              ***           
            ****                       *****             
               ******             ******                 
                    ***************                      

आपको जो अच्छे सर्कल मिले हैं। ;)
मतीन उलहाक

6

स्काला में एक ब्रेसेनहैम सर्कल (35)

ब्रेसेनहैम - एल्गोरिथ्म के 2 प्रमुख बिंदु हैं:

  • पाप / कोसिन के बिना काम करता है।
  • आप केवल only *, सर्कल की गणना करते हैं, अन्य बिंदु दर्पण द्वारा पाए जाते हैं।

यह कैसे करना है:

       २ १  
     DCBABCD
   GFE | EFG
  IJ y | ---- जीआई
 जीजे | / जेजी
 एफ | / | एफ
DE | आर / | ईडी
सी | / | सी
B 4 | / | बी ३
ए + ------- ए
B 4 'x B 3'
सीसी
DE ED
 एफएफ
 जीजे जेजी
  आईजे जेआई
   GFE EFG
     DCBABCD
       2'1 ' 
  • हम केवल ज़ेनिट से I में ए से संख्या की गणना करते हैं।
    • बिंदु I 45 ° पर है, जिसे x == y द्वारा परिभाषित किया गया है।
    • ग्राउंड शून्य वह जगह है जहां + है।
    • ज़ीनिट में ए बिंदु (x = 0, y = r), आर = त्रिज्या है।
    • एक बंद सर्कल को खींचने के लिए हम दक्षिणावर्त (++ x) को स्थानांतरित करते हैं, जो दाईं ओर (x + = 1) या अगले बिंदु पर नीचे है, (y- = 1)।
    • सर्कल पर हर बिंदु (x, y) केंद्र से दूर है। पाइथागोरस कहते हैं, r² = xha + y says।
    • यह 2 समाधानों के साथ वर्गमूल और समीकरणों की तरह खुशबू आ रही है, लेकिन सावधान!
    • हम ए पर शुरू करते हैं और जानना चाहते हैं, कि क्या हम नीचे बिंदु के बगल में पेंट करते हैं या दाईं ओर नीचे बिंदु।
  • हम दोनों बिंदुओं (x² + y²) के लिए गणना करते हैं और दोनों r which (जो निश्चित रूप से स्थिर रहता है) के अंतर के लिए निर्माण करते हैं।
    • चूंकि अंतर नकारात्मक हो सकता है, इसलिए हम इसे से एब्स लेते हैं।
    • फिर हम देखते हैं कि कौन सा बिंदु परिणाम (r,) के करीब है, eo ipso छोटा।
    • इसके आधार पर हम सही या निचले पड़ोसी को आकर्षित करते हैं।
  • इतना पाया बिंदु
    • 1 एक्स, वाई मिरर हो जाता है
    • 2 -x, y बाईं ओर
    • विकर्ण पर 3 y, x
    • 4 -y, x वहाँ से बाईं ओर
  • उन सभी बिंदुओं को फिर से दक्षिण में प्रतिबिंबित किया जाता है
    • 1 'x, -y
    • 2 '-x, -y
    • 3 'y, -x
    • 4 '-y, -x किया।

यह कोड गोल्फ नहीं है, लेकिन मौजूदा समाधानों के शीर्ष पर उन सभी नंबरों ने मुझे लगता है कि यह ऐसा है, इसलिए मैंने अपना समाधान गोल्फ में बेकार समय बिताया। इसलिए मैंने शीर्ष पर एक बेकार संख्या भी जोड़ दी। यह 11 बार पाई गोल है।

object BresenhamCircle extends App {
    var count = 0
    val r = args(0).toInt
    // ratio > 1 means expansion in horizontal direction
    val ratio = args(1).toInt
    val field = ((0 to 2 * r).map (i=> (0 to 2 * r * ratio).map (j=> ' ').toArray)).toArray
    def square (x: Int, y: Int): Int = x * x + y * y
    def setPoint (x: Int, y: Int) {
        field (x)(y*ratio) = "Bresenham"(count)
        field (y)(x*ratio) = "Bresenham"(count)
    }
    def points (x: Int, y: Int)
    {
        setPoint (r + x, r + y)
        setPoint (r - x, r + y)
        setPoint (r + x, r - y)
        setPoint (r - x, r - y)
    }
    def bresenwalk () {
        var x = 0;
        var y = r;
        val rxr = r * r
        points (x, y);
        do 
        {
            val (dx, dy) = { if (math.abs (rxr - square ((x+1), y)) < math.abs (rxr - square (x, (y-1))))
                (1, 0)
            else
                (0, -1) 
            }
            count = (count + 1) % "Bresenham".length
            x += dx
            y += dy
            points (x, y)
        }while ((x <= y))
    }
    bresenwalk ()
    println (field.map (_.mkString ("")).mkString ("\n"))
}

फ़ॉन्ट-प्रश्न साइट वेबसर्वर और आपकी ब्राउज़र सेटिंग्स द्वारा तय किया जाता है। अब, मैं देख रहा हूँ कि यह है

'Droid Sans Mono',Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif

फ़ॉन्ट-आकार 12px है। बहुत बेकार की जानकारी, अगर आप मुझसे पूछें, लेकिन कौन करता है?

बोनस: दीर्घवृत्त और नमूना आउटपुट:

मंगलाचरण है

    scala BresenhamCircle SIZE RATIO

उदाहरण के लिए

    scala BresenhamCircle 10 2
              s e r B r e s              
          h n e           e n h          
      e m a                   a m e      
    e r                           r e    
    m                               m    
  h a                               a h  
  n                                   n  
s e                                   e s
e                                       e
r                                       r
B                                       B
r                                       r
e                                       e
s e                                   e s
  n                                   n  
  h a                               a h  
    m                               m    
    e r                           r e    
      e m a                   a m e      
          h n e           e n h          
              s e r B r e s           

A ratio of 2 will print a circular shape for most fonts which happen to be about twice as tall than wide. To compensate for that, we widen by 2. 
# As smaller value than 2 only 1 is available: 

scala BresenhamCircle 6 1
    erBre    
  aes   sea  
 ah       ha 
 e         e 
es         se
r           r
B           B
r           r
es         se
 e         e 
 ah       ha 
  aes   sea  
    erBre    

# widening it has more freedom:

scala BresenhamCircle 12 5
                                             s    e    r    B    r    e    s                                             
                              a    h    n    e                             e    n    h    a                              
                         B    m                                                           m    B                         
                    e    r                                                                     r    e                    
               e    s                                                                               s    e               
          B    r                                                                                         r    B          
     a    m                                                                                                   m    a     
     h                                                                                                             h     
     n                                                                                                             n     
s    e                                                                                                             e    s
e                                                                                                                       e
r                                                                                                                       r
B                                                                                                                       B
r                                                                                                                       r
e                                                                                                                       e
s    e                                                                                                             e    s
     n                                                                                                             n     
     h                                                                                                             h     
     a    m                                                                                                   m    a     
          B    r                                                                                         r    B          
               e    s                                                                               s    e               
                    e    r                                                                     r    e                    
                         B    m                                                           m    B                         
                              a    h    n    e                             e    n    h    a                              
                                             s    e    r    B    r    e    s     

मैंने Int को सरल रखने के लिए अनुपात पैरामीटर को प्रतिबंधित किया, लेकिन इसे आसानी से फ़्लोट करने की अनुमति देने के लिए चौड़ा किया जा सकता है।


आपके चरित्र की गिनती (बिना अनावश्यक नई कहानियों के) वास्तव में 34.557519189487725623089077216075 :) BTW: बहुत अच्छा समाधान है, +1
क्रिस्टियान लुपस्क्यू

4

पायथन (172)

दो अनिवार्य newlines सहित 172 चार्ट। शंकु वक्र (कोई विभाजन या गुणन) के लिए ब्रेसेनहैम एल्गोरिथ्म का उपयोग करता है; यह केवल वर्ग फोंट के लिए हलकों का उत्पादन करता है, लेकिन सीढ़ी प्रभाव से छूट होनी चाहिए ( यानी हमेशा एक ही चौड़ाई है)।

y=input();t=[y*[' ']for x in range(y)];x=0;y-=1;p=3-2*y
while x<=y:t[x][y]=t[y][x]='*';n,y=((x-y+1,y-1),(x,y))[p<0];p+=4*n+6;x+=1
for s in t[::-1]+t:print"".join(s[::-1]+s)

बहुत सुंदर नहीं, लेकिन ठीक है, मैंने सोचा कि मैं इसे एक शॉट दूंगा।

  ****
 *    *
*      *
*      *
*      *
*      *
 *    *
  ****

          ********
       ***        ***
      *              *
     *                *
    *                  *
   *                    *
  *                      *
 *                        *
 *                        *
 *                        *
*                          *
*                          *
*                          *
*                          *
*                          *
*                          *
*                          *
*                          *
 *                        *
 *                        *
 *                        *
  *                      *
   *                    *
    *                  *
     *                *
      *              *
       ***        ***
          ********

संपादित करें : टाइपो, विभाजन के साथ जोड़ा गया ।


3

पर्ल (92)

मैं "बोनस प्रश्न" के लिए गया था और यह चरित्र पहलू अनुपात का उपयोग करने के लिए दीर्घवृत्त आकर्षित करने के लिए बनाया :)

($w)=@ARGV;for$x(-$w..$w){$p.=abs($x*$x+$_*$_-$w*$w)<$w?'*':$"for(-$w..$w);$p.=$/;}print $p;

उदाहरण आउटपुट:

>perl circle.pl 3
  ***
 *   *
*     *
*     *
*     *
 *   *
  ***

>perl circle.pl 5
   *****
  *     *
 *       *
*         *
*         *
*         *
*         *
*         *
 *       *
  *     *
   *****

>perl circle.pl 8
      *****
    **     **
   *         *
  *           *
 *             *
 *             *
*               *
*               *
*               *
*               *
*               *
 *             *
 *             *
  *           *
   *         *
    **     **
      *****

+1 तीसरा स्थान, लेकिन आकृतियाँ अन्य उत्तरों की तरह अच्छी नहीं लगतीं। (फिर भी मैं जो भी कार्यक्रम कर सकता था, उससे बेहतर। :))
मतीन उल्हाक

3

हास्केल ( 112 109)

g n=map(zipWith(?)f.repeat)f where x?y|abs(x^2+y^2-n^2)<n='*'|0<1=' ';f=[-n..n]
main=interact$unlines.g.read

यह जाँच करके काम करता है, चाहे x² + y² - r n <n सभी बिंदुओं के लिए। वे सभी बिंदु जिनके लिए यह सत्य है, तारे हैं, अन्य सभी रिक्त हैं।

उदाहरण:

$ गूंज 3 | runhaskell circ.hs
  ***  
 * * 
* *
* *
* *
 * * 
  ***  
$ गूंज 10 | runhaskell circ.hs
       *******       
     ** **     
    * *    
   * *   
  * *  
 * * 
 * * 
* *
* *
* *
* *
* *
* *
* *
 * * 
 * * 
  * *  
   * *   
    * *    
     ** **     
       *******       

बड़े उदाहरण के लिए यहां देखें: http://www.ideone.com/t042u


3

पायथन, 180 वर्ण

यदि फॉन्ट चौकोर है तो यह कोड सर्किल बनाता है। यदि आप अपने फ़ॉन्ट की ऊँचाई / चौड़ाई अनुपात जानते हैं तो नाममात्र ग्रहणों को संशोधित करना बहुत आसान है।

import math
r=input()
d=2*r+1
c=[' '*d]*d
for a in xrange(9*d):f=math.pi*a/r/9; x=int(r+r*math.sin(f)+.5);y=int(r+r*math.cos(f)+.5);c[y]=c[y][:x]+'*'+c[y][x+1:]
for s in c:print s

उदाहरण:

4:
  *****  
 **   ** 
**     **
*       *
*       *
*       *
**     **
 **   ** 
  *****  

7:
     *****     
   **     **   
  **       **  
 **         ** 
**           **
*             *
*             *
*             *
*             *
*             *
**           **
 **         ** 
  **       **  
   **     **   
     *****     

क्या आप एक नमूना पोस्ट कर सकते हैं?
मतीन उल्हाक

+1 लेकिन दूसरा स्थान ... हालांकि यह करीब था।
मतीन उल्हाक

0

सी, 127 बाइट्स, फ़ॉन्ट नाम: एरियल सुपर बोल्ड

#include<math.h>
main(){int r=10,c=r*2+1,q=c*c,d;for(;q--;)d=hypot(r-q%c,r-q/c),printf("%c%s",d>r-4&&d<=r?42:32,q%c?"":"\n");}

परिणाम:

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