मेरे ASCII कला को काटो


14

मान लीजिए कि मुझे कुछ ASCII कला मिली है:

          ___
        ,"---".
        :     ;
         `-.-'
          | |
          | |
          | |
       _.-\_/-._
    _ / |     | \ _
   / /   `---'   \ \
  /  `-----------'  \
 /,-""-.       ,-""-.\
( i-..-i       i-..-i )
|`|    |-------|    |'|
\ `-..-'  ,=.  `-..-'/
 `--------|=|-------'
          | |
          \ \
           ) ) hjw
          / /
         ( (

( स्रोत )

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

 ,=.
-|=|-
 | |
 \ \
  ) )
 / /
( (

मैं लाइन के बाद लाइन बाहर कॉपी कर सकता था, मैं ब्लॉक चयन मोड के साथ एक पाठ संपादक का उपयोग कर सकता था, या ... मैं कुछ कोड लिख सकता था!

तो, मेरे कोड को पाँच तर्क चाहिए:

  • ASCII कला का एक टुकड़ा, एक नई लाइन अलग स्ट्रिंग।
  • ऊपरी बाएँ कोने के एक्स अक्ष (बाएं हाथ के स्तंभ से 1-अनुक्रमित, सकारात्मक पूर्णांक)
  • शीर्ष बाएँ कोने के Y अक्ष (1-अनुक्रमित, शीर्ष पंक्ति से, धनात्मक पूर्णांक)
  • परिणामी छवि की चौड़ाई (सकारात्मक पूर्णांक)
  • परिणामी छवि की ऊँचाई (धनात्मक पूर्णांक)

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

ASCII छवि:

          ___
        ,"---".
        :     ;
         `-.-'
          | |
          | |
          | |
       _.-\_/-._
    _ / |     | \ _
   / /   `---'   \ \
  /  `-----------'  \
 /,-""-.       ,-""-.\
( i-..-i       i-..-i )
|`|    |-------|    |'|
\ `-..-'  ,=.  `-..-'/
 `--------|=|-------'
          | |
          \ \
           ) ) hjw
          / /
         ( (

बगीचे का रास्ता

  • एक्स: 10
  • य: १५
  • चौड़ाई: 5
  • ऊँचाई::

परिणाम:

 ,=.
-|=|-
 | |
 \ \
  ) )
 / /
( (

DB आइकन

  • एक्स: 3
  • य: १२
  • चौड़ाई: 6
  • ऊँचाई: 4

आउटपुट:

,-""-.
i-..-i
|    |
`-..-'

एलियन एल्डर

  • एक्स: 9
  • य: १
  • चौड़ाई: 7
  • ऊँचाई: १०
  ___
,"---".
:     ;
 `-.-'
  | |
  | |
  | |
.-\_/-.
|     |
 `---'

हस्ताक्षर

  • एक्स: 16
  • य: १ ९
  • चौड़ाई: 3
  • ऊँचाई: १
hjw

नियम

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

8
क्या हम X और Y को 0-अनुक्रमित के रूप में ले सकते हैं?
टीएफडीएल

8
इसके अलावा, testcase 1 में, YBEW चाहिए 15, और टीसी 2 में, Xहोना चाहिए3
TFeld

2
क्या हम मान सकते हैं कि इनपुट को आयतों के साथ रिक्त स्थान पर रखा गया है?
DLosc

6
ठीक ऐसा ही मैंने उस समय सोचा जब मैंने उस आस्की कला को एक उद्यान पथ के रूप में देखा। मैंने कुछ और नहीं सोचा था ...
जो किंग

3
ऐसा लगता है कि कई एक्स और वाई मूल्य परीक्षण के मामलों में गलत हैं (शायद कुछ 0 अनुक्रमित हैं?) - कम से कम: वाई ऑफ गार्डन पाथ 15 होना चाहिए; डीबी आइकन का एक्स होना चाहिए 3.
जोनाथन एलन

जवाबों:


22

कैनवस , 1 बाइट

यहाँ यह कोशिश करो!

यह उस क्रम में इनपुट के रूप में ऊँचाई, चौड़ाई, Y, X और ASCII कला लेता है।

यद्यपि कैनवस में ASCII कला वस्तुओं के बारे में लगभग सब कुछ 0-अनुक्रमित है, किसी कारण से 1-अनुक्रमित है। ¯ \ _ (ツ) _ / ¯


कैनवास से अपेक्षित उत्तर: D (mb चारकोल में कुछ समान है)
मृत पोसुम

यह कैसा मायाजाल है!
AJFaraday

@AJFaraday मेरा मतलब है, क्या आप यह उम्मीद नहीं करेंगे कि एएससीआईआई-कला हेरफेर के लिए विशेष रूप से बनाई गई भाषा में एससीआई-कला का एक विशिष्ट हिस्सा प्राप्त करने के लिए अंतर्निहित नहीं है? : p
dzaima


4

चारकोल , 7 बाइट्स

δJθηTζε

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। 0-अनुक्रमित संयोजक लेता है। स्पष्टीकरण:

δ

ASCII कला प्रिंट करें।

Jθη

वांछित आयत के ऊपरी बाएं कोने पर जाएं।

Tζε

कैनवास को वांछित आकार में ट्रिम करें।


3

पिप -n , 21 बाइट्स

_@>--b@<dM(a^n--c+,e)

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

या, यदि 0-अनुक्रमण की अनुमति है ...

पिप -n, 17 बाइट्स :

_@>b@<dM(a^nc+,e)

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

व्याख्या

कमांड-लाइन आर्ग्स के रूप में सभी पाँच तर्कों को लेता है।

                   a-e are the 5 cmdline args; n is newline
         a^n       Split a on newlines
              ,e   Range(e)
            c+     Add c to each element
        (       )  Use the resulting range(c,c+e) to slice into the list of lines
       M           To each line, map this function:
_                   The line
 @>b                Slice, keeping indices b and greater
    @<d             Slice, keeping indices less than d
                   Print, joining on newlines (-n flag)

उपरोक्त समाधान भी मानते हैं कि इनपुट एक सही आयत है - यानी, लाइनें सभी समान लंबाई की हैं। अन्यथा, 2 अतिरिक्त बाइट्स की आवश्यकता है ( -lइसके बजाय उपयोग करें -n):

(Z(a^nZDsb+,d)c+,e)      0-indexed, 19 bytes
(Z(a^nZDs--b+,d)--c+,e)  1-indexed, 23 bytes


3

जाप -R , 13 11 बाइट्स

·tWÉY ®tVÉX

कोशिश करो

2 बाइट्स कामिल धाकरी की बदौलत बच गई

9 बाइट्स यदि अनावश्यक आवश्यकता के लिए नहीं हैं जो समाधान 1-आधारित अनुक्रमण का उपयोग करते हैं।

·tWY ®tVX

व्याख्या

                :Implicit input of string U and integers V=X, W=Y, X=Width & Y=Height
·               :Split U on newlines
 t              :Slice
  WÉ            : From 0-based index W-1
    Y           : To length Y
      ®         :Map
       t        :  Substring
        VÉ      :   From 0-based index V-1
          X     :   To length X
                :Implicitly join with newlines and output

मेरे परीक्षण में, आप को बचा सकता 2 बाइट्स के लिए टुकड़ा स्विचन द्वारा t, और एक और 2 बाइट्स 0 अनुक्रमण द्वारा। यह दूसरे पर प्रतीक्षा करने के लायक हो सकता है क्योंकि ओपी ने स्पष्ट नहीं किया है कि क्या 0 अनुक्रमण स्वीकार्य है, या परीक्षण मामलों को निर्धारित किया गया है।
कामिल दकरी

अच्छा लगा, @KamilDrakari - पूरी तरह से tएरेज पर काम करने का तरीका भूल गया ।
शैगी


2

जे , 45 बाइट्स

f=:4 :0
'a b c d'=.x-#:10
y{~<(a+i.b);c+i.d
)

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

नोट: J , 2 तर्क, बाएँ और दाएँ स्वीकार करता है। सही तर्क ASCII कला स्ट्रिंग है, बाईं ओर - UHXW मूल्यों की एक सूची

मैं न्यूलाइन को अनुकरण करता हूं और फ़ंक्शन कॉल में स्ट्रिंग को एक सरणी में बदलने के लिए एक कोड होता है।


2

वी , 16 बाइट्स

ÀGÀ|<C-v>@cl@djyHVGp

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

इनपुट एक सही आयत होने के लिए रिक्त स्थान के साथ गद्देदार होने की उम्मीद है। इसके अलावा, 'Y' इनपुट 'X' से पहले आता है।

Hexdump:

00000000: c047 c07c 1640 636c 4064 6a79 4856 4770  .G.|.@cl@djyHVGp

2

सी (जीसीसी) , 118 109 बाइट्स

इनपुट में दांतेदार रेखाएं हो सकती हैं: यदि वे वाई-रेंज में मौजूद हैं तो नईलाइन मुद्रित होती हैं।

सुझाव के लिए सीलिंग के लिए धन्यवाद।

f(s,x,y,w,h,a,b,c)char*s;{for(b=1,a=0;*s;a=c?!b++:a,s++)((c=*s==10)|++a>=x&a-x<w)&b>=y&b-y<h-c&&putchar(*s);}

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




1

बैश + कोरुटिल्स, 37

cut -b$1-$[$1+$3-1]|tail +$2|head -$4

दिलचस्प है, GNU टेल 8.28 (Ubuntu 18.04 पर) +NUMप्रारूप की अनुमति देता है, जबकि TIO पर GNU टेल 8.29 को इसके लिए 2 अतिरिक्त बाइट्स की आवश्यकता होती है -n+NUM

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

मैंने सोचा था कि यह सब sedकम हो सकता है, लेकिन 50 बाइट्स में यह नहीं है:

sed -nr "$2,$[$2+$4-1]s/.{$[$1-1]}(.{,$3}).*/\1/p"

1

K4 , 31 बाइट्स

समाधान:

{[a;x;y;w;h]a .-1+(y;x)+!:'h,w}

उदाहरण:

q)ASCII:("          ___";"        ,\"---\".";"        :     ;";"         `-.-'";"          | |";"          | |";"          | |";"       _.-\\_/-._";"    _ / |     | \\ _";"   / /   `---'   \\ \\";"  /  `-----------'  \\";" /,-\"\"-.       ,-\"\"-.\\";"( i-..-i       i-..-i )";"|`|    |-------|    |'|";"\\ `-..-'  ,=.  `-..-'/";" `--------|=|-------'";"          | |";"          \\ \\";"           ) ) hjw";"          / /";"         ( (")
q)k){[a;x;y;w;h]a .-1+(y;x)+!:'h,w}[ASCII;10;15;5;7]
" ,=. "
"-|=|-"
" | | "
" \\ \\ "
"  ) )"
" / / "
"( (  "
q)k){[a;x;y;w;h].[a;-1+(y;x)+!:'h,w]}[ASCII;3;12;6;4]
",-\"\"-."
"i-..-i"
"|    |"
"`-..-'"
q)k){[a;x;y;w;h].[a;-1+(y;x)+!:'h,w]}[ASCII;9;1;7;10]
"  ___  "
",\"---\"."
":     ;"
" `-.-' "
"  | |  "
"  | |  "
"  | |  "
".-\\_/-."
"|     |"
" `---' "
q)k){[a;x;y;w;h].[a;-1+(y;x)+!:'h,w]}[ASCII;16;19;3;1]
"hjw"

स्पष्टीकरण:

1-इंडेक्स किए गए इनपुट को लें, x / y निर्देशांक और एससीआई कला में सूचकांक बनाएं।

{[a;x;y;w;h]a .-1+(y;x)+!:'h,w} / the solution
{[a;x;y;w;h]                  } / lambda taking 5 inputs, a(scii), x, y, w(idth), h(eight)
                           h,w  / concatenate height and width, e.g. 7 5
                        !:'     / range til each, e.g. (0 1 2 3 4 5 6;0 1 2 3 4)
                  (y;x)+        / add list y x to it, e.g. (15 16 17 18 19 20 21;10 11 12 13 14)
               -1+              / subtract 1, e.g. (14 15 16 17 18 19 20;9 10 11 12 13)
            a .                 / index into a at these coordinates

1

आर , 62 बाइट्स

शायद आर में एक पाठ चुनौती के लिए आश्चर्यजनक रूप से कम समाधान, क्योंकि हमें वास्तव में एक मैट्रिक्स में पूरे पाठ को पढ़ने की आवश्यकता नहीं है।

function(x,y,w,h)write(substr(readLines()[y+1:h-1],x,x+w-1),1)

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


1

\ / \ /> , 123 बाइट्स

j:j8+}j+}j}pppp80x
{:}i:0(?v:a=?x@s1+:
~~~~1+0!/000y
yp:qqqq~
q{y?=p:+1q:}}g$q:pp:
1}x}p}ap:q~q+1{{y!?:-
ys{{
~!u.*2(0:;!?h

इनपुट अंतरिक्ष-सीमांकित इनपुट चर की एक पंक्ति के होते हैं x, y, w, और h, ascii कला से अगली पंक्ति पर आगे पीछे हो लिए।

व्याख्या

इस कोड में कोड में ही आस्की कला को डालकर आत्म-संशोधित करने की क्षमता का उपयोग किया जाता है, जो इस प्रकार दिख रहा है:

कोड

यह तब कोड के निर्दिष्ट आयत में वर्णों को पकड़ लेता है और इसे आउटपुट करता है।

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