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
Okx
sumber

Jawaban:

10

Retina , 5 byte

\d*¶

Mengambil dua string sebagai input, dipisahkan oleh baris baru.

Cobalah online!

Dennis
sumber
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!

tongkat
sumber
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
6

PHP, 37 36 35 33 byte

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

Disimpan 1 byte berkat Jörg Hülsermann .

pengguna63956
sumber
1
chopas alias save 1 Bytes
Jörg Hülsermann
5

Perl 5, 12 byte

11 byte kode +1 untuk -p.

s/\d*$/<>/e

Cobalah online!

Dom Hastings
sumber
1
Hehe, muncul dengan kode yang persis sama! Glab untuk melihat Anda kembali :)
Dada
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.

Kevin Cruijssen
sumber
4

Python 2 , 32 byte

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

Cobalah online!

Mengambil input dalam urutan terbalik, baik sebagai string.

ovs
sumber
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
Datboi
sumber
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
Luke
sumber
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!

Neil A.
sumber
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.
steenbergh
sumber
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.
Dennis
sumber
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!
Shaggy
sumber
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
TheLethalCoder
sumber
3

V , 7 4 byte

óä*î

Cobalah online!

Ini menggunakan regex yang sama dengan jawaban Retina di atas:

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

Perl 6 , 20 byte

->$_,\n{S/\d*$/{n}/}
Sean
sumber
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.

avl42
sumber
2

Mathematica, 48 byte

Sudah ada solusi Mathematica (84 byte).

StringDrop[StringTrim["."<>#,_?DigitQ..]<>#2,1]&
pengguna202729
sumber
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.

Kritixi Lithos
sumber
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!

maple_shaft
sumber
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

J42161217
sumber
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!

Cleblanc
sumber
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
Peluruhan Beta
sumber
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.
Kamerad SparklePony
sumber