Ruby: Строки
Базовые операции со строками в любом языке – это интерполяция и конкатенация. Как это делается на Ruby:
# Конкатенация
name = 'H' + 'e' + 'x' + 'l' + 'e' + 't' # Hexlet
# Можно даже так
name = 'H' 'e' 'x' 'l' 'e' 't' # Hexlet
# Интерполяция
greeting = "hello #{name}" # hello HexletИнтерполяция выполняется только в строках с двойными кавычками. Строки, состоящие из одиночных кавычек, воспринимаются «как есть» — по аналогии с PHP.
line_feed = "one line\nanother one"
# one line
# another oneКак и в большинстве других языков, интерполяция в Ruby предпочтительнее конкатенации.
Помимо стандартных конкатенации и интерполяции, строки в Ruby усилены срезами и большим числом полезных методов. Вот лишь некоторые примеры:
name = 'ruby'
name.upcase # 'RUBY'
''.empty? # true
name.include? 'ru' # true
name.capitalize # Ruby
name.length # 4Одна из самых классных возможностей у строк – слайсы. С их помощью можно находить любую подстроку в строке. Слайс — тоже метод, но с дополнительным синтаксисом из квадратных скобок:
name = 'ruby'
# второй символ (счёт идёт с нуля)
name[1] # u
# Последний символ
name[-1] # y
# два символа, начиная с нулевого индекса
name[0, 2] # ru
# от первого до второго с конца
name[0..-2] # rub
# от 4 с конца до последнего символа
name[-4..] # ruby
# и даже регулярные выражения!
name[/ru/] # ruЗадание
Номер банковской карточки является персональной и достаточно чувствительной информацией. Поэтому никакие системы не показывают его полностью даже владельцу карты (вдруг кто-то украл доступ в аккаунт). Вместо этого в интерфейсах часто показывают четыре последних символа, а остальное скрывают за зведочками.
Реализуйте функцию prepare_card_for_display(), которая принимает на вход номер карты (в виде строки) и возвращает строку, в которой шесть символов. Первые два — звездочки, последние четыре соответствуют последним четырём цифрам в номере карты:
prepare_card_for_display('1234789023457890') # '**7890'
prepare_card_for_display('0192837409128735') # '**8735'Полезное
Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект
Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества
Ваше упражнение проверяется по этим тестам
# frozen_string_literal: true
require 'test_helper'
require_relative 'index'
describe 'function' do
it 'should works' do
card_number1 = '102983470123521'
assert { prepare_card_for_display(card_number1) == '**3521' }
card_number1 = '098234'
assert { prepare_card_for_display(card_number1) == '**8234' }
end
endРешение учителя откроется через:
20:00
