आरोही / अवरोही संख्याओं के एक आर्क को प्रिंट करें


28

मुझे लगा कि "आर्क" संख्याओं के इस पैटर्न का वर्णन करने का सबसे अच्छा तरीका है:

1234567887654321
1234567  7654321
123456    654321
12345      54321
1234        4321
123          321
12            21
1              1

औपचारिक रूप से परिभाषित, प्रत्येक पंक्ति में 1 नंबर से होते हैं 9-n, (n-1)*2रिक्त स्थान, और 9-n1 के माध्यम से संख्या (जहां nवर्तमान लाइन है)।

आपका कार्य लिखना है, संभव है कि सबसे छोटी कोड का उपयोग करके, एक छोटी स्क्रिप्ट / प्रोग्राम जो उपरोक्त प्रतिमानों को निम्नलिखित प्रतिबंधों के लिए प्रिंट करता है:

  1. आप पूरे पैटर्न को हार्डकोड नहीं कर सकते हैं। आप पैटर्न की एक ही लाइन को अधिक से अधिक हार्डकोड कर सकते हैं।
  2. आपके प्रोग्राम को प्रत्येक पंक्ति के अंत में एक नई पंक्ति ( \nया किसी भी संयोजन \r) को प्रिंट करना होगा ।

रेडी स्टेडी गो!


1
अतिरिक्त थोड़ा चाल ऊपरी लाइन के साथ उपलब्ध होगा 123456787654321के रूप में यह करने के लिए बराबर होती है 11111111^2 ;-)
Egor Skriptunoff

3
@EgorSkriptunoff 11111111^2 == 123465787654321 != 1234567887654321(बार-बार नोटिस करें 8)
बॉब


6
यह पर्दे की तरह दिखता है ।
अस्थिरता

जवाबों:


22

अजगर 2, 65 55 53 51

s=12345678
while s:r='%-8d'%s;print r+r[::-1];s/=10

बदसूरत विचारों में से कुछ का उपयोग कर छोटा ।


हेह, मुझे पता था कि सुधार के लिए जगह थी: पी
नाथन उस्मान

2
आप s=s[1:]प्रति लूप से बहुत बचा सकते हैं औरwhile s:
8:15 पर बदसूरत


9

एपीएल (18)

k,⌽k←↑↑∘(1↓⎕D)¨⌽⍳8

स्पष्टीकरण:

  • 1↓⎕D: अंकों की स्ट्रिंग ("0123456789") इसका पहला तत्व है
  • ↑∘(1↓⎕D)¨⌽⍳8: पहले [8..1] अक्षर ('12345678', '1234567' ...) चुनें
  • : मैट्रिक्स के रूप में प्रारूप (रिक्त वर्णों के साथ अप्रयुक्त वर्णों को भरना)
  • k,⌽k←: दुकान में kऔर प्रदर्शित करने के kबाद ऊर्ध्वाधर मिररिंग का प्रदर्शनk

4

रूबी: 61 50 अक्षर

s="87654321";s.chars{|c|puts s.reverse+s;s[c]=" "}

नमूना रन:

bash-4.2$ ruby -e 's="87654321";s.chars{|c|puts s.reverse+s;s[c]=" "}'
1234567887654321
1234567  7654321
123456    654321
12345      54321
1234        4321
123          321
12            21
1              1

4

Befunge - 3 x 18 = 54

मुझे लगा कि मुझे कुछ करने की ज़रूरत है, यह बहुत लंबा है क्योंकि मैंने आखिरी बार इसका इस्तेमाल किया था। यह समस्या भाषा के लिए सबसे उपयुक्त लगी।

यह प्रिंट लूप के कारण भयावह रूप से धीमा है जो प्रति वर्ण लगभग 8 कार्य करता है (गिनती शैलियों भिन्न होती है)।

80v >#v"12345678"<
>5 *^ >,#$:_$:1-:v
^2< 0p0+7\*48\_@#<

4

जावास्क्रिप्ट, 71

s='1234567887654321',i=10;while(--i)console.log(s=s.split(i).join(' '))

s="1234567887654321";for(i=10;--i;)console.log(s=s.split(i).join(" "))70 अक्षरों के लिए, @SteveWorley
वैलीवेस्ट

3

सी, 83 वर्ण

main(a,b,n){
    for(a=12345678,n=1e8,b=n-a-1;a;a/=10)
        printf("%-8d%8d\n",a,b),
        b%=n/=10;
}

3

पायथन 2, 75 62

यह अस्थिरता के जवाब को नहीं हराएगा, लेकिन यहाँ अजगर के परस्पर तारों ( bytearray) का उपयोग करते हुए एक और तरीका है :

s=bytearray('1234567887654321')
for i in range(8):s[8-i:8+i]=i*'  ';print s

संपादित करें

मुझे एक छोटा संस्करण मिला, जिसका उपयोग करके str.replace:

s='1234567887654321'
for c in s[8:]:print s;s=s.replace(c,' ')

3

पर्ल, 41

प्लस -Eस्विच। कमांड लाइन पर कुल वर्ण: 50

कम से कम perl5, संस्करण 10 की आवश्यकता है।

perl -E'say@!=1..8-$_,$"x(2*$_),reverse@!for-0..7'

मैं कहूंगा कि यह 42 है, इस तथ्य के कारण कि कार्यक्रम पर मानक नज़र -Eएक-बाइट है।
टिमटेक

3

गणितज्ञ 92 85 67 54 51

विधि # 1 : (54 वर्ण) पंक्ति #, कॉल # का उपयोग करके सरणी बनाता है, और बाएं-दाएं किनारे से दूरी।

Grid@Array[If[#2<9,#2,17-#2]/.x_/;x+#>9:>" "&,{8,16}]

विधि # 2 : (67 वर्ण) पैड कभी छोटी सीमा।

Print@@@Table[Join[k = PadRight[Range@i, 8, " "], Reverse@k], {i, 8, 1, -1}];

विधि # 3 : (85 वर्ण) चुनकर किसी पंक्ति की प्रत्येक पंक्ति भरें।

8 अंतरिक्ष वर्णों की सूची से शुरू करें। "1" के साथ पदों 1 और 16 को बदलें; 2 और 15 के स्थान पर "2" बदलें, आदि।

p = 0; q = 16;
Print @@@Reverse@Rest@NestList[ReplacePart[#, {++p -> p, q-- -> p}]&,Array[" "&,q], 8];

विधि # 4 : (86 वर्ण) किसी पंक्ति की प्रत्येक पंक्ति को चुनिंदा रूप से खाली करें।

p=8;q=9;
Print@@@NestList[ReplacePart[#,{p---> " ",q++-> " "}]&,Join[k=Range@8,Reverse@k],7];

विधि # 5 : स्ट्रिंग्स का उपयोग करना (92 वर्ण)

p=8;s="12345678";
Print[#,StringReverse@#]&/@NestList[StringReplace[#,ToString@p-- ->  " "]&,s,7];

वह नया है! अगर मैं कर सकता तो मैं फिर से +1 करता। :-) btw, आप ड्रॉप कर सकते हैं ()और इसके #1साथ प्रतिस्थापित कर सकते हैं #:Grid@Array[If[#2<9,#2,17-#2]/.x_/;x+#>9:>" "&,{8,16}]
Mr.Wizard

सुझावों के लिए धन्यवाद। हां, Arrayकभी-कभी पुनरावृत्तियों को जोड़ने के लिए बिना किसी के अच्छे टेबल बना सकते हैं।
डेविड

3

पीएचपी, 68

(हमजा के जवाब से प्रेरित)

for($n=8;$n;$r[]=$n--)echo str_replace($r," ","1234567887654321\n");

इस तथ्य पर चलता है कि PHP का str_replace खोज के लिए एक सरणी और प्रतिस्थापित करने के लिए एक स्ट्रिंग को स्वीकार कर सकता है, यह दिए गए स्ट्रिंग के साथ सरणी के प्रत्येक आइटम को बदल देगा। प्रत्येक पुनरावृत्ति के बाद, वर्तमान संख्या को खोज सरणी में जोड़ा जाता है, इसे अगले लूप से हटा दिया जाता है।

कार्रवाई में कोड का उदाहरण: http://ideone.com/9wVr0X



मध्य में रिक्त स्थान की सही संख्या डालना प्रकट नहीं करता है
नथन हयफील्ड

@ नथानायफील्ड: ऐसा कैसे? पहली पंक्ति में 0 स्थान हैं, दूसरे में 2 हैं, फिर 4, 6, 8, आदि
श्री लामा

तब नहीं जब मैंने इसे writecodeonline.com/php
nathan hayfield

ऐसा इसलिए है क्योंकि आउटपुट <pre>टैग में लिपटा नहीं था । जब एचटीएमएल पाठ के रूप में व्याख्या की जाती है, तो रिक्त स्थान ढह जाते हैं और नई कहानियों को नजरअंदाज कर दिया जाता है, लेकिन यदि आप स्रोत की जांच करते हैं तो आप अन्यथा देखेंगे।
श्री लामा

3

मारबेलस 165

@0
08
>0
LN
--
@0
:LN
}0}0}0}0
..SAPSSD0A
{0
:PS
}0
~~09
..//
<<@0
\\>0
&0//
--@1
@020
&0/\&0
@1
:SA
@0
}0
>0!!
--00@1
@0++//
+O/\@1
+O
:SD
}0@0
\\>0\/
--/\+O
@0..+O

स्यूडोकोड:

MB():
    for x in 8..1:
        LN(x)
LN(x):
    SA(x)
    PS(x)
    SD(x)
    print "\n"
PS(x):
    print " "*(8-x)*2
SA(x):
    for n in 1..x:
        print n
SD(x):
    for n in x..1:
        print n

2

पायथन 2.x - 73 65 63 61 वर्ण

c=1;s='87654321'
while c<9:print s[::-1]+s;s=' '*c+s[c:];c+=1


2

के, २ 28

-1_a,'|:'a:8$'{-1_x}\,/$1+!8

k)-1_a,'|:'a:8$'{-1_x}\,/$1+!8
"1234567887654321"
"1234567  7654321"
"123456    654321"
"12345      54321"
"1234        4321"
"123          321"
"12            21"
"1              1"

आप इसे 36 के लिए सामान्यीकृत कर सकते हैं: {-1_a,'|:'a:(#*m)$'m:{-1_x}\,/$1+!x}

k){-1_a,'|:'a:(#*m)$'m:{-1_x}\,/$1+!x} 5
"1234554321"
"1234  4321"
"123    321"
"12      21"
"1        1"
q)k){-1_a,'|:'a:(#*m)$'m:{-1_x}\,/$1+!x} 15
"123456789101112131415514131211101987654321"
"12345678910111213141  14131211101987654321"
"1234567891011121314    4131211101987654321"
"123456789101112131      131211101987654321"
"12345678910111213        31211101987654321"
"1234567891011121          1211101987654321"
"123456789101112            211101987654321"
"12345678910111              11101987654321"
"1234567891011                1101987654321"
"123456789101                  101987654321"
"12345678910                    01987654321"
"1234567891                      1987654321"
"123456789                        987654321"
"12345678                          87654321"
"1234567                            7654321"
"123456                              654321"
"12345                                54321"
"1234                                  4321"
"123                                    321"
"12                                      21"
"1                                        1"

2

जावास्क्रिप्ट, 67 वर्ण

स्टीवेवर्ली के जवाब से प्रेरित होकर (यदि मैं कर सकता हूं तो मैं टिप्पणी करूंगा):

सांकेतिक टुकड़ा

a='1234567887654321\n',b='',c=10;while(--c)b+=a=a.split(c).join(' ')
<a href="#" onclick="javascript:document.getElementById('output').innerHTML = b;">Display</a>
<pre id="output">...</pre>

अंतिम न्यूलाइन की उपस्थिति नियमों का पालन करती है।

अद्यतन: कोष्ठक (ऑपरेटर पूर्वता) को हटाकर और एक अनावश्यक स्थान को हटाकर २ चार्ट में कटौती करें

ऐसा लग रहा था कि यह मुझे ट्रोल कर रहा है, क्योंकि कोड के एक सेगमेंट को अलग-अलग तरीके से छोटा करने या सरल बनाने की कितनी भी कोशिश की गई हो, लंबाई तब तक एक ही रही, जब तक कि मैं नीचे लिखे "मुझे नहीं लगता कि यह गिनती" नियम लागू हो जाए।

(यदि क्रोम कंसोल में इसे निष्पादित किया जाता है, तो प्रिंटिंग क्या मायने रखती है)


यह अन्य उत्तर की तरह नहीं दिखता है, संख्याएं सही कॉलम पर संरेखित नहीं हैं।
AL

@AL यदि आपने पढ़ा कि आउटपुट कॉन्सल btw से बाहर आता है तो अलर्ट आवश्यक नहीं है।
सोफ़ीके २२३२

दाएं कॉलम को संरेखित करने के लिए, जुड़ने वाले स्ट्रिंग तर्क में 2 के बजाय 1 स्थान होना चाहिए। 2 रिक्त स्थान के साथ यह क्रोम-आधारित ब्राउज़र अलर्ट में सही संरेखित है।
13

मैंने जेएस अलर्ट के बिना एक स्निपेट में परिणाम प्रदर्शित करने के लिए आपकी पोस्ट (एडिट को स्वीकार किया जाना चाहिए) को अपडेट किया, इस मामले में केवल एक स्थान की आवश्यकता है।
AL

2

ब्रेनफक: 542 बाइट्स

-[----->+<]>--.+.+.+.+.+.+.+..-.-.-.-.-.-.-.>++++++++++.[->+++++
<]>-.+.+.+.+.+.+.+[-->+<]>++++..----[->++<]>-.-.-.-.-.-.-.>++++++++++.[->+++++
<]>-.+.+.+.+.+.[-->+<]>+++++....-----[->++<]>.-.-.-.-.-.>++++++++++.[->+++++
<]>-.+.+.+.+.--[--->++<]>--......-----[->++<]>-.-.-.-.-.>++++++++++.[->+++++
<]>-.+.+.+.-[--->++<]>--........++[-->+++<]>+.-.-.-.>++++++++++.[->+++++
<]>-.+.+.[--->++<]>--..........++[-->+++<]>.-.-.>++++++++++.[->+++++
<]>-.+.--[--->++<]>............[-->+++<]>++.-.>++++++++++.[->+++++
<]>-.-[--->++<]>..............[-->+++<]>+.

1

गणितज्ञ , ५ ९

61 मेरे अपने विचारों का उपयोग करते हुए:

Grid[Clip[#~Join~Reverse@#&@Range@8,{1,9-#},{," "}]&~Array~8]

या 59, डेविड के जवाब से उधार लेना:

Grid@Array[Join[k=PadRight[Range[9-#],8," "],Reverse@k]&,8]

मैंने आपकी प्रविष्टि से प्रेरित ग्रिड का उपयोग करके सिर्फ 4 वर्णों को बचाया।
डेविड


1

हास्केल, 84

किसी को सुधारने के लिए एक शुरुआती बिंदु:

mapM_ putStrLn[let l=take(8-i)"12345678"++replicate i ' 'in l++reverse l|i<-[0..7]]

सबसे अधिक संभावना हिस्सा l++reverse lबिंदु को मुक्त बनाने के लिए होगा, जिससे हम let-स्टैटमेंट से छुटकारा पा सकते हैं, लेकिन मुझे लगता है कि मैं पा सकता था ap, जिसके लिए आयात की आवश्यकता है।


1

पोस्टस्क्रिप्ट: 105 वर्ण

स्ट्रिंग हैंडलिंग पीएस में आसान नहीं है, लेकिन अपेक्षाकृत सरल कोड के लिए कर सकते हैं:

0 1 7{(1234567887654321)dup
8 3 index sub(              )0 6 -1 roll 2 mul getinterval putinterval =}for

120 वर्णों पर थोड़ा लंबा संस्करण लेकिन 1 से 9 की सीमा में किसी भी संख्या के साथ दूसरी पंक्ति की शुरुआत में 8 को बदलकर विभिन्न संख्या मेहराब उत्पन्न कर सकते हैं:

/D{dup}def/R{repeat}def/P{=print}def
8 D -1 1{1 1 index{D P 1 add}R pop 2 copy sub{(  )P}R D{D P 1 sub}R pop()=}for pop

यह देखकर अच्छा लगा कि मैं केवल वही नहीं हूँ जो पोस्टस्क्रिप्ट को पसंद करता है।
AJMansfield


1

के २०

{x,'|:'x:|x$,\$1+!x}    

q)k){x,'|:'x:|x$,\$1+!x}8    
"1234567887654321"    
"1234567  7654321"    
"123456    654321"    
"12345      54321"    
"1234        4321"      
"123          321"    
"12            21"    
"1              1"    

1

TSQL, 148

संपादित करें: मैनटवर्क के सुझाव के साथ 148 तक नीचे और ORDER BY को ट्वीक करें।

पठनीय:

WITH t AS(
    SELECT 1n, CAST(1 AS VARCHAR(MAX)) o
 UNION ALL
    SELECT n+1,o+CHAR(n+49)
    FROM t
    WHERE n<8
)
SELECT o  + SPACE(16-2*n) + REVERSE(o)
FROM t
ORDER BY 1 DESC

golfed:

WITH t AS(SELECT 1n,CAST(1AS VARCHAR(MAX))o UNION ALL SELECT 1+n,o+CHAR(n+49)FROM t WHERE n<8)SELECT o+SPACE(16-2*n)+REVERSE(o)FROM t ORDER BY 1DESC

आउटपुट:

1234567887654321
1234567  7654321
123456    654321
12345      54321
1234        4321
123          321
12            21
1              1

1
अच्छा है। लेकिन क्या आप कृपया इसे उस प्रारूप में भी पोस्ट कर सकते हैं जिसमें आपने 153 अक्षर गिने थे? वैसे भी, आप 1स्ट्रिंग के बजाय संख्यात्मक का उपयोग करके 2 वर्णों को छोड़ सकते हैं, '1'जहां आप तुरंत castइसे में varchar। यह मुझे 149 अक्षर देता है with t as(select 1n,cast(1as varchar(max))o union all select n+1,o+char(n+49)from t where n<8)select o+space(16-2*n)+reverse(o)from t order by o desc:।
मैनटवर्क

@manatwork: मैं 153 नंबर को पुन: पेश नहीं कर सका, क्योंकि मैं कम होता रहा। अपने सुझाव को लागू किया, हालांकि। धन्यवाद!
आराम से

1

हास्केल, 79

r n x|x>n=' '|True=x
t="87654321"
main=mapM(putStrLn.(`map`("12345678"++t)).r)t

यह वर्णों के स्थान पर n> के साथ काम करता है ' ', जहाँ वर्ण n को "87654321" से सॉर्ट किया गया है (जो कि प्रतिस्थापन को निष्पादित करने के लिए स्ट्रिंग की पूँछ होती है)।


1

PHP: 61 चार्ट्स (या यदि आप वास्तविक ASCII न्यूलाइन द्वारा \ n प्रतिस्थापित करते हैं तो 60 वर्ण)

(गीगावाट और हमजा के जवाब से प्रेरित)

for($n=9;$n;$r[$n--]=" ")echo strtr("1234567887654321\n",$r);

http://ideone.com/FV1NXu


1

पॉवरशेल: 38

गोल्फ कोड

8..1|%{-join(1..$_+"  "*(8-$_)+$_..1)}

पूर्वाभ्यास

8..1|%{... }एक पूर्ण-वस्तु लूप में 8 से 1 तक पाइप पूर्णांक।
-join(... )नेस्टेड कोड के आउटपुट को एक भी स्ट्रिंग में बिना सीमांकक के जोड़ देता है।
1..$_लूप में 1 से वर्तमान पूर्णांक तक आरोही पूर्णांक आउटपुट करता है।
+" "*(8-$_)एक डबल-स्पेस जोड़ता है, आउटपुट में 8 और वर्तमान पूर्णांक के बीच के अंतर से गुणा करता है।
+$_..1वर्तमान पूर्णांक से अवरोही में, पूर्णांक जोड़ता है, आउटपुट में।


1

लैम्बदास के साथ जावास्क्रिप्ट, 147

(s="12345678")[r="replace"](/./g,i=>s[r](RegExp(".{"+(i-1)+"}$"),Array(i*2-1).join(" ")))[r](/\d{1,8} */g,m=>m+(Array(m%10+1).join(m%10+1)-m)+"\n")

फ़ायरफ़ॉक्स में जाँच की जा सकती है।



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