루비에서 골프를 할 때 어떤 일반적인 팁을 줄 수 있습니까?
루비와 관련된 코드 골프 문제에 적용될 수있는 아이디어를 찾고 있습니다. 예를 들어 “댓글 제거”는 답이 아닙니다.
답변 당 하나의 팁을 게시하십시오.
답변
- (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 n
에 c[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"