추가 번호


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*¶

줄 바꿈으로 구분 된 두 개의 문자열을 입력으로 사용합니다.

온라인으로 사용해보십시오!


닌자. 공간이 좋은 구분 기호인지 확실하지 않지만.
John Dvorak

충분히 공정하고 테이블 레이터로 변경되었습니다.
Dennis

세미콜론은 어떻습니까? 그 중 하나도 탈출 할 필요가 없습니다.
John Dvorak

오, 방금 OP의 설명을 읽었습니다. 줄 바꿈입니다.
Dennis

7

파이썬 2 , 30 바이트

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

온라인으로 사용해보십시오!


1
모든 숫자로 숫자를 만드는 멋진 트릭!
TheLethalCoder

무슨 일이 일어나고 있는지 잘 모르지만 나 (Windows의 v2.7.11)의 경우 평가로 a끝나기 "L"때문에 실패 56**7합니다 1727094849536L. 출력의 a="abcdL"; b="59"입력 "abcd59". 귀하의 TIO 링크가 56**7오래 걸리지 않아서 무슨 일이 일어나고 있는지
모르겠습니다






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

네, 방금 깨달았습니다. 지금 수정해야합니다
Luke

4

파이썬 2 , 44 41 39 바이트

편집 : @Dom Hastings 덕분에 -4 바이트. 나는 정규 표현식을 많이 사용하지 않습니다.

편집 2 : @totallyhuman 덕분에 숫자가 문자열로 사용될 수 있음을 지적하여 -2 바이트

기대했다 ...

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

문자열 끝의 숫자를 제거하고 숫자를 추가합니다.

온라인으로 사용해보십시오!


정규식을로 바꾸면 바이트를 절약하기 위해 `` ``를 \d*$바꿀 수 있습니까? ""y
Dom Hastings

@DomHastings : 멋지다! 나는 정규 표현식을 많이 사용하지 않으므로 감사합니다!
Neil A.

1
y매개 변수도 문자열로 사용할 수 있습니다 .
완전히 인간적인

@totallyhuman : 그 세부 사항에 유약. 감사!
Neil 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

자바 스크립트 (ES6), 28 26 25 바이트

x=>y=>x.replace(/\d*$/,y)
  • 아침 일찍 골프를해서는 안되는 이유를 상기시켜주는 Neil 덕분에 1 바이트가 절약되었습니다 !

1
?필수?
Neil


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}

예상되는 인터페이스가 확실하지 않습니다. 이것은 두 입력을 호출 인수로 받아들이는 절차로 수행됩니다. stdin에서 입력을 읽고 결과를 stdout으로 출력하는 독립형 스크립트로 전환하려면 추가 행이 필요합니다.

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

또는 모든 "인라인"을 수행합니다.

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

regsub는 RE, 원래 문자열 및 일치하는 부분을 대체 할 문자열을 사용합니다.


2

매스 매 티카, 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

하스켈, 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+ 보다 짧습니다 import. 즉, dropWhile로 대체 할 수 있습니다 . 테스트를 취소하면 로 갈 수 있습니다 . snd.span=r(snd$span b$r d)++eb=(`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 2016 년

@Laikoni 좋은 생각이야! 당신은 방금 18 바이트를 골프했습니다!
maple_shaft

2
하지마! 내가 이전에 몰랐던 Haskell에 대한 새로운 속임수와 것들을 배우는 것은 내가 가장 좋아하는 골프 부분입니다.
Laikoni 2016 년

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

0

05AB1E , 8 바이트

DþRvyÜ}«

온라인으로 사용해보십시오!

설명:

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.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.