Привет, добро пожаловать в PPCG. Проблемы с одним языком обычно осуждаются здесь, в PPCG. Может быть, вы могли бы изменить его на общий вызов: при заданной строке выведите сумму всех чисел в строке, игнорируя все остальное (т.е. "the 5is 108 seCONd4 a"приведет к тому, 117что 5+108+4=117). Кроме того, каждый «вопрос» здесь должен иметь тег условия победы . В этом случае я предполагаю, что это [code-golf] (являясь кратчайшим возможным решением)?
Кевин Круйссен
4
Похоже, что вы опубликовали аналогичный вопрос о SO, который имеет тенденцию подтверждать, что он не был спроектирован как вызов PPCG, и вы ищете «полезный» код, а не гольф-код. Я бы порекомендовал вместо этого улучшить исходный вопрос о SO, чтобы он лучше соответствовал правилам сайта.
Арно
4
Я пересмотрел ваш пост, чтобы соответствовать нашим стандартам. Не стесняйтесь редактировать, если результат вас не устраивает.
Я предполагаю, что использование string.length в консоли для подсчета символов не очень хорошая идея, если в нем содержатся escape-символы ... К сожалению, исправлено. Еще раз
спасибо
Немного лучший вариант console.log(f.toString().length), но он не на 100% надежен.
þм# Only leave the non-digits of the (implicit) input-string# i.e. "the 5is 108 seCONd4 a" → "the is seCONd a"
S # Split it into a list of characters# → ["t","h","e"," ","i","s"," "," ","s","e","C","O","N","d"," ","a"]¡# Split the (implicit) input-string by each of these characters# → ["","","","","5","","","108","","","","","","","4","",""]þ# Remove the empty strings by only leaving the digits# → ["5","108","4"]
O # And sum these numbers (which is output implicitly)# → 117
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение: SumОператор Charcoal автоматически извлекает числа из строки, однако, если строка не содержит нецифровых символов, вместо этого она принимает цифровую сумму, поэтому я объединяю нулевой байт, чтобы избежать этого. Затем результат возвращается в строку для неявного вывода.
Почему бы и нет. Обязательный регулярный ответ. Вероятно, может состыковать 6 с использованием Python 2, но что угодно. Больше не применяется, так как я использую подход eval вместо использования map.
import re;# Import regex module
x=lambda y: eval()# Run as Python code'+'.join()# Joined by '+'
re.findall('\d+',y)# A list of all matches of regex \d+ in string y
Ницца! В вашем TIO вы должны использовать z == l[1]вместо, z is l[1]хотя. Текущий код может давать ложные отрицания, если числа становятся достаточно высокими.
Вы можете переключиться [^0-9]на \Dнесколько байтов, также вы можете переключиться longи Stringна var(хотя вам придется изменить тип возвращаемого значения наint
Довольно простой. Iв Cubix возьмет первое целое число на входе и поместит его в стек. Это дает эффект пропуска всех персонажей. Остальная часть имеет дело с дополнительным и обнаруживает конец ввода.
I! Введите целое число и проверьте его на 0
s+q;;Если не ноль, поменяйте местами TOS (силы и начальные 0) и добавьте. Выдвиньте результат на дно стека и очистите верх. Вернуться к началу.
/i? Если ноль, перенаправить и сделать ввод символов, чтобы проверить
|?;/Если положительный (символ) поворачивается направо в отражение, он затем проталкивает его обратно через шашку ?и поворачивает вправо на стопку из стека, оставляя 0 в TOS. Затем IP-адрес перенаправляется обратно в основной цикл.
I>p.O@ если отрицательный (конец ввода) повернуть налево, сделать целочисленный ввод, довести нижнюю часть стека до вершины, вывести и остановить.
Более интересный, но косвенный ответ (37 байт): {Sum!Reap[ReplaceF[_,/"\\d+",Sow@N]]}
объяснение
Sum##N=>MatchAll&"\\d+"
Это имеет вид:
f##g=>h&x
который, будучи расширенным и заключенным в скобки, становится:
f ## (g => (h&x))
##объединяет две функции вместе, =>создает функцию, отображающую левую функцию на результат правой функции, и &привязывает аргумент к стороне функции. Для ввода _это эквивалентно:
{ f[Map[g, h[_, x]]] }
Сначала мы MatchAllзапускаем цифры ( \\d+). После этого мы конвертируем каждый прогон в фактическое целое число, используя Nфункцию. Наконец, мы берем сумму этих чисел, используя Sum.
s->{// Lambda functionlong c=0;// Sum is zerofor(Matcher m=Pattern.compile("\\d+").matcher(s);// Prepare regex matcher
m.find();// While the string contains unused matches...
c+=newLong(m.group()));// Add those matches to the outputreturn c;// Return the output}
Я не думаю, что это правильно: (единственный) пример OP предполагает, что последовательные цифры должны образовывать одно целое число, поэтому «123» должно выдавать 123, а не 6, как ваш код.
-4 bytesиспользуя Long::newвместо Long::valueOf. -1 byteСокращая регулярное выражение - если мы уже удаляем пустые строки позже, добавляем некоторые дополнительные функции, когда расщепление в порядке.
Разъяснения
s->// Lambda (target type is ToLongFunction<String>)
java.util.Arrays.stream(// Stream the result of
s.split("\\D")// splitting on non-digits).filter(t->!t.isEmpty())// Discard any empty strings.mapToLong(Long::new)// Convert to long.sum()// Add up the stream's values.
"the 5is 108 seCONd4 a"
приведет к тому,117
что5+108+4=117
). Кроме того, каждый «вопрос» здесь должен иметь тег условия победы . В этом случае я предполагаю, что это [code-golf] (являясь кратчайшим возможным решением)?string x='-12hello3';
вы считаете отрицательные целые числа (т.е. -12 + 3 === -9)?Ответы:
Javascript,
3432 байтаs=>eval(s.match(/\d+/g).join`+`)
Сопоставьте все цифры и соедините их,
+
превратив в 5 + 108 + 4, оцените результат.Работает только на натуральных числах.
Сохранено 2 байта благодаря Арно
источник
console.log(f.toString().length)
, но он не на 100% надежен.Perl 6 , 14 байт
Попробуйте онлайн!
Блок анонимного кода, который возвращает сумму всех серий цифр
источник
05AB1E ,
116 байтовПопробуйте онлайн.
Объяснение:
источник
¡
!R ,
644845 байтУвидев запись PowerShell, я смог сыграть в эту игру дальше.
Попробуйте онлайн!
источник
t=
здесь достаточно, а неtext
APL (Dyalog Unicode) , 11 байт
Функция анонимного молчаливого префикса
Попробуйте онлайн!
⊢
Аргумент⊆
разделены на части (прогоны True становятся частями, прогоны False являются разделителями)∊
членство∘
в⎕D
наборе цифр#⍎¨
оценивать каждый в корневом пространстве имен+/
суммаисточник
Сетчатка 0.8.2 , 8 байт
Попробуйте онлайн!
источник
PowerShell , 29 байт
Попробуйте онлайн!
источник
Древесный уголь , 5 байтов
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Sum
Оператор Charcoal автоматически извлекает числа из строки, однако, если строка не содержит нецифровых символов, вместо этого она принимает цифровую сумму, поэтому я объединяю нулевой байт, чтобы избежать этого. Затем результат возвращается в строку для неявного вывода.источник
Haskell , 50 байтов
Попробуйте онлайн!
Возможно, есть лучший способ, но это самый очевидный.
источник
Zsh , 21 байт
Попробуйте онлайн!
К сожалению, Bash жалуется, потому что он интерпретируется
0108
как восьмеричное. Zsh не (если толькоsetopt octalzeroes
)источник
Баш, 43 байта
Заменяет каждое нечисловое число пробелом, а затем суммирует их вместе.
-5 байт благодаря GammaFunction
источник
{
}
вместоdo
done
.Python 3 ,
635956 байтПочему бы и нет. Обязательный регулярный ответ.
Вероятно, может состыковать 6 с использованием Python 2, но что угодно.Больше не применяется, так как я использую подход eval вместо использования map.Объяснение:
Попробуйте онлайн!
источник
z == l[1]
вместо,z is l[1]
хотя. Текущий код может давать ложные отрицания, если числа становятся достаточно высокими.Java 10, 66 байт
Это лямбда от
String
доint
.Отрицательные целые числа не поддерживаются. Предположительно это нормально.
Попробуйте онлайн
Подтверждения
источник
[^0-9]
на\D
несколько байтов, также вы можете переключитьсяlong
иString
наvar
(хотя вам придется изменить тип возвращаемого значения наint
Руби,
3227 символовПодтверждения
источник
*?+
вместо.join ?+
-7 байт. Смотрите ary * strCubix , 17 байтов
Попробуйте онлайн!
Смотреть это беги
Довольно простой.
I
в Cubix возьмет первое целое число на входе и поместит его в стек. Это дает эффект пропуска всех персонажей. Остальная часть имеет дело с дополнительным и обнаруживает конец ввода.I!
Введите целое число и проверьте его на 0s+q;;
Если не ноль, поменяйте местами TOS (силы и начальные 0) и добавьте. Выдвиньте результат на дно стека и очистите верх. Вернуться к началу./i?
Если ноль, перенаправить и сделать ввод символов, чтобы проверить|?;/
Если положительный (символ) поворачивается направо в отражение, он затем проталкивает его обратно через шашку?
и поворачивает вправо на стопку из стека, оставляя 0 в TOS. Затем IP-адрес перенаправляется обратно в основной цикл.I>p.O@
если отрицательный (конец ввода) повернуть налево, сделать целочисленный ввод, довести нижнюю часть стека до вершины, вывести и остановить.источник
PHP ,
4039 байтПопробуйте онлайн!
Запуск с
php -nF
вводом от STDIN. Пример:источник
Haskell , 43 байта
Попробуйте онлайн!
Использует
reads
.источник
Впереди 13 байтов
Это работает, потому что
I
просто сканирует входной поток для следующего токена, который выглядит как число, игнорируя все остальное.Попробуйте онлайн!
источник
QuadR , 9 байт
Попробуйте онлайн!
+/
сумма⍎
оценка как APL⍵
результат\D
заменяя каждую не цифруисточник
Japt
-x
, 5 байтПопробуйте онлайн!
источник
Атташе , 23 байта
Попробуйте онлайн!
Более интересный, но косвенный ответ (37 байт):
{Sum!Reap[ReplaceF[_,/"\\d+",Sow@N]]}
объяснение
Это имеет вид:
который, будучи расширенным и заключенным в скобки, становится:
##
объединяет две функции вместе,=>
создает функцию, отображающую левую функцию на результат правой функции, и&
привязывает аргумент к стороне функции. Для ввода_
это эквивалентно:Сначала мы
MatchAll
запускаем цифры (\\d+
). После этого мы конвертируем каждый прогон в фактическое целое число, используяN
функцию. Наконец, мы берем сумму этих чисел, используяSum
.источник
APL (NARS), символы 13, байты 26
тест:
источник
C # (интерактивный компилятор Visual C #),
117111 байтПопробуйте онлайн.
источник
Perl 5
-p
, 17 байтПопробуйте онлайн!
источник
Japt v2.0a0
-x
, 3 байтаЕще один тест-драйв для моего (очень WIP) переводчика.
Попробуй
источник
Java 8,
53130 байт105 байтов + 25 байтов для импорта регулярных выражений
Попробуйте онлайн!
объяснение
источник
SNOBOL4 (CSNOBOL4) , 81 байт
Попробуйте онлайн!
источник
Swift, 109 байт
Попробуйте онлайн!
источник
Пип , 6 байт
Рассматривается
-123
как отрицательное целое число. Попробуйте онлайн!Если дефисы следует игнорировать, а не рассматривать как знаки минус, то для 7 байтов работает следующее :
XD
предустановленная переменная для`\d`
;+XD
добавляет к нему+
модификатор regex , чтобы он совпадал с 1 или более цифрами.источник
Java (JDK) ,
989493 байтаПопробуйте онлайн!
-4 bytes
используяLong::new
вместоLong::valueOf
.-1 byte
Сокращая регулярное выражение - если мы уже удаляем пустые строки позже, добавляем некоторые дополнительные функции, когда расщепление в порядке.Разъяснения
источник