एक वर्णमाला में वर्णमाला रोल


22

एक प्रोग्राम या फ़ंक्शन लिखें, जो दिए जाने पर n, nलंबे समय तक लैटिन वर्णमाला से बने एक सर्पिल पात्रों को प्रिंट करेगाABCDEFGHIJKLMNOPQRSTUVWXYZ । यह सर्पिल केवल आगे की ओर वर्णमाला के माध्यम से चलना चाहिए।

वर्णमाला सर्पिल से संबंधित है , हालांकि सर्पिल आगे और पीछे से वर्णमाला के माध्यम से चलता है, और सर्पिल स्थिर है।

परीक्षण के मामलों

4   AB
    DC

40   UVWXYZ
     TGHIJA
    NSFABKB
    MREDCLC
    LQPONMD
    KJIHGFE

0

10  GHIJ
    FAB
    EDC

1000    UVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
        TGHIJKLMNOPQRSTUVWXYZABCDEFGHIJA
        SFABCDEFGHIJKLMNOPQRSTUVWXYZABKB
        REZCDEFGHIJKLMNOPQRSTUVWXYZABCLC
        QDYBMNOPQRSTUVWXYZABCDEFGHIJCDMD
        PCXALEFGHIJKLMNOPQRSTUVWXYZKDENE
        OBWZKDEFGHIJKLMNOPQRSTUVWXALEFOF
        NAVYJCDMNOPQRSTUVWXYZABCDYBMFGPG
        MZUXIBCLCDEFGHIJKLMNOPQREZCNGHQH
        LYTWHABKBABCDEFGHIJKLMNSFADOHIRI
        KXSVGZAJAZGHIJKLMNOPQROTGBEPIJSJ
        JWRUFYZIZYFUVWXYZABCDSPUHCFQJKTK
        IVQTEXYHYXETQRSTUVWXETQVIDGRKLUL
        HUPSDWXGXWDSPUVWXYZYFURWJEHSLMVM
        GTORCVWFWVCROTGHIJAZGVSXKFITMNWN
        FSNQBUVEVUBQNSFABKBAHWTYLGJUNOXO
        ERMPATUDUTAPMREDCLCBIXUZMHKVOPYP
        DQLOZSTCTSZOLQPONMDCJYVANILWPQZQ
        CPKNYRSBSRYNKJIHGFEDKZWBOJMXQRAR
        BOJMXQRARQXMLKJIHGFELAXCPKNYRSBS
        ANILWPQZQPWVUTSRQPONMBYDQLOZSTCT
        ZMHKVOPYPONMLKJIHGFEDCZERMPATUDU
        YLGJUNOXONMLKJIHGFEDCBAFSNQBUVEV
        XKFITMNWVUTSRQPONMLKJIHGTORCVWFW
        WJEHSLMLKJIHGFEDCBAZYXWVUPSDWXGX
        VIDGRKJIHGFEDCBAZYXWVUTSRQTEXYHY
        UHCFQPONMLKJIHGFEDCBAZYXWVUFYZIZ
        TGBEDCBAZYXWVUTSRQPONMLKJIHGZAJA
        SFAZYXWVUTSRQPONMLKJIHGFEDCBABKB
        REDCBAZYXWVUTSRQPONMLKJIHGFEDCLC
        QPONMLKJIHGFEDCBAZYXWVUTSRQPONMD
                                LKJIHGFE

नियम

  • आपका इनपुट एक गैर-नकारात्मक पूर्णांक होगा 0 <= n <= 1000 , लेकिन आपके कोड को सैद्धांतिक रूप से किसी भी गैर-नकारात्मक पूर्णांक को संभालना चाहिए।
  • यदि आवश्यक हो तो आपका आउटपुट फॉर्मेट किसी भी फॉर्मेट फॉर्मेट में हो सकता है।
  • रोटेशन और प्रतिबिंब बराबर हैं।
  • आपकी वर्णमाला अपरकेस या लोअरकेस हो सकती है।
  • आपके सर्पिल में खाली स्थान आपके द्वारा देखे जाने वाले गैर-अल्फ़ाबेटिक नल के साथ भरे जा सकते हैं।
  • सर्पिल अपने आप में किसी भी आकार में हो सकता है जिसे आप फिट देखते हैं। आयताकार सर्पिल ASCII समाधानों के साथ सबसे अच्छा काम करते हैं, लेकिन परिपत्र सर्पिल के साथ ग्राफिकल समाधान कम हो सकते हैं।
  • अग्रणी और अनुगामी रिक्त स्थान और newlines की अनुमति है।
  • यह कोड गोल्फ है। बाइट्स (या समतुल्य) जीत में सबसे छोटा जवाब।

हमेशा की तरह, अगर कुछ भी अस्पष्ट या गलत है, तो कृपया मुझे टिप्पणियों में बताएं। गुड लक और गुड गोल्फिंग!


सबसे संपादकों कि लंबे समय से एक स्ट्रिंग को प्रिंट अनुमति नहीं दी जाएगी
t-clausen.dk

@ t-clausen.dk मैं अधिकतम 32-बिट पूर्णांक पर हस्ताक्षर किए गए मानक के साथ गया था। यदि आपके पास ऊपरी सीमा के लिए बेहतर सुझाव है, तो मुझे इसे संपादित करने में खुशी होगी।
शर्लक 9

नीस एंड
ट्रिकी

जवाबों:


12

लोगो, 129 87 बाइट्स

ग्राफिकल समाधान, फ़ंक्शन के रूप में लागू किया गया

यह Calormen.com के लोगो दुभाषिया पर बनाया गया था । Sसमारोह एक पैरामीटर के रूप वर्णों की संख्या लेता है और उन्हें एक सर्पिल में खींचता है। समारोह आउटपुट पत्र उन्हें सर्पिल के साथ घूर्णन से रोकने के लिए ईमानदार। । मैंने फैसला किया कि यह अच्छे लग रहे थे (और 42 बाइट्स से बाहर हो गएT पत्र अभिविन्यास को सही करने के लिए ) । मैंने उस रिक्ति को भी कस दिया, जिसने बाइट की गिनती नहीं बदली। यदि आप वास्तव में एक वर्णमाला को रोल करने के लिए थे, तो यह वैसे भी अधिक दिखाई देगा।

अद्यतन संस्करण (पत्र रोल)

TO S:r
PU IF:r[REPEAT:r[LABEL CHAR((REPCOUNT-1)%26)+65
RT 99/SQRT(REPCOUNT)FD 12]]END

मंगलाचरण

निम्नानुसार लागू करें: S पुनरावृत्तियों

नमूना उत्पादन

S 1000

1000 पुनरावृत्तियों के लिए नमूना आउटपुट

पुराना संस्करण (अक्षर हमेशा ईमानदार)

TO T:l:h
RT:h
LABEL CHAR(:l%26)+65
LT:h
END
TO S:r
PU IF:r[REPEAT:r[T REPCOUNT-1 90-HEADING
RT 95/SQRT(REPCOUNT)FD 15]]END

अंतरिक्ष को बचाने के लिए पुराना आउटपुट हटा दिया गया। इसे यहाँ देखें


मत पूछो कि मैं गणित के साथ कैसे आया। मैंने ऑनलाइन फॉर्मूला खोजने की कोशिश की, लेकिन ज्यादातर ने टर्न एंगल को स्थिर रखते हुए और सेगमेंट की लंबाई बढ़ाकर इस समस्या को हल किया, जबकि मैं सेगमेंट की लंबाई को स्थिर रखना और एंगल को बदलना चाहता था। परीक्षण और त्रुटि एक स्थिर सूत्र के लिए नेतृत्व किया गया है। 95इच्छाशक्ति को समायोजित करने से सर्पिल की जकड़न बदल जाएगी, और बदलने 15से अक्षरों के रैखिक रिक्ति को समायोजित किया जाएगा।
19 अप्रैल को गिटारपिकर

9

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

n=>{for(a=[],i=d=k=z=0,p=526,j=1;i<n;){p+=[1,32,-1,-32][d&3];j--||(((z^=1)||k++),j=k,d++);(a[y=p>>5]=(a[y]||Array(32).fill` `))[p&31]=String.fromCharCode(65+(i++%26))}return a.map(r=>r.join``).join`
`}

डेमो

नीचे दिया गया डेमो अधिमानतः पूरे पृष्ठ में चलना चाहिए।


7

रिक्ति पर निर्भर करता है, आर, 46 या 51 बाइट्स

s=1:scan();plot(s*sin(s),s*cos(s),pch=letters)

यहां छवि विवरण दर्ज करें

(प्लॉट का अद्यतन संस्करण: ग्रे सर्पिल डिफ़ॉल्ट रूप से प्लॉट नहीं किया गया है, लेकिन मैंने यह दिखाने के बाद जोड़ा कि पत्र वास्तव में एक सर्पिल पर स्थित हैं।)

सर्पिल निरंतर रिक्ति का नहीं है, इसलिए मुझे आशा है कि यह ठीक है। यदि लगातार रिक्ति की आवश्यकता है, तो s=(1:scan())^.5इसके बजाय शुरू करें , और कुल में 5 बाइट्स जोड़ें। फिर आउटपुट नीचे है (n = 150):

यहां छवि विवरण दर्ज करें


3
आप अपने सर्पिल को कैसे अंतरिक्ष में रखते हैं, यह पूरी तरह आप पर निर्भर है। मेरे पास दो सुझाव हैं, हालांकि: 1) दूसरा सर्पिल रखें। यह आपके जवाब में जोड़ता है, भले ही यह कम गोल्फ हो; 2) क्या आप अपने पहले सर्पिल की छवि में अक्षरों के माध्यम से जाने वाली एक सर्पिल रेखा खींच सकते हैं? बस वर्णमाला सर्पिल स्पष्ट करने के लिए।
शर्लक

6

पायथन 3.5, 180 157 152 147 141 बाइट्स

-6 शर्लक 9 के कारण

r=[[]]
for x in range(int(input())):
 r=len(r[-1])<len(r[0])and r or[*zip(*r[::-1]),[]];r[-1]+=[chr(x%26+65)]
print(*map(''.join,r),sep='\n')

-5 कप के कारण।

R=range
def g(n):
 r=[[]]
 for x in R(n):
  if len(r[-1])==len(r[0]):r=[*zip(*r[::-1]),[]]
  r[-1]+=[chr(x%26+65)]
 print(*map(''.join,r),sep='\n')

संशोधित समाधान, अजगर 3.x:

R=range
def g(n):
 r=[[]]
 for x in R(n):
  if len(r[-1])==len(r[0]):r=list(zip(*r[::-1]))+[[]]
  r[-1]+=[chr(x%26+65)]
 print(*map(''.join,r),sep='\n')

पिछला समाधान:

R=range
def g(n):
 r=[]
 for x,f in zip(R(n),(j<1for i in R(n)for j in R(i//2+1))):
  if f:r=list(zip(*r[::-1]))+[[]]
  r[-1].append(chr(x%26+65))
 print(*map(''.join,r),sep='\n')

व्याख्या

rसर्पिल धारण करने वाली सूचियों की एक सूची है। मूल विचार यह है कि नए अक्षर सर्पिल की निचली पंक्ति में जोड़े जाते हैं ( r[-1].append(chr(x%26+65)))। जब नीचे की पंक्ति को भर दिया जाता है, तो सर्पिल को 90 बार घुमाया जाता है और एक नई खाली पंक्ति को नीचे जोड़ा जाता है (r = list(zip(*r[::-1]))+[[]] ) में ।

सर्पिल को घुमाने के लिए चाल का पता लगाना है। पहले समाधान में, जेनरेटर (j<1for i in R(n)for j in R(i//2+1))ट्रू / फाल्स वैल्यू का एक क्रम बनाता है जो बताता है कि सर्पिल को कब घुमाना है। संशोधित समाधान में, मैंने बदल दिया है जिस तरह rसे इनिशियलाइज़ किया गया है। अब जब नीचे पंक्ति की लंबाई शीर्ष पंक्ति की लंबाई के बराबर होती है, तो सर्पिल को घुमाने की आवश्यकता होती है।


आप 5 बाइट्स को बचाने के if len(r[-1])==len(r[0]):r=list(zip(*r[::-1]))+[[]]साथ बदल सकते हैं if len(r[-1])==len(r[0]):r=[*zip(*r[::-1]),[]]
आर। कप

चूंकि आप केवल rangeएक बार उपयोग करते हैं , आप Rबाइट्स को बचाने के लिए निकाल सकते हैं । आप अपने जवाब को पूर्ण प्रोग्राम में परिवर्तित करके बाइट्स को भी बचा सकते हैं, हालांकि इसके उपयोग को संरक्षित करने के लिए [*zip(*r[::-1]),[]], आपको उपयोग करने की आवश्यकता होगी range(int(input()))
शर्लक

इसके अलावा, for x in range(int(input())):r=len(r[-1])<len(r[0])and r or[*zip(*r[::-1]),[]];r[-1]+=[chr(x%26+65)]जब आप जाँच रहे हैं कि अंतिम पंक्ति पहली पंक्ति के बराबर या अधिक है।
शर्लक

दो बातें: 1) आप अर्धवृत्त के साथ बयानों को अलग करके लूप के लिए एक पंक्ति लंबी कर सकते हैं; और 2) आपने nइस संस्करण में परिभाषित नहीं किया है। या तो आपको int(input())किसी फ़ंक्शन में बैक अप का उपयोग करने या लपेटने की आवश्यकता है ।
शर्लक

forलूप को संघनित करने से 2 बाइट्स :for x in range(int(input())):r=len(r[-1])<len(r[0])and r or[*zip(*r[::-1]),[]];r[-1]+=[chr(x%26+65)]
शर्लक

5

MATL , 21 18 बाइट्स

X^Xk1YL1Y2y)wG>~*c

इनपुट 0त्रुटि के साथ बाहर निकलता है (जिसे डिफ़ॉल्ट रूप से अनुमति दी जाती है )।

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

व्याख्या

X^Xk   % Input n implicitly. Take square root and round up
1YL    % Square matrix of that size containing a spiral of numbers
1Y2    % Predefined literal: string "AB···YZ"
y      % Duplicate the spiral matrix onto the top
)      % Apply as an index inth the string. Gives 2D array of chars
w      % Swap: move copy of the spiral matrix to top
G>~    % Set entries that exceed the input to 0, and the rest to 1 
*      % Multiply. This makes unwanted entries equal to 0
c      % Convert to char. 0 is shown as a space. Display implicitly

5

पायथन 2, 84 82 बाइट्स

मैं फिर से कछुए का उपयोग कर रहा हूं। यह बहुत मजेदार है! : डी

from turtle import*
up()
for i in range(input()):write(chr(i%26+65));rt(9);fd(9+i)

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

दुर्भाग्य से, Trinket.io में एक बहुत छोटा कैनवास है। मैंने इस छवि को स्क्रीन कैप्चर करने के उद्देश्य से कछुए के शुरुआती बिंदु 9+iको बदल दिया 9+i/9और समायोजित किया, ताकि अधिक आउटपुट फिट हो जाए:

उत्पादन


: यदि आप आयात से एक अंतरिक्ष को दूर से एक बाइट from turtle import*से परिवर्तित करने से और एक अन्य whileकोfor i in range(input())
Sherlock9

4

पायथ, 32 बाइट्स

JS@Q2ju+.t_G)Hc<*GQQ.u+NY.iJJZ]Y

एक प्रोग्राम जो एक आयताकार निचले-मामले ASCII सर्पिल को प्रिंट करता है। इनपुट के आधार पर, व्हाट्सएप लीडिंग या ट्रेलिंग की एक पंक्ति या कॉलम मौजूद हो सकता है।

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

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

JS@Q2ju+.t_G)Hc<*GQQ.u+NY.iJJZ]Y  Program. Input: Q
  @Q2                             Yield sqrt(Q)
JS                                Unary range, J=[1, 2, 3, ..., floor(sqrt(q))]
                         .iJJ     Interleave J with itself, yielding [1, 1, 2, 2, 3, 3, ...
                                  floor(sqrt(Q)), floor(sqrt(Q))]
                    .u+NY    Z    Cumulatively reduce by addition with base case 0,
                                  yielding [0, 1, 2, 4, 6, 9, 12, 16, 20...]
                *GQ               Repeat the lower-case alphabet Q times
               <   Q              Truncate to legth Q
              c                   Split the above at the indices in the above list
      u                       ]Y  Reduce the above, with base case [[]]:
          _G                       Reverse
        .t  )                      Transpose
       +     H                     Add the next arm of the spiral
     j                            Join on newlines and implicitly print

3

TSQL, 386 362 358 306 बाइट्स

कृपया ध्यान दें कि TSQL में पाठ को घुमाने का कोई तरीका नहीं है। यह स्क्रिप्ट ए से शुरू हो रही है और गणना कर रही है कि अगला अक्षर किस दिशा में रखा जाना चाहिए। (दाएँ, नीचे, बाएँ, बाएँ, बाएँ, ऊपर, दाएँ ...)

स्क्रिप्ट में अधिकतम 7744 अक्षर हो सकते हैं।

golfed:

DECLARE @z INT = 7744

DECLARE @ INT=2+SQRT(@z-1)DECLARE @o varchar(max)=REPLICATE(SPACE(@-1)+char(10),@-1);WITH C as(SELECT 0i,@/2a,@/2b UNION ALL SELECT i+1,a+z/2,b+z%2FROM(SELECT*,IIF(a>@/2*2-b,IIF(a<b,2,-1),IIF(a>b,-2,1))z FROM C)t WHERE i<@z-1)SELECT @o=STUFF(@o,@*a-@+b,1,char(i%26+65))FROM c OPTION(maxrecursion 0)PRINT @o

Ungolfed:

DECLARE @z INT = 7744

DECLARE @ INT=2+SQRT(@z-1)
DECLARE @o varchar(max)=REPLICATE(SPACE(@-1)+char(10),@-1)

;WITH C as
(
  SELECT
    0i,@/2a,@/2b
  UNION ALL
  SELECT
    i+1,a+z/2,b+z%2
    FROM 
      (SELECT*,
         IIF(a>@/2*2-b,
           IIF(a<b,2,-1),
             IIF(a>b,-2,1))z FROM C)t
  WHERE
    i<@z-1
)
SELECT 
  @o=STUFF(@o,@*a-@+b,1,char(i%26+65))
FROM c  
OPTION(maxrecursion 0)

PRINT @o

बेला


2

पायथन 2, 243 बाइट्स

r=range(input())
a=[1j**int((4*i+1)**.5)for i in r]
b=[map(int,(-sum(a[:i]).real,sum(a[:i]).imag))for i in r]
c,d=zip(*b)
for i in range(min(c),max(c)+1):print''.join([i,j]in b and chr(b.index([i,j])%26+65)or' 'for j in range(min(d),max(d)+1))

Ideone यह!


0

PHP , 219 बाइट्स

for($q=ceil(sqrt($a=$argn))**2,$d=1,$x=$y=$w=0;$i<$q;$i++,${yx[$w%2]}+=[-1,1][$d&1],$i%$d?:$d+=$w++&1)$e[$c[]=$x-!($a&1)][$l[]=$y]=$i<$a?chr(65+$i%26):" ";for($k=min($c);$e[$k];print join($e[+$k++])."\n")ksort($e[+$k]);

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

PHP, 260 बाइट्स

पुराना संस्करण

for($y=$x=$d=$i=0;$i<$m=ceil(sqrt($n=$argv[1]))**2;$i++){$a[$y][$x]=$i<$n?chr($i%26+65):" ";$d=$y==$x&$y<1?0:(1-$y==$x&$x>0?1:($y==$x&$y>0?2:($y==-$x&$x<0?3:$d)));$d>2?$y--:($d>1?$x--:($d>0?$y++:$x++));}ksort($a);foreach($a as$r){ksort($r);echo join($r)."\n";}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.