[Ruby] Leet 문자열의 해법은 다양합니다.

7848 단어 Rubytech

이른바 리트 문자열


leet(Let, 1337, l33t)은 주로 영어권에서 인터넷에서 사용하는 자모의 표현법이다.
예를 들어'Warez'라는 단어를 leet으로 표시하면W@rez","W4r3z"등 일부 자모는 모양이 비슷한 아라비아 숫자나 기호 등으로 변한다.
https://ja.wikipedia.org/wiki/Leet
왠지 매운 여자 문자랑 (지금은 모르지만) 통하는 게 있는 것 같아요?이렇게 생각하면서 웃어요.

연습 문제


문제.


리트라는 인터넷 속담이 있어요.
Leet의 몇 개의 자모는 비슷한 모양의 다른 문자로 대체되어 있다.리트의 교체 규칙은 매우 많으니 여기서 다음 교체 규칙만 고려하자.
교체 전-교체 후
A→4
E→3
G→6
I→1
O→0
S→5
Z→2
문자열(표준 입력)을 입력한 후 Leet 출력으로 변환하는 프로그램을 입력하십시오.
입력 예 1
PAIZA
출력 예 1
P4124

tr 메서드 사용


https://docs.ruby-lang.org/ja/latest/method/String/i/tr.html
str = gets.chomp
puts str.tr('AEGIOSZ', '4361052')
사용 방법은 文字列のインスタンス.tr("変換したい文字", "置き換え文字")와 같이 각각 색인 위치가 일치하는 문자로 대체한다.
tr방법을 모르면 사용할 수 없습니다. 이것이 가장 간단합니다.
후술한 gsub 방법보다 더 빠른 보도도 발견됐다.

gsub 방법 사용하기 (정규 표현식 사용)


https://docs.ruby-lang.org/ja/latest/method/String/i/gsub.html
LEET_TABLE = {
  "A" => "4",
  'E' => '3',
  'G' => '6',
  'I' => '1',
  'O' => '0',
  'S' => '5',
  'Z' => '2'
}

def leet(str)
  str.gsub(/[AGIOSZ]/, LEET_TABLE)
end

str = gets.chomp
puts leet(str)
정규 표현식을 사용할 때 文字列.gsub(/正規表現/, 正規表現に該当した箇所を置換した後の文字列)와 같다.
정규 표현식文字列.gsub(置換したい文字列, 置換後の文字列)을 사용하지 않는다면 이번에는 어떻게 사용해야 하나요?해 보았지만 성공하지 못했다😵
참고로sub 방법은 처음에 일치하는 부분만 바꾼 것 같습니다.

힘을 쓰다


방법이 없어도 돼!
복잡하고 길었네요.
str= gets.split('').map(&:chomp)
leet =''
str.each do |i|
  case i
  when 'A'
    leet << '4'
  when 'E'
    leet << '3'
  when 'G'
    leet << '6'
  when 'I'
    leet << '1'
  when 'O'
    leet << '0'
  when 'S'
    leet << '5'
  when 'Z'
    leet << '2'
  else
    leet << i
  end
end
puts leet

좋은 웹페이지 즐겨찾기