Додавання номерів


15

Досить простий виклик: ви отримаєте два входи, рядок і число (число може прийматися як рядок, тобто "123"замість 123)

Якщо рядок не закінчується числом (тобто не відповідає регулярному вираженню \d$), просто додайте число до кінця рядка.

Якщо рядок закінчується числом (тобто воно відповідає регексу \d+$), слід спочатку видалити його, а потім додати число.

Жоден із входів ніколи не буде недійсним або порожнім (недійсний визначається числовим входом, що не містить лише цифр)

Число ніколи не буде містити а -чи а ..

Рядок ніколи не буде містити символів нового рядка або недрукованих символів, що не містять пробілів.

Випробування:

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

Відповіді:


10

Сітківка , 5 байт

\d*¶

В якості входу береться два рядки, розділені новим рядком.

Спробуйте в Інтернеті!


ніндзя. Хоча я не впевнений, чи простір є хорошим роздільником.
Джон Дворак

Досить справедливо, змінено на табулятор.
Денніс

Як щодо крапки з комою? Цього також не потрібно уникати.
Джон Дворак

О, я просто прочитав роз'яснення ОП. Newline це.
Денніс

7

Python 2 , 30 байт

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

Спробуйте в Інтернеті!


1
Приємний трюк, щоб створити номер з усіма цифрами!
TheLethalCoder

Не впевнений, що відбувається, але для мене (v2.7.11 в Windows) це не вдається, коли aзакінчується тим, "L"що 56**7оцінюється до 1727094849536L. Введення a="abcdL"; b="59"виходів "abcd59". Ваше посилання на TIO довго не оцінюється, 56**7тому я не знаю, що відбувається
wnnmaw



5

Java 8, 32 байти

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

Приймає введення aяк String, і для bнього не має значення, це String або ціле число (хоча я використовую Integer у TIO-посилання нижче).

Спробуйте тут.




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не закінчується. Спробуйте використовувати *замість цього в RegEx +. TIO
Shaggy

Зараз він не працює , якщо U робить кінець в ряді. Я думаю, що вам доведеться зробитиr"%d+$" +V
ETHproductions

Так, я щойно це зрозумів. Має бути виправлено зараз
Лука

4

Python 2 , 44 41 39 байт

EDIT: -4 байти завдяки @Dom Hastings. Я мало використовую регулярні вирази.

EDIT 2 : -2 байти завдяки @totallyhuman вказуючи на те, що число можна вважати рядком

Треба було очікувати ...

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

Просто видаляє цифри в кінці рядка і додає число

Спробуйте в Інтернеті!


Якщо ви заміните свій регулярний вираз \d*$, чи можете ви замінити на ""`` y ``, щоб зберегти кілька байт?
Дом Гастінгс

@DomHastings: Приємно! Я не дуже використовую регулярні вирази, тому дякую!
Ніл А.

1
Ви також можете прийняти yпараметр як рядок.
повністюлюдський

@totallyhuman: засклений над цією деталлю. Спасибі!
Ніл А.

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}

Я не впевнений у очікуваному інтерфейсі. Це робиться як процедура, яка приймає два входи як аргументи виклику. Щоб перетворити його на окремий сценарій, який зчитує вхід зі stdin та видає результат у stdout, потрібен буде додатковий рядок:

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

або зробив би це все "на вході":

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

regsub приймає RE, оригінальну рядок і рядок, на який замінить сумісну частину.



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

Мені довелося збільшити кількість рахунків на 5, оскільки код не працював для тестів, як a5b3з кількома цифрами.


2

Haskell, 75 байт 95 байт 91 79 61 байт

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

Я спробував це зробити без регулярних виразів, тому, можливо, це було б значно покращеною відповіддю. Також є кілька способів, як я можу це зробити, тому я не впевнений, чи зможу я поголити кілька байт з іншим підходом.

ОНОВЛЕННЯ: Я піднявся в байтах, тому що зрозумів, що не вдався до тестового випадку, коли в рядку існують числа, які не є суфіксом. Тепер я впевнений, що регекс дасть набагато кращу відповідь.

ОНОВЛЕННЯ2: Після чудових відгуків, більше байтів було в гольфі!


2
b=(`elem`['0'..'9'])коротше isDigit+ import. dropWhileможна замінити 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 Дякую за пропозиції! Я постійно забуваю про пробіг та перерви та про те, наскільки вони можуть бути корисними.
maple_shaft

1
Не можна |b$last$d=d++e|2>1частину просто скинути? Всі тестові справи, здається, працюють нормально. Спробуйте в Інтернеті!
Лайконі

@Laikoni Чудова ідея! Ви щойно пограли мені 18 байт!
maple_shaft

2
Не будь! Вивчення нових хитрощів та речей про Haskell, про які я раніше не знала, є одними з моїх улюблених частин гольфу.
Лайконі

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.