番号を追加する


15

かなり簡単な課題:文字列と数値の2つの入力を受け取ります(数値はの"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*¶

改行で区切られた2つの文字列を入力として受け取ります。

オンラインでお試しください!


忍者。スペースが適切なセパレータの選択であるかどうかはわかりませんが。
ジョンドヴォルザーク

結構、タブレーターに変更されました。
デニス

セミコロンはどうですか?そのいずれかをエスケープする必要はありません。
ジョンドヴォルザーク

ああ、私はOPの説明を読みました。改行です。
デニス

7

Python 2、30バイト

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

オンラインでお試しください!


1
すべての数字で数字を作成するための素敵なトリック!
TheLethalCoder

何が起こっているのか分かりませんが、私にとっては(Windowsのv2.7.11)、で評価されるため、でa終わると失敗します。出力の入力。あなたのTIOリンクは評価しませんので、私は何が起こっているのか分からない、長いへ"L"56**71727094849536La="abcdL"; b="59""abcd59"56**7
wnnmaw






4

Japt、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数字で終わらない場合は機能しません。の*代わりに、正規表現で使用してみてください+TIO
シャギー

数字で終わる場合U 動作しません。私は、あなたがしなければならないと思うr"%d+$" +V
ETHproductions

ええ、私はそれを実現しました。今すぐ修正する必要があります
ルーク

4

パイソン244 41 39バイト

編集: @Dom Hastingsのおかげで-4バイト。正規表現はあまり使いません。

編集2:数値が文字列として解釈される可能性があることを指摘する@totallyhumanのおかげで-2バイト

期待されていた...

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

文字列の末尾の数字を削除し、数字を追加するだけです

オンラインでお試しください!


正規表現を\d*$に置き換えた場合、 バイトを節約するために""`` y``に置き換えることができますか?
ドムヘイスティングス

@DomHastings:いいね!正規表現はあまり使用しないので、ありがとう!
ニールA.

1
yパラメータも文字列として使用できます。
完全に人間

@totallyhuman:その細部にGをあてています。ありがとう!
ニールA.

4

ピップ9 7バイト

a<|XD.b

@DLoscで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

JavaScript(ES6)、28 26 25バイト

x=>y=>x.replace(/\d*$/,y)
  • ニールが朝早くゴルフをしてはいけない理由を思い出させてくれたおかげで、1バイト節約できました!

1
される?必要?
ニール


3

C#、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}

期待されるインターフェイスについてはわかりません。これは、2つの入力を呼び出し引数として受け入れるプロシージャとして実行されます。stdinから入力を読み取り、結果をstdoutに出力するスタンドアロンスクリプトに変換するには、次の行が必要です。

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

または、すべて「インライン」で実行します。

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

regsubは、RE、元の文字列、および一致する部分を置き換える文字列を受け取ります。


2

Mathematica、48バイト

すでにMathematicaソリューション(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

a5b3複数桁のテストケースではコードが機能しないため、バイトカウントを5増やす必要がありました。


2

Haskell、75バイト 95バイト 91 79 61バイト

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

私は正規表現なしでこれをやってみたので、多分それは劇的に改善された答えになるでしょう。また、これについてはいくつかの方法がありますので、異なるアプローチで数バイトを削ることができるかどうかはわかりません。

更新:文字列に接尾辞ではない数値が存在するテストケースに失敗していることに気付いたため、バイト単位で増加しました。今、私は正規表現がはるかに良い答えを提供するだろうと確信しています。

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
nimi

@nimi提案をありがとう!スパンとブレイク、そしてそれらがどれほど役立つかを忘れ続けています。
maple_shaft

1
|b$last$d=d++e|2>1パーツを単純にドロップすることはできませんか?すべてのテストケースは正常に動作するようです。オンラインでお試しください!
ライコニ

@Laikoni素晴らしいアイデア!あなたはちょうど私に18バイトをゴルフしました!
maple_shaft

2
いけない!Haskellについての新しいトリックやことを以前に知らなかったのは、ゴルフの私の好きな部分の一部です。
ライコニ

1

Mathematica、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




弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.