Nummern anhängen

15

Eine ziemlich einfache Herausforderung: Sie erhalten zwei Eingaben, eine Zeichenfolge und eine Zahl (die Zahl kann als Zeichenfolge verwendet werden, dh "123"anstelle von 123).

Wenn die Zeichenfolge nicht mit einer Zahl endet (dh nicht mit dem regulären Ausdruck übereinstimmt \d$), hängen Sie die Nummer einfach an das Ende der Zeichenfolge an.

Wenn die Zeichenfolge mit einer Zahl endet (dh mit dem regulären Ausdruck übereinstimmt \d+$), sollten Sie diese zuerst löschen und dann die Nummer anhängen.

Keine der Eingaben wird jemals ungültig oder leer sein (ungültig wird durch die numerische Eingabe definiert, die nicht nur Ziffern enthält)

Die Nummer wird niemals a -oder a enthalten ..

Die Zeichenfolge enthält niemals eine neue Zeile oder nicht druckbare Zeichen ohne Leerzeichen.

Testfälle:

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

Antworten:

10

Netzhaut , 5 Bytes

\d*¶

Nimmt zwei Zeichenfolgen als Eingabe, getrennt durch eine neue Zeile.

Probieren Sie es online!

Dennis
quelle
Ninja'd. Ich bin mir jedoch nicht sicher, ob das Leerzeichen eine gute Wahl für Trennzeichen ist.
John Dvorak
Fair genug, geändert in einen Tabulator.
Dennis
Wie wäre es mit einem Semikolon? Dem muss man auch nicht entkommen.
John Dvorak
Oh, ich habe gerade die Klarstellung des OP gelesen. Newline ist es.
Dennis
7

Python 2 , 30 Bytes

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

Probieren Sie es online!

Stange
quelle
1
Nizza Trick, um eine Zahl mit allen Ziffern zu erstellen!
TheLethalCoder
Nicht sicher , was los ist, aber für mich (v2.7.11 auf Windows), dies schlägt fehl , wenn aEnde mit , "L"weil 56**7auswertet zu 1727094849536L. Eingabe von a="abcdL"; b="59"Ausgaben "abcd59". Ihr TIO-Link wird nicht lange ausgewertet 56**7, sodass ich nicht weiß, was passiert
wnnmaw
6

PHP, 37 36 35 33 Bytes

<?=chop($argv[1],3**39),$argv[2];

1 Byte gespart dank Jörg Hülsermann .

user63956
quelle
1
chopas alias speichert 1 Bytes
Jörg Hülsermann
5

Perl 5, 12 Bytes

11 Byte Code + 1 für -p.

s/\d*$/<>/e

Probieren Sie es online!

Dom Hastings
quelle
1
Hehe, kam mit genau dem gleichen Code! Schön dich wieder zu sehen :)
Dada
5

Java 8, 32 Bytes

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

Nimmt Eingaben aals String, und bes spielt keine Rolle, ob es sich um einen String oder eine Ganzzahl handelt (obwohl ich im TIO-Link unten Integer verwende).

Probieren Sie es hier aus.

Kevin Cruijssen
quelle
4

Python 2 , 32 Bytes

import re
re.compile("\d*$").sub

Probieren Sie es online!

Übernimmt die Eingaben in umgekehrter Reihenfolge, beide als String.

ovs
quelle
4

05AB1E , 9 Bytes

DvTFNÜ}}«

Probieren Sie es online! Wahrscheinlich eine schlechte Lösung, aber es ist das Beste, was ich mir einfallen lassen konnte

Erläuterung

DvTFNÜ}}«
Dv     }  # For each character in input1
  TF  }   # 10 times
    NÜ    # Get 0-9 and trim it from input1
        « # Concatenate with input2
Datboi
quelle
Egal, ich habe mich geirrt.
Magic Octopus Urn
4

Japt , 10 Bytes

r"%d*$" +V

Probieren Sie es online!

 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
Luke
quelle
Funktioniert nicht, wenn Ues nicht mit einer Zahl endet. Versuchen Sie es *in der RegEx statt +. TIO
Shaggy
Jetzt funktioniert es nicht, wenn U es mit einer Zahl endet. Ich denke, Sie müssen es tunr"%d+$" +V
ETHproductions
Ja, das habe ich gerade gemerkt. Sollte jetzt behoben sein
Luke
4

Python 2 , 44 41 39 Bytes

BEARBEITEN: -4 Bytes dank @Dom Hastings. Ich verwende nicht viel reguläre Ausdrücke.

BEARBEITEN 2 : -2 Bytes dank @totallyhuman, das darauf hinweist, dass die Zahl als Zeichenfolge verwendet werden kann

War zu erwarten ...

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

Entfernt einfach die Ziffern am Ende der Zeichenfolge und hängt die Nummer an

Probieren Sie es online!

Neil A.
quelle
Wenn Sie Ihren regulären Ausdruck durch ersetzen \d*$, können Sie den ""durch `` y `` ersetzen , um einige Bytes zu sparen?
Dom Hastings
@ DomHastings: Schön! Ich benutze keine regulären Ausdrücke, vielen Dank!
Neil A.
1
Sie können den yParameter auch als Zeichenfolge verwenden.
Totalhuman
@totallyhuman: Über dieses Detail glasiert. Vielen Dank!
Neil A.
4

Pip , 9 7 Bytes

a<|XD.b

@ DLosc hat mir 2 Bytes gespart!

Probieren Sie es online!

Erläuterung

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.
steenbergh
quelle
3

Gelee , 5 Bytes

œrØD;

Probieren Sie es online!

Wie es funktioniert

œrØD;  Main link. Left argument: s. Right argument: t

  ØD   Digits; yield "0123456789".
œr     Trim these characters from the right of s.
    ;  Append t.
Dennis
quelle
3

JavaScript (ES6), 28 26 25 Byte

x=>y=>x.replace(/\d*$/,y)
  • 1 Byte gespart dank Neil , der mich daran erinnert, warum ich nicht früh morgens Golf spielen sollte!
Zottelig
quelle
1
Ist das ?erforderlich?
Neil
3

C #, 45 Bytes

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

Erläuterung:

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
TheLethalCoder
quelle
3

V , 7 4 Bytes

óä*î

Probieren Sie es online!

Dies verwendet den gleichen regulären Ausdruck wie die obige Retina-Antwort:

s:/\d*\n//
nmjcman101
quelle
2

Perl 6 , 20 Bytes

->$_,\n{S/\d*$/{n}/}
Sean
quelle
2

Tcl 32 Bytes

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

Ich bin mir nicht sicher über die erwartete Schnittstelle. Dies geschieht als Prozedur, die die beiden Eingaben als Aufrufargumente akzeptiert. Um es in ein eigenständiges Skript umzuwandeln, das Eingaben von stdin liest und das Ergebnis an stdout ausgibt, würde man die zusätzliche Zeile benötigen:

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

oder würde alles "inline" machen:

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

regsub verwendet einen RE, den Original-String und einen String, durch den der passende Part ersetzt wird.

avl42
quelle
2

Mathematica, 48 Bytes

Es gibt bereits eine Mathematica-Lösung (84 Byte).

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

Karotte , 16 21 Bytes

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

Probieren Sie es online! (Eingang ist Zeilenvorschub getrennt)

Erläuterung

$^                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

Ich musste den bytecount um 5 erhöhen, weil der Code für Testfälle wie a5b3mit mehreren Ziffern nicht funktionierte .

Kritixi Lithos
quelle
2

Haskell, 75 Bytes 95 Bytes 91 79 61 Bytes

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

Ich habe versucht, dies ohne Regex zu tun, also wäre das vielleicht eine dramatisch verbesserte Antwort. Es gibt auch ein paar Möglichkeiten, wie ich vorgehen könnte, sodass ich nicht sicher bin, ob ich ein paar Bytes mit einem anderen Ansatz rasieren kann.

UPDATE: Ich bin in Bytes aufgestiegen, weil ich festgestellt habe, dass ich den Testfall nicht bestanden habe, bei dem Zahlen in der Zeichenfolge existieren, die nicht das Suffix sind. Jetzt bin ich sicher, dass Regex eine viel bessere Antwort liefern würde.

UPDATE2: Nach einigem großartigem Feedback wurden mehr Bytes golfen!

maple_shaft
quelle
2
b=(`elem`['0'..'9'])ist kürzer als isDigit+ import. dropWhilekann ersetzt werden durch snd.span, dh =r(snd$span b$r d)++e. Wenn Sie den Test umkehren b=(`notElem`...), können Sie mit gehen d#e|b$last$d=d++e|2>1=r(snd$break b$r d)++e.
Nimi
@nimi Danke für die Vorschläge! Ich vergesse immer wieder, wie weit und wie nützlich diese sein können.
maple_shaft
1
Kann das |b$last$d=d++e|2>1Teil nicht einfach fallen gelassen werden? Alle Testfälle scheinen gut zu funktionieren. Probieren Sie es online!
Laikoni
@ Laikoni Tolle Idee! Du hast gerade 18 Bytes gespielt!
maple_shaft
2
Sei nicht! Das Erlernen neuer Tricks und Dinge über Haskell, die ich vorher nicht kannte, sind einige meiner Lieblingsteile des Golfsports.
Laikoni
1

Mathematica, 84 Bytes

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

Geben Sie 2 Zeichenfolgen ein

["ab3d5", "55"]

Ausgabe

ab3d55

J42161217
quelle
1

C (GCC) , 99 98 96 95 Bytes

Sollte in der Lage sein, dies ein bisschen runter zu golfen ...

main(c,v)char**v;{for(c=strlen(v[1]);~c*isdigit(v[1][--c]);v[1][c]=0);printf(v[1]),puts(v[2]);}

Probieren Sie es online!

Cleblanc
quelle
1

Nein , 11 Bytes

I"\d+$"-I+P

Probieren Sie es hier aus!

Schließen Sie eine Zeichenfolge bei der Eingabe in Anführungszeichen ein

Erläuterung:

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
Beta-Zerfall
quelle
0

05AB1E , 8 Bytes

DþRvyÜ}«

Probieren Sie es online!

Erläuterung:

DþRvyÜ}«
D        Duplicate input.
 þ       Get the digits of the input.
  R      Reverse the digits of the input.
   v  }  For each of the digits in the input:
    y        Push the current digit
     Ü       Trim that from the right of the input.
       « Concatenate to 2nd input.
Genosse SparklePony
quelle