Мы все часто слышим идиому «пройтись по массиву», означающую «сопоставить функцию со следующим массивом». Однако мне нужно, чтобы это было сделано (сейчас!), Поэтому я хочу, чтобы вы пробежались по массиву.
Как я бегу?
Представь, что позади тебя дикая стая волков
Пробежка по массиву похожа на пробежку по нему, за исключением того, что вы можете пропустить элементы. Да, это иногда грязно, но это (как правило) работает. «Какие элементы пропущены?», Спросите вы. Ну, это сделано наугад. Давайте пройдемся по пробежке по массиву!
- Позвольте
e
быть текущим элементом. - Пусть
random
генерирует случайное число с плавающей точкой[0,1)
. Еслиrandom() < 0.5
, тогда вы переходите к следующему элементу, а затем к шагу 1. (Вы можете сгенерировать число другими способами, при условии, что их (в идеале) равные шансы пропустить и остаться. Например, вы можете использовать выбор элемента из двух членов установить и выполнить действие в зависимости от результата.) - В противном случае вы выполняете функцию
f
наe
.
Задача
Учитывая массив / список / строку, как и любой, A
и число K
, бегите через массив, добавляя K
к каждому доступному члену. Вывести / вернуть этот массив. A
будет содержать только неотрицательные целые числа и K
всегда будет неотрицательными целыми числами. Это код-гольф , поэтому выигрывает самая короткая программа в байтах.
Контрольные примеры (примеры)
K, A => possible K'
[1, 2, 3, 4], 0 => [1, 2, 3, 4]
[1, 2, 3, 4], 1 => [1, 3, 3, 5]
[0, 0, 0, 0], 2 => [2, 0, 0, 2]
источник
[0,1)
опечатка? Еще 2, чтобы пойти ...x
такое что0 ≤ x < 1
.Ответы:
Пиф, 7
Попробуй здесь
Использует случайный выбор вместо сравнения с плавающей запятой, но должен быть неразличимым.
Расширение:
Использование плавающей запятой:
Попробуй здесь
источник
Clojure,
4137 байтОтбил пару байтов умножением на 0 или 1 и отбрасыванием «если». Благодарим большинство всех других участников!
источник
for
корочеmap
, см. Мой ответ для справки :) Также он позволяет избежать внутренней анонимной функции, поэтому вместо запуска кода(fn[a k]
вы можете использовать#(
.Желе,
987 байтОт
8
до7
благодаря @FryAmTheEggman .Попробуйте онлайн!
объяснение
источник
MATL , 11 байт
Использует случайные числа с плавающей запятой.
Попробуйте онлайн!
объяснение
источник
Japt, 6 байт
Проверь это
объяснение
Неявный ввод массива
U
и целого числаV
. Map (®
) над массивом и, к каждому элементу, добавитьV
умноженное наMq
, что случайным образом генерирует либо0
или1
. Неявный вывод результирующего массива.источник
Рубин, 28 байт
источник
Юлия,
332927 байтЭто анонимная функция, которая принимает массив с внутренней анонимной функцией, которая принимает целое число и возвращает массив. Чтобы вызвать его, назначьте его переменной и вызовите like
f(x)(k)
.Мы генерируем массив такой же длины, что и входной массив, состоящий из нулей и случайным образом выбранных с равной вероятностью. Мы умножаем это на входное целое число и добавляем это во входной массив.
Попробуйте онлайн!
Сохранено 2 байта благодаря Денису!
источник
Python 2,
6058 байтЭта программа оказалась действительно простой. Там не так много трюков в гольфе, кроме очевидного "
from module import*
", использующего лямбду вместо обычной функции и общего недостатка пробелов. Кроме этого это на самом деле довольно идиоматично. Если бы я писал это по-настоящему, я бы сделал это очень похожим образом:Или, может быть, что-то более причудливое:
Но хватит хвастаться :)
Это старая 60-байтовая версия, когда при использовании плавающей запятой для случайности требовалось:
Для каждого элемента списка добавьте
k*(random()<.5)
. Булево значение Python оценивается как 0 и 1, так что это добавляет 0 к любым элементам, для которых условие не выполняется.random.random()
Возвращает Python[0, 1)
, поэтому мне не пришлось об этом беспокоиться.источник
e+choice([0,k])
JavaScript (ES6), 38 байт
источник
PowerShell v2 +, 34 байта
Принимает входной сигнал
$a
и$k
массив и INT соответственно. Затем мы перебираем массив и каждая итерация цикла выдает текущий элемент плюс$k
время,(random 2)
которое будет выполненоGet-Random -Maximum 2
(т. Е. A0
или a1
). Все они остаются в конвейере и выводятся в виде неявного массива.источник
CJam, 10 байтов
Ожидает массив и число сверху стека в этом порядке и заменяет их новым массивом.
Проверьте это здесь.
источник
php 71 байт
источник
к (12 байт)
например
В более общем случае, где
f
можно передать в качестве аргумента 16 символовнапример
источник
Python 3
15211098 байтЭто мое первое решение для игры в гольф, поэтому я не знаю никаких хитростей. Я проверил это, используя основную функцию с тестовыми примерами. Размер файла - только эта функция.
Спасибо @ Cᴏɴᴏʀ O'Bʀɪᴇɴ за совет по удалению пробелов. Дополнительная похвала @undergroundmonorail за совет, который сэкономил 12 байтов.
источник
import *
,a(x, y)
,x[ptr]=z+y
и т.д. Вы можете также заменить 4 пространства с одним пробеломx[ptr]=z+y
в ту же строку, что иif random()>0.5
для сохранения 3 байта пробела. В Python 20.5
можно написать как.5
для сохранения байта, хотя я не знаю, правда ли это в Python 3. Если переименоватьptr
вp
вас спасу 6 байт во всем. Кроме того, вы на Windows? Windows хранит символы новой строки в виде двух байтов, но поскольку python не заботится о том, является ли символ новой строки одним или двумя байтами, вы можете считать его как 1, что делает ваше текущее решение только 103 байтами. Кстати, добро пожаловать в PPCG :)Clojure, 32 байта
Спасибо тебе, Дэвид, за
rand-int
идею, определенно короче, чемif(>(rand)0.5)
подход. Здесьfor
бьетmap
.источник
Октава, 28 байт
Пробный прогон на идеоне .
источник
05AB1E , 10 байтов
Код:
Попробуйте онлайн! ,
источник
Java, 84 байта
Ungolfed
Примечания
return A;
. Тип возврата должен быть изменен сint[]
наvoid
. Это, однако, не сохраняет дополнительные байты, так как междуvoid
иr
.Укороченная версия (как указано в примечании), 75 байт
Выход
источник
Mathcad, байты
Официальный подсчет байтов в качестве протокола подсчета Mathcad еще не определен.
источник
Java
1081078582 байта14 байтов сохранено благодаря @TimmyD
источник
main
,String[]
,int[]
и сохранить еще несколько байтов, изменяяnextFloat()>0.5
кnext(1)==0
.new java.util.Random().nextFloat()
кMath.random()
, так как это намного намного короче.s
, толькоi
метод имеет тип возвращаемого значения,void
но вы пытаетесь его вернутьint[]
. Также есть точка с запятой, пропущенная послеreturn s
.Perl 5 , 30 + 1 (-a) = 31 байт
Попробуйте онлайн!
источник