В моей предыдущей проверке кода я попросил вас написать функцию, которая сообщит вам, какая из его строк была удалена.
Инструкции были:
Напишите функцию, которая содержит пять строк.
Если вы запустите функцию как есть, она должна вернуть 0.
Если вы удалите одну из пяти строк и запустите функцию, она должна сообщить вам, какая из строк была удалена (например, если вы удалите последнюю строку, она должна вернуть 5).
Теперь давайте попробуем что-нибудь более сложное.
Следуйте тем же правилам, что и выше, но на этот раз функция должна вернуть массив, сообщающий, какие две строки были удалены.
Так, например, если я удаляю строки 1 и 5, возвращаемое значение должно быть [1,5], а если я удаляю строки 3 и 4, возвращаемое значение должно быть [3,4].
Опять же, если ни одна строка не удалена, функция должна вернуть 0. Бонусные баллы, если вы также можете обрабатывать случай с удалением в одну строку, но это не является строго обязательным для вас.
Можете ли вы использовать вспомогательные функции? Да, но только если ты должен. Единственная автономная функция, которая выполняет это, является идеалом.
Как и в случае с последним испытанием, выигрывает решение с наибольшим количеством голосов. Я выберу победителя через неделю или раньше, если в течение 24 часов не было получено новых заявок.
источник
Ответы:
Perl
Это на самом деле работает для любого количества удаленных строк (если это не все строки, то есть) и может быть тривиально расширено до более чем 5 строк. Вспомогательные функции не используются, и он даже использует только один оператор на строку. Он основан на том факте, что при отсутствии явного
return
оператора возвращаемое значение функции Perl является значением последнего оператора в нем.Обратите внимание, что (в контексте списка) этот код возвращает пустой список, а не номер 0, если строки не были удалены. Это можно исправить (например, добавив "
@a ? @a : 0;
" в последнюю строку), но сделает код более уродливым. В любом случае, в скалярном контексте делает возвращает количество удаленных строк, которые будут 0 , если нет строки не будут удалены. ;-)источник
Рубин
Похоже на версию Perl, но в Ruby. Я возвращаю 0, если ни одна строка не удалена в соответствии с запросом, но я согласен, что это делает код более уродливым и не совсем имеет смысл в качестве возвращаемого значения.
Если в качестве возвращаемого значения допустим пустой массив, если ни одна строка не удалена, код выглядит следующим образом:
Оба метода работают для любого количества удаленных строк от 0 до 5.
источник
JavaScript, 152 персонажа в гольфе
Golfed:
Самостоятельно (но некрасиво):
В основном использует функцию
toString
нумерации каждой строки. Обратите внимание, что на самом деле вы должны удалить строку из-за этого (комментирование не будет работать).Это на самом деле работает для любого количества удаленных строк ! Он вернет массив удаленных строк или пустой массив, если ни одна из них не была удалена. (Я мог бы легко изменить это, чтобы возвратить ноль (заменяя
return ra
наreturn ra || 0
), но мне нравится решение пустого массива, так как оно было бы более полезным в реальном мире.)Например, удаление первой строки возвращает
[1]
и удаление всего, кроме первой[2,3,4,5]
. (Конечно, это не сработает, если вы удалите все строки;-)
)источник
Рубин
Как это работает: моя идея заключалась в следующем: создать массив и в каждой строке удалить определенное значение. Итак, в первой строке у меня есть массив
[ 1, 2, 3, 4, 5]
с1
удаленным элементом . Во второй строке, еслиa
она уже определена, удалите элемент2
. В противном случае создайте новый массив с2
удаленным элементом . Сделайте то же самое для строки 3. В строке 4 вы можете быть уверены, что уже создан массив, поэтому просто удалите элемент4
. В строке 5 сначала удалите элемент5
, а еслиa
это пустой массив, вернитесь0
. В противном случае вернитесьa
.источник
питон
Возвращает 0, если ни одна строка не удалена, в противном случае возвращает удаленные строки. Вы можете удалить от 1 до 5 строк, кроме 0-й и 6-й строки ;-).
источник
JavaScript, автономный, работает на 0, 1, 2 удаленных строки (
607315186 символов)→ живой демо ←
Злоупотребление подъемом переменной JS и глобальная утечка, как в другом вызове :)
вызываться с массивом [1,2,3,4,5] в качестве параметра.
315 символов
вызываться с пустым массивом в качестве параметра.
версия без гольфа
(также работает для 3 и 4 удаленных строк):
вызываться с пустым массивом в качестве параметра.
источник
JavaScript:
играть на скрипке
источник
Javascript
Называй это как хочешь, но я думаю, что это красиво .
Позволяет узнать, какие строки были удалены (1 или более) или 0, если строки не удалены. Все 5 строк могут быть удалены.
РЕДАКТИРОВАТЬ:
Поскольку мне стало известно, что мой код может состоять из 6 строк и нарушает правила, я настроил его следующим образом:
То же самое относится - он будет возвращать массив удаленных строк в диапазоне от 1- All или 0, если нет.
источник
function(){
и}
(и все вспомогательные функции). Подсчитайте количество строк.Обыкновенный Лисп
Работает на удаление 1-4 строк. Если вы удалите все строки, он вернется так же, как если бы вы удалили ни одной.
NB. Заканчивать круглые скобки на отдельной строке считается плохим стилем, но поскольку другие языки имеют,
end
и}
я предполагаю, что это разрешеноисточник
питон
Это работает для всех строк - но только если две удалены. Если удалена только одна строка, то будет напечатана удаленная строка и строка 5. Если будет удалено слишком много строк, ничего не будет напечатано.
Здесь используется вспомогательная функция, потому что ключевое слово del нельзя использовать в строке с; (насколько я знаю)
По сути, каждая строка удаляет себя в массиве, который объявлен в конструкторе, а затем, если было удалено достаточно строк, массив печатается.
Эта функция пропускает спецификацию двумя способами:
print
иreturn
являются взаимозаменяемымиисточник
print ''
генерировать дополнительный символ новой строки?Дежавю
Работает для удаления любого количества строк (если вы оставите хотя бы одну строку)
источник
р
У меня есть другая версия в R, которая я считаю лучше (но использует вспомогательную функцию):
Или можно избежать использования вспомогательной функции, определив ее в качестве аргумента по умолчанию (работает идентично, но менее читабельно, однако не использует «определенную отдельно» вспомогательную функцию):
И то
reportRemovedLines()
и другоеfunnyVersion()
работает с любым количеством удаленных строк - кроме случаев, когда вы удалите все строки (в этом случае они вернутсяNULL
). Они на самом деле возвращают номера строк, а не просто печатают их - как в R, значение последнего выражения, вычисленного в функции, будет автоматически возвращено.Как это работает? Хитрость заключается в
trick
функции, которая берет все объекты из своей «родительской среды» (т. Е. Среды функции, которая ее вызывает), помещает их значения в вектор и возвращает значения, значения которых от 1 до 5 не представлены.источник
JavaScript (136/166 символов)
Уменьшенная версия с некоторыми значениями, объявленными в начале:
Самостоятельная версия (вам не нужно ничего передавать - там есть аргумент b, поэтому я могу проверить, определен ли b с помощью
||
)Да, у обоих есть
return
утверждения, но это справедливо, если я конкурирую с языками с неявным возвратом.источник
р
Простая версия (не надежная, так как вы получите ошибку, если удалите строку 5):
И надежная версия:
Он работает с любым количеством удаленных строк (кроме случаев удаления всех строк) и может быть легко расширен до более чем 5 строк. Запуск «как есть» вернет,
integer(0)
что концептуально похоже на возвращение просто0
. Возвращение фактического 0 сделало бы это уродливее и дольше, но не было бы сложным.Наконец, версия с использованием магии:
Вспомогательная функция:
Фактическая функция:
источник
C ++
Как использовать: вызовите функцию с i и используйте func2 для понимания того, что говорит функция.
Если вы измените строку int arr [] = {0,0} на int arr [] = {0,0,0,0,0}, она также будет работать для всех пяти строк, она также обрабатывает одну строку, удаляет контрольный пример автоматически я просто использую биты переменной в качестве флага для каждой строки ....
источник
function
шесть строк, а не пять?