Sawtooth वर्णमाला ड्रा


42

एक साधारण आज। सबसे छोटा कार्यक्रम लिखें जो ऊंचाई के लिए एक सकारात्मक पूर्णांक दिया गया "सॉर्टोथ वर्णमाला" खींचता है। जब आप उस अक्षर से आते हैं तो आपको अपनी प्रोग्रामिंग भाषा का नाम लिखना होगा।

उदाहरण के लिए, यदि आपकी भाषा पायथन है और इनपुट 1आउटपुट है:

ABCDEFGHIJKLMNOPythonQRSTUVWXYZ

यदि इनपुट 2आउटपुट हो तो:

 B D F H J L N Python R T V X Z
A C E G I K M O      Q S U W Y

यदि इनपुट 4आउटपुट हो तो:

   D     J     Python     V
  C E   I K   O      Q   U W
 B   F H   L N        R T   X Z
A     G     M          S     Y

टिप्पणियाँ

  • A हमेशा नीचे बाईं ओर शुरू होता है।
  • इनपुट स्टडिन या फ़ंक्शन कॉल या समान के माध्यम से हो सकता है। स्टडआउट के लिए आउटपुट।
  • ऊपर दिए गए इनपुट 26को काम करने की आवश्यकता नहीं है।
  • कोई अनुगामी स्थान नहीं।

9
क्या एक अक्षर के नामों वाली प्रोग्रामिंग भाषाओं की अनुमति है? (C, J, K, आदि)
isaacg

@ आइसाकग श्योर। मुझे लगता है कि यह उन में आसान हो सकता है।
केल्विन के शौक

1
क्या इनपुट को केवल एक चर में संग्रहीत किए जाने की उम्मीद की जा सकती है?
मार्टिन एंडर

@ मार्टिनबटनर हां, यह ठीक है।
केल्विन के शौक

13
Btw, यह एक sawtooth लहर नहीं है, यह एक त्रिकोण लहर है: P
qwr

जवाबों:


14

यदि n ऊंचाई रखता है:

C + एस्केप कोड: 81

x;main(y){for(y=n--;x<26;x++)printf("\033[%d;%dH%c",n?x/n&1?y++:y--:y,x+1,x+65);}

C: 110

x;char a[702]={[0 ...701]=32};main(y){for(y=--n;x<26;a[x*27-1]=10)a[27*(n?x/n&1?y++:y--:y)+x]=x+++65;puts(a);}

5
मैं हार मानता हूं। पृथ्वी पर क्या। : D
मार्टिन एंडर

क्या मैं संकलन निर्देश मांग सकता हूं? ccत्रुटि देता है "<bebe.c: 1: 17: error: 'n' अघोषित (इस समारोह में पहला प्रयोग)"
मैनटवर्क

2
वैसे यह देखने में जितना बुरा है उससे कहीं ज्यादा खराब है। सबसे पहले दूसरे में अनुगामी रिक्त स्थान होता है, दूसरी बात यह nहै कि वे दोनों इस पर निर्भर करते हैं कि आपकी पसंद के एक नंबर के लिए एक वैश्विक चर सेट है (जैसा कि मार्टिन ने पहले पूछा है)।
बेबे

ओह, इसलिए मुझे किसी भी तरह से एन प्रदान करना होगा। जबरदस्त हंसी। फिर भी प्रभावित हुआ।
मैनेटवर्क

19

सी, 134

n,m,c,p;
main(r){
for(scanf("%d",&n),m=--n?n*2:1;n+r--;puts(""))
for(c=-1,p=1;c++<25;)
p+=(c-n-r)%m*((c-n+r)%m)?1:1-printf("%*c",p,c+65);
}

कुछ चेतावनियों के साथ जीसीसी पर संकलन। वर्ण गणना में न्यूलाइन शामिल नहीं हैं।

यदि इनपुट पहले से स्टोर है तो 122 अक्षरn

सुधार के लिए user2992539 , tolos और edc65 के लिए धन्यवाद ।


3
आप उपयोग कर सकते हैं puts("")के बजाय printf("\n")
सोमनीम जूल

2
के p-=(c-n+r)%m*((c-n-r)%m)?0:printf("%*c",p,c+65);बजाय 4 पात्रों के साथ सहेजेंif((c-...

1
पिछली (हटाई गई) टिप्पणी के लिए क्षमा करें। मैं गलत था। संकेतों के साथ खेलना और इस तथ्य का दुरुपयोग करना कि मुख्य का पहला तर्क 1 है यदि कोई पैरामीटर नहीं हैं: 134n,m,c,p; main(r){ for(scanf("%d",&n),m=--n?n*2:1;n+r--;puts("")) for(c=-1,p=1;c++<25;) p+=(c-n-r)%m*((c-n+r)%m)?1:1-printf("%*c",p,c+65); }
edc65

13

TI-BASIC - 148 बाइट्स (कच्चा पाठ), 186 बाइट्स (ग्राफिक)

ओपी के जवाब में, अद्भुत TI-83 (और नया) 16 x 8 के आकार के साथ आता है (बस मानक बड़े पाठ का उपयोग करके) या 94 x 62 पिक्सेल के आकार के साथ (जो छोटे पाठ के साथ लगभग 10 लाइनों के लायक है) )।

अब, यह थोड़ी समस्या है (जिस पर मैं स्पष्टीकरण चाहूंगा)। दुभाषिया द्वारा आकार की गड़बड़ी को "अनदेखा" नहीं किया जा सकता है; दूसरे शब्दों में, यदि हम आरा की ऊंचाई 20 पर निर्धारित करने की कोशिश करते हैं, तो यह कोड के पूर्ण निष्पादन को रोकने में त्रुटि देगा। मैं कोड लिख सकता हूं , जो एक अनंत वातावरण में, सही आउटपुट का उत्पादन करेगा, सिवाय इसके कि यह मशीन पर नहीं चलेगा।

इसके साथ कहा जा रहा है, मैं आपको कार्यक्रमों के (चल रहे) संस्करण प्रस्तुत करता हूं। वे सभी Nचलने से पहले लाइनों में वांछित ऊंचाई पर सेट किए जा रहे चर पर निर्भर करते हैं :

  • कच्चा पाठ दृष्टिकोण

    :ClrHome
    :"ABCDEFGHIJKLMNOPQRSTI-BASICUVWXYZ"→Str1
    :8→R
    :For(C,1,16
    :If N=1
    :Then
    :0→F
    :Else
    :If R<2 or 10-R>N
    :1→F
    :If R>7
    :-1→F
    :End
    :If C≠20
    :Then
    :Output(R,C,sub(Str1,C,1
    :Else
    :Output(R,C,sub(Str1,C,8
    :C+7→C
    :End
    :R+F→R
    :End
    

    टर्मिनल की परवाह किए बिना इस काम For(C,1,16को करने के For(C,1,33लिए, ऊपरी बाध्य चेकिंग ( R<2 or) को बदलें और निकालें । यहाँ उत्पादन के साथ है 5→N:

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

  • ग्राफिक दृष्टिकोण (यह AxisOffस्पष्टता के लिए भी आवश्यक हो सकता है )

    :ClrDraw
    :N*6→N
    :"ABCDEFGHIJKLMNOPQRSTI-BASICUVWXYZ"→Str1
    :57→R
    :For(C,1,56
    :If N=6
    :Then
    :0→F
    :Else
    :If R<7 or 64-R>N
    :6→F
    :If R>51
    :-6→F
    :End
    :If C≠20
    :Then
    :If C>50
    :Then
    :Text(R,C,sub(Str1,C-23,1
    :Else
    :Text(R,C,sub(Str1,C,1
    :End
    :Else
    :Text(R,C,sub(Str1,C,8
    :C+30→C
    :End
    :R+F→R
    :End
    

    यह एक काम करता है ठीक है, दो मामूली quirks के साथ। ऊंचाई अभी भी एक समस्या है, हालांकि चौड़ाई नहीं है। हालाँकि, मैंने पत्रों को स्थान नहीं दिया, इसलिए कुछ मामलों में (जब पत्र में आरी से वृद्धि या गिरावट शुरू होती है), पत्रों को उनके उत्तराधिकारियों द्वारा काट दिया जा सकता है। टर्मिनल की परवाह किए बिना इसे काम करने के लिए, ऊपरी बाध्य चेक ( R<7 or) हटा दें । फिर ग्राफ का अनुसरण करता है:

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


अब मुझे इसे अपने रेखांकन कैलकुलेटर
Liam McInroy

त्वरित टिप्पणी: इसके बजाय 0→Fआप कर सकते हैं Delvar Fजो 1 बाइट को एक बार टोकन से बचाता है। इसके अलावा, मुझे यकीन है कि आप समन्वयन के लिए इनलाइन बूलियन परीक्षण की स्थिति के लिए आउटपुट / टेक्स्ट को अंत C+7→Cमें लिख सकते हैं , और इसके लिए , इसे थोड़ी देर में लिखें (यदि तब / और नहीं / अंत)
Adriweb

11

शुद्ध बैश (कोई कोरयूटिल्स), 181 बाइट्स

m=$1
for l in A Bash {C..Z};{
((m))||s=++
((m>$1-2))&&s=--
for((m=$1==1?1:m,m$s,i=0;i<$1;i++));{
((i-m))&&a[i]+=${l//?/ }||a[i]+=$l
}
}
shopt -s extglob
printf %s\\n "${a[@]%%+( )}"

आउटपुट:

पाइप्ड को cat -Eसिर्फ साबित करने के लिए कोई अनुगामी नई-पंक्तियों देखते हैं।

$ ./sawtooth.sh 1 | cat -E
ABashCDEFGHIJKLMNOPQRSTUVWXYZ$
$ ./sawtooth.sh 5 | cat -E
       E       M       U$
      D F     L N     T V$
     C   G   K   O   S   W$
 Bash     H J     P R     X Z$
A          I       Q       Y$
$ 

10

जावास्क्रिप्ट (ईएस 6) 231 244

बग फिक्स संपादित करें , कुछ पुन: व्यवस्थित करने और ऊंचाई के प्रबंधन का एक अलग तरीका == 1
इसके अलावा, एक फ़ंक्शन में बदल गया क्योंकि यह ओपी द्वारा अनुमति है, इसलिए इनपुट के लिए कोई संकेत नहीं ()

सामान्य एल्गोरिथ्म में कोई बदलाव नहीं जो शायद इस चुनौती के लिए सबसे अच्छा नहीं है

F=h=>{for(p=s=[i=z=b=t=''];++p<h;)i=1,z=b=' ',s[p]=t;for(p=--h,k=64;++k<91;)s[p]+=t+String.fromCharCode(k),k-74||(s=s.map((x,q)=>x+(p-q?'         ':'avascript'))),p-=i,p<0|p>h?(i=-i,p-=i+i,t=z,b=t+t):t+=b;console.log(s.join('\n'))}

व्याख्या की

F=h=>{
  // row in s for output must be initialized to ''. In the same step I make other initializations
  for(p=s=[i=z=b=t='']; ++p < h;) // initialize for height 1, all increment and spacing can be null
    i=1,z=b=' ',s[p]=t; // the for body is entered only if height > 1, initializing spacing and increment to the right values
  for(p=--h,k=64;++k<91;)
    s[p]+=t+String.fromCharCode(k),
    k-74||(s=s.map((x,q)=>x+(p-q?'         ':'avascript'))), // if 'J' modify each line of output adding the name or spacing
    p-=i,p<0|p>h?(i=-i,p-=i+i,t=z,b=t+t):t+=b; // index bouncing
  console.log(s.join('\n'))
}

उदाहरण

1

ABCDEFGHIJavascriptKLMNOPQRSTUVWXYZ

3 ऊपर जा रहा है

  C   G            K   O   S   W
 B D F H Javascript L N P R T V X Z
A   E   I            M   Q   U   Y

शीर्ष पर 4

   D     Javascript     P     V
  C E   I          K   O Q   U W
 B   F H            L N   R T   X Z
A     G              M     S     Y

7 नीचे जा रहा है

      G                    S
     F H                  R T
    E   I                Q   U
   D     Javascript     P     V
  C                K   O       W
 B                  L N         X Z
A                    M           Y

9

जावा (393)

हमेशा गोल्फ के लिए एक महान भाषा के रूप में:

public class P{public static void main(String[]a){int h=Integer.valueOf(a[0]);String x="ABCDEFGHIJKLMNOPQRSTUVWXYZ";String[]l=new String[h];Arrays.fill(l,"");int i=h-1;int d=-1;for(char c:x.toCharArray()){for(int n=0;n<l.length;n++){String k=(n==i)?(c=='J')?"Java":c+"":(c=='J')?"    ":" ";l[n]+=k;}if(i==0&&d==-1)d=1;if(i==h-1&&d==1)d=-1;if(h>1)i+=d;}for(String s:l){System.out.println(s);}}}

2
दुर्भाग्य से, आप के लिए आयात भूल गए java.util.Arrays;। :-(
जस्टिन

लेकिन आप अपने कोड को लागू कर सकते हैं: लूप हेडर को समाप्त करें String x="ABC...Z";और प्रतिस्थापित करें , मुझे जावा =) में for(char c...for (char c=65;++c<91;){
आकर्षण पसंद है

इसके अलावा, आप के c=='J'साथ बदल सकते हैं c==74, कुल में दो और बाइट्स बचाता है।
त्रुटी

2
मुझे यकीन है कि अगर आप बयानों के लिए कुछ XORs का उपयोग करते हैं तो आप और भी बेहतर कर सकते हैं, लेकिन यहाँ मेरा बेहतर संस्करण है: (325) public class p{public static void main(String[]a){int h=Integer.valueOf(a[0]),i=h-1,d=-1,n;String[]l=new String[h];for(n=0;n<h;l[n++]="");for(char c=64;++c<91;){for(n=0;n<h;n++){String k=n==i?c==74?"Java":c+"":c==74?" ":" ";l[n]+=k;}if(i==0&d==-1)d=1;if(i==h-1&d==1)d=-1;i+=h>1?d:0;}for(String s:l)System.out.println(s);}}@Quincunx: import.util.Arrays के लिए और अधिक आवश्यकता नहीं है; =)
दोष जूल

9

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

o="#{' '*29}
"*h
26.times{|i|o[(h-i%(h<2?1:2*h-2)-1).abs*30+i+(i>17?3:0)]=(i+65).chr}
puts o.gsub('R   ','Ruby')

इनपुट में संग्रहीत किए जाने की अपेक्षा करता है h

अगर यह स्पष्टीकरण चाहिए तो मुझे बताएं।


बहुत मामूली लेकिन आप बाद में जगह निकाल सकते हैं %
केल्विन के

@ केल्विन हॉबीज़ हा, मुझे अपने सिंटैक्स पर प्रकाश डालने का भरोसा नहीं था: डी। बाद में ठीक कर देंगे।
मार्टिन एंडर

आप के puts o...साथ बदल सकते हैं $><<o...
जॉर्डन

6

जे: 75 बाइट्स

NB. without IO |:26([:u:65+i.@[)`(($(,|.@}.@}:)@i.)<"1@,.i.@[)`(' '$~,~)}5
2(1!:2)~|.26([:u:65+i.@[)`(($(,|.@}.@}:)@i.)<"1@,.i.@[)`(' '$~,~)}".1!:1[1

अद्भुत संशोधन संयोजन का उपयोग करना । हमेशा की तरह IO बदसूरत और भद्दा है, वहाँ विवरण में नहीं जा रहा है। मुख्य समाधान 3 gerunds (संज्ञा-ified क्रिया (उर्फ फ़ंक्शन) का एक प्रकार) लेता है:।

  • a) वर्णमाला उत्पन्न करना
  • b) सूचकांक उत्पन्न करना
  • c) संशोधन करने के लिए मैट्रिक्स उत्पन्न करना

    x (a bc}) y

क) अस्की टेबल में एक सुंदर तुच्छ खोज है

ग) और भी अधिक तुच्छ है

बी) दिलचस्प है। मनोबल यह है कि क्षैतिज सूचक 0 से शुरू होकर y-1 तक जा रहे हैं और 26 बार दोहराते हुए वापस जा रहे हैं। उदाहरण के लिए। y == 4 के लिए:

0 1 2 3 2 1 0 1 2 3 2 1 ...

इसे लागू करना बी के लिए देता है):

($(,|.@}.@}:)@i.) <"1@,. i.@[)       NB. is equivalent too
(tine0 tine1 tine2)                  NB. a fork with tines defined as
tine0 =: 
  hook0 =: hook0_0 hook0_1           NB. a dyadic hook: x (g h) y -: x g h y
     hook0_0 =: $                    NB. reshape
     hook0_1 =: (hook1_0 hook1_1)@i. NB. do hook1 after making 0-y
       hook1_0=: ,                   NB. append to self
       hook1_1=: |.@}.@}:            NB. rotated version of y after beheading and curtailing
tine2 =: i.@[                  NB. generate 0-x
tine1 =: <"1@,.                NB. glue together coordinates.

और ओह हाँ, आसान तथ्य: जे का नाम है ... "जे"।


क्या यह संशोधन का उपयोग करने के लिए लायक है? मेरे लिए यह कहना आसान लगता है 3 :'|:(26$1+(i.1=y),}:|i:<:y)|.@{."+u:65+i.26'कि इस घोल में सबसे बदसूरत हिस्सा केवल विशेष केस हाइट 1 का 8 अक्षर है, लेकिन इसे शायद थोड़ा छोटा किया जा सकता है।
b_jonas

सलाह के लिये धन्यवाद! तुम्हारा वास्तव में बहुत कम है, और संशोधन शायद ओवरकिल है। चूंकि यह बहुत अलग है, शायद आप इसे स्वयं एक समाधान के रूप में पोस्ट करना चाहेंगे?
jpjacobs

युक्ति कहती है, "कोई अनुगामी स्थान नहीं" और मेरा समाधान अनुगामी स्थानों को प्रिंट करता है।
b_jonas

5

आर (204)

f=function(x) {
  m=matrix(" ",x,26)
  i=x
  d=ifelse(x==1,0,-1)
  for (j in 1:26) {
    m[i,j]=LETTERS[j]
    if (!((i+d) %in% 1:x)) d=-d
    i=i+d
  }
  for (i in 1:x) cat(m[i,],"\n",sep="")
}

नतीजा

> f(1)
ABCDEFGHIJKLMNOPQRSTUVWXYZ
> f(2)
 B D F H J L N P R T V X Z
A C E G I K M O Q S U W Y 
> f(3)
  C   G   K   O   S   W   
 B D F H J L N P R T V X Z
A   E   I   M   Q   U   Y 
> f(7)
      G           S       
     F H         R T      
    E   I       Q   U     
   D     J     P     V    
  C       K   O       W   
 B         L N         X Z
A           M           Y 

मैंने देखा तुमने वहॉं क्या किया है! बहुत होशियार ...
क्राल्टन

1
+1 नीट! आप अपने forबयानों के चारों ओर रिक्त स्थान से छुटकारा पा सकते हैं ( for(i in 1:x)cat(...उदाहरण के लिए) या आसपास %in%
प्लेनैपस जूल

3

जावास्क्रिप्ट - २४as २२४ २३५

z=~~prompt(),y="ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");y[9]="Javascript";for(w=[],v=0;v<z;v++)w[v]="\n";v--;for(i=0;i<26;i++){for(j=0;j<z;j++)w[j]+=j-v?i-9?" ":"          ":y[i];~~(i/(z-1))%2?v++:v--;}if(z==1)w=y;console.log(w.join(""))

यहाँ jsfiddle की एक कड़ी है, जहाँ आप इसका परीक्षण कर सकते हैं।
संपादित करें: एक मोनोस्पेस किए गए फ़ॉन्ट के लिए एक कंसोल लॉग बनाया और इनपुट == 1 होने पर कॉमा को हटा दिया।


सुझाव: 1: parseInt और Math.floor दोनों को पूर्णांक कोर्किंग ऑपरेशन जैसे |0या के साथ बदला जा सकता है ~~। 2: यह सीधे बिना, बिना w सरणी बनाने के लिए छोटा है splitfor(w=[],v=0;v<z;v++)w[v]="\n";
edc65

... और कोई आउटपुट स्टेटमेंट नहीं है (कंसोल.लॉग या जो भी आप अपने
फिडेल

@ edc65 सुझावों के लिए धन्यवाद। आप सही थे कि मैं यहाँ आउटपुट भूल गया, इसलिए मैंने एक अलर्ट जोड़ा, लेकिन इसमें कोई मोनो स्पॉन्टेड फॉन्ट नहीं है, इसलिए यह बहुत अव्यवस्थित लग रहा है।
izlin

@izlin के बजाय (i==9?" ":" ")आप उपयोग कर सकते हैं (i^9?" ":" "), जो एक चरित्र बचाता है।
राजस्व

1
मदद! क्या कोई समझा सकता है? (दो बार क्यों है <code> v = 0 </ code>?)
निर्दोष

3

पर्ल 119

$s.=/26/?++$r&&$/:$m-1&&$r-abs$_%(2*$m-2)+1-$m?$"x(1+3*/15/):/15/?Perl:(A..Z)[$_]for(0..26)x($m=<>);print$s=~s/\s+$//rg

यह प्रोग्राम इनपुट लेता है STDINऔर परिणाम को प्रिंट करता है STDOUT

और बोनस - एक संस्करण जो नियमों के खिलाफ है क्योंकि यह रिक्त स्थान को प्रिंट करता है, लेकिन कुछ इंटरैक्शन जोड़ता है:

#!/usr/bin/perl -p
$r=0;$_=join'',map{/26/?++$r&&$/:$m-1&&$r-abs$_%(2*$m-2)+1-$m?$"x(1+3*/15/):/15/?Perl:(A..Z)[$_]}(0..26)x($m=$_)

... और नीचे कुछ परीक्षण:

1
ABCDEFGHIJKLMNOPerlQRSTUVWXYZ
2
 B D F H J L N Perl R T V X Z
A C E G I K M O    Q S U W Y
4
   D     J     Perl     V
  C E   I K   O    Q   U W
 B   F H   L N      R T   X Z
A     G     M        S     Y
6
     F         Perl         Z
    E G       O    Q       Y
   D   H     N      R     X
  C     I   M        S   W
 B       J L          T V
A         K            U

3

जम्मू, 67 57 61 वर्ण

echo@dtb"1@|.@|:@(26&,$(u:65+i.26)#~1 j.26$(0#~1=]),<:#-&0 2)

एक समारोह के रूप में उपयोग करें:

   echo@dtb"1@|.@|:@(26&,$(u:65+i.26)#~1 j.26$(0#~1=]),<:#-&0 2)
   D     J     P     V
  C E   I K   O Q   U W
 B   F H   L N   R T   X Z
A     G     M     S     Y

स्पष्टीकरण: यह समाधान अन्य J समाधान की तुलना में भिन्न दृष्टिकोण का उपयोग करता है। एक sawtooth लहर 0 0 2 3 2 1 0 1 ... पैदा करने के बजाय , मैंने लगातार अक्षरों के बीच अंतर को देखा। उदाहरण के लिए, n = 4 के लिए यदि आप A ऊपर की ओर से जाते हैं, तो दूसरे कॉलम पर जाएं और B तक पहुँचें, तो आपको A और B के बीच चार स्थान मिलते हैं। अक्षरों के बीच अंतर करने का यह पैटर्न बहुत नियमित है: n = 4 के लिए पैटर्न 4 4 4 2 2 2 4 4 4 ... है

तो विचार पहले चपटा (और ट्रांसपोज़्ड) सरणी का निर्माण करना है, और फिर इसे फिर से आकार दें और इसे फ्लिप करें ताकि यह सही दिखे। आउटपुट रूटीन सीधा है (J होने के लिए, कम से कम): dtb "ट्रेलिंग ब्लैंक्स हटाएं" और "1कहता है "प्रत्येक लाइन पर काम करें"। dtb और इको दोनों मानक पुस्तकालय द्वारा प्रदान किए जाते हैं।

कुछ गोल्फ मदद के लिए Zsbán Ambrus का धन्यवाद ।


3

मेटापोस्ट (207)

numeric h,d,y;h=5;d=-1;y=1;u=5mm;pair p;string s;for x=1upto26:p:=(x,y)*u;s:=char(x+64);if x=13:s:="MetaPost";elseif x>13:p:=(x+2,y)*u;fi;label.rt(s,p);if(y=h)or(y=1):d:=d*-1;fi;if h=1:d:=0;fi;y:=y+d;endfor;

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

आप इसे यहाँ आज़मा सकते हैं।


2

बैश (213) (223)

read i
p=0
d=1
printf '\n%.0s' `seq $i`
for l in {A..Z}
do (($p==$i-1))&&((p=$p*-1))
(($i==1))&&p=0
(($p!=0))&&echo -en "\033[s\033[${p#-}A"
[[ "$l" == "B" ]]&&l="Bash"
echo -en $l"\033[s\033[${p#-}B"
((p++))
done

मामूली मोड़ और हम 213 से नीचे हैं।

मूल में एक मामूली बग था। परीक्षण और बैश संस्करण 4.2.37 पर काम करने की पुष्टि की।

बग और कुछ युक्तियों को इंगित करने के लिए @manatwork का धन्यवाद।


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

@ProgramFOX यह ठीक है। किसी भी तरह धन्यवाद!
Okw

मुझे लगता है कि कहीं-कहीं मामूली बग है, क्योंकि उत्पादन धीरे-धीरे उतर रहा है। (कम से कम बाश 4.3 में।) 194 वर्णों के आकार को कम करने के लिए कुछ मामूली सुधार: अंकगणितीय मूल्यांकन में सर्जन को छोड़ दें, दोहरे-उद्धृत स्ट्रिंग के अंदर डबल-कोट करने की कोशिश न करें: pastebin.com/zKa3znwR
manatwork

आप ;इसे थोड़ा और अधिक पठनीय बनाने के लिए बस कुछ के बजाय newlines का उपयोग कर सकते हैं ? यह आपके गोल्फ स्कोर को प्रभावित नहीं करेगा
डिजिटल ट्रामा

2

हास्केल - 432 बाइट्स (दुर्भाग्य से ...)

यह विशुद्ध रूप से पूरा करने की अपेक्षा से बहुत अधिक कठिन था, इसलिए मोटी बाइट गिनती थी। मुझे यकीन है कि मैं (या कोई) बेहतर कर सकता था, लेकिन मैंने इस पर बहुत अधिक समय बिताया है। गोल्फ संस्करण इस प्रकार है:

import Data.Matrix
import Data.Vector(toList)
r=repeat
s h=y h$l(take 26(case h of 1->r 1;_->concat$r$[h,h-1..1]++[2..h-1]))['A'..'Z']$matrix h 32(const ' ')<|>matrix h 1(const '\n')
l _[]m=m
l(x:i)(r:e)m=l i e$u m(let z=26-length i in if z<9 then z else z+6)x r
l _ _ m=m
u m c r h=case h of 'H'->t c r"Haskell"m;_->setElem h(r,c)m
t _ _[]m=m
t c r(x:i)m=t(c+1)r i$setElem x(r,c)m
y h m=concat[toList$getRow x m|x<-[1..h]]

चलाने के लिए, कोड को लोड करें ghciऔर निष्पादित करें putStr $ s Intजहां Intआपकी वांछित ऊंचाई है। आप भी जोड़ सकते हैं

import System.Environment
main :: IO ()
main = fmap (s . read . head) getArgs >>= putStr

importपाठ फ़ाइल में s के अंतर्गत , इसे संकलित करें ghc, और कमांड लाइन तर्क के रूप में ऊँचाई पास करें। Ungolfed संस्करण:

import System.Environment
import Data.Matrix
import Data.Vector (toList)

main :: IO ()
main = fmap (sawtooth . read . head) getArgs >>= putStr

type M = Matrix Char

sawtooth :: Int -> String
sawtooth height = let mat     = matrix height 32 (const ' ') <|> matrix height 1 (const '\n')
                      numbers = take 26 (case height of 1 -> repeat 1
                                                        _ -> concat $ repeat $ [height,height-1..1]++[2..height-1])
                      chars   = ['A'..'Z']
                  in toString height $ makeMatrix numbers chars mat

makeMatrix :: [Int] -> String -> M -> M
makeMatrix []     []     mat = mat
makeMatrix (x:xs) (s:ss) mat = makeMatrix xs ss $ updateMatrix
                                                    mat (let z = 26 - length xs in if z < 9 then z else z + 6) x s
makeMatrix _      _      mat = mat

updateMatrix :: M -> Int -> Int -> Char -> M
updateMatrix mat col row char = case char of 'H' -> insertHaskell col row "Haskell" mat
                                             _   -> setElem char (row, col) mat

insertHaskell :: Int -> Int -> String -> M -> M
insertHaskell _   _   []     mat = mat
insertHaskell col row (x:xs) mat = insertHaskell (col+1) row xs $ setElem x (row, col) mat

toString ::Int -> M -> String
toString height mat = concat [ toList $ getRow x mat | x <- [1..height] ]

मेरा मानना है कि आप की जगह ले सकता constसाथ pure(कार्यों के लिए अनुप्रयोगी उदाहरण का उपयोग करते हुए) कुछ बाइट्स को बचाने के लिए।
फल

2

सी # / LINQ:

using System;
using System.Linq;

namespace SawtoothAlphabet
{
    class Program
    {
        static void Main(string[] args)
        {
            int N = Int32.Parse(args[0]);   // eg 4
            Console.WriteLine(
                String.Join(Environment.NewLine, Enumerable.Range(0, N).Select(line =>
                    String.Concat(Enumerable.Range(0, 26).Select(i =>
                        line == Math.Abs(i % (2 * (N - 1)) - (N - 1))
                            ? (i == 2) ? "C#" : Char.ConvertFromUtf32(i + 'A')
                            : (i == 2) ? "  " : " ")
            ).TrimEnd())));
        }
    }
}

संक्षिप्त विवरण: Enumerable.Range(0, N).Select(...)प्रत्येक पंक्ति के लिए एक स्ट्रिंग उत्पन्न होने का कारण बनता है जिसे अंततः एक ही स्ट्रिंग में संक्षिप्त किया जाता है String.Join(Environment.NewLine, ...)। प्रत्येक पंक्ति के लिए हम सभी 26 वर्णों के माध्यम से चक्र करते हैं Enumerable.Range(0, 26).Select(...), लैम्ब्डा अभिव्यक्ति की शुरुआत में परीक्षण यह निर्धारित करता है कि i==2"सी" के लिए चेक करते समय एक चरित्र या स्थान उत्पन्न करना है या इसे लाइन के आधार पर "सी #" या दो स्थानों में परिवर्तित करता है। । String.Concat(...)धर्मान्तरित जिसके परिणामस्वरूप IEnumerable<char>के लिए इसे पारित करने से पहले एक स्ट्रिंग में प्रत्येक पंक्ति के लिए TrimEnd(...)दूर सफाई से पट्टी किसी भी पिछली श्वेत रिक्ति के लिए।


1

PHP (216) (205)

नया संस्करण:

$b=array_fill(65,26,' ');$b[80]='   ';$b=array_fill(0,$i,$b);for($j=--$i,$x=64;++$x<91;$i||$j=0){$b[$j][$x]=chr($x);$x==80&&$b[$j][$x]='PHP';$j+=($d=$j<($d?$i:1))*2-1;}echo join("\n",array_map('join',$b));

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

$b=array_fill(0,$i,array_fill(0,28,' '));for($j=--$i,$x=-1;++$x<28;$i||$j=0){$q=&$b[$j];$q[$x]=chr($x-($x&16)/8+65);$x==15&&($q[++$x]='H')*$q[++$x]='P';$j+=($d=$j<($d?$i:1))*2-1;}echo join("\n",array_map('join',$b));

उम्मीद है कि चर $ i की ऊंचाई होगी।


1

सी, 214 169 बाइट्स, कोई अनुगामी स्थान नहीं

उनके उपयोगी सुझाव के लिए @ edc65 और @tolos को धन्यवाद।

#define C ((c-i+n-65)%z&&(c+i+n-67)%z)
n,i,m,c,z;main(){scanf("%d",&n);z=n<2?1:2*n-2;for(;i++<n;){for(m=c=64;c++<90;)m=C?m:c;for(c=64;c++<m;)putchar(C?32:c);puts("");}}

3
यह एक हारी हुई लड़ाई है, लेकिन मैं इस बात पर कायम हूं: कई मामलों में #include <stdio.h> की जरूरत नहीं है, यह gcc या कोई अन्य संकलक हो। यह वैसे भी मानक और मान्य C है।
edc65

2
@ edc65: इस बात पर निर्भर करता है कि आप "वैध सी" क्या मानते हैं। यह AFAIK मान्य K & R C है, लेकिन ANSI / ISO C मांग करता है कि वेरिएडिक फ़ंक्शन (जिसमें शामिल हैं scanfऔर printf) प्रोटोटाइप दिए गए हैं, अन्यथा आपको अपरिभाषित व्यवहार मिलेगा। #include <stdio.h>बेशक, दोनों को एक प्रोटोटाइप देने का सबसे छोटा तरीका है scanfऔर printf
celtschk

कोड गोल्फ में @celtschk मान्य K & R मेरे लिए पर्याप्त है। और 'कई मामलों में' (जब सिर्फ उदाहरण के लिए पुट का उपयोग किया जाता है) वैध C89 है। मैं जो चाहता हूं, वह यह है कि एक अजीब व्यवहार नहीं है। (वैसे भी वैचारिक कार्यों के बारे में नोट के लिए)
edc65

1
ग्लोबल्स प्रकार के प्रकार हैं और शून्य से आरंभिक होते हैं। intयदि आप कुछ भी वापस नहीं कर रहे हैं तो मुख्य के लिए घोषणा भी छोड़ सकते हैं। अतिरिक्त परनों को छोड़ सकते हैं, एक तीखे बयान के ' 'साथ 32और if(!C)m=cसाथ में बदल सकते हैं , और जैसा कि मैंने अभी सीखा (ऊपर) 18 अक्षरों के printf("\n")साथ प्रतिस्थापित करें puts(""):n,i,m,c,z;main(){;scanf("%d",&n);z=n<2?1:2*n-2;for(;i<n;i++){for(m=c=65;c<91;c++)m=C?m:c;for(c=65;c<=m;c++)printf("%c",C?32:c);puts("");}}

1

जावास्क्रिप्ट ( 204 185 150)

h=m=4;d=h>1?-1:0;o=[];for(a=0;a<35;a++){for(r=h;r;r--)o[r]=(o[r]||"")+(r==m?"ABCDEFGHIJavascriptKLMNOPQRSTUVWXYZ"[a]:" ");if(a<9||a>17){m+=d;if(m<2||m==h)d=-d}}console.log(o.join("\n"))

संपादित करें

एक सरणी और .join ("\ n") का निर्माण नहीं करके 13 बाइट्स सहेजे गए। छोरों के लिए आवश्यक फ़्लिपिंग। फिर, सी कोडिंग बेटे की मदद से, एक और 12 बाइट्स को बचाने के लिए कोड को पूरी तरह से बहुत चालाक बना दिया।

यहाँ तर्क परिवर्तन को दिखाने वाला पठनीय संस्करण है।

for (row = height; row; row--) {
    rowOfNextActiveLetter = 1;
    direction = height > 1 ? -1 : 0;
    output = "";
    for (a = 0; a < 35; a++) {
        output += (row == rowOfNextActiveLetter ? "ABCDEFGHIJavascriptKLMNOPQRSTUVWXYZ"[a] : "");
        if (a < 9 || a > 17) {
            rowOfNextActiveLetter -= direction;
            if (rowOfNextActiveLetter < 2 || rowOfNextActiveLetter == height)direction = -direction
        }
    }
    console.log(output)
}

गोल्फ (161):

for(r=h;r;r--){m=1;d=h>1?-1:0;o="";for(a=0;a<35;a++){o+=(r==m?"ABCDEFGHIJavascriptKLMNOPQRSTUVWXYZ"[a]:" ");if(a<9||a>17){m-=d;if(m<2||m==h)d=-d}}console.log(o)}

गोल्फ और बाधित (149):

for(r=h;r;r--,console.log(o))for(m=1,d=h>1?1:0,o="",a=0;a<35;)if(o+=r==m?"ABCDEFGHIJavascriptKLMNOPQRSTUVWXYZ"[a]:" ",a<9|a++>17)d=(m+=d)<2|m==h?-d:d

मुझे यह पसंद है, भले ही मैं इसे पूरा न समझूं। लेकिन वैसे भी आप 9 चरों को हटाने वाले .substr(a,1)[a]
पदार्थ

आप 182 के लिए बिटवाइज़ ऑपरेटरों और coalescing h=m=4;d=1<h?-1:0;o=[];for(a=0;35>a;a++){for(r=h;r;r--)o[r]=(o[r]||"")+(r==m?"ABCDEFGHIJavascriptKLMNOPQRSTUVWXYZ"[a]:" ");if(9>a|17<a)if(m+=d,2>m||m==h)d=-d}console.log(o.join("\n"))
पुनरावृत्तियों

whoops, एक बहुत अधिक रिक्त स्थान को साफ किया
जॉन Nowlin

1

के, 60 बाइट्स

`0:'{+{x!y}.'+(26#{(!x),|1_!x-1}x;(((x-1)#" "),)'`c$65+!26)}

बहुत सीधा है, और ऐसा लग रहा है कि मैंने अभी जे समाधान निकाला है। :)

सबसे पहले, एक वर्णमाला उत्पन्न करें:

  `c$65+!26
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"

और एक उपयुक्त लंबाई की एक sawtooth लहर:

  26#{(!x),|1_!x-1}5
0 1 2 3 4 3 2 1 0 1 2 3 4 3 2 1 0 1 2 3 4 3 2 1 0 1

प्रमुख स्थानों के साथ वर्णमाला के प्रत्येक अक्षर को पैड करें:

  (((5-1)#" "),)'"ABC"
("    A"
 "    B"
 "    C")

वर्णमाला और वर्ग तरंग को एक साथ जिप करें, और प्रत्येक पंक्ति को घुमाएं:

  +(0 1 2;("  A";"  B";"  C"))
((0
  "  A")
 (1
  "  B")
 (2
  "  C"))

  {x!y}.'+(0 1 2;("  A";"  B";"  C"))
("  A"
 " B "
 "C  ")

और उस का स्थानान्तरण हमारा उत्तर है:

  +{x!y}.'+(0 1 2;("  A";"  B";"  C"))
("  C"
 " B "
 "A  ")

इसे यहाँ ओके में आज़माएँ ।


0

C: 142 139 वर्ण

बहुत लंबे समय तक, मैं इसे थोड़ा छोटा करने में सक्षम होने की उम्मीद करता हूं:

char a[26][27],i,j,p,d;main(n){for(scanf("%d",&n);i<26;d^=!p^p+2>n,p+=d-(d^n>1),i++)for(j=n;j--;a[j][i]=p^j?32:i+65);while(n)puts(a[--n]);}

थोड़ा अधिक पठनीय:

char a[26][27], i, j, p, d;
main(n) {
    for (
        scanf("%d", &n);
        i < 26;
        d ^= !p ^ p + 2 > n,
        p += d - (d ^ n > 1),
        i++
    )
        for (
            j = n;
            j--;
            a[j][i] = p ^ j
                ? 32
                : i + 65
        );

    while (n)
        puts(a[--n]);
}

संपादित करें: मैं "कोई अनुगामी रिक्त स्थान" नहीं पाया, लेकिन मैं वापस आ जाऊंगा।


0

स्काला, 246 बाइट्स

def f(h:Int)={val a=Seq.fill(h)(Array.fill(32)(' '));var(r,x,d)=(h-1,0,if(h==1)0 else-1);def p(c:Char){a(r)(x)=c;x+=1};for(c<-'A'to'Z'){p(c);if(c==83)"cala"foreach p;r+=d;if(r==0|r==h-1)d*= -1};for(z<-a)println(new String(z)replaceAll(" +$",""))}

सुधार किया और टिप्पणी की:

def f(h: Int) = {
  val a = Seq.fill(h)(Array.fill(32)(' '));
  // r - row; x - x coordinate, column; d - direction
  var (r, x, d) = (h - 1, 0, if(h==1) 0 else -1); 
  def p(c: Char) { // p for "put the character"
    a(r)(x) = c;
    x += 1
  };
  for(c <- 'A' to 'Z') { 
    p(c);
    if(c == 83)      // 83 == 'S'
      "cala" foreach p;
    r += d;
    if(r == 0 | r == h - 1)     // | is shorter than || 
      d *= -1
  };
  for(z <- a)
    println(new String(z) replaceAll (" +$", ""))  // trimming trailing whitespace
}

परिणाम:

scala> f(4)
   D     J     P         V
  C E   I K   O Q       U W
 B   F H   L N   R     T   X Z
A     G     M     Scala     Y

scala> f(5)
    E       M           U
   D F     L N         T V
  C   G   K   O   Scala   W
 B     H J     P R         X Z
A       I       Q           Y

scala> f(1)
ABCDEFGHIJKLMNOPQRScalaTUVWXYZ

0

अजगर - 137

आईजीजी में संग्रहित किया जाने वाला इनपुट i=8

l=[""]*h;k=j=0;y=h-1;exec'l[y]+=" "*(j-len(l[y]))+chr(k+65)+"ython"*(k==15);j=len(l[y]);y-=1^k/(h-(h>2))%2*-2;k+=1;'*26;print"\n".join(l)

0

रैकेट

यहाँ एक साफ कार्यात्मक संस्करण है: सुझावों का स्वागत करते हुए इसे छोटा करने के लिए।

(define (sawtooth n)
  (define (ST i d m lns)
    (if (null? m) 
        lns
        (let* ([v (first m)]
               [spc (make-string (string-length v) #\space)]
               [I (+ i d)])
          (ST I
              (if (or (zero? I) (= (sub1 n) I)) (* d -1) d)
              (rest m)
              (for/list ([ln lns] [j n])
                       (~a ln (if (= i j) v spc)))))))
  (displayln
   (string-join 
    (ST (sub1 n)
        (if (= n 1) 0 -1) 
        (string-split "A B C D E F G H I J K L M N O P Q Racket S T U V W X Y Z")
        (make-list n "\n")))))

उत्पादन

> (sawtooth 1)
ABCDEFGHIJKLMNOPQRacketSTUVWXYZ

> (sawtooth 2)
 B D F H J L N P Racket T V X Z 
A C E G I K M O Q      S U W Y 

> (sawtooth 8)
       H                  V     
      G I                U W    
     F   J              T   X   
    E     K            S     Y  
   D       L     Racket       Z 
  C         M   Q               
 B           N P                
A             O  
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.