Победитель: Chilemagic , массивный 21 байт!
Вы можете продолжить отправлять свой ответ, однако вы больше не можете выиграть. Исходное сообщение сохранилось:
Ваша цель - найти все числа в строке и умножить каждое по отдельности на значение, введенное пользователем.
- Вам не нужно беспокоиться о десятичных дробях
- Пользователь введет число и строку
- Пользователь должен ввести число и строку в какой-то момент, однако метод, который читает программа, не имеет значения. Это может быть стандартный ввод, чтение текстового файла и т. Д., Однако пользователь должен нажать кнопку 9 на клавиатуре (например) в какой-то момент
- Все, что можно скомпилировать и запустить, приемлемо
Пример:
Ввод предложения: Это 1 is22a 3352sentence 50
Ввод числа: 3
Вывод: это 3 is66a 10056sentence 150
- Этот конкурс заканчивается 6 сентября 2014 года (7 дней с момента публикации).
- Это код-гольф , поэтому выигрывает самый короткий код
Ответы:
Обновление - Perl - 17
15 символов + 2 для
-i
и-p
флаги.Мы можем использовать
-i
флаг для ввода расширения файла, но поскольку мы не читаем никаких файлов, мы можем использовать его для получения номера, и переменная$^I
будет присвоена ему.Бежать с:
Perl - 21
Обновлено в соответствии с комментарием @ Деннис.
Беги с
-p
флагом.Пример выполнения:
Объяснение:
$n=<>;
читать по номеру-p
печатает выводs/\d+/$&*$n/ge
Прочитайте ввод с помощью <>, найдите одну или несколько цифр и замените их цифрами, умноженными на число.g
является глобальным,e
являетсяeval
заменой зелья s ///.$&
содержит то, что было найдено и умножено на число$n
.Вы можете прочитать больше о
s///
в perlop и больше о Perl регулярных выражений в perlre .Другое решение:
@ F.Hauri указал, что вы также можете использовать
s
переключатель для присвоения$n
переменной 4. Я не уверен, сколько символов это считается, но я оставлю это здесь:источник
<>=~
вместо_$=<>;
. Также не могли бы вы объяснить, что значитs
часть регулярного выражения для нас, новичков?$&
вместо$1
, вы можете сократить(\d)
до\d
. 2. Если вы используете-p
переключатель и измените порядок ввода, вы можете удалитьsay<>=~
иr
.-s
переключатель, чтобы whipe$n=<>
из:perl -spe 's/\d+/$&*$n/ge' -- -n=4 <<<'This 1 is22a 3352sentence 50'
(действительно делают:This 4 is88a 13408sentence 200
)JavaScript (ES6) -
4844 символовСпасибо @bebe за сохранение одного символа. Обновление: 8 марта / 16, удалены еще четыре символа
Ungolfed :
43 символа:
Требуется ввод числа, а затем предложение. Вырежьте еще один символ здесь, спасибо @bebe снова!
источник
(p=prompt)(p(b=p()).replace(/\d+/g,y=>y*b))
еще один (но это сначала требует множителя)Python 2 (79)
Пробный прогон
Входные данные: Выход:Демо онлайн: http://ideone.com/V6jpyQ
источник
re.sub
, что метод Beta Decay и я (два других представления Python) пытались переопределить. Это было бы так легко ... Что-то еще, что я узнал! ;)re.sub
, ты отлично справился с логикой замены струнre.sub
это именно то, что я хотел!Питон 2 - 126
Первый вход: целое число
n
.Второй ввод: строка
s
(с кавычками, например"abc42"
).источник
CJam,
473330 байтСчитывает число и строку (в том порядке и через один пробел) из STDIN.
Попробуйте онлайн.
Пример запуска
Как это устроено
источник
Bash + coreutils, 38 байт
Читает входную строку из STDIN и множитель в качестве параметра командной строки.
Выход:
источник
1 D4R3 Y0U: ; rm -rf /
C # в LINQPad, 124
Непосредственная. Пожалуйста, используйте CTRL + 2 в LINQPad (язык: C # Statements).
Если в качестве первого входного параметра указан множитель, это можно сделать из 116 символов:
РЕДАКТИРОВАТЬ:
Благодаря приведенному ниже комментарию Аббаса, это может быть даже лучше, если использовать статический метод Regex , а не создавать его:
источник
var k=int.Parse(Console.ReadLine());Regex.Replace(Console.ReadLine(),"\\d+",t=>""+int.Parse(t.Value)*k).Dump();
. В обеих версиях это сохраняет еще 5 символов, что дает вам 119 для длинной версии и 111 для версии с множителемКобра - 171
источник
Питон 3 - 141
Я не думаю, что смогу больше играть в гольф ...
Пример:
источник
n=2
иs="1 2"
это дает4 4
, так какreplace
изменяет первое число дважды. Это та же проблема, с которой я сталкиваюсь сейчас с Python 2 ...;)m=input()
ничего не спасет. Иx=int
на самом деле на 2 байта длиннее, чем вызов вint(...)
два раза.Mathematica
7161Благодаря 10 символам сэкономлено благодаря Мартину Буттнеру.
Пробелы в коде предназначены для удобства чтения.
f
является функцией, в которой вводитсяs
строка иn
является числом, на которое умножаются обнаруженные номера строк.Примеры
целое число
Рациональное число
Комплексное число
источник
StringReplace
не имеет значения, есть ли пробелы. Я использовал примеры, приведенные Chiperyman.StringReplace
не имеет значения, есть ли пробелы.Рубин 40
Ввод от стандартного ввода.
Пример выполнения:
Демо онлайн: http://ideone.com/4BiHC8
источник
Lua:
7369 символовОбразец прогона:
источник
JavaScript, ES6, 43 символа
Это моя первая попытка игры в гольф!
Запустите это в последней консоли Firefox. Первый ввод - это число, а второй ввод - это строка, из которой числа должны быть умножены на первый ввод.
Последнее приглашение отображает вывод.
источник
Perl - 48 символов
Прочитайте число в первой строке, затем прочитайте предложение и разбейте его на куски, состоящие из цифр или не цифр. Выведите не цифры, как они есть, и числа умножаются.
источник
J - 63 символа
Программа читает номер, а затем предложение.
Объяснил взрывом:
Если мы используем библиотеку J PCRE и делаем предложение первым, мы можем сократить это до 54 символов :
Объяснил взрывом:
J плохо в этом, что я могу сказать. Это неудобно, потому что Дж так бездействует.
Несколько примеров:
источник
CJam - 35
Попробуйте это на http://cjam.aditsu.net/
Пример ввода:
Образец вывода:
Объяснение:
Программа просматривает каждый символ, собирая цифры в стеке, и для каждого нецифрового числа сначала печатает собранное число (если оно есть), умноженное на числовой ввод, а затем печатает символ.
li:X;
читает числовой ввод и сохраняет его в XlN+
читает строку и добавляет новую строку (это помогает с конечными числами){…}/
для каждого символа в строке-
_s
копирует символ и преобразует в строку-
A,s-,
удаляет все цифры и считает оставшиеся символы; результат будет 0, если символ был цифрой, или 1, если нет-
{…}*
выполняет блок, если счет был 1 (т. е. не цифра); для цифр он ничего не делает, поэтому они остаются в стеке-
]
собирает символы из стека в массив (т. е. строку); символы - это любые цифры из предыдущих итераций, плюс текущий символ-
)\
отделяет последний элемент (текущий символ) и перемещает его перед (оставшейся) строкой-
_!!
копирует строку и преобразует ее в логическое значение - 0, если пусто, 1, если нет-
{…}*
выполняет блок, если строка не была пустой, т.е. у нас было несколько цифр, прежде чем текущий нецифровый символ---
iX*
преобразует строку в целое число и умножается на X-
o
печатает вершину стека - либо умноженное число, либо пустую строку, если у нас не было числа-
o
(2-е число) печатает новую вершину стека - текущий цифраисточник
Хаскелл (161)
Golfed
Ungolfed
К сожалению, Haskell не имеет библиотеки Regex в своей Prelude .
источник
{}
чтобы получить 1 символ. Кроме того, я только что опубликовал это решение на Haskell с 70 байтами: codegolf.stackexchange.com/questions/37110/…flex (-lexer) (
9489 символов)Неуправляемая версия, которая не работает по умолчанию, если вы забыли аргумент командной строки (ненадолго):
Компилировать с:
или:
Например:
источник
Groovy
- 124Нажмите на заголовок, чтобы увидеть работающий пример
Пробные примеры:
источник
GNU Awk: 86 символов
Образец прогона:
источник
PHP -
75/11568/109Две версии, более новые версии PHP могут сделать это:
Старые версии php: я не считал перевод строки, добавил их для удобства чтения.
Пример ввода + вывода
Вроде сложно, слова «функция» и «preg_replace_callback» занимают много символов.
Пробел после
global
и неreturn
требуется, если за ним следует $ var (-2 символа)источник
\d
в класс персонажа (-2 символа); нет необходимости заключать функцию в двойные кавычки (-2 символа); Вы должны правильно завершить оператор внутри функции точкой с запятой (+1 символ). Кстати,\d
в двойных кавычках строка должна быть записана как\\d
, поэтому лучше поменять кавычки на одинарные кавычки.0-9
на \ d. Не уверен насчет кавычек вокруг функции, я не могу проверить это, моя локальная версия php не позволяет это.C (
142134 знака)Новая строка вставлена для улучшения читаемости. Передайте коэффициент как первый, строку как второй параметр командной строки. Для этой реализации требуется
dprintf
функция, которая является частью POSIX.1 2008 и может быть недоступна в Windows. Вот единый источник:улучшения
strspn
иstrcspn
вместо циклического перебора строки.источник
Python 89
например:
источник
Реболь - 117
Ungolfed:
источник
Clojure -
141140128 символовЯ новичок Clojure, но FWIW:
Образец прогона:
Ungolfed (некрасиво, но, надеюсь, несколько легче читать):
источник
Питон - 142
источник
Java 218
Кто-то должен был сделать Java. Входная строка 2 токена в командной строке.
java M 'This 1 is22a 3352sentence 50' 3
источник
if
условие работает также с побитовым|
, что на 1 символ короче.Два ответа: Perl + Bash
Чистая Баш (~ 262)
Во-первых, есть не очень короткая версия чистого bash (без форка, без внешних двоичных файлов)!
Давайте покажем:
(Это совершенно невероятное предложение)
Perl немного запутан (только для удовольствия)
Эта версия (основанная на ответе @ Chilemagic ) не короче, а разработана как тотемный скрипт:
Образец прогона:
источник
Хаскелл, 70
слишком плохо, я слишком поздно ИМХО, это довольно хорошо для этого конкретного вопроса и языка. другое решение на Haskell - 161 символ ..
это работает с использованием
reads
функции, которая анализирует строку частично. например,reads "34abc" = [(34, "abc")]
,. это, очевидно, делает его идеальным для этой задачи.использование:
источник