재미있는 코드 골프를 해봅시다~!!

leonid의 이미지

코드 골프란 : 주어진 문제를 풀 수 있는 가장 작은 코드를 작성하는 대회

http://codegolf.com/bob-ross-the-joy-of-ascii-art

여러 문제들 중에서 현재 제가 파고 있는 문제입니다.

내용을 간단하게 요약하면

(x, y, 문자)쌍 여러개를 입력받아서 정확한 위치에 출력하는 문제입니다.

저의 코드 :
[*$<].map{|s|a=s.split.map{|x|x.to_i};($*[k=a[1]]=$*[k].to_s.ljust 1+k=a[0])[k]=a[2]};puts$*

92바이트로 현재 (루비 부문)19등입니다.

스트링으로 이루어진 배열을 이용했는데요..

이 코드를 좀 더 줄일 수 있을까요??

7339989b62a014c4ce6e31b3540bc7b5f06455024f22753f6235c935e8e5의 이미지

저는 파이썬으로 했었습니다. 루비나 펄은 너무 초고수가 많아서 틈새(?)를 공략하기 위해서 그랬는데...
몇개는 (파이썬 순위) 10위 안에 들어있기도 합니다.

hongminhee의 이미지

진짜 골프 고수들은 Perl 진영에 모여있더군요.

qualis의 이미지

다른 사람이 작성한 코드는 볼 수가 없는건가요 ?
====================
시작이 어려울 뿐이다...

시작이 어려울 뿐이다...

leonid의 이미지

모두둘 1등꺼 따라하겠죠.. --;;

aero의 이미지

전체 1~36등 까지가 모두 Perl이 싹쓸이 -o-

creativeidler의 이미지

J 유저들이 저기 가면 J 유저가 싹쓸이할 듯. 저요? 전 J 잘 몰라서-_-a

hongminhee의 이미지

그러게요. 생각해보니 진정한 본좌는 J겠네요…

uathebest의 이미지

J 언어가 있군요 -0-

You are the best!

You are the best!

keedi의 이미지

야근하다가 지루해서 한번 해봅니다.
평범한 코드에 공백문자만 없앴는데...88이네요.
Overall Rank 48 이에요~ :-)

도대체 51 글자로 홀인원 하려면 어떻게 짜야 하죠?
홀인원한 코드는 구경 해보고 싶네요. :-)

@a=<>;map{split/ /;$s[$_[1]][$_[0]]=chr$_[2]}@a;map{map{print$_?$_:' '}@$_;print"\n"}@s

---------------------------
Smashing Watermelons~!!
Whatever Nevermind~!!

Kim Do-Hyoung Keedi

----
use perl;

Keedi Kim

raymundo의 이미지

역시 한번이라도 남의 코드를 봐 버리면 그 다음은 다른 길이 생각이 안 나서리...

굳이 @a는 사용할 필요가 없고, split은 공백으로 구분할 경우 굳이 구분자를 써주지 않아도 되니... 80자로 줄여서 제가 업로드하고 말았습니다 ㅠ,.ㅡ 컨닝해서 죄송해요.

오픈소스(?)를 보고 만들었으니 저도 오픈해야겠죠 ^^;;;;

map{split;$s[$_[1]][$_[0]]=chr$_[2]}<>;map{map{print$_?$_:' '}@$_;print"\n"}@s;

좋은 하루 되세요!

keedi의 이미지

에고! 코드 써버려서 죄송해요.
이런 류의 문제는 답을 쓰지 않는 것이 에티켓이겠네요.
미처 생각 못했답니다. :-)

우와 하지만 정말 $a와 split, map뒤에 <>를 사용하는 부분은 몰랐어요~
그동안 너무 평범하게만 프로그램을 작성했나봐요.
raymundo님 덕분에 좋은 팁 배웠습니다.

P.S.
놀랍군요.

---------------------------
Smashing Watermelons~!!
Whatever Nevermind~!!

Kim Do-Hyoung Keedi

----
use perl;

Keedi Kim

jg의 이미지

이렇게 하면 조금 더 줄일 수 있겠네요.

map{/ (.*) /;$s[$1][$`]=chr$'}<>;map{map{print$_?$_:' '}@$_;print"\n"}@s

72글자입니다.

$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}

raymundo의 이미지

split 대신에 정규표현식으로 뭔가 되지 않을까 하면서도 계속 "/(\d+) (\d+) (\d+)/" 이렇게만 비교하려고 했었는데... 저걸 잊고 있었군요. 대단하십니다! (박수)

그렇잖아도 뒷부분을 줄여서 72글자 정도로 만들었었는데... 65글자까지 줄일 수 있게 되었습니다. print를 두번 쓸 필요가 없고, 3항 연산자 대신에 "||"를 쓰면 되겠더라고요.

map{/ (.*) /;$s[$1][$`]=$'}<>;print map{map{chr($_||32)}@$_,10}@s

좋은 하루 되세요!

keedi의 이미지

jg님과 raymundo님의 힘을 더불어(?) 두글자 줄였습니다~ :-)
newline 포함 64 입니다. :-)

map{/ .* /;$s[$&][$`]=$'}<>;print map{map{chr($_||32)}@$_,10}@s

---------------------------
Smashing Watermelons~!!
Whatever Nevermind~!!

Kim Do-Hyoung Keedi

----
use perl;

Keedi Kim

raymundo의 이미지

이제 13글자를 더 줄여야 하는데 말이죠 ^^ 정말 여기서 어떻게 더 줄일 수 있을지 모르겠네요. 2차원 배열을 쓰는 접근 방법부터 바꾸어야 할 것 같기도 한데... 우웅~

그나저나 다른 언어로도 좀 올라오면 재밌을 것 같은데요? 여기 글타래에서 언급된 J언어(비록 코드골프 사이트에서는 지원하지 않는 모양입니다만)란게 참 궁금합니다 ^_^

좋은 하루 되세요!

hongminhee의 이미지

jg의 이미지

map{/ .* /;$s[$&]|=' 'x$`.chr$'}<>;$,="\n";print@s

newline은 포함하지 않고 50글자입니다.

==
아.. 죄송합니다. 잘못풀었군요. =_=

$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}

pung96의 이미지

저도 비슷하게 생각했었는데 가슴아프게도 ' '가 0이 아니라서 or연산에 난관이 있더군요.

raymundo의 이미지

저 역시... bitwise | 연산을 썼다가 좌절했었지요 ^^

저 64글자 버전에서 더 줄어들기 위해서는 2차원 배열이 아니라 스트링의 1차원 배열로, 그것도 표준입력을 읽는 시점에 갱신되는 배열로 꾸며야 되지 않을까 싶긴 한데...

ascii 캐릭터 중에, "우로 커서 한 칸 이동"에 해당하는 문자가 있을까요? 만일 이동 불가능이라면 스페이스를 삽입하면서 해 준다면 더욱 좋겠고....

제가 시도했던 것 중에 다음과 같은 식으로 해본게 있는데

$str .= "\r"."\f"x$`.chr($')  # 스트링 처음으로 이동해서 커서를 우측으로 옮기고 글자

"\f"는 기존 스트링이 존재하는 동안만 전진하고 없으면 멈춰버리더라고요.

또는 pack()을 어떻게 잘 사용하면 map()을 중첩해서 쓰는 것을 줄일 수 있지 않을까 싶기도 했는데 pack() 사용법은 문서를 봐도 영 어려워서...

좋은 하루 되세요!

jg의 이미지

아.. 다들 고민하신 부분이군요 ^^;

아스키코드 이외의 값은 사용할 수 없을 것 같습니다.
비정규모드(즉 리다이렉트로 텍스트 파일자체로 받았을 경우)인 경우
다른 출력값이 되는 것이나 다름 없으니까요.
정확히 말하면 출력된 값은 전부 아스키코드여야 할 것입니다.

$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}

raymundo의 이미지

뉴라인 제외 62글자짜리입니다. 이거 업로드하면서 앗싸 했는데 도형님도 62글자로 올려놓으셨더군요! 잘 하면 둘을 합쳐서 더 줄일 수 있을지도?

출력할 때 각 라인을 담당하는 안쪽 map()을 printf로 바꿔봤습니다.

map{/ .* /;$s[$&][$`]=chr$'}<>;map{printf"%1s"x@$_."\n",@$_}@s

"%1s"대신에 "%1c"를 사용하면 chr()도 필요없어지지 않을까 기대를 했는데, 그 경우 정의되지 않은 원소를 처리할 때 스페이스로 찍히지 않더라고요. ㅠ,.ㅡ

좋은 하루 되세요!

jg의 이미지

$s[$&][$`]=chr$'./ .* /for<>;printf"%1s"x@$_."\n",@$_ for@s

noeol로 59글자입니다.

$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}

raymundo의 이미지

for를 뒤로 빼서 statement modifier로 쓰신 것 멋지네요! ^^

근데 저 정규표현식이 저렇게 들어가도 제대로 되다니 신기한데요, 왜 되는지 이해가 안 될 지경입니다. 한글자 줄어들때마다 점점 더 신기한 세상으로 들어가는 느낌이군요. ;-)

좋은 하루 되세요!

jg의 이미지

사실 위의 것은 약간 버그가 있는 것 같구요.
아래의 것이 의미에도 잘 맞는 것 같습니다.

$s[$&][$`]=chr$'*/ .* /for<>;printf"%1s"x@$_."\n",@$_ for@s

$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}

aero의 이미지

이렇게 하니 됩니다.

map{/ .* /;$s[$&]|=chr(0)x$`.chr$'}<>;$,="\n";print@s

53자 입니다.
이제 1등(51자)까지 2자 남았습니다. :)
----------
Windows 에서는 print시 chr(0) 이 공백으로 찍히는데
Unix/Linux에서는 그렇게 작동안하는군요.
죄송합니다.

jg의 이미지

또다른 noeol 62글자 버전입니다. :)
이걸 올렸다가 raymundo*님 글 보고 바꾼게 noeol 59글자 버전이었습니다.
58글자로도 가능하지만 무의미하여 여기에 쓰지는 않았습니다.
(실제 제 랭크는 58버전으로 29위입니다만.. =_=)

/ .* /,$s[$&]|="\0"x$`.chr$' for<>;$\="\n";y/\0/ /,print for@s

58버전의 비밀은.. 위의 62글자를 59글자 버전으로 바꿀 수 있는 것과 동일합니다.

51글자의 비밀에는 비정상적인 방법이 동원될 것 같은데
그게 도대체 뭘까요 :)

$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}

jg의 이미지

정말 51바이트로 가능하군요. ㅠ.ㅠ
비밀은 perl을 실행시킬 때 옵션에 있었습니다.

#!perl -lp
그리고 40글자

$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}

raymundo의 이미지

이럴 수가... 이런 방법이 있었군요. OTL

근데 그래도 56바이트... 5글자를 더 줄이지 못하겠군요. 오늘도 이거 붙잡고 얼마나 끙끙댈런지!

좋은 하루 되세요!

jg의 이미지

조금 더 힌트를 드리면

#!perl -lp
/세글자/;vec그리고 20글자

나머지는 for를 잘쓰셔야합니다.

$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}

raymundo의 이미지

이런 함수가 있는 줄도 몰랐습니다. perldoc -f vec 해서 나오는 걸 보니, 있는 줄 알았다 하더라도 설명 한 줄 읽고 "이건 뭐 어려워보이고 내가 쓸 일 없어보이는군"하고 넘어갔을 듯 싶습니다. -_-; 암튼 덕분에 스트링 구성하는 데서 2바이트 줄이고,

정규식은 세글자로도 되는거였군요. :-D

이제 두 글자 줄이면 되는데 역시 쉽지 않군요. jg님 윗 글 본 직후부터 시간 날 때마다 이거 붙잡고 있는데 ^^;

암튼 현재는 아래와 같고,

#!perl -lp (10글자+new line)
/_세글자_/;vec_16글자_}for_12글자_ (41글자 + EOF)
총 53바이트

"for를 잘 쓰셔야 합니다"라는 말이 무슨 뜻일까를 고민하는 중입니다. :-)

** 이 글 보시고 추가 힌트 같은 거 적지 말아주세요~~ ^^ vec() 하나로도 이미 제 스스로는 도저히 넘어갈 수 없었던 지점을 통과하게 되었으니, 나머지는 어떻게든 제 힘으로!! 51글자 만들어 낼 때까지 댓글도 안 쓰려고 하다가, 그게 언제가 될지 몰라서 -_-; 일단 중간 보고 드렸습니다~

좋은 하루 되세요!

jg의 이미지

거의 다 오신 것 같네요.
아마 2글자로 표현된 걸 1글자로 만드시고 EOF 만 없애시면 되겠네요.

제가 힌트를 드린 이유는
사실 제가 막힌 부분은 for 부분이라서요.
근데 반대였네요.

$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}

raymundo의 이미지

이건 사파의 무공이잖습니까! @.@;;;;

이상하게 왜 꼭 파일크기가 한 바이트 늘어날까 했더니만, EOF라고 제가 착각한게 이제보니 그냥 vi에서 "\n"(0x0A)을 자동으로 붙이는 것이더군요. 윈도우즈에서 gvim으로 저장하면 "\r\n"이 붙어서 2바이트가 늘고, X윈도우에서 kedit로 저장하면 아무것도 붙이지 않아서 원래 텍스트 바이트 수만큼만 파일 크기가 나오고... vi 때문에 지금까지 계속 한 바이트 손해보고 있었군요.

암튼, 제가 EOF라고 생각한 바이트를 제거하기 위해서 hexedit로 들여다보는 순간 jg님이 말씀하신 "2글자로 표현된 걸 1글자로 만드"는 것이 무슨 뜻인지 깨달음을 얻었습니다. =.=; "설마 이게 가능할까"라고 생각했는데 perl 인터프리터는 해 주더군요.

희한한 것은, 51바이트 상태에서는 (즉 2글자짜리를 1글자로 만들고, 마지막 "\n"을 제거한 상태), 제 시스템에서는 실행할 때 에러가 납니다.

$ perl ascii.pl < input
Unrecognized character \x11 at ascii.pl line 2.

(저 뜬금없는 \x11의 정체는 뭘까...)

vi로 열었다가 저장해서 다시 "\n"을 뒤에 붙여주고 실행하면 잘 되고요 -_-; 근데 이 51바이트 짜리를 코드골프 사이트에 업로드했더니만 Pass 판정이 나는군요. 흐미...

사파의 무공 어쩌고 한 이유가 텍스트 에디터만으로는 불가능하다라고 생각(이거 엄청난 힌트가 되려나 ^^;)했기 때문인데, 1글자로 만드는 건 vi에서 가능하고 마지막 뉴라인 안 붙이는 건 vi말고 다른 걸 쓰면 되니 불가능한것도 아니군요.

암튼 leonid님이 글타래 만드시고 keedi님이 Perl코드 올리신 날부터 오늘까지 재밌게 놀았습니다 ^^;

ASCII art는 홀인원 때렸으니 - 근데 vec을 쓰는 것부터는 도저히 완전 컨닝한 기분 OTL. 저 혼자 힘으로 했다면 55바이트가 한계였겠네요 - 다른 종목으로 넘어가봐야겠습니다 ^^ 여러 고수님들 덕분에 공부 많이 했네요~ 감사합니다!

좋은 하루 되세요!

jg의 이미지

사실 vec의 경우에는 저도 빈공간에 NULL 문자를 채우는지 몰랐습니다.
하지만 or 연산에서도 NULL 문자를 space 로 바꾸지 않으면
NULL이 출력이 되지 않는 다는 것을 깨닫고 역으로 vec에도 적용했습니다.

저의 경우 모든 걸 vim 으로 했습니다.

: set noeol binary

그리고.. 특수문자는 Control-V 신공으로 해결했습니다. -_-;

emacs 라면 ( 사실 전 emacs 유저 =_=; )
C-x RET f 후에 binary 라고 치면되고
특수문자는 Control-Q 로 가능합니다.

저도 덕분에 즐거웠습니다. 저도 다른 주제로 가고 싶기는 한데
당분간은 좀 힘들 것 같네요 :-)

$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}

keedi의 이미지

와웁! ^_^)b

---------------------------
Smashing Watermelons~!!
Whatever Nevermind~!!

Kim Do-Hyoung Keedi

----
use perl;

Keedi Kim

leonid의 이미지

루비는 아무도 안하시나요?? -ㅅ-a

leonid의 이미지

드디어 루비로 92자에서 82자로 줄였습니다.. ㅠㅠ (루비 랭킹 14위)

eval을 사용하니 팍 줄더군요~ ㅋㅋㅋㅋ

jg의 이미지

ruby에도 perl의 옵션 ...

  -l[octal]       enable line ending processing, specifies line terminator
  -n              assume "while (<>) { ... }" loop around program
  -p              assume loop like -n but print line also, like sed

들이 있다면 이용해보시면 어떨까요?
perl의 경우 출력함수를 사용할 필요가 없고 newline이 자동으로 출력되더군요.
약간의 트릭이 필요합니다만. -n 옵션의 설명 자체를 그대로 받아들이면
아래와 같은 코드가 가능해집니다.

#!perl -lp
...}for(@s){...

이때 perl의 경우 위의 코드를 기본적으로 아래와 같이 바꿉니다.

while(<>){...}for(@s){...;}

$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}

leonid의 이미지

옵션을 시도하고 오니 바로 이 답글이 달려있더군요.. ㅎㅎ

#!ruby -n 옵션을 사용하니

1바이트 더 줄었습니다.. ㅎㅎ

현재 81바이트입니다.

leonid의 이미지

루비에서 -n 옵션은 코드를

while gets(); ... end

루프 안에 넣습니다.

input을 모두 받아서 while루프를 빠져나간 후, puts$* 명령을 하고 싶습니다.

현재는

#!ruby -n
..................
END{puts$*}

이렇게 하고 있는데요.. 더 짧게 하는 방법은 없을까요?

jg의 이미지

글쎄, 저의 경우에는 -n 보다는
-p 옵션과 함께 출력하는 부분을 없애는 것이 가장 좋았구요.

#!perl -lp
줄단위로 NULL("\0") 과 함께 문자열 배열을 만들고
} for(문자열배열에대해){
NULL을 space로 치환

하는 과정을 거쳤습니다.
따라서 출력하는 부분이 필요가 없었습니다.

$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}

leonid의 이미지

저도 비슷하게

#!ruby -lp
.................
end
for s in $*
.........

를 시도해봤지만 컴파일이 안되네요. 제가 잘못알고 하는 것일 수도..

일단, 새로 알게 된 -a 옵션($_.split을 $F로 호출 가능하게 하는 옵션)을 사용해서

81자에서 79자로 줄였습니다.

앞으로 9자 남았네요.. --;

leonid의 이미지

#{}를 이용해서 78자로 줄였습니다

앞으로 8자.. --;;;

/////////////////////////

옵션을 없애고 조금 손을 봐주니 75자로 줄었습니다. ㄷㄷㄷ...

현재 루비 9위네요 --;;; 앞으로 5자....

/////////////////////////

%를 사용하고 드디어 71B가 되었습니다. 현재 루비 4위..

이제 1글자 남았네요 ㄷㄷㄷ..

/////////////////////////

69B..

근데 1등은 68B --;;;;

1바이트 줄이기가 되게 힘드네요 --;;;

leonid의 이미지


업데이트 하는걸 잊었네요. -_-ㅋ

11월 7일자로 68B로 홀인원 성공했습니다. 공동1위로 3위 등극 ㅎㅎ

위의 69B 해와 68B 해는 겨우 한글자 차이나지만 코드는 알고리즘 자체부터 완전히 딴판이었습니다.

69B 해를 눈물을 머금고 버린 후 처음부터 다시 시작해서야 드디어 한글자를 줄일 수 있었습니다. ㅋㅋ

이에 관련해서는 블로그에 언제 한번 글을 올려보겠습니다. ㅎㅎ

댓글 첨부 파일: 
첨부파일 크기
Image icon artgolf_.png12.94 KB
Image icon artgolf_.png12.94 KB
leonid의 이미지

.

galien의 이미지

확실히 파이썬은 code golf계에서는 맥을 잘 못춰요...

ㅠ.ㅜ

keedi의 이미지

세미콜론이 없고 indentation 강제 때문인가요?
궁금하네요. ^^

---------------------------
Smashing Watermelons~!!
Whatever Nevermind~!!

Kim Do-Hyoung Keedi

----
use perl;

Keedi Kim

galien의 이미지

글쎄요. 저는 펄을 몰라서(루비도 모르고..PHP도 모르고..) 뭐라 말씀드리기 힘듭니다만,
펄은 일단 정규 표현식의 표현이 쉽지 않나요.
문자열 처리에서는 파이선이 펄 만큼 자유롭고, 강력하지 않다고 생각이 됩니다.
가독성을 중요시 하는 철학 때문이기도 하고요.
들여쓰기의 강제 때문에 재미있는 꽁수가 있기도 한데요.
1단계 들여쓰기는 공백문자 하나, 2단계는 공백문자 둘 대신에 탭하나, 3단계는 탭하나, 공백하나, 등으로 활용하기도 합니다. ^^;;

그리고 파이선에는 삼항 연산자가 없기 때문에 리스트와 첨자 활용으로 대신하기도 하고..

뭐 가장 큰 문제는 제 실력이 못난 탓이죠. 파이선 내에서도 중위권 성적이라....

hongminhee의 이미지

Python 2.5에서 삼항 연산자가 추가되었어요. trueValue if condition else falseValue

Python에서는 정규 표현식이 따로 리터럴이 없는 것도 있고, 쓰려면 re 모듈도 일단 불러와야해서… 평소 때는 몰라도 골프할 때는 꽤 치명적이죠. ㅎㅎ

galien의 이미지

오홋! 삼항 연산자가 추가 되었근영!!!!
code cc 에도 2.5버젼인 걸까요.

keedi의 이미지

오호. 재미있는 들여쓰기 꽁수네요. ^^)b
삼항연산자 꽁수도 한번 구경시켜주세요~ 궁금해요~ :-)

---------------------------
Smashing Watermelons~!!
Whatever Nevermind~!!

Kim Do-Hyoung Keedi

----
use perl;

Keedi Kim

galien의 이미지

삼항 연산자 꽁수는 구글링해서 알아낸 것입니다.

(False Code, True Code)[condition]

입니다. 이것이 2.5에서 추가되었다는 삼항 연산자보다 1글자 많을 것 같네요.
한타 줄일 수 있겠네요...;-)

hongminhee의 이미지

이것 말고도 Python의 and, or 연산자 특성을 이용하면 삼항 연산자를 흉내낼 수 있었죠.

condition and trueValue or falseValue

lifthrasiir의 이미지

몇몇 사람들은 자기 주 언어로 참가하면서 전체 순위에 들려고 다른 언어를 해 보기도 합니다... 믿거나 말거나.

혹시 다른 언어들로 참가하고 싶으신 분들께서는 http://golf.shinh.org/ 를 보셔도 됩니다.

시지프스의 이미지

허접한보잘 것 없는 실력으로 풀 만한 문제가 prime이길래 도전했습니다만, 제 실력으로는 C언어로 91바이트가 한계네요. 75바이트로 하신 분은 어떻게 하셨는지...

그나저나 이거하느라 시험 공부를 못 했어요. OTL

begin{signature}
THIS IS SPARTA!!!!!n.
end{signature}

망치의 이미지

오.. 이런거 굉장히 유용하네요.. 코드골프라는게 있군요.
PHP 겉핥기만 하는 제게는 딴세상이야기 같아요 O_o;

---------------------------------------
http://www.waitfor.com/
http://www.textmud.com/

pung96의 이미지

하핫, jg님, raymundo님 감사합니다. 한바이트 줄였습니다.
그런데 2바이트가 1바이트가 되는 비밀은 영 모르겠군요.
http://codegolf.com/grid-computing
2바이트를 더 줄여야 하는데 이제 정말 한계입니다.

raymundo의 이미지

어느새 이게 1년 반 전의 일이로군요...

2바이트가 1바이트가 되는 비밀은 이제 공개해도 될 것 같죠? (사실은 오늘 생각나서 다시 둘러보는데 저도 그 비밀이 뭐였는지 기억이 안 나서 당황하다가... 방금 다시 생각났습니다 -ㅅ-;)

"\0" 이라고 표현된 부분을 진짜 널 캐릭터로 바꿔버리면 됩니다 :-)

그런데, 골프 사이트 갔더만 50바이트짜리 1등이 새로 올라와 있더군요 OTL

좋은 하루 되세요!