Menambahkan angka


15

Tantangan yang cukup sederhana: Anda akan menerima dua input, string dan angka (angka dapat diambil sebagai string, yaitu "123"bukannya123 )

Jika string tidak diakhiri dengan angka (yaitu, tidak cocok dengan regex \d$), tambahkan saja nomor ke akhir string.

Jika string berakhir dengan angka (yaitu, cocok dengan regex \d+$), Anda harus terlebih dahulu menghapusnya dan kemudian menambahkan nomornya.

Tidak satu pun dari input yang akan menjadi tidak valid atau kosong (tidak valid didefinisikan oleh input numerik yang tidak hanya mengandung digit)

Nomornya tidak akan pernah mengandung a -atau a ..

String tidak akan pernah berisi baris baru, atau karakter non-spasi putih yang tidak dapat dicetak.

Kasus uji:

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

Jawaban:


10

Retina , 5 byte

\d*¶

Mengambil dua string sebagai input, dipisahkan oleh baris baru.

Cobalah online!


ninja. Meskipun saya tidak yakin apakah ruang adalah pilihan pemisah yang baik.
John Dvorak

Cukup adil, diubah menjadi tabulator.
Dennis

Bagaimana dengan titik koma? Yang itu tidak perlu melarikan diri juga.
John Dvorak

Oh, saya baru saja membaca klarifikasi OP. Newline itu.
Dennis

7

Python 2 , 30 byte

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

Cobalah online!


1
Trik yang bagus untuk membuat angka dengan semua digit!
TheLethalCoder

Tidak yakin apa yang sedang terjadi, tetapi bagi saya (v2.7.11 di Windows), ini gagal ketika adiakhiri "L"karena 56**7dievaluasi 1727094849536L. Input dari a="abcdL"; b="59"output "abcd59". TIO link Anda tidak 56**7terlalu panjang, jadi saya tidak tahu apa yang terjadi
wnnmaw



5

Java 8, 32 byte

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

Mengambil input asebagai String, dan untukb itu tidak masalah apakah itu sebuah String atau integer (walaupun saya menggunakan Integer di TIO-link di bawah).

Coba di sini.



4

05AB1E , 9 byte

DvTFNÜ}}«

Cobalah online! Mungkin solusi yang buruk tapi itu yang terbaik yang bisa saya lakukan

Penjelasan

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

Bagaimanapun, saya salah.
Guci Gurita Ajaib

4

Japt , 10 byte

r"%d*$" +V

Cobalah 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

Tidak berfungsi jika Utidak diakhiri dengan angka. Coba gunakan *di RegEx, bukan +. TIO
Shaggy

Sekarang tidak bekerja jika U tidak akhir di nomor. Saya pikir Anda harus melakukanr"%d+$" +V
Produk ETH

Ya, saya baru menyadari itu. Harus diperbaiki sekarang
Luke

4

Python 2 , 44 41 39 byte

EDIT: -4 byte terima kasih kepada @Dom Hastings. Saya tidak banyak menggunakan ekspresi reguler.

EDIT 2 : -2 bytes berkat @totallyhuman menunjukkan bahwa nomor dapat diambil sebagai string

Harus diharapkan ...

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

Hanya menghapus digit di akhir string dan menambahkan nomornya

Cobalah online!


Jika Anda mengganti regex dengan \d*$, dapatkah Anda mengganti ""dengan `` y `` untuk menyimpan beberapa byte?
Dom Hastings

@HomHastings: Bagus! Saya tidak menggunakan banyak persamaan reguler, terima kasih!
Neil A.

1
Anda dapat mengambil yparameter sebagai string juga.
totallyhuman

@totallyhuman: Mengacaukan detail itu. Terima kasih!
Neil A.

4

Pip , 9 7 byte

a<|XD.b

@Dosc menyelamatkan saya 2 byte!

Cobalah online!

Penjelasan

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

Jelly , 5 byte

œrØD;

Cobalah online!

Bagaimana itu bekerja

œ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.

3

JavaScript (ES6), 28 26 25 byte

x=>y=>x.replace(/\d*$/,y)
  • 1 byte disimpan berkat Neil yang mengingatkan saya mengapa saya tidak boleh main golf pagi-pagi!

1
Apakah ini ?wajib?
Neil


3

C #, 45 byte

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

Penjelasan:

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 byte

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

Saya tidak yakin tentang antarmuka yang diharapkan. Ini dilakukan sebagai prosedur yang menerima dua input sebagai argumen panggilan. Untuk mengubahnya menjadi skrip mandiri yang membaca input dari stdin dan menampilkan hasilnya ke stdout, kita perlu baris tambahan:

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

atau akan melakukan semuanya "inline":

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

regsub mengambil RE, string asli dan string untuk mengganti bagian yang cocok dengannya.


2

Mathematica, 48 byte

Sudah ada solusi Mathematica (84 byte).

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

2

Wortel , 16 21 byte

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

Cobalah online!(input dipisahkan baris input)

Penjelasan

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

Saya harus meningkatkan bytecount oleh 5 karena kode tidak berfungsi untuk testcases seperti a5b3dengan beberapa digit.


2

Haskell, 75 byte 95 byte 91 79 61 byte

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

Saya mencoba melakukan ini tanpa regex jadi mungkin itu akan menjadi jawaban yang ditingkatkan secara dramatis. Juga ada beberapa cara saya bisa melakukan ini sehingga saya tidak yakin apakah saya bisa mencukur beberapa byte dengan pendekatan yang berbeda.

UPDATE: Saya naik dalam byte karena saya menyadari saya gagal dalam test case di mana angka ada dalam string yang bukan suffix. Sekarang saya yakin bahwa regex akan memberikan jawaban yang jauh lebih baik.

UPDATE2: Setelah umpan balik yang bagus, lebih banyak byte di-golf!


2
b=(`elem`['0'..'9'])lebih pendek dari isDigit+ import. dropWhiledapat diganti dengan snd.span, yaitu =r(snd$span b$r d)++e. Jika Anda membalik tes, b=(`notElem`...)Anda dapat melakukannya d#e|b$last$d=d++e|2>1=r(snd$break b$r d)++e.
nimi

@nimi Terima kasih atas sarannya! Saya terus lupa tentang rentang dan istirahat dan betapa bermanfaatnya itu.
maple_shaft

1
Tidak bisakah |b$last$d=d++e|2>1bagian itu dijatuhkan begitu saja? Semua kasus uji tampaknya bekerja dengan baik. Cobalah online!
Laikoni

@Laikoni Ide bagus! Anda baru saja golf saya 18 byte!
maple_shaft

2
Jangan jadi! Mempelajari trik dan hal baru tentang Haskell yang sebelumnya tidak saya ketahui adalah beberapa bagian favorit saya dalam bermain golf.
Laikoni

1

Mathematica, 84 byte

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

masukan 2 string

["ab3d5", "55"]

keluaran

ab3d55


1

C (gcc) , 99 98 96 95 byte

Harus bisa bermain golf ini sedikit ...

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]);}

Cobalah online!


1

Noether , 11 byte

I"\d+$"-I+P

Coba di sini!

Saat memasukkan string, lampirkan dalam tanda kutip

Penjelasan:

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 byte

DþRvyÜ}«

Cobalah online!

Penjelasan:

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.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.