привет дневник, сегодня увидел интересный код и решил записать себе на долгую память где то на месяц, пока оплачен хостинг:)
в общем вывести какое либо число с нулями в переди. первая и вторая запись делают одно и тоже
a= format("%04d",2+1)
p a
p "0002".succ
а так же как сложить или перемножить все элементы цикла
def persistence(n)
m=0
while n.to_s.length!=1 do
n=n.to_s.chars.map{|x| x.to_i}.reduce(:*)
m+=1
end
m
end
задачка 4 кю кодеварса, составить рейтинг трех популярных слов из текста, игнорируя точки, запятые, слеши, все в нижнем регистре. Вот мое
def top_3_words(text)
mas={}
text.downcase.split(/[,.\/']{0,}\s{1,}[,.'\/]{0,}/).reject(&:empty?).each{|x| mas[x]=mas[x].to_i+1}
mas.sort{|a,b| a[1] <=> b[1]}.reverse[0..2].map{|x,y| x}
end
А вот бес практис
def top_3_words(text)
text.scan(/[A-Za-z']+/)
.select { |x| /[A-Za-z]+/ =~ x }
.group_by { |x| x.downcase }
.sort_by { |k,v| -v.count }
.first(3)
.map(&:first)
end
опять задачки на кодеварс, лучшее решение
s='4556364607935616'
p s.gsub(/.(?=....)/, '#')
ищем по регулярке любой символ, потом по шаблону вперед любые 4 символа, и заменяем все на решетку, но есть ньюанс, любые четыре символа в замене не участвуют, так проходим по всей строке, на 4 символе с конца данное условие перестанет действовать и строка останется прежней.
Хотел дописать в предыдущий пост, а видимо нужно в новый. опять задачка на кодеварс, простая, но правильное решение опять меня обскакало. нужно для строки со словами больше 5 символов сделать reverse .
сделал:
string.split(' ').each{|x| x.length>=5? x.reverse! : x}.join(' ')
лучшее:
string.gsub(/\w{5,}/, &:reverse)
и вот он наш герой.
тоже самое что и
User.all.map { |user| user.name }
на кодварсе была задачка, перевести строчку в камл кейс.
str="The_Stealth_Warrior"
p to_camel_case(str)
str="the-stealth-warrior"
p to_camel_case(str)
def to_camel_case(str)
str.gsub(/[_-](.)/) {"#{$1.upcase}"}
end
Ответ красивый в одну строчку, с использованием именованных групп. Вот о них и о тонкостях gsub напишу себе шпаргалку.
str="The_Stealth_Warrior"
p str.gsub(/(([_-])(.))/) {"0#{$&}0 1#{$1}1 2#{$2}2 3#{$3}3"}
Нумерация именованных групп слева. $& - вывожу результат всей регулярки, в $1 первая общая группа (([_-])(.)), $2 ([_-]) и в третьей (.)
две строчки кода ниже выдадут одинаковый результат
p str.gsub(/(([_-])(.))/) {}
p str.gsub(/(([_-])(.))/, '' )
Можем в цикле использовать результат полученный регуляркой, что то с ним сделать,
p str.gsub(/(([_-])(.))/) {|match| match[0] }
передать имя метода в руби через переменную.
в send первым идет название метода, второй и далее аргументы.
@temp=@temp.send(x,(Temporary.find(params[:id]).send(x).chars))
как здесь использовать восклицательный знак так и не понял
Нужно было сохранить данные в монгу типом objectid, один вариант работает второй нет
#@temp["dictionars"] << {"_id"=>"ObjectId(\"#{x}\")"} # сохраняет типом стринг
@temp["dictionars"] << {:_id => BSON::ObjectId("#{x}")}
Для лучшего запоминания напишу примеры циклов в руби.
1.upto(8) do |x|
print "номер #{x}\n"
end
перебор от 1 до 8 включительно, текущее значение положить в "x"
8.times do |x|
print "номер #{x}\n"
end
перебор от 0 до 7 включительно, текущее значение положить в "x"
print " h e l l o ".strip
удалит пробелы в начале и в конце строки, в нутри оставит
(-2..2).each{|x| p x}
если нужен ключ то:
arr=[:left, :right, :up, :down]
arr.each_with_index do |a,b|
print "индекс #{b} значение #{a}\n"
end
перебор от минус 2 до 2х, а если использовать ... то не включая 2ку
arr = [1, 2]
arr.push(3) #=> [1, 2, 3]
arr << 4 #=> [1, 2, 3, 4]
забыл что за знак меньше меньше, а оказываться добавить элемент в массив
обменять переменные местами не используя третью буферную
как связать 2 таблички из монги на рельсах через айдишник?
коллекция locations
{
"_id" : ObjectId("222d1a2980401829b6a74912"),
"state" : "Россия",
"district" : "Томская область"
}
коллекция users
{
"_id" : ObjectId("61dd3a2280401819b6a74912"),
"name" : "Игорь",
"number" : 2,
"location_id" : ObjectId("222d1a2980401829b6a74912")
}
модель Location
class Location
include Mongoid::Document
include Mongoid::Timestamps
field :state, type: String
field :district, type: String
# belongs_to :user, inverse: :location
end
модель User
class User
include Mongoid::Document
include Mongoid::Timestamps
#store_in collection: "user"
field :name, type: String
field :number, type: String
belongs_to :location , class_name: Location # class_name: Location в моем случае не обязательно
end
что бы запушить что то в github.com использует токен, получить его можно в личном кабинете https://github.com/settings/tokens
git push https://<ghp_kiGблаблабла>@github.com/<имя пользователя>/<имя репозитория(проекта)>.git
не забудь убрать кавычки больше меньше, без скобок и регистрации.
для обычного перебора ассоциативного массива ниже убираем as_json
<% @msql.as_json.each do |a, b| %>
index=<%= a %>
val=<%= b %>
msql[a]=<%=@msql[a] %>
а само as_json мне понадобилось когда получил следующую ошибку:
undefined method `each' for #< Message:0x000000000ef27980 >
пришёл к решению так: вызвал у переменных @msql.methods(в переменную записывал данных поиска из модели) и у @ms.methods (@ms=[1,2,3,4,5])
результаты были очень разные. в первом случае each не было, искал что то подобное, знакомое и случайно наткнулся на as_json