सरल मुद्रण तीर


23

गोल्फ अभ्यास के लिए, मैं अपनी प्रेमिका के इंट्रो में पायथन क्लास में असाइनमेंट कर रहा हूं। मैंने पाया कि इस कार्य के लिए, कई रणनीतियाँ थीं जो चरित्र गणना में बहुत करीब आईं, और मुझे यकीन है कि यहां के लोग और भी बेहतर तरीके खोज सकते हैं। यद्यपि मैं पायथन में ऐसा करने के तरीकों में सबसे अधिक दिलचस्पी रखता हूं, मैं यह जानना चाहूंगा कि इस कार्यक्रम को सबसे अधिक गोल्फ मिल सकती है, इसलिए यह कोड गोल्फ और सबसे छोटी उत्तर जीत है।

नियम:

असाइनमेंट नीचे उल्लिखित है। उपयोगकर्ता को दो बार इनपुट करने के लिए कहा जाना चाहिए, हालांकि संकेतों को कुछ भी कहने की ज़रूरत नहीं है, और एक अलग क्रम में हो सकता है।

मानक खामियां लागू होती हैं।


असाइनमेंट 3: तीर

एक प्रोग्राम लिखें जो उपयोगकर्ता को कई स्तंभों के लिए संकेत देता है, और वे नीचे दिए गए पैटर्न को प्रिंट करते हैं। आप मान सकते हैं कि उपयोगकर्ता सकारात्मक संख्या की आपूर्ति करेगा। आपके कार्यक्रम को बाएं और दाएं तीर दोनों को संभालना चाहिए। यहां कुछ सैंपल रनिंग हैं:

How many columns? 3
Direction? (l)eft or (r)ight: r
*
 *
  *
 *
*
How many columns? 5
Direction? (l)eft or (r)ight: l
    *
   *
  *
 *
*
 *
  *
   *
    *

23
यह होमियो की तरह दिखता है ... ओह, कोई बात नहीं।
TessellatingHeckler

क्या प्रत्येक लाइन पर रिक्त स्थान की अनुमति है?
lirtosiast

@ThomasKwa हाँ
अक्स

क्या हम कर्सर को स्थानांतरित करने के लिए नियंत्रण वर्णों का उपयोग कर सकते हैं, जैसा कि इस प्रश्न में है ?
lirtosiast

@ThomasKwa ज़रूर ... हालाँकि मैं ईमानदारी से यकीन नहीं करता कि इसका क्या मतलब है और मैं इसे एक्शन में देखने में दिलचस्पी रखता हूँ।
अक्स

जवाबों:


8

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

इस टिप्पणी के जवाब के आधार पर, वैध हो सकता है या नहीं भी हो सकता है । भले ही, मुझे यह साफ-सुथरा लगे, और, यदि यह अमान्य है, तो अन्य पायथ उत्तर भी अमान्य हैं। ;) ठीक है, यह मान्य है , क्योंकि मैं स्पष्ट रूप से स्पष्ट रूप से याद किया। : /

संपादित करें: मैं नहीं !!!! YESSS !!!! पहली बार! : डी

j+_J_Wqz\r.e+*dkb*\*QtJ

लाइव डेमो।


1
m+*\ d\*Qउस गूढ़ बात के बजाय। 2 बाइट बचाता है।
जेक्यूब

7

अजगर, २,

j<tQ_Wqz\l++Jm+*\ d\*Q_PJtJ

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

मूल विचार यहाँ एक स्ट्रिंग का निर्माण करना है, जो कि 5 के लिए, इस तरह दिखता है:

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

और फिर इसे उल्टा फ्लिप करें यदि हम lहमारे इनपुट के रूप में प्राप्त करते हैं । फिर हम input-1इस स्ट्रिंग की अंतिम पंक्तियों को लेते हैं लेकिन उसका प्रिंट निकालते हैं।


7

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

c=input()
r=1
l=0
exec"print' '*(%sabs(c-r))+'*';r+=1;"%("c+~"*input())*(2*c-1)

अभी भी गोल्फ हो सकता है, लेकिन हम देखेंगे :)


2
इनपुट होने के साथ अच्छा विचार चर हो सकता है lऔर r। मुझे नहीं पता था कि इनपुट evalकोड के समान वातावरण में एड है।
xnor

4

पायथ, 30 28 27 बाइट्स

VtyQ+*+*tQJqz\r_WJ.a-hNQd\*

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

जाहिरा तौर पर मैं वर्तमान में एक पूरी तरह से अलग दृष्टिकोण के साथ FryAmTheEggman के साथ जुड़ा हुआ हूं । (मुझे लगता है कि एक सरल है।)

उदाहरण

$ python pyth.py spa.p
r
3
*
 *
  *
 *
*

$ python pyth.py spa.p
l
5
    *
   *
  *
 *
*
 *
  *
   *
    *

व्याख्या

 tyQ                              (columns * 2) - 1
V                               loop N through range(the above)
        tQ                                columns - 1 (maximum number of spaces)
       *                                multiplied by
           qz\r                           1 if direction == "r" else 0
          J                               also save that 1 or 0 to J
      +                               plus
                  .a-hNQ                    abs(N - columns + 1)
               _WJ                      negate that if direction == "r"
     *                  d           that many spaces
    +                    \*       add the star and print

@ Pietu1998 मुझे अभी भी एक बुनियादी विवरण में दिलचस्पी है कि आप क्या कर रहे हैं। मैं देखता हूं कि आपके पास केवल 1 लूप है और कोई नक्शा या लैम्ब्डा नहीं है ...
अक्स।

@aks। मैंने एक स्पष्टीकरण जोड़ा।
पुरकाकूदरी

4

पॉवरशेल, 91 85 102 बाइट्स

$c=(Read-Host)-1;if(!$c){"*";exit}(@(0..$c+($c-1)..0),@($c..0+1..$c))[(Read-Host)-eq'l']|%{" "*$_+"*"}
  • स्तंभ हो जाता है, उसे संग्रहीत करता है $c। हम एक को घटाते हैं क्योंकि प्रत्येक कॉलम में एक भी होता है *और हम केवल इस बात में रुचि रखते हैं कि कितने रिक्त स्थान आवश्यक हैं।
  • यदि दर्ज किया गया मान ए 1, प्रिंट *और निकास था - तो बाकी स्क्रिप्ट में कोई फर्क नहीं पड़ता है। +
  • अगले खंड को सबसे पहले दिशा और परीक्षण मिलता है कि क्या यह -equal है l, फिर मूल्य के आधार पर गतिशील रूप से उत्पन्न सरणियों के एक सरणी में अनुक्रमण के आधार पर एक सरणी बनाता है $c। जादू। अनिवार्य रूप से, यह है कि हमें प्रति पंक्ति कितने स्थान चाहिए।
  • उदाहरण के लिए, 5 rइस संग्रह के लिए (0,1,2,3,4,3,2,1,0)
  • सरणी लेता है और इसे फ़ॉरच-ऑब्जेक्ट %लूप में पाइप करता है , जहां हम एक्स नंबर की एक स्ट्रिंग को आउटपुट करते हैं, फिर ए*

उदाहरण का उपयोग:

PS C:\Tools\Scripts\golfing> .\simple-printing-arrows.ps1
6
r
*
 *
  *
   *
    *
     *
    *
   *
  *
 *
*

संपादित करें - हटाए गए चर $eको सीधे सीधे संपादित करके संपादित करें 2 -
1 कॉलम के लिए सही खाते, अब

+ अगर 1-कॉलम वाले तीर के लिए दिशा निर्देश के लिए इनपुट लेना अभी भी अनिवार्य है (मुझे लगता है कि यह नहीं है), तो हम इसकी स्थिति को स्वैप कर सकते हैं , और 106 के लिए चर Read-Hostको फिर से शुरू करके कुछ और बाइट्स खो सकते हैं :$d

$c=(Read-Host)-1;$d=Read-Host;if(!$c){"*";exit}(@(0..$c+($c-1)..0),@($c..0+1..$c))[$d-eq'l']|%{" "*$_+"*"}

1 कॉलम डालने की कोशिश करें, और बाएं - आपको 2-कॉलम दायां तीर मिलता है। 1 कॉलम और दाईं ओर रखने का प्रयास करें - आपको 'मान्य मानों की सीमा से बाहर तर्क निर्दिष्ट' त्रुटि मिलती है। मुझे लगा कि आपके 85 को डबल-अप-रेंज से बचाकर हरा दिया जाएगा। लेकिन मैं भी पास नहीं हो सकता। 1 कॉलम तीर के लिए लेखांकन, मैं वर्तमान में 112 वर्णों पर हूं। > _ <
TessellatingHeckler

1
@TessellatingHeckler धन्यवाद - सही किया गया।
AdmBorkBork

1
कि तुम्हारा 102 तक धक्का दिया है और मेरा 102 से नीचे है। मैं किसी भी समय इसे घूरने के लिए नंगे नहीं हो सकता, लेकिन एक और भी होना चाहिए जिसे मैं हटा सकता हूं ...: डी
TessellatingHeckler

4

TI-BASIC, 75 65 57 54 50 47 बाइट्स

सही बाइट गणना और 10 बाइट्स के लिए @ThomasKwa के लिए धन्यवाद ।

मेरे TI-84 + सिल्वर संस्करण पर परीक्षण किया गया

पहले TI-BASIC सबमिशन, गोल्फ सुझाव का स्वागत (मुझे अभी तक कई ट्रिक्स नहीं पता हैं)। यदि नाम दिखाए गए स्मृति में एक कारक निभाता है, तो यह 1 के बजाय 3 अक्षर था (मैंने अपने कैलकुलेटर पर बाइट की गिनती को देखा)। यह कार्यक्रम outputफ़ंक्शन के प्रतिबंधों तक सीमित है (मुझे लगता है कि लंबाई 4 के तीर), लेकिन मैं शायद स्विच कर सकता हूं text, जो कि रेखांकन प्रदर्शित करता है यदि वह लंबाई से बहुत कम है।

Prompt L,Str1
Str1="R
For(I,1,2L-1
Output(I,(1-2Ans)abs(I-L)+AnsL+1,"*
End

ध्यान दें कि यह भी स्क्रीन को साफ नहीं करता है या इसे रोक नहीं सकता है।

मुझे वास्तव में ऐसा लग रहा है कि मैं जिस समीकरण का उपयोग कर रहा हूं उसे और अधिक गढ़ा जा सकता है। समाप्त उद्धरण चिह्न को बाहर करना भी इतना गलत लगता है।


@ThomasKwa धन्यवाद! मैं अभी करूँगा।
कोल

2
दूसरा: Ansस्वतंत्र है, क्योंकि आप इसे इनपुट के लिए उपयोग नहीं करते हैं और Output(संशोधित नहीं करते हैं Ans। इसका उपयोग करें, और चर से छुटकारा पाएं A। आप का उपयोग कर असाइन कर सकते हैं -2(Str1="R; सशर्त की कोई आवश्यकता नहीं है।
1

1
@ThomasKwa सुझावों के लिए धन्यवाद, ऐसा लगता है कि मुझे TI-BASIC में जाने के लिए एक रास्ता मिल गया है।
कोल

3
तीसरा: वास्तव में मूल्य से गुणा करने की कोई आवश्यकता नहीं है -2। बस Str1="Rदूसरी लाइन के लिए करते हैं। यह चौथी पंक्ति बनाता है Output(I,(1-2Ans)abs(I-L)+AL+1,"*, जो आपको 4 और बाइट्स देता है। लेकिन रुकिए, हमारे लिए यह एक मुहावरा है , जो एक बाइट बचाता है, साथ ही एक और क्योंकि हम खुले कोष्ठक मुफ्त में प्राप्त करते हैं! (1-2Ans)cos(πAns)
३.१५

1
किसी भी भाषा में गोल्फ में कुशल बनने के लिए केवल अभ्यास की आवश्यकता होती है; तुम वहाँ पहुँचोगे
lirtosiast

2

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

c=input()-1
d=raw_input()>'l'
for j in range(2*c+1):print' '*(d*c-(2*d-1)*abs(c-j))+'*'

मेरे पाइथ उत्तर के लिए लगभग समान रूप से काम करता है, बस मक्खी पर रिक्त स्थान की सही संख्या की गणना करता है।


2

पावरशेल, 104 102 97 बाइट्स

# 97 version:
$o=@(($c=(read-host)-1))[(read-host)-eq'l'];($j=2*$c)..0|%{' '*[Math]::Abs($o++%($j+!$j)-$c)+'*'}

3
r
*
 *
  *
 *
*

# Previous 102 version:
$o=@(($c=(read-host)-1))[(read-host)-eq'l'];(2*$c)..0|%{
' '*[Math]::Abs($o++%(2*($c+(!$c+0)))-$c)+'*'}

एनबी। यदि आप इसे फिर से चलाना चाहते हैं, तो एक नया PowerShell खोलें, या rv oपरिवर्तनशील स्थिति को रीसेट करें।

दूसरों को कैसे प्रभावित किया जाए, इसकी तुलना में यह दुख देता है। [हर्ट्स 97 पर कम से कम यह 122 पर था]। इसके दो भाग, उनमें से कोई भी बहुत आश्चर्य की बात नहीं है; कई स्तंभों को पढ़ता है, एक ऑफसेट प्राप्त करने के लिए एक सरणी-इंडेक्स-टर्नेरी-ऑपरेटर-विकल्प का उपयोग करता है, और एक लहर फ़ंक्शन के माध्यम से ऑफसेट पर शुरू होता है (और एक ट्विक ताकि यह गिरने पर न हो mod 0)।

(और आउच क्या मैंने उस लहर फ़ंक्शन पर उम्र बिताई, मेरी गलतफहमी को समझने में असमर्थ है, और यह सब-टाइप-एलआईएसपी-, ईमानदार पैरेंस टाइप कर रहा है)।


2
वह खूनी शानदार है।
AdmBorkBork

2

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

f=[' '*n+'*'for n in range(input())]
if'l'==input():f=f[::-1]
print'\n'.join(f+f[-2::-1])

थोड़ा और लंबा।


प्रयोग

$ python2 test.py
3
"l"
  *
 *
*
 *
  *

स्पष्ट रूप से टूट गया। NameError: name 'l' is not defined, NameError: name 'd' is not defined
TessellatingHeckler

उपयोग की जाँच करें। @TessellatingHeckler
जैच गेट्स

आह, चतुर। लेकिन आपके 1-कॉलम वाले तीर में दो तीर हैं। (मुझे लगता है कि आप इसे स्टोर कर सकते हैं iऔर dबिल्कुल नहीं, बस उपयोग करके range(P())और if P()=='l'...)
TessellatingHeckler

सुझाव के लिए धन्यवाद! मैंने डबल ऐरो हेड्स भी तय किए। @TessellatingHeckler
जैच गेट्स

एटीएम का परीक्षण नहीं किया जा सकता है, लेकिन आप शायद f=[...][::2*('r'>input())-1]वास्तव में ऐसा कुछ कर सकते हैं
Sp3000

2

पर्ल, 85 बाइट्स

($-,$_)=<>;$,=$/;@}=map$"x$_.'*',0..--$-;@}=reverse@}if/l/;print@},map$}[$--$_],1..$-

उपयोग:

perl 59874.pl <<< '6
r'

4
मुझे पसंद है कि आप अपनी लिपियों का नाम कैसे दें, आप उन्हें बाद में पहचान लेंगे ...
mbomb007

@ mbomb007 हाहा! तुम्हें पता है, मैं वास्तव में मेरी स्क्रिप्ट का नाम नहीं है, लेकिन मुझे लगा कि उपयोग के निर्देशों के लिए कुछ सरल नाम देना सबसे अच्छा था ... simplearrows2.plउतना अच्छा नहीं लगता! : पी
डोम हेस्टिंग्स

2

PHP, 156 बाइट्स

<?for($c=1+fgets(STDIN);--$c;$s[-$c]=$t[]=sprintf("%{$c}s","*"));arsort($s);$a=fgetc(STDIN)==r?$s+$t:$t+$s;array_splice($a,count($a)/2,1)?><?=join("
",$a);

इस तरह दो सरणियों बनाता है:

$t = [
    0 => "  *"
    1 => " *"
    2 => "*"
]
$s = [
    -1 => "*"
    -2 => " *"
    -3 => "  *"
]

फिर सरणी संघ का उपयोग करता है $s+$tया $t+$sउन्हें संयोजित करने और array_spliceबीच में तत्व को निकालने के लिए। अंत में उत्पादन का उपयोग कर<?=join()


STDIN के बजाय CLI तर्क के साथ मेरा कोड 8 बाइट्स छोटा होगा?)
Fabian Schmengler

2

पायथन 2, 111 109 104 बाइट्स

बहुत ही सरल उपाय। मुझे यकीन है कि यह अधिक गोल्फ हो सकता है। जो नहीं जानते, ~x+nउनके लिए भी यही है n-1-x

n=input()
r=range(n)
r+=r[-2::-1]
for i in[r,[~x+n for x in r]]['r'>raw_input()]:print"*".rjust(i+1," ")

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

संपादित करें : इसे अंतिम पंक्ति में रखा गया था:

if'r'>d:r=[~x+n for x in r]
for i in r:print"*".rjust(i+1," ")

2

मतलाब, 109 105 96 बाइट्स

मुझे 9 बाइट बचाने के लिए @ बीकर को धन्यवाद

x=eye(input(''));if(input('','s')<114),x=fliplr(x);end
x=x*10+32;disp(char([x;x(end-1:-1:1,:)]))

अगर आप एस्की कोड डालने वाली दो लाइनों को बदल देते हैं तो आप 9 बाइट्स बचा सकते हैंx=x*10+32;
बीकर

@ बीकर बहुत चालाक, धन्यवाद!
लुइस मेंडो

1

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

2.times{l,d=gets.split;l=l.to_i;a=(d=="r"?(0..l-1):(l-1).downto(0)).to_a;(a+a[0..-2].reverse).each{|x| puts "#{' '*x}*"}}

2.times{ - दो बार, बेशक ...

l,d=gets.split; - इनपुट प्राप्त करें

l=l.to_i; - एक पूर्णांक तक लंबाई बदलें

a=(d=="r"?(0..l-1):(l-1).downto(0)).to_a; - 0 से लंबाई तक की एक सरणी बनाएं

(a+a[0..-2].reverse).each{|x| puts "#{' '*x}*"} - पुनरावृति, तीर बनाने के लिए तार में बारी

नहीं अभी तक सबसे बड़ी गोल्फ, लेकिन, हे।


1

पॉवरशेल, 98 94 बाइट्स

$c=(Read-Host)-1;$d=Read-Host;if($c){$c..0+1..$c|%{if($d-eq'r'){$_=$c-$_}' '*$_+'*'}}else{'*'}

अगर मुझे फॉरच-ऑब्जेक्ट लूप के अंदर दिशा-निर्देश के लिए रीड-होस्ट लगाने का एक तरीका मिल सकता है, लेकिन केवल एक बार मैं कुछ बाइट्स को बचाने में सक्षम हो सकता हूं।

संपादित करें: 94 बाइट्स बाएं के परीक्षण के बजाय, दाईं ओर परीक्षण करें (लूप को सरल करता है)।

मूल 98 बाइट:

$c=(Read-Host)-1;$d=Read-Host;if($c){0..$c+($c-1)..0|%{if($d-eq'l'){$_=$c-$_}' '*$_+'*'}}else{'*'}

$_चर को रीसेट करना - मुश्किल हॉबी। बहुत चालाक, और मैंने आज कुछ सीखा।
AdmBorkBork

@TimmyD बहुत मुश्किल। और फिर और अधिक सहेजने के लिए if स्टेटमेंट स्विच करें।
जोनाथन लीच-पेपिन

0

> <> , 60 बाइट्स

i"1l"i=&-:&*&:?!\:1-:}c0.
~/?:<-$?&::&;!?l<oao"*"
1/  \o" "-

नीचे लाइन पर 2 बर्बाद बाइट्स, कैसे परेशान!

इनपुट> <> में कैसे काम करता है, इसके कारण इनपुट के लिए 'प्रतीक्षा' करना संभव नहीं है - iअगर कोई इनपुट चरित्र STININ पर उपलब्ध है तो कमांड चेक करता है। यदि वहाँ है, तो यह उस चरित्र के ASCII मूल्य को धक्का देता है, और -1 को धक्का देता है यदि नहीं।

इसका मतलब है कि, इस कार्यक्रम का उपयोग करने के लिए, संख्या और दिशा पहले से ही STDIN पर तैयार होनी चाहिए, जैसे 3rकि दाईं ओर इशारा करते हुए 3 तीर का आकार। मुझे यकीन नहीं है कि अगर यह प्रविष्टि अयोग्य है, तो मुझे अपने विचार बताएं: ओ)

अगर किसी को एक चाहिए तो मैं उसका वर्णन भी लिखूंगा।


एक अर्थ में यह इनपुट की प्रतीक्षा करता है यदि आप इसे एक शेल में चलाने की कोशिश करते हैं, तो मुझे लगता है कि यह ठीक है। मैं इस तथ्य से अधिक चिंतित हूं कि यह इनपुट एक अंक का होने की उम्मीद करता है, हालांकि (जब तक कि मैं :10 के लिए इनपुट के लिए अभिप्रेत नहीं हूं ?)
Sp3000

एक उत्कृष्ट बिंदु, मैंने 9 से अधिक इनपुट के बारे में नहीं सोचा था। ड्राइंग बोर्ड पर वापस!
सोक

1
मैंने एक स्पष्टीकरण के लिए मुख्य प्रश्न पर टिप्पणी छोड़ दी है, बस मामले में
Sp3000

0

PHP, 154 बाइट्स

यह वास्तव में दोहराव दिखता है, लेकिन यह वांछित है:

$c=$argv[1];$b=l==$argv[2]?1:0;$a=$b?$c:-1;function a($a){echo strrev(str_pad('*',$a))."\n";}while($b?--$a:++$a<$c)a($a+1);while($b?++$a<=$c:1<$a--)a($a);

कमांड लाइन से चलाता है जैसे:

php arrow.php 5 l
php arrow.php 5 r

-1

पायथन, 88 बाइट्स

संपादित

n=input()-1
x=raw_input()>'l'
for i in range(2*n+1):print" "*(n*x+(-1)**x*abs(n-i))+"*"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.