루비에서의 골프 팁 문제에 적용될 수있는 아이디어를 찾고 있습니다.

루비에서 골프를 할 때 어떤 일반적인 팁을 줄 수 있습니까?

루비와 관련된 코드 골프 문제에 적용될 수있는 아이디어를 찾고 있습니다. 예를 들어 “댓글 제거”는 답이 아닙니다.

답변 당 하나의 팁을 게시하십시오.



답변

  • (126)에 숫자 100과 같이 쓸 수있다 ?d?~1.8.
  • 1.9의 단일 문자 문자열이 필요한 경우 비슷한 메모에서? x는 “x”보다 짧습니다.
  • 줄 바꿈을 추가하지 않고 문자열을 인쇄해야하는 경우 $><<"string"보다 짧습니다 print"string".
  • 여러 줄의 입력을 읽어야하는 경우 $<.map{|l|...}보다 짧습니다 while l=gets;...;end. 또한 $<.read한 번에 읽을 수 있습니다 .
  • 당신이 생각하는 경우 파일에서 읽기, $<그리고 gets파일 이름이있는 경우 파일 대신에 표준 입력에서 읽습니다 ARGV. 다시 구현하는 가장 골치 아픈 방법 cat은 다음과 같습니다 $><<$<.read.

답변

splat 연산자를 사용하여 배열의 꼬리와 머리를 가져옵니다.

head, *tail = [1,2,3]
head => 1
tail => [2,3]

이것은 다른 방법으로도 작동합니다.

*head, tail = [1,2,3]
head => [1,2]
tail => 3

*배열에서 문자열과 함께 메소드를 사용하여 요소를 결합하십시오.

[1,2,3]*?,
=> "1,2,3"


답변

  • 사용 abort프로그램을 종료하고 STDERR에 문자열을 인쇄 -보다 짧은 puts다음exit
  • 로 줄을 읽으면 길이를 찾는 데 gets사용할 수 있습니다 ~/$/(마지막 줄 바꿈이있는 경우 계산하지 않습니다)
  • []문자열에 다른 문자열이 포함되어 있는지 확인하는 데 사용하십시오 .'foo'['f'] #=> 'f'
  • 문자 단위 대체 tr대신 사용하십시오 gsub.'01011'.tr('01','AB') #=> 'ABABB'
  • 후행 줄 바꿈을 제거 해야하는 경우 chop대신chomp

답변

당신을 종료하십시오 end.

end코드에서 제거 하십시오.

def...end함수를 정의 하는 데 사용하지 마십시오 . Ruby 1.9에서 new-> 연산자로 람다를 만드십시오. (-> 연산자는 “stabby lambda”또는 “dash rocket” 입니다.) 기능 당 5자를 저장합니다.

# 28 characters
def c n
/(\d)\1/=~n.to_s
end

# 23 characters, saves 5
c=->n{/(\d)\1/=~n.to_s}

메소드 호출은 c n또는 c(n)입니다. Lambda 통화는 c[n]입니다. 각 변경 c nc[n]사용할 수있는, 그래서 만약 비용 1 개 문자를 c n다음 방법을 유지, 5 회 이상을.

do...end블록 을 취하는 모든 메소드는 대신 블록을 사용할 수 있습니다 {...}. 3 ~ 5자를 저장합니다. 우선 순위 {...}가 너무 높으면 괄호를 사용하여 수정하십시오.

# 48 characters
(?a..?m).zip (1..5).cycle do|a|puts a.join','end

# WRONG: passes block to cycle, not zip
(?a..?m).zip (1..5).cycle{|a|puts a.join','}

# 45 characters, saves 3
(?a..?m).zip((1..5).cycle){|a|puts a.join','}

교체 if...else...end삼항 연산자 ?: . 지점에 둘 이상의 문이 있으면 괄호로 묶습니다.

# 67 characters
if a<b
puts'statement 1'
puts'statement 2'else
puts'statement 3'end

# 62 characters, saves 5
a<b ?(puts'statement 1'
puts'statement 2'):(puts'statement 3')

아마도 루프 가 while없거나 until루프가있을 경우 수정 자 형태로 작성하십시오.

(a+=1
b-=1)while a<b


답변

w0lf에 추가

어레이 작업시 2 개의 문자를 저장하기 위해 .compact대체 할 수 있습니다 -[nil].

위의->와 결합하면 더 짧은 -[p]2 문자를 절약 할 수 있습니다 .


답변

가급적 미리 정의 된 짧은 변수를 사용하십시오 (예 : $*대신) ARGV. 다른 유용한 정보와 함께 여기에 좋은 목록이 있습니다 .


답변

문자열 보간을 사용할 때 ( Martin Büttner의 게시물을 홍보해야 함 ) 객체 에 앞에 sigil ( $, @) 이 있으면 중괄호가 필요하지 않습니다 . 같은 마법의 변수에 유용 $_, $&, $1등 :

puts "this program has read #$. lines of input"

따라서 다른 방법보다 변수를 더 많이 인쇄해야하는 경우 일부 바이트를 절약 할 수 있습니다.

a=42; puts "here is a: #{a}"; puts "here is a again: #{a}"
$b=43; puts "here is b: #$b"; puts "here is b again: #$b"