N (e (s (t))) एक स्ट्रिंग


77

स्ट्रिंग को "फंक्शन नेस्ट" करने के लिए, आपको चाहिए:

  • पहले वर्ण को एक फ़ंक्शन के रूप में और निम्न वर्णों को उस फ़ंक्शन के तर्क के रूप में मानें। उदाहरण के लिए, यदि इनपुट स्ट्रिंग थी Hello, तो पहला कदम होगा:

    H(ello)
    
  • फिर, हर प्रतिस्थापन के लिए इसी चरण को दोहराएं। तो हमें मिलता है:

    H(ello)
    H(e(llo))
    H(e(l(lo)))
    H(e(l(l(o))))
    

आपका कार्य एक प्रोग्राम या फ़ंक्शन लिखना है जो एक स्ट्रिंग को "फ़ंक्शन घोंसले" देता है। उदाहरण के लिए, यदि इनपुट स्ट्रिंग थी Hello world!, तो आपको आउटपुट करना चाहिए:

H(e(l(l(o( (w(o(r(l(d(!)))))))))))

इनपुट में केवल मुद्रण योग्य ASCII होगा , और आप इनपुट और आउटपुट को किसी भी उचित प्रारूप में ले सकते हैं। उदाहरण के लिए, STDIN / STDOUT, फ़ंक्शन तर्क और रिटर्न वैल्यू, फ़ाइल में पढ़ना और लिखना, आदि।

सादगी के लिए, आप यह भी मान सकते हैं कि इनपुट में कोष्ठक नहीं होंगे, और खाली नहीं होंगे।

Input:
Nest a string
Output:
N(e(s(t( (a( (s(t(r(i(n(g))))))))))))

Input:
foobar
Output:
f(o(o(b(a(r)))))

Input:
1234567890
Output:
1(2(3(4(5(6(7(8(9(0)))))))))

Input:
code-golf
Output:
c(o(d(e(-(g(o(l(f))))))))

Input:
a
Output:
a

Input:
42
Output:
4(2)

हमेशा की तरह, हमारे सभी डिफ़ॉल्ट नियम और कमियां लागू होती हैं, और बाइट्स जीत में सबसे कम जवाब दिया जाता है!


21
अहम: क्या इस संदेश का चुनौती से कोई लेना-देना है? :-)
wizzwizz4

12
T I L 4 2 = 8
21

इनपुट स्ट्रिंग के लिए अधिकतम लंबाई क्या है? पुनरावर्ती विधियों का
बढ़ना

1
@ kamoroso94 पात्रों की You may take the input and the output in any reasonable format.एक सूची मुझे पूरी तरह से उचित लगती है।
DJMcMayhem

1
तो यह है कि लिस्प कोड जैसा दिखता है
caird coinheringaahing

जवाबों:


63

पायथन, 41 39 34 बाइट्स

lambda e:"(".join(e)+")"*~-len(e)

Ideone यह

सुंदर आत्म व्याख्यात्मक।

यह हर दूसरे चरित्र के बीच एक कोष्ठक डालता है और फिर लंबाई कोष्ठक की तुलना में एक छोर तक जोड़ता है।


13
यह ~ - चाल शांत है, मुझे यह याद रखना होगा।
स्काइलर

~ कैसे काम करता है?
शैडोफ्लेम

1
@ShadowFlame -संख्या को नकारात्मक बनाता है और ~बिट इसे फ़्लिप करता है। आप युक्तियाँ पृष्ठ पर इसके बारे में थोड़ा और पढ़ सकते हैं ।
श्रीओटचिलिज्म ओ'जैविक

1
@ShadowFlame। इसके बारे में यांत्रिकी के रूप में WheatWidard ने कहा। यह उन प्रणालियों पर काम करता है जो नकारात्मक संख्याओं को संग्रहीत करने के लिए टीडोस-पूरक मोड का उपयोग करते हैं (जो आजकल सबसे अधिक सिस्टम है)।
मैड फिजिसिस्ट

1
पायथन के साथ @MadPhysicist, यह हमेशा काम करता है, क्योंकि ~ को परिभाषित किया जाता है -x-1
मेगा मैन

45

MS-DOS .com फ़ाइल, 30 बाइट्स

0000   fc be 82 00 b4 02 ac 88 c2 cd 21 ac 3c 0d 74 0d
0010   b2 28 50 cd 21 5a e8 f0 ff b2 29 cd 21 c3

स्ट्रिंग को कमांड लाइन का उपयोग करके निष्पादन योग्य में पारित किया जाता है। (.COM फ़ाइल नाम और स्ट्रिंग के बीच एक स्थान वर्ण)।

परिणाम मानक आउटपुट के लिए लिखा गया है।

डिसएफ़साइड यहाँ है:

  fc          cld              ; Make sure DF is not set (lodsb!)
  be 82 00    mov    si,0x82   ; First character of command line args
  b4 02       mov    ah,0x2    ; AH=2 means output for INT 21h
  ac          lodsb            ; Load first character
  88 c2       mov    dl,al     ; Move AL to DL (DL is written to output)
recursiveFunction:
  cd 21       int    0x21      ; Output
  ac          lodsb            ; Get the next character
  3c 0d       cmp    al,0xd    ; If it is "CR" (end of command line) ...
  74 0d       je     doReturn  ; ... return from the recursive function
  b2 28       mov    dl,0x28   ; Output "(" next...
  50          push   ax        ; ... but save character read first
  cd 21       int    0x21      ; (Actual output)
  5a          pop    dx        ; Restore character (but in DL, not in AL)
  e8 f0 ff    call   recursiveFunction  ; Recursively enter the function
doReturn:
  b2 29       mov    dl,0x29   ; Output ")"
  cd 21       int    0x21
  c3          ret              ; Actually return

नोट: आप "RET" निर्देश का उपयोग करके DOS .COM फ़ाइल (EXE हेडर वाली फ़ाइलों के विपरीत) से बाहर निकल सकते हैं।


चूंकि मुझे कोई वास्तविक दस्तावेज या संतोषजनक जानकारी नहीं मिल रही है: क्यों call 0xfoff? कार्यक्रम को पते पर मेमोरी में लोड किया 0गया है जहां तक ​​मैं बता सकता हूं (या 0x100सीपी / एम-डॉस पर लेकिन ये x86 निर्देश प्रतीत होते हैं), recursiveFunctionअचानक क्यों स्थित है 0xffof? यह प्रोग्राम की शुरुआत के बाद 9 बाइट्स शुरू करने के लिए प्रतीत होता है, और निष्पादन योग्य में कोई वर्चुअलाइजेशन या मेटाडेटा नहीं है।
बिल्ली

6
DOS लोड .COM फ़ाइलों को संबोधित करने के लिए 0x100हालांकि यह प्रोग्राम किसी भी पते पर चलेगा: e8 f0 ffएक रिश्तेदार कॉल निर्देश है: यह निर्देश का पता जंप करता है, जो कि callनिर्देश शून्य 0x10 के बाद होता है।
मार्टिन रोसेनौ

32

जावास्क्रिप्ट (ईएस 6), 40 34 33 बाइट्स

सहेजे गए 6 बाइट्स, ETHproductions के लिए धन्यवाद

एक पुनरावर्ती कार्य।

f=([c,...s])=>s+s?c+`(${f(s)})`:c

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


1
के साथ अच्छी चाल 1/s
ETHproductions

([c,...s])आपके साथ सुपर अच्छी चाल टिप लिखना चाहिए
edc65

@ edc65 स्पष्टता के लिए, यह ETHproductions द्वारा सुझाया गया था।
अरनौलड

ओ ठीक है, किसी को भी एक टिप लिखना है
edc65

1
@jmingov धन्यवाद, मुझे पता है। यहाँ बिंदु DA का उपयोग बहुत ही कम तरीके से एक स्ट्रिंग को स्लाइस करने के लिए किया जा रहा है (.lice से बहुत छोटा)
edc65

26

ब्रेनफक, 42 40 बाइट्स

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

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

Ungolfed:

>+[-->+[<]>-]>+     # count to 40 (ASCII for open paren)
>>                  # move to the input holder
,.                  # input the first byte and output it
,                   # input the next byte
[                   # while it's not zero
  <+                # move to the input counter and increment it
  <.                # move to the open paren and output it
  >>.               # move to the input holder and output it
  ,                 # input the next byte
]
<<+                 # move to the open paren and increment it to a close
>                   # move to the input counter
[                   # while it's not zero
  -                 # decrement it
  <.                # move to the close paren and output it
  >                 # move to the input counter
]


आह अच्छा, धन्यवाद। यह मेरा पहला बीएफ सबमिशन (मेरा पहला बीएफ प्रोग्राम है, वास्तव में) इसलिए मुझे यकीन है कि बहुत सारे अन्य संभावित सुधार भी हैं।
एलेक्स हॉवान्स्की

आपको बहुत से ब्रैकेट की एक जोड़ी मिली है !?
वलोकलिटी

यह स्ट्रिंग के अंतिम चरित्र के बाद कोष्ठक की एक खाली जोड़ी रखता है। मुझे नहीं पता कि क्या कोई तरीका है कि इसे जोड़ने के बिना बचने के लिए ","। लूप से पहले और आउटपुट ऑर्डर को लूप के अंदर स्विच करना, जिससे प्रोग्राम दो बाइट्स लंबा हो जाता है।
user59468

आह, आप सही कह रहे हैं। मैंने बहुत ध्यान से नहीं पढ़ा और आखिरी पत्र को दूसरों की तरह फंक्शन कॉल कर दिया।
एलेक्स हॉवान्स्की


17

ब्रेनफक, 44 बाइट्स

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

एक समय में एक बाइट पढ़ता है, पहले को छोड़कर हर एक के सामने एक ओपन-परन रखता है, अंत में समान संख्या में क्लोज-पार्न डालता है।


+++++[->++++++++<],.,[>.>+<<.,]>+>[-<.>]थोड़ा छोटा है।
टेसरैक्ट

16

हास्केल, 30 बाइट्स

f[x]=[x]
f(a:b)=a:'(':f b++")"

प्रयोग उदाहरण: f "Nest a string"-> "N(e(s(t( (a( (s(t(r(i(n(g))))))))))))"

अगले चार ले लो, एक (के बाद, एक पुनरावर्ती कॉल के साथ सभी लेकिन पहले चार के बाद, एक के बाद )


2
यदि हम जवाबों को हास्केल के रूप में व्याख्या करते हैं, तो हम इसे सिर्फ हल कर सकते हैं f=Data.List.intersperse '$'! यही कारण है कि हमें देता है f "Nest a string"-> "N$e$s$t$ $a$ $s$t$r$i$n$g"
porglezomp

बस आपको यह बताने की इच्छा है कि @fornit (वह टिप्पणी करने के लिए पर्याप्त प्रतिनिधि नहीं है) ने f[]=[]आपके आधार के आधार मामले के रूप में उपयोग करने का सुझाव दिया f[x]=[x]। मैं हास्केल से परिचित नहीं हूं इसलिए मुझे नहीं पता कि यह वैध है या नहीं, मैं आपको न्याय करने दूंगा।
दादा

@ दादा: यह काम नहीं करेगा, क्योंकि यह ()अंतिम पत्र के पीछे एक अतिरिक्त लगाएगा , जैसे f "abc"-> "a(b(c()))"
nimi

यह भी खाली इनपुट को हैंडल नहीं करता है। सबसे छोटा सही संस्करण मैं एक अलग तकनीक के साथ 44 के साथ आ सकता हूं f=(++).intersperse '('<*>drop 1.map(\_->')'):।
जॉन पुरडी

@JonPurdy: हमें खाली इनपुट को संभालने की आवश्यकता नहीं है। एक और 17 बाइट्स की intersperseआवश्यकता है import Data.List
नौ

16

जेली , 9 8 बाइट्स

@ बाइट के लिए -1 बाइट धन्यवाद ( लंबाई के स्थान पर L, और दोहराएं, मोल्ड का उपयोग करें x)

j”(³”)ṁṖ

TryItOnline

कैसे?

j”(³”)ṁṖ - Main link: s     e.g. "code-golf"           printed output:
j        - join s with
 ”(      - literal '('           "c(o(d(e(-(g(o(l(f"
    ”)   - literal ')'
      ṁ  - mould like
   ³     - first input, s        ")))))))))"
         - causes print with no newline of z:          c(o(d(e(-(g(o(l(f
       Ṗ - pop (z[:-1])          "))))))))"            c(o(d(e(-(g(o(l(f
         - implicit print                              c(o(d(e(-(g(o(l(f))))))))

3
Btw, ³वास्तव में जेली को वर्तमान रिटर्न मूल्य को प्रिंट करने का कारण बनता है , इसलिए आपके पास कभी भी दो सूचियों की सूची नहीं होती है।
डेनिस

13

रेटिना , 22 17 बाइट्स

\1>`.
($&
T`(p`)_

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

वैकल्पिक रूप से:

S_`
\`¶
(
T`(p`)_

व्याख्या

मैं हमेशा यह भूल जाता हूं कि हर चीज को अंतिम परिणाम में बदलने और एक बार में आउटपुट करने के बजाय सामान को प्रिंट करना संभव है ...

\1>`.
($&

यहां \रेटिना से कहा गया है कि वह इस चरण के परिणाम को बिना किसी रेखाचित्र के फीडबैक के छापे। 1>एक सीमा जिसका अर्थ है कि regex के पहले मैच अनदेखा किया जाना चाहिए है। मंच के लिए ही, यह केवल प्रत्येक चरित्र को बदल देता है ( .) (उस चरित्र के साथ पहले को छोड़कर । दूसरे शब्दों में, यह (प्रत्येक जोड़े के पात्रों के बीच सम्मिलित होता है। इनपुट के लिए abc, यह इसे (और प्रिंट) में बदल देता है

a(b(c

सभी को छोड़ दिया जाता है जो समापन कोष्ठक को मुद्रित करता है:

T`(p`)_

यह एक लिप्यंतरण के साथ किया जाता है जो स्ट्रिंग से अन्य सभी मुद्रण योग्य ASCII वर्णों को बदल देता (है )और हटा देता है।


धत तेरे की। इतना तेज ...
mbomb007

@ mbomb007 ... और इष्टतम से दूर। ;)
मार्टिन एंडर

13

> <> , 19 18 बाइट्स

io8i:&0(.')('o&!
o

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

व्याख्या

पहली पंक्ति एक इनपुट लूप है जो इनपुट के अंतिम वर्ण तक सब कुछ प्रिंट करता है (सभी सहित () और )स्टैक पर सही मात्रा छोड़ देता है :

io                 Read and print the first character.
  8                Push an 8 (the x-coordinate of the . in the program).
   i               Read a character. Pushes -1 at EOF.
    :&             Put a copy in the register.
      0(           Check if negative. Gives 1 at EOF, 0 otherwise.
        .          Jump to (8, EOF?). As long as we're not at EOF, this is
                   a no-op (apart from popping the two coordinates). At EOF
                   it takes us to the second line.
         ')('      Push both characters.
             o     Output the '('.
              &    Push the input character from the register.
               !   Skip the 'i' at the beginning of the line, so that the next
                   iteration starts with 'o', printing the last character.

एक बार जब हम ईओएफ से टकराते हैं, तो निर्देश सूचक दूसरी पंक्ति पर समाप्त होता है और हम बस oएक लूप में निष्पादित करते हैं ), सभी को प्रिंट करते हैं , जब तक कि स्टैक खाली नहीं होता है और प्रोग्राम त्रुटियां समाप्त हो जाती हैं।


12

सी #, 32 बाइट्स

F=s=>*s+++(0<*s?$"({F(s)})":"");

यह मेमना एक स्थिर तरीका होना चाहिए, क्या मुझे उस आवश्यकता के लिए कोई अतिरिक्त बाइट्स गिनने की आवश्यकता होगी? आम तौर पर मैं C # में पुनरावृत्ति के लिए एक लैम्ब्डा का उपयोग नहीं करता, लेकिन फिर मुझे लगता है कि यह पुनरावृत्ति का उपयोग नहीं करने के लिए कम होगा।

/*unsafe delegate string Function(char* s);*/ // Lambda signature
/*static unsafe Function*/ F = s =>
    *s++                               // Take first char and increment pointer to next one
    + (0 < *s                          // Check if any chars left
        ? $"({F(s)})"                  // If so concat surrounding parens around recursion
        : ""                           // Otherwise done
    )
;

परिभाषा को घोषित और गिना जाना चाहिए
बिल्ली

11

जे, 13 बाइट्स

(,'(',,&')')/

जम्मू दाएं-से-बाएं निष्पादित करता है इसलिए सम्मिलित क्रिया का उपयोग करके /, इनपुट स्ट्रिंग के अक्षरों को कम करने के लिए एक क्रिया का उपयोग किया जा सकता है।

प्रयोग

   f =: (,'(',,&')')/
   f 'Nest a string'
N(e(s(t( (a( (s(t(r(i(n(g))))))))))))
   f 'foobar'
f(o(o(b(a(r)))))
   f '1234567890'
1(2(3(4(5(6(7(8(9(0)))))))))
   f 'code-golf'
c(o(d(e(-(g(o(l(f))))))))

आप प्रत्येक कमी के बीच आंशिक आउटपुट का निरीक्षण कर सकते हैं।

   |. f\. 'Hello'
o            
l(o)         
l(l(o))      
e(l(l(o)))   
H(e(l(l(o))))

व्याख्या

(,'(',,&')')/  Input: string S
(          )/  Insert this verb between each char and execute (right-to-left)
      ,&')'      Append a ')' to the right char
  '(',           Prepend a '(' to that
 ,               Append to the left char

9

आर, 61 बाइट्स

cat(gsub("(?<=.)(?=.)","(",x,F,T),rep(")",nchar(x)-1),sep="")

रेगेक्स "(तब catऔर फिर repजोड़ें") "एन -1 बार के साथ वर्णों के बीच रिक्त स्थान पाता है और प्रतिस्थापित करता है।


वास्तव में एफ को समाप्त करके 1 बाइट को यहां घटाया जा सकता है , इस तरह , ऐसा इसलिए है क्योंकि प्रत्येक प्रविष्टि में पहले से ही एक डिफ़ॉल्ट सेटिंग है, इसलिए कॉमा के बीच एक खाली चरित्र छोड़ने से उसके डिफ़ॉल्ट का उपयोग करने के लिए ign.case विकल्प का कारण होगा। लेकिन आप शायद जानते हैं कि ... अच्छी तरह से काम किया!
सुमनेर १18

8

PowerShell v2 +, 46 बाइट्स

param([char[]]$a)($a-join'(')+')'*($a.count-1)

इनपुट स्ट्रिंग लेता है, char-अरे यह है , ओपन परेंस के -joinसाथ एरे को एक साथ जोड़ते हैं (, फिर बंद हुए बर्तनों की उचित संख्या पर कॉन्टेनेट करते हैं )


8

एसीसी !! , 129 बाइट्स

बुरा नहीं एक काफी क्रिया के लिए बुरा टारपीट ...

N
Count i while _%128-9 {
Count x while _/128%2 {
Write 40
_+128
}
Write _%128
_+128-_%128+N
}
Count j while _/256-j {
Write 41
}

(हां, वह सब व्हाट्सएप अनिवार्य है।)

नोट: Acc की इनपुट सीमाओं के कारण !! , कुछ अंत परिसीमन के बिना वर्णों की मनमानी स्ट्रिंग को पढ़ना असंभव है। इसलिए, यह कार्यक्रम इनपुट की उम्मीद करता है (स्टड पर) एक टैब चरित्र के बाद एक स्ट्रिंग के रूप में।

एसीसी !! ?

यह एक ऐसी भाषा है जिसे मैंने बनाया है जो केवल अनुपयोगी प्रतीत होती है । एकमात्र डेटा प्रकार पूर्णांक है, एकमात्र नियंत्रण प्रवाह निर्माण Count x while yलूप है, और डेटा को संग्रहीत करने का एकमात्र तरीका एक एकल संचायक है _। विशेष मूल्य Nऔर Writeकथन का उपयोग करते हुए, इनपुट और आउटपुट एक समय में एक वर्ण किया जाता है । इन सीमाओं के बावजूद, मुझे पूरा यकीन है कि Acc !! ट्यूरिंग-पूर्ण है।

व्याख्या

Acc में बुनियादी रणनीति !! प्रोग्रामिंग मॉड्यूलेटर %और पूर्णांक डिवीजन का उपयोग /संचयकर्ता को वैचारिक रूप से विभाजित करने के लिए करता है, जिससे यह एक ही बार में कई मानों को संग्रहीत कर सकता है। इस कार्यक्रम में, हम तीन ऐसे खंडों का उपयोग करते हैं: निम्नतम-ऑर्डर सात बिट्स ( _%128) इनपुट से एक एएससीआईआई कोड स्टोर करते हैं; अगले बिट ( _/128%2) एक ध्वज मूल्य संग्रहीत करता है; और बचे हुए बिट्स ( _/256) हमें आवश्यक क्लोज़-पार्न्स की संख्या गिनेंगे।

Acc में इनपुट !! विशेष मूल्य से आता है N, जो किसी एकल वर्ण को पढ़ता है और अपने ASCII कोड का मूल्यांकन करता है। किसी भी कथन में केवल एक अभिव्यक्ति होती है जो संचयकर्ता को उस अभिव्यक्ति का परिणाम प्रदान करती है। तो हम पहले अक्षर के कोड को संचायक में संग्रहीत करके शुरू करते हैं।

_%128सबसे हाल ही में पढ़ा गया चरित्र संग्रहीत करेगा। तो पहला लूप चलता है जबकि _%128-9नॉनजरो होता है - अर्थात, जब तक कि वर्तमान वर्ण एक टैब नहीं है।

लूप के अंदर, हम ( तब तक प्रिंट करना चाहते हैं जब तक कि हम पहले पुनरावृत्ति पर हों। चूंकि Acc !! कोई बयान नहीं है, तो हमें सशर्त के लिए लूप का उपयोग करना होगा। हम संचायक के 128 बिट का उपयोग _/128%2ध्वज मूल्य के रूप में करते हैं। पहले पास पर, संचायक में केवल एक चीज ASCII मान <128 है, इसलिए ध्वज 0 है और लूप छोड़ दिया गया है। प्रत्येक बाद के पास पर, हम यह सुनिश्चित करेंगे कि ध्वज 1 है।

Count xलूप के अंदर (जब भी झंडा 1 होता है), हम एक ओपन पेरेन (ASCII 40) लिखते हैं और संचायक में 128 जोड़ते हैं, जिससे ध्वज को 0 पर सेट किया जाता है और लूप से बाहर निकलता है। यह उस मूल्य को बढ़ाने के लिए भी होता है _/256, जिसका हम आउटपुट के रूप में क्लोज-पैरेंस के हमारे टैली के रूप में उपयोग करेंगे।

झंडे के मूल्य के बावजूद, हम सबसे हालिया इनपुट चार लिखते हैं, जो कि बस है _%128

अगला असाइनमेंट ( _+128-_%128+N) दो काम करता है। सबसे पहले, 128 जोड़कर, यह अगली बार लूप के माध्यम से झंडा सेट करता है। दूसरा, यह _%128स्लॉट को शून्य करता है , दूसरे वर्ण को पढ़ता है, और इसे वहां संग्रहीत करता है। फिर हम लूप करते हैं।

जब Count iलूप बाहर निकलता है, तो हमने सिर्फ एक टैब वर्ण पढ़ा है, और संचायक मान इस तरह टूट जाता है:

  • _%128: 9(टैब वर्ण)
  • _/128%2: 1(झंडा)
  • _/256: पढ़ने वाले पात्रों की संख्या, घटा 1

(माइनस 1 क्योंकि हम केवल मुख्य लूप के माध्यम से पहले पास के दौरान एक बार संचायक में 128 जोड़ते हैं।) अब हमें जो कुछ भी चाहिए वह क्लोज-परेंस हैं। प्रत्येक बार एक पास-परन (ASCII ) लिखते हुए Count j while _/256-jलूप्स । देखा!_/25641


8

जावा 7,81 79 बाइट्स

1बाइट को बचाया । केविन को धन्यवाद।

String f(char[]a,String b,int l){return l<a.length?f(a,b+'('+a[l],++l)+')':b;}

अच्छा पुनरावर्ती दृष्टिकोण। शॉर्ट-लूप के मुकाबले मैं पोस्ट करने वाला था। +1 दो चीजें जो आप गोल्फ कर सकते हैं: l!=a.length-> l<a.lengthऔर b=b+'('+a[l],++l)+')'-> b+="("+a[l],++l)+")"( -2 बाइट्स )
केविन क्रूज़सेन

@KevinCruijssen b+="("+a[l],++l)+")"आपको 144141148))) देता है, और BTW b+"("+a[l],++l)+")"सही है। और यह मेरी ( !=) की बहुत मूर्खतापूर्ण गलती थी ।
नंबर

नहीं, b+='('+a[l],++l)+')'देता है 144141148, लेकिन b+="("+a[l],++l)+")"नहीं। कोष्ठक चार-उद्धरणों के बजाय स्ट्रिंग-उद्धरण से घिरा हुआ है।
केविन क्रूज़सेन

मैं अपने संस्करण (जावा 7 में 82 बाइट्स) को केवल इनपुट स्ट्रिंग के रूप में पैरामीटर के रूप में पोस्ट करता हूं। शब्दशः लेकिन यह बुरा नहीं है;) यदि आपको कुछ बदलना है: codegolf.stackexchange.com/a/96745/59739
AxelH

7

एपीएल, 19 बाइट्स

{∊('(',¨⍵),')'⍴⍨⍴⍵}

स्पष्टीकरण:

{
  ('(',¨⍵)          ⍝ join a ( to each character in ⍵          
          ,')'⍴⍨⍴⍵  ⍝ for each character in ⍵, add an ) to the end
 ∊                  ⍝ flatten the list 
                   }

वैकल्पिक समाधान, 19 बाइट्स:

{⊃{∊'('⍺⍵')'}/⍵,⊂⍬}

स्पष्टीकरण:

{              
              ⍵,⊂⍬  ⍝ add an empty list behind ⍵ (as a base case)
  {         }/      ⍝ reduce with this function:
    '('⍺⍵')'        ⍝   put braces around input
   ∊                ⍝   flatten the list
 ⊃                  ⍝ take first item from resulting list
                   }

6
आप ऐसी भाषा के लिए कीबोर्ड कहां से खरीदते हैं !!!
रॉनान डीजेरो

@ रोनडेजेरो शायद सिर्फ क्लैट, शिफ्ट, ऑल्ट, कैप्सलॉक, न्यूक्लॉक इत्यादि का उपयोग करके रीमैपिंग कीज हैं
एरियाना

7

MATL , 16 बाइट्स

t~40+v3L)7MQ3L)h

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

व्याख्या

t     % Implicit input. Duplicate
      % STACK: 'foobar', 'foobar'
~     % Negate. Transforms into an array of zeros
      % STACK: 'foobar', [0 0 0 0 0 0]
40+   % Add 40, element-wise. Gives array containing 40 repeated
      % STACK: 'foobar', [40 40 40 40 40 40]
v     % Concatenate vertically. Gives a two-row char array, with 40 cast into '('
      % STACK: ['foobar'; '((((((']
3L)   % Remove last element. Converts to row vector
      % STACK: 'f(o(o(b(a(r'
7M    % Push array containing 40 again
      % STACK: 'f(o(o(b(a(r', [40 40 40 40 40 40]
Q     % Add 1, element-wise 
      % STACK: 'f(o(o(b(a(r', [41 41 41 41 41 41]
h     % Concatenate horizontally, with 41 cast into ')'
      % STACK: 'f(o(o(b(a(r)))))'
      % Implicit display

7

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

4 बाइट्स से बाहर निकलने के लिए @Ton Hospel का शुक्रिया ।

कोड + के 24 बाइट्स -F

$"="(";say"@F".")"x$#F

आवश्यकताएं -Fऔर -Eझंडे:

echo -n "I love lisp" | perl -F -E '$"="(";say"@F".")"x$#F'

ध्यान दें कि यदि आप पर्ल के पुराने संस्करण पर यह कोशिश करते हैं, तो आपको -aध्वज जोड़ने की आवश्यकता हो सकती है ।


एक और दिलचस्प तरीका (हालांकि थोड़ा अधिक: 28 बाइट्स):
मुझे इस एक अधिकार को प्राप्त करने में मदद करने के लिए एक बार फिर टन हास्पेल का धन्यवाद।

#!/usr/bin/perl -p
s/.(?=.)/s%\Q$'%($&)%/reg

(इसका उपयोग करने के लिए, फ़ाइल के अंदर कोड डालें और इसे कॉल करें echo -n "Hello" | perl nest.pl)


आप के ""बाद की जरूरत नहीं है -F। आपको यह भी ज़रूरत नहीं है कि -lयदि आप मांग करते हैं कि इनपुट स्ट्रिंग को अंतिम न्यूलाइन के बिना दर्ज किया गया है:echo -n Hello | program
टन हास्पेल

@ टोनहॉर्फ़ राइट, मैं उस व्यवहार के बारे में भूल गया (या नहीं जानता, निश्चित नहीं) -F, धन्यवाद। (मैं सोच रहा था कि अंतिम न्यूलाइन के बिना इनपुट कैसे मिलेगा, इसके लिए भी धन्यवाद)
दादा

perl -F -E '$"="(";say"@F".")"x$#F'
टन हास्पेल

आप अपने अन्य विचार को कुछ इस तरह से काम कर सकते हैं s/.(?=.)/s%$'%($&)%/reg, लेकिन यह निश्चित रूप से रेगेक्स
मेटाचैटर्स से

@ टोनहोस उस सभी के लिए बहुत बहुत धन्यवाद! (दूसरे के बारे में, मैंने \Qregex metacharacters का समर्थन करने के लिए जोड़ा ) :-)
दादा

6

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

->s{s.chars*?(+?)*~-s.size}

व्याख्या

->s{                       # Declare anonymous lambda taking argument s
    s.chars                # Get the array of chars representing s
           *?(             # Join the elements back into a string using "("s as separators
              +?)*~-s.size # Append (s.size - 1) ")"s to the end

6

पर्ल, 24 23 बाइट्स

के लिए +1 शामिल है -p

STDIN पर बिना न्यूलाइन के स्ट्रिंग दें (या -lप्रोग्राम में कोई विकल्प जोड़ें )

echo -n Hello | nest.pl

nest.pl:

#!/usr/bin/perl -p
$\=")"x s/.(?=.)/$&(/g

6

GNU sed, 37 35 31 बाइट्स ( -rतर्क के लिए 30 +1 )

शुद्ध linux sed घोल

:;s/([^(])([^()].*)$/\1(\2)/;t
  1. निर्गमन का नामकरण :; फिर इसके साथ पुनरावर्ती कॉलिंगt
  2. 2 रेगेक्स समूह बनाना:
    • पहला समूह दो लगातार चरित्रों का पहला चार्ट है जो कोष्ठक नहीं हैं
    • दूसरा समूह पंक्ति के अंत तक लगातार दूसरा वर्ण और शेष स्ट्रिंग है
  3. दूसरे समूह के चारों ओर कोष्ठक जोड़ें \1 ( \2 )

संपादित करें : 4 अक्षरों को हटाने में मदद करने के लिए @manatwork का धन्यवाद!

ऑनलाइन परीक्षक


2
केवल 2 समूहों का उपयोग करना पर्याप्त लगता है। 2 और 3 को एक साथ कैप्चर करें।
23

ओह, और क्षमा करें, लेकिन आपके कोड को काम करने के लिए दुभाषिया के डिफ़ॉल्ट व्यवहार को बदलने के लिए आवश्यक कमांड लाइन विकल्प, आकार की गणना में शामिल होना होगा। -eदुभाषिया के लिए कोड पारित करने के लिए मुश्किल से आवश्यक है। (ठीक है, sedइसके बिना भी खुश है।) तो आपके लिए sed -re '…'+1 गिना जाता है।
8

1
खाली लेबल एक GNU sed सुविधा / बग हैं, इसलिए शायद शीर्षक GNU sed होना चाहिए।
रिले

6

जेलिफ़िश , 19 18 बाइट्स

P
,+>`
_  {I
/'␁'(

चरित्र बाइट मान के साथ unprintable नियंत्रण चरित्र है 0x1इसे ऑनलाइन आज़माएं!

व्याख्या

यह एक बहुत ही जटिल जेलिफ़िश कार्यक्रम है, क्योंकि कई स्थानों में कई मूल्यों का उपयोग किया जाता है।

  • I कच्चा इनपुट है, STDIN से स्ट्रिंग के रूप में पढ़ा जाता है।
  • '(चरित्र शाब्दिक है (
  • {(बाएं पहचान) लेता है '(और Iआदानों, और रिटर्न के रूप में '(। रिटर्न वैल्यू का वास्तव में कभी उपयोग नहीं किया जाता है।
  • `धागा है। यह प्रत्येक वर्ण के लिए {चरित्र को लौटाने के लिए संशोधित करता है , जिसके परिणामस्वरूप उसी लंबाई के साथ स्ट्रिंग होती है ।(I(I
  • >पूंछ है; यह (इनपुट के रूप में s की स्ट्रिंग लेता है और पहले वर्ण को काट देता है।
  • +तर्क के रूप में लेता है (और unprintable बाइट स्ट्रिंग , और प्रत्येक वर्ण के लिए बाइट मान (1) जोड़ता है। यह एस के बराबर लंबाई की स्ट्रिंग देता है )। चरित्र का उपयोग गारंटी देता है कि वापसी मूल्य एक स्ट्रिंग है, और पूर्णांकों की सूची नहीं है।
  • निचले बाएं कोने पर, /अप्राप्य बाइट लेता है, और एक फ़ंक्शन देता है जो दो तर्क लेता है, और दूसरे तर्क को पहले एक बार (बाइट मान 1 के बाद से) के साथ जोड़ देता है।
  • _इस समारोह लेता है, कम के तर्कों पकड़ लेता है {(जो थे '(और I), और उनके साथ funtion कहता है। यह चरित्र (के हर जोड़े के बीच के चरित्र को सम्मिलित करता है I
  • ,इस स्ट्रिंग को s के स्ट्रिंग के साथ जोड़ता है ), और Pपरिणाम प्रिंट करता है।

5

05AB1E , 22 21 19 18 बाइट्स

¤Ug<©FN¹è'(}X®')×J

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

स्पष्टीकरण:

¤Ug<©FN¹è'(}X®')×J #implicit input, call it A                                 
¤U                 #push the last letter of A, save it to X
  g<©              #push the length of A, subtract 1, call it B and save it to register_c
     F     }       #repeat B times
      N¹è          #push the Nth char of A
         '(        #push '('
            X      #push X
             ®')×  #push ')' repeated B times
                 J #join together
                   #implicit print

5

PHP, 63 बाइट्स

<?=str_pad(join("(",$s=str_split($argv[1])),count($s)*3-2,")‌​");

पिछला संस्करण 64 बाइट्स

<?=join("(",$s=str_split($argv[1])).str_pad("",count($s)-1,")");

1
यदि आप कॉल के परिणाम के बदले $ s सेट करते हैं , और फिर <?=इसके बजाय का उपयोग करके आप दो बाइट्स बचा सकते हैं , और उसके बाद उपयोग कर सकते हैंecho str_split$argv[1]count($s)strlen($s)
एलेक्स हॉवास्की

2
63 बाइट्स: <?=str_pad(join("(",$s=str_split($argv[1])),count($s)*3-2,")");- wordwrapस्प्लिट / बीट कॉम्बिनेशन को हरा देगा, लेकिन अगर इनपुट में व्हॉट्सएप है तो दुर्भाग्य से फेल हो जाएगा।
टाइटस

@ टिट्स अच्छा विकल्प धन्यवाद
जॉर्ग ह्यूल्सरमैन

4

विम, 17 बाइट्स

$qqha(<Esc>A)<Esc>%h@qq@q

अंत से शुरुआत तक जाता है, क्योंकि अन्यथा आप उस )एस पर यात्रा करते हैं जो आप पहले ही लिख चुके हैं। असफल होने के haबजाय उपयोग करता है iजब यह शुरुआत में पहुंचता है।

आमतौर पर, आप इस तरह से दो अलग-अलग आवेषण नहीं करेंगे; आप C()<Esc>Pएक स्ट्रोक को बचाने के लिए कुछ करना चाहेंगे । लेकिन स्थिति इस बार भी काम नहीं करती है।


आप <End>डालने मोड को छोड़ने और करने के बजाय इन्सर्ट मोड में कुंजी का उपयोग कर सकते हैंA
ब्लैककैप

@BlackCap यह बाइट नहीं है। मुझे बाइट्स के बजाय स्ट्रोक की गणना करने की आवश्यकता होगी। (और विमगॉल्फ एक बेहतर गेम है जब आप कर्सर कुंजी पर प्रतिबंध लगाते हैं, हालांकि यहां अंतर तुच्छ है।)
udioica

4

ब्रेन-फ्लैक 103 97 बाइट्स

-C के लिए +3 शामिल है

{({}<><(((((()()){}()){}){}){})>)<>}<>({}<([][()]){({}[()()]<(({})()<>)<>>)}{}>){({}<>)<>}<>{}

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


स्पष्टीकरण:

#reverse the stack and put a 40 between every number
{({}<><(((((()()){}()){}){}){})>)<>}<>
{                                  }   #repeat this until the stack is empty
 ({}                            )      #pop the top and push it after
    <>                                 #switching stacks and
      <(((((()()){}()){}){}){})>       #pushing a 40 (evaluated as 0) 
                                 <>    #switch back to the first stack
                                    <> #switch to the stack that everything is on now    

#put as many )s on the other stack as needed
({}                                      ) #pop the top letter and put it  back
                                           #after doing the following
                                           #This leaves ( on the top
   <                                    >  #evalute this part as 0
    ([][()])                               #push the height of the stack minus one
            {                        }    #repeat until the "height" is 0
             ({}[()()]              )     #pop the "height" and push is minus two
                      <            >      #evaluate to 0
                       (        )         #push:
                        ({})              #the top of the stack (putting it back on)
                            ()            #plus one onto
                              <>          #the other stack
                                 <>       #switch back to the other stack

                                      {}  #pop what was the height of the stack

#move the string of letters and (s back, reversing the order again
{        }     # repeat until all elements are moved
 (    )        # push:
  {}           # the top of the stack after
    <>         # switching stacks
       <>      # switch back to the other stack
          <>   # switch to the stack with the final string
            {} #pop the extra (

मुझे इससे हराएं। +1
DJMcMayhem

हम्म। मैंने सोचा था कि 40 पुन: उपयोग एक बड़ी पूर्णांक फिर से धक्का आप बाइट्स का एक बहुत बचत होगी से बचने के लिए, लेकिन सबसे अच्छा मैं ऊपर आ सकते हैं के साथ है {({}<><(((((()()){}()){}){}){})>)<>}<>({}<(({})<>())><>)([]){({}[()()]<(<>({})<>)>)}{}{}{({}<>)<>}<>{}जो दो बाइट्स लंबे समय तक है ...
DJMcMayhem

मुझे 40 का पुन: उपयोग करने के लिए विचार देने के लिए धन्यवाद। मैंने इसे 95 + 3 पर ले लिया। -aवैसे भी ब्रेन-फ्लैक में यह 3 बाइट्स क्यों है ?
रिले

ओह, अच्छा काम! +3बाइट्स विशेष आदेश पंक्ति ध्वजों के लिए मानक । जो दुर्भाग्यपूर्ण है, लेकिन मैं कुछ कर सकता हूं। मैं वास्तव में इसे छोटा करने के तरीकों के बारे में सोच रहा हूं, लेकिन मुझे यकीन नहीं है कि अभी तक कैसे।
डीजेएमकेम

क्या यह सामान्य रूप से 2 बाइट्स नहीं है? के लिए एक -और ध्वज के लिए एक? आपके पास सामान्य निष्पादन के लिए एक झंडा हो सकता है जैसे पर्ल के साथ -e। इस तरह यह केवल 1 अतिरिक्त बाइट होगा।
रिले

4

दिल्लोग एपीएल , 14 बाइट्स

⊃{⍺,1⌽')(',⍵}/

यह एक है के ऊपर की और{ }/

(पहले तत्व प्राप्त करें) के बाद लागू किया जाएगा { }/(एक मेमने की कमी)

⍺,1⌽')(',⍵- बाएं तर्क ( ) के साथ मिला हुआ ( ,) बाईं ओर एक तत्व द्वारा रोटेशन ( 1⌽) स्ट्रिंग के ')('साथ समेटे हुए ( ,) सही तर्क ( ) के साथ

एपीएल में कमी, दाएं से बाएं गुना, जैसा कि यहां आवश्यक है



3

> <> , 37 बाइट्स

i:0(?\'('
$,2l~/~
/?(2:<-1$')'
>~ror:

पंक्ति द्वारा पंक्ति

  1. प्रत्येक चैरिटी को प्रत्येक ओपनिंग कोष्ठक के बाद इनपुट से धकेलता है
  2. ईओएफ और अंतिम उद्घाटन कोष्ठक को हटाता है और स्टैक की लंबाई को धक्का देता है
  3. समापन कोष्ठक को धकेलने के लिए आधी स्टैक लंबाई के साथ तुलना का उपयोग करता है
  4. स्टैक की सामग्री को प्रिंट करता है

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

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