नंबर लगाना


15

एक काफी सरल चुनौती: आप दो आदानों, एक स्ट्रिंग और एक नंबर (नंबर यानी एक स्ट्रिंग के रूप में लिया जा सकता है, प्राप्त होगा "123"बजाय 123)

यदि स्ट्रिंग एक संख्या में समाप्त नहीं होती है (यानी, यह रेगेक्स से मेल नहीं खाती है \d$), तो बस संख्या को स्ट्रिंग के अंत तक जोड़ दें।

यदि स्ट्रिंग एक संख्या में समाप्त होती है (यानी, यह रेगेक्स से मेल खाती है \d+$), तो आपको पहले उसे हटाना चाहिए और फिर नंबर को जोड़ना होगा।

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

नंबर में कभी भी a -या a नहीं होगा .

स्ट्रिंग में कभी भी एक नई पंक्ति, या बिना प्रिंट वाले गैर-व्हाट्सएप वर्ण नहीं होंगे।

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

abc123 + 345 -> abc345
123 + 1 -> 1
hello + 33 -> hello33
123abc123 + 0 -> 123abc0
ab3d5 + 55 -> ab3d55
onetwo3 + 3 -> onetwo3
99ninenine + 9999 -> 99ninenine9999

जवाबों:


10

रेटिना , 5 बाइट्स

\d*¶

इनपुट के रूप में दो तार लेता है, एक नई रेखा द्वारा अलग किया जाता है।

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


ninja'd। हालांकि मुझे यकीन नहीं है कि अंतरिक्ष एक अच्छा विभाजक विकल्प है।
जॉन ड्वोरक

पर्याप्त रूप से, एक सारणी में बदल गया।
डेनिस

अर्धविराम के बारे में कैसे? उस एक को भी भागने की जरूरत नहीं है।
जॉन ड्वोरक

ओह, मैंने अभी ओपी का स्पष्टीकरण पढ़ा है। न्यूलाइन है।
डेनिस

7

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

lambda a,b:a.rstrip(`56**7`)+b

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


1
सभी अंकों के साथ एक नंबर बनाने के लिए अच्छी चाल!
द लीथलकोडर

निश्चित नहीं है कि क्या चल रहा है, लेकिन मेरे लिए (विंडोज पर v2.7.11), यह तब विफल हो जाता है जब aसमाप्त होता है "L"क्योंकि 56**7मूल्यांकन करता है 1727094849536La="abcdL"; b="59"आउटपुट का इनपुट "abcd59"। आपका TIO लिंक 56**7लंबे समय तक मूल्यांकन नहीं करता है इसलिए मुझे नहीं पता कि क्या हो रहा है
wnnmaw



5

जावा 8, 32 बाइट्स

a->b->a.replaceAll("\\d*$","")+b

इनपुट aको एक स्ट्रिंग के रूप में लेता है , और इसके लिए bयह मायने नहीं रखता है कि यह स्ट्रिंग या पूर्णांक है (हालांकि मैं नीचे TIO- लिंक में इंटेगर का उपयोग करता हूं)।

इसे यहाँ आज़माएँ।



4

05AB1E , 9 बाइट्स

DvTFNÜ}}«

इसे ऑनलाइन आज़माएं! शायद एक बुरा समाधान है लेकिन यह सबसे अच्छा मैं के साथ आ सकता है

व्याख्या

DvTFNÜ}}«
Dv     }  # For each character in input1
  TF  }   # 10 times
    NÜ    # Get 0-9 and trim it from input1
        « # Concatenate with input2

कोई बात नहीं, मैं गलत था।
मैजिक ऑक्टोपस Urn

4

जाप , 10 बाइट्स

r"%d*$" +V

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

 r"%d*$" +V
Ur"%d*$" +V # Implicit input (U and V)
 r          # Remove
  "%d*$"    #   any trailing digits
U           #   from the first input
         +V # And append the second input
            # Implicit output

यदि Uकोई संख्या समाप्त नहीं होती है तो काम नहीं करता है। *इसके बजाय, RegEx में उपयोग करने का प्रयास करें +टीआईओ
झबरा

अगर U यह एक संख्या में समाप्त होता है तो अब यह काम नहीं करता है । मुझे लगता है कि आपको करना होगाr"%d+$" +V
ETHproductions

हाँ, मुझे बस एहसास हुआ। अब तय किया जाना चाहिए
ल्यूक

4

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

संपादित करें: @ बाइट हेस्टिंग्स के लिए -4 बाइट्स धन्यवाद। मैं नियमित अभिव्यक्ति का ज्यादा इस्तेमाल नहीं करता।

EDIT 2 : -2 बाइट्स @totallyhuman को धन्यवाद देते हुए कहा कि संख्या को एक स्ट्रिंग के रूप में लिया जा सकता है

उम्मीद की जानी थी ...

lambda x,y:re.sub("\d*$",y,x)
import re

बस स्ट्रिंग के अंत में अंक निकालता है और संख्या को जोड़ता है

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


यदि आप अपने रेगेक्स को बदलते हैं \d*$, तो क्या आप कुछ बाइट्स को बचाने के लिए ""`` y`की जगह ले सकते हैं ?
डोम हेस्टिंग्स

@DomHastings: अच्छा! मैं नियमित अभिव्यक्ति का उपयोग नहीं करता हूँ इसलिए बहुत धन्यवाद!
नील ए।

1
आप yपैरामीटर को एक स्ट्रिंग के रूप में भी ले सकते हैं ।
बिलकुल अमानवीय

@totallyhuman: उस विवरण पर आश्चर्य हुआ। धन्यवाद!
नील ए।

4

पिप , 9 7 बाइट्स

a<|XD.b

@ डॉल्स ने मुझे 2 बाइट्स से बचाया!

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

व्याख्या

a<|         Strip all matches off the end of 'a' (the first cmd line arg)
   XD         of the pattern \d (ordinarily, a regex would be entered as '\d', but digits 
              have a pre-existing constant XD)
     .b     Then concatenate 'b' (the second cmd line arg)
            PIP implicitly prints the results of the last operation.


3

जावास्क्रिप्ट (ईएस 6), 28 26 25 बाइट्स

x=>y=>x.replace(/\d*$/,y)
  • 1 बाइट ने नील को धन्यवाद दिया कि मुझे याद दिलाया कि मुझे सुबह-सुबह गोल्फ क्यों नहीं करना चाहिए!

1
है ?आवश्यक है?
नील


3

सी #, 45 बाइट्स

s=>n=>s.TrimEnd("0123456789".ToCharArray())+n

स्पष्टीकरण:

s=>n=>                                        // Take input
      s.TrimEnd(                              // Trim the end of the string with the specified chars
                "0123456789"                  // Create a string of the digits
                            .ToCharArray())   // Turn the string into a char array
                                           +n // Append the integer onto the end



2

Tcl 32 बाइट्स

proc s a\ b {regsub \\d*$ $a $b}

मैं अपेक्षित इंटरफ़ेस के बारे में निश्चित नहीं हूं। यह एक ऐसी प्रक्रिया के रूप में किया जाता है जो दो तर्कों को कॉल तर्क के रूप में स्वीकार करता है। इसे एक स्टैंडअलोन स्क्रिप्ट में बदलने के लिए जो स्टड से इनपुट को पढ़ता है और परिणाम को स्टडआउट के लिए आउटपुट करता है, किसी को अतिरिक्त डेटा की आवश्यकता होगी:

puts [s [gets stdin] [gets stdin]]

या यह सब "इनलाइन" करेगा:

puts [regsub \\d*$ [gets stdin] [gets stdin]]

regsub एक आरई, मूल स्ट्रिंग और एक स्ट्रिंग लेता है ताकि मिलान वाले हिस्से को बदल दिया जा सके।


2

मैथेमेटिका, 48 बाइट्स

पहले से ही एक गणितज्ञ समाधान (84 बाइट्स) है।

StringDrop[StringTrim["."<>#,_?DigitQ..]<>#2,1]&

2

गाजर , 16 21 बाइट्स

$^//^.*?(?=\d*$)/S0^#

इसे ऑनलाइन आज़माएं! (इनपुट लाइनफीड अलग है)

व्याख्या

$^                Set the stack-string to be equal to the first line in the input
/                 Set the stack-array to be equal to the matches of this regex:
 /^.*?(?=\d*$)/   The beginning of the string followed by non-digit characters at the end that are not included in the match.
S0                Convert to a string with 0 as the delimiter
^#                Append the rest of the input to the stack-string

मुझे bytecount को 5 से बढ़ाना पड़ा क्योंकि कोड a5b3कई अंको के साथ टेस्टकेस के लिए काम नहीं करता था ।


2

हास्केल, 75 बाइट्स 95 बाइट्स 91 79 61 बाइट्स

b=(`notElem`['0'..'9'])
r=reverse
d#e=r(snd$break b$r d)++e

मैंने रेगेक्स के बिना ऐसा करने की कोशिश की, ताकि शायद नाटकीय रूप से बेहतर उत्तर मिल सके। इसके अलावा कुछ तरीके हैं जो मैं इस बारे में जा सकता हूं इसलिए मैं अनिश्चित हूं अगर मैं एक अलग दृष्टिकोण के साथ कुछ बाइट्स दाढ़ी कर सकता हूं।

अद्यतन: मैं बाइट्स में चला गया क्योंकि मुझे एहसास हुआ कि मैं परीक्षण मामले को विफल कर रहा था जहां संख्याएं स्ट्रिंग में मौजूद हैं जो कि प्रत्यय नहीं हैं। अब मुझे यकीन है कि regex एक बेहतर जवाब प्रदान करेगा।

UPDATE2: कुछ बेहतरीन फीडबैक के बाद, अधिक बाइट्स गोल्फ हो गए थे!


2
b=(`elem`['0'..'9'])isDigit+ से छोटा है importdropWhileके साथ प्रतिस्थापित किया जा सकता है snd.span, यानी =r(snd$span b$r d)++e। यदि आप परीक्षण को उलटते हैं b=(`notElem`...)तो आप साथ जा सकते हैं d#e|b$last$d=d++e|2>1=r(snd$break b$r d)++e
नमि

@ नीमी सुझाव के लिए धन्यवाद! मैं स्पैन और ब्रेक के बारे में भूलता रहता हूं और वे कितने उपयोगी हो सकते हैं।
मेपल_शाफ्ट

1
क्या |b$last$d=d++e|2>1हिस्सा केवल गिराया नहीं जा सकता है? सभी परीक्षण मामले ठीक काम करने लगते हैं। इसे ऑनलाइन आज़माएं!
लाकोनी

@ लैकोनी महान विचार! तुम सिर्फ मुझे 18 बाइट्स गोल्फ!
मेपल_शाफ्ट

2
मत बनो! नई तरकीबें सीखना और हास्केल के बारे में ऐसी बातें जो मैं पहले नहीं जानता था कि मैं गोल्फ के अपने पसंदीदा हिस्सों में से कुछ हूं।
लकोनी

1

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

(k=#;T=ToCharacterCode;L=T@k;While[47<Last@L<58,w=k~StringDrop~-1;k=w;L=T@w];w<>#2)&

इनपुट 2 स्ट्रिंग्स

["ab3d5", "55"]

उत्पादन

ab3d55



1

नोथर , 11 बाइट्स

I"\d+$"-I+P

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

एक स्ट्रिंग इनपुट करते समय, इसे उद्धरण चिह्नों में संलग्न करें

स्पष्टीकरण:

I       - Push input to stack
"\d+$"  - Push string to stack
-       - Remove characters from first string which match the regex
I       - Push input to stack
+       - Append to the first string
P       - Print top item of stack

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