मुझे एक ASCII- जुर्राब बुनना


15

परिचय

लंबी कहानी छोटी: कुछ दिन पहले मैंने गलती से एक जुर्राब बुनना शुरू कर दिया था और सादे टांके की बहुत तार्किक संरचना मुझे इस विचार की ओर ले जाती है: हम सिर्फ ASCII- बुनना ही क्यों नहीं करते?

इनपुट

इनपुट रेंज में एक समान पूर्णांक N है [2,30]

उत्पादन

आउटपुट एक जुर्राब है, जाहिर है।

संरचना

क्योंकि हम केवल सादे टांके का उपयोग करेंगे आप केवल vनीचे >की ओर सिलाई के लिए और दाईं ओर एक सिलाई के लिए उपयोग करेंगे । मुझे इसके लिए एक उदाहरण के साथ पूर्ण संरचना की व्याख्या करें N=8:

vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvv>>>
vvvvvv>>>>>>
vvvvv>>>>>>>>>
vvvv>>>>>>>>>>>>
vvvv>>>>>>>>>>>>>>>>>>>>>>>>
vvvv>>>>>>>>>>>>>>>>>>>>>>>>>>
vvvv>>>>>>>>>>>>>>>>>>>>>>>>>>
vvvv>>>>>>>>>>>>>>>>>>>>>>>>
  • पहला ब्लॉक ऊपरी हिस्सा है। इसकी चौड़ाई Nऔर ऊंचाई हैN*1.5
  • बाद में एड़ी शुरू होती है। vजब तक आपके पास N/2चौड़ाई न हो, आप दाईं ओर से एक पंक्ति को घटाएँ । फिर आप नीचे की बुनना खत्म करने के N/2लिए चौड़ाई के साथ पंक्तियों को जोड़ते हैं N/2। ध्यान दें कि यह N/2 + 1चौड़ाई के साथ कुल पंक्तियाँ देता हैN/2

पहला भाग:

vvvvvvvv    //begin with width N
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv    // N*1.5 times
vvvvvvv     // reduce
vvvvvv
vvvvv
vvvv        // till here
vvvv        // repeat N/2 times
vvvv
vvvv
vvvv
  • अब साइड वार्ड की बुनाई शुरू होती है। आप पहली कम की गई पंक्ति से शुरू करते हैं, >तब तक भरें जब तक आपके पास चौड़ाई न हो Nऔर दो और जोड़ दें। N/2चौड़ाई के साथ पहली पंक्ति सहित उस प्रक्रिया को जारी रखें
  • उस स्तर के नीचे की पंक्तियों को भरें और उस N*1.5समय >को जोड़ दें
  • बाहरी हिस्सों को वैसे ही रहने दें जैसे पहले और नीचे की पंक्ति में दो और जोड़ दें >'sजब तक कि यह समाप्त न हो जाए

दूसरा भाग:

vvvvvvvv
vvvvvvv>>>  //fill to N and add two >
vvvvvv>>>>>>     //repeat
vvvvv>>>>>>>>>
vvvv>>>>>>>>>>>>   //till here
vvvv>>>>>>>>>>>>>>>>>>>>>>>>       //fill to the row above and add N*1.5 times >
vvvv>>>>>>>>>>>>>>>>>>>>>>>>>>     //add two more '>' than the row above
vvvv>>>>>>>>>>>>>>>>>>>>>>>>>>     //add two more '>' than the row beneath
vvvv>>>>>>>>>>>>>>>>>>>>>>>>

नियम

अनुगामी नई लाइनें ठीक हैं।

आप अपरकेस या लोअरकेस के बीच चयन कर सकते हैं Vलेकिन इसे लगातार करना होगा।

यह इसलिए बाइट्स जीत में सबसे छोटा कोड है।

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

N=2
vv
vv
vv
v>>>
v>>>>>>

N=4
vvvv
vvvv
vvvv
vvvv
vvvv
vvvv
vvv>>>
vv>>>>>>
vv>>>>>>>>>>>>
vv>>>>>>>>>>>>

N=6
vvvvvv
vvvvvv
vvvvvv
vvvvvv
vvvvvv
vvvvvv
vvvvvv
vvvvvv
vvvvvv
vvvvv>>>
vvvv>>>>>>
vvv>>>>>>>>>
vvv>>>>>>>>>>>>>>>>>>
vvv>>>>>>>>>>>>>>>>>>>>
vvv>>>>>>>>>>>>>>>>>>

N=12
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvv>>>
vvvvvvvvvv>>>>>>
vvvvvvvvv>>>>>>>>>
vvvvvvvv>>>>>>>>>>>>
vvvvvvv>>>>>>>>>>>>>>>
vvvvvv>>>>>>>>>>>>>>>>>>
vvvvvv>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vvvvvv>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vvvvvv>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vvvvvv>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vvvvvv>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vvvvvv>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

2
मुझे आशा है कि एक अनुगामी newline ठीक है? (यह भी, कि कोई गलती से कैसे एक बुनाई शुरू कर देता है?)
ग्रेग मार्टिन

3
@GregMartin ने मेरी दादी का दौरा किया और उन्होंने मुझसे पूछा। यह उसके लिए नहीं कहना मुश्किल है इसलिए हम यहाँ जाते हैं :) दो दिन पहले पहला काम पूरा किया। मुझे लगता है कि यह बहुत ठीक है लेकिन मैंने वास्तव में काम की मात्रा को कम करके आंका है। तो खुश हो जाइए अगर कोई आपके लिए मोज़े बनाए।
izlin

क्या मैं उपयोग कर सकता हूं vया Vपरस्पर विनिमय कर सकता हूं ? मैं उस क्षण के लिए अनुमान लगाने जा रहा हूं vजो केवल एक ही अनुमति है, लेकिन अनुमति Vबाइट की गिनती को प्रभावित करेगी
गोल्डन अनुपात

@GoldenRatio मैंने नियम बदल दिए, अब दोनों की अनुमति है।
izlin

@GurupadMamadapur जैसा कि आप 'इनपुट' में पढ़ सकते हैं, केवल नंबर को इनपुट के रूप में भी अनुमति दी गई है। आपके कार्यक्रम को विषम संख्या
izlin

जवाबों:


2

पायथ - 93 बाइट्स

J/Q2K"V"P*s*Q1.5+*QKbVJp*+Q_+1NK*+3*3N">";InQ2VJp*JK*+s*2aaNc-J 1 2c-J 1 2+3*Q3">";IqQ2pK*6">

स्पष्टीकरण:

J/Q2                             sets J to half of input
K"V"                             sets K to "V"
P                                prevents newline after main block of sock
*                                multiply the next 2 items
s*Q1.5                           rounds up input*1.5 (columns in main block)
+                                adds the next 2 item (this item gets multiplied by the previous item)
*QK                              multiplies "V" by input (resulting in each row)
b                                New line
VJ                               For all the numbers 0-((Q/2)-1) (as represented by N)
p                                print
*                                multiply the next 2 items
+Q_+1N                           input + -1*(1+N)
K                                "V"
*+3*3N">"                        3N+3 many ">"'s
;                                ends for statement
InQ2                             if input is not 2
VJ                               For all the numbers 0-((input/2)-1) (as represented by N)
p                                print
*JK                              input/2 many ">"'s
*+s*2aaNc-J 1 2c-J 1 2+3*Q3">"   int(abs(abs(N-((input/2)-1)/2)-((input/2)-1)/2)))+(input*3)+3 many ">"'s
;                                end of for statement
IqQ2                             if input is 2
pK*6">                           print "V" and 6 ">"'s

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


2

गणितज्ञ, 104 बाइट्स

""<>{t=Table;c=t[{"v"~t~#,">"~t~#2,"
"},#3]&;h=#/2;c[#,0,3h],c[#-i,3i,z={i,h}],c[h,6h+2Min[i-1,h-i],z]}&

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

c[#1, #2, #3] = Table[{Table["v", #1], Table[">", #2], "\n"}, #3]

सूचियों की एक तालिका बनाता है, हर एक "v"पंक्ति में कई एस से मिलकर बनता है और उसके ">"बाद एक नई पंक्ति के बाद कई एस। सौभाग्य से, #3बाहरी के लिए रेंज Tableमें एक चर नाम हो सकता है, जिसे अभिव्यक्तियों में #1और कहा जा सकता है #2; यह फ़ंक्शन cको स्थिर और परिवर्तनीय दोनों प्रकार के तर्कों के साथ बुलाया जा सकता है। बाकी बस गणना है, और स्ट्रिंग-ज्वाइनिंग ऑपरेटर ""<>नेस्टेड सूचियों को समतल करता है जो मुफ्त में उत्पन्न होती हैं।


2

पायथन, 3.5 183 177 बाइट्स

n=int(input())
h=n//2
z=h%2
l=['v'*h+'>'*(2*n-h+3*h+i*2)for i in range(1*z+n//4)]
*map(print,['v'*n]*(3*h)+['v'*i+'>'*(3*(n-i))for i in range(h,n)][::-1]+[l,l[:-1]][z]+l[::-1]),

व्याख्या आने वाली।

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


बस इतना है कि आप जानते हैं, TIO Nexus इस समय TIO v2 से बेहतर काम करता है क्योंकि v2 "शुरुआती अल्फा स्टेज" में है

एक बाइट को बचाने के लिए, आप 'v' टॉप को एक वेरिएबल असाइन कर सकते हैं।
nedla2004

@JackBates विधिवत उल्लेख किया।
Gurupad Mamadapur

@ nedla2004 क्या आपका यह अर्थ है n,v=int(input()),'v':? तब यह कुछ भी नहीं बचाता है।
Gurupad Mamadapur

1

ग्रूवी, 168 बाइट्स

{n->h=n/2;z=(int)h%2;l=(0..<1*z+n/4).collect{'v'*h+'>'*(2*n-h+3*h+it*2)};(['v'*n]*(3*h)+(n-1..h).collect{'v'*it+'>'*(3*(n-it))}+(z==0?l:l[0..<-1])+l[-1..0]).join('\n')}

यह एक अनाम क्लोजर है। दृष्टिकोण पूरी तरह से मेरे पायथन 3.5 उत्तर के समान है ।

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


1

बैच, 279 बाइट्स

@echo off
set i=for /l %%i in (2,2,%1)do 
set v=
%i%call set v=v%%v%%v
%i%echo %v%&echo %v%&echo %v%
%i%call:a
%i%call set v=%%v%%]]]
%i:,2,=,4,%call:c&if %%i lss %1 call set v=%%v%%]]
%i:2,=4,%call:b
exit/b
:a
set v=%v:~1%]]]]]
:b
set v=%v:~0,-2%
:c
echo %v:]=^>%

नोट: दूसरी पंक्ति एक अंतरिक्ष में समाप्त होती है। बैच की गूंज के साथ समस्याएं हैं> चर में इसलिए मुझे एक) विकल्प बी का उपयोग करना है) सही स्ट्रिंग को प्रतिध्वनित करने के लिए एक सबरूटीन कॉल करें। वास्तव में मेरे तीन उपप्रधान हैं:

  • aएड़ी के लिए प्रयोग किया जाता है। एक vहर बार और तीन निकाल दिया जाता है> एस जोड़ दिए जाते हैं। दो अतिरिक्त >s जोड़े जाते हैं ताकि सबरूटीन सबरूटीन के माध्यम से गिर सके b
  • bपैर के नीचे के लिए प्रयोग किया जाता है। दो>हर बार एस हटाए जाते हैं। सबरूटीन तब सबरूटीन के माध्यम से गिरता है c
  • c स्थान की वर्तमान पंक्ति को प्रिंट करता है, प्लेसहोल्डर वर्ण को प्रतिस्थापित करता है ताकि ए > एस ठीक से प्रिंट हो सके।

चौथी पंक्ति पैर की चौड़ाई को संभालती है जबकि पाँचवीं पंक्ति अपनी लंबाई को संभालती है। सातवीं पंक्ति पैर की लंबाई को संभालती है, जबकि आठवीं पंक्ति >>मुद्रण के बाद प्रत्येक पंक्ति में दो जोड़कर पैर की ऊंचाई के शीर्ष आधे हिस्से को संभालती है। यह जुर्राब के आकार के लिए काम करता है जो 4 के गुणक हैं, और अन्य जुर्राब के आकार के लिए एक समायोजन किया जाता है ताकि सबसे लंबी रेखा दोहराया न जाए।


0

PHP, 229 बाइट्स

काफी आलसी दृष्टिकोण

for($m=$n=$p=$argv[1];$i++<$q=$n*1.5;)echo($d=str_pad)("
",$n+1,v);for(;$p-->$n/2;)echo$s="
".$d($d("",$p,v),$m+=2,">");$r=[$s.=$d("",$q,">")];for($k=$n>>2;--$k;)$r[]=$s.=">>";echo join($r),$n&2?"$s>>":"",join(array_reverse($r));

एक प्रमुख न्यूलाइन प्रिंट करता है। के साथ चला -nr

टूट - फूट

// print first part + preparing some variables for later
for($m=$n=$p=$argv[1];$i++<$q=$n*1.5;)echo str_pad("\n",$n+1,v);

// print second part + prepare $s for third part
for(;$p-->$n/2;)echo$s="\n".str_pad(str_pad("",$p,v),$m+=2,">");

// third part: create an array of strings ...
$r=[$s.=str_pad("",$q,">")];
for($k=$n>>2;--$k;)$r[]=$s.=">>";
// ... then print it and its reverse
echo join($r),$n&2?"$s>>":"",join(array_reverse($r));

0

डीसी , 269 बाइट्स

1k?d1.5*sadsdsb[[[v]nlb1-dsb0<f]dsfx[]pldsbla1-dsa0<c]dscxldd1-sisb2su[[[v]nlb1-dsbldli-<g]dsgx[[>]nlb1-dsblu+0<t]dstx[]plu2+suli1-dsilddsb2/!>m]dsmxld3*dsdsolidswst[[[v]nlw1-dsw0!>x]dsxx[2-]sa[2+]sy[[>]nlo1-dso0<g]dsgxldltli1+2/<yltli1+2/>adsdsolisw[]plt1-dst0!>f]dsfx

ठीक है, ठीक है ... यह बड़े पैमाने पर है । यह आसान नहीं था, मैं आपको बताऊंगा कि सभी रजिस्टर संदर्भों, तुलनाओं, मैक्रोज़, स्ट्रिंग हेरफेर क्षमताओं की कमी, आदि के साथ क्या है, फिर भी, मुझे यह एक साथ डालने में मज़ा आया, और यह सब वास्तव में मायने रखता है, सही ? ;)

यह ऑनलाइन की कोशिश करो!

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