댓글 없다고 까기 ㄴㄴ
그리고 애당초 이 블로그는 배설 블로그라 분위기가 좀 자유분방함
IRC나 다른 곳에서 날 만난 사람이 이 곳에 오면
내 인상과 워낙 다른 블로그에 깜짝 놀랄듯
아무튼 늘모를 깝시다
2009년 10월 12일 월요일
2009년 8월 6일 목요일
[Perl] 영타->한타 변환 (모듈 사용)
#####################################################
# en-co_convert.pl
use Lingua::KO::TypoCorrector;
my $asdf = '<누군가> TNLVMXMZLRK DKSQKWUDY';
$asdf =~ s/([ASDFGHJKLZXCVBNMYUI])/lc($1)/eg;
while ( $asdf ) {
print toKorean($&) if $asdf =~ s/^\w+//;
print $& if $asdf =~ s/^\W+//;
exit if $n++ > 20; # 혹시 예상하지 못한 문제로 무한루프를 돌면 안 되니까(...)
}
######################################################
결과
$ ./en-co_convert.pl
<누군가> 쒸프트키까 안빠쪄요
원래는 IRC에서 누가 한글이 안 쳐지면 하게 만든 스크립트인데(이런 건 꽤 돌아다니지만 내 봇에도 넣고 싶었다.)
그거 때문에 자소 합치는 스크립트를 열심히 머리 굴려서 짜게 됐던 거다. 근데, 모듈이 이미 존재하더라.
JEEN 님께서 작성해 두셨다. 저런 거 까지 있을줄이야……
TypoCorrenctor
freenode #perl-kr 에서 자소 융합 모듈에 대해서 얘기가 나왔는데,(아마 나의 안습한 포스팅을 보고 얘기를 하신게 아닌가 싶다. 아마 이 포스팅도 보실 것 같다. 무서워) 아마 유니코드에서 초성 중성 종성과 그냥 키보드로 타이핑하는 자음, 모음에는 키의 차이가 있다고 한다. 내가 사용하려던 목적과는 약간 어울리지 않았던 것이겠지……
확실히, 분리는 그럭저럭 되는 것 같았는데 폰트가 달랐고 글자 모양도 달랐고; 직접 키보드 초, 중, 종성에 대한 값 ('\x{1101}' 같은 것들)을 넣었다면 작동했을지는 모르겠지만 난 그러기가 귀찮았다. 귀찮은 건 미덕이라지 않은가…… 아무튼 더 귀찮아서 검색을 열심히 했다면 스스로 모듈을 찾을 수 있었겠지만, 미덕이 모자라 귀찮음을 무릅쓰고 저런 일을 했으니 안습.
위의 스크립트에 대해서 변명을 좀 해보자면,
나는 \w 가 허용하는 문자들의 ord를 확인해 본 적이 없다. 알 수 없는 곳에서 버그가 날지도 모른다는 것이겠지;
# en-co_convert.pl
use Lingua::KO::TypoCorrector;
my $asdf = '<누군가> TNLVMXMZLRK DKSQKWUDY';
$asdf =~ s/([ASDFGHJKLZXCVBNMYUI])/lc($1)/eg;
while ( $asdf ) {
print toKorean($&) if $asdf =~ s/^\w+//;
print $& if $asdf =~ s/^\W+//;
exit if $n++ > 20; # 혹시 예상하지 못한 문제로 무한루프를 돌면 안 되니까(...)
}
######################################################
결과
$ ./en-co_convert.pl
<누군가> 쒸프트키까 안빠쪄요
원래는 IRC에서 누가 한글이 안 쳐지면 하게 만든 스크립트인데(이런 건 꽤 돌아다니지만 내 봇에도 넣고 싶었다.)
그거 때문에 자소 합치는 스크립트를 열심히 머리 굴려서 짜게 됐던 거다. 근데, 모듈이 이미 존재하더라.
JEEN 님께서 작성해 두셨다. 저런 거 까지 있을줄이야……
TypoCorrenctor
freenode #perl-kr 에서 자소 융합 모듈에 대해서 얘기가 나왔는데,(아마 나의 안습한 포스팅을 보고 얘기를 하신게 아닌가 싶다. 아마 이 포스팅도 보실 것 같다. 무서워) 아마 유니코드에서 초성 중성 종성과 그냥 키보드로 타이핑하는 자음, 모음에는 키의 차이가 있다고 한다. 내가 사용하려던 목적과는 약간 어울리지 않았던 것이겠지……
확실히, 분리는 그럭저럭 되는 것 같았는데 폰트가 달랐고 글자 모양도 달랐고; 직접 키보드 초, 중, 종성에 대한 값 ('\x{1101}' 같은 것들)을 넣었다면 작동했을지는 모르겠지만 난 그러기가 귀찮았다. 귀찮은 건 미덕이라지 않은가…… 아무튼 더 귀찮아서 검색을 열심히 했다면 스스로 모듈을 찾을 수 있었겠지만, 미덕이 모자라 귀찮음을 무릅쓰고 저런 일을 했으니 안습.
위의 스크립트에 대해서 변명을 좀 해보자면,
나는 \w 가 허용하는 문자들의 ord를 확인해 본 적이 없다. 알 수 없는 곳에서 버그가 날지도 모른다는 것이겠지;
2009년 8월 4일 화요일
[Perl] 분리된 한글 자모 합치기 스크립트
스크립트 소스:
출력 결과:
이 스크립트는 소정의 개인적인 목적을 위해 짜여졌으며, 내가 원하는 스크립트를 위한 중간발판 정도입니다. 때문에 저는 그냥 테스트 코드로만 작성을 해서 예외처리라든지 지저분한 점이라든지 있습니다. 태그 문제로 코드 정리도 지저분하고, 취향 때문에 사용한 몇몇 더러운 코드도 있긴 할테지만 자비롭게 봐주시면 감사합니다.
CPAN에 한국어 자모분리/합치기 모듈이 있긴 하지만 도무지 이용이 어려워 아예 스크립트를 새로 짰습니다. 그리고 딱히 자모 합치기에 대한 perl 스크립트는 보이지 않아 새로 게시를 하였습니다.
mwultong 님의 게시물에서 많은 도움을 받았습니다.
추가> 자음이나 모음만 들어간 경우를 처리하기 위해서는 좀 더 코드가 필요합니다. 중간에 while 문 안에 적당한 조건을 더 집어넣으면 되는데, 생각해보니 이프문을 두 개로 나눠놨는데 하는 짓은 똑같더군요. 예. 합쳐주면 조금이나마 더 깔끔한 코드가 될 것 같습니다.
덧.
아무래도 블로그 글 예쁘게 쓰기는 나랑 성향이 영 안 맞는 것 같다. 다음부터 대충 써야지 역시……
이 게시물 태그에 뻘짓이 있는 건, 나름 예쁘게 써보겠답시고 태그 만지고 블로그 편집기랑 싸움을 한 것 때문이다.
급 반말이 나오는 이유는, 애당초 여긴 배설 블로그였기 때문에 :P
8월 4일 16시 51분 출력 결과 수정 및 추가사항 입력. 아놔 예문 줄였으면서 그대로 올리면 어쩌자는 거지;
use strict; use warnings; use utf8; use Encode; my @charset = qw/ㅇ ㅖ ㅈ ㅔ 1 ㅂ ㅓ ㄴ /; # %cho, %jun, %jon 은 초성, 중성, 종성의 순서를 나타냅니다. # print "$_ : ".chr($_)."\n" foreach keys %cho; # 같은 코드를 이용하면 확인해보실 수 있습니다. my %cho = ( 12593 => 0 , 12594 => 1 , 12596 => 2 , 12599 => 3 , 12600 => 4 , 12601 => 5 , 12609 => 6 , 12610 => 7 , 12611 => 8 , 12613 => 9 , 12614 => 10 , 12615 => 11 , 12616 => 12 , 12617 => 13 , 12618 => 14 , 12619 => 15 , 12620 => 16 , 12621 => 17 , 12622 => 18 , ); my %jun = ( 12623 => 0 , 12624 => 1 , 12625 => 2 , 12626 => 3 , 12627 => 4 , 12628 => 5 , 12629 => 6 , 12630 => 7 , 12631 => 8 , 12632 => 9 , 12633 => 10 , 12634 => 11 , 12635 => 12 , 12636 => 13 , 12637 => 14 , 12638 => 15 , 12639 => 16 , 12640 => 17 , 12641 => 18 , 12642 => 19 , 12643 => 20 , ); my %jon = ( 0 => 0 , 12593 => 1 , 12594 => 2 , 12595 => 3 , 12596 => 4 , 12597 => 5 , 12598 => 6 , 12599 => 7 , 12601 => 8 , 12602 => 9 , 12603 => 10 , 12604 => 11 , 12605 => 12 , 12606 => 13 , 12607 => 14 , 12608 => 15 , 12609 => 16 , 12610 => 17 , 12612 => 18 , 12613 => 19 , 12614 => 20 , 12615 => 21 , 12616 => 22 , 12618 => 23 , 12619 => 24 , 12620 => 25 , 12621 => 26 , 12622 => 27 , ); my @numset; # @ARGV에서 받은 한글을 split 하니까 오류가 나서 포기했습니다. map { push @numset, ord $_ } @charset; my @output; my $type=0; while (@numset) { # @$numset[0]은 초성, [1]에는 중성, [2]에는 종성을 넣도록 합니다. my $qq = shift @numset; if ( $qq > 12643 || $qq < 12593 ) { $type++; push @{$output[$type]}, $qq; next; } if ( ($qq <= 12622 && $numset[0] > 12622 ) || ( ${$output[$type]}[2] )) { $type++; # 다음 문자가 모음이라면 다음 글자로 가서 } push @{$output[$type]}, $qq; } foreach ( @output ) { ($_=$$_[0])&&(next) unless $$_[1]; $_ 를 그 배열(@$_)의 첫번째 값으로 바꿉니다. $$_[2] = $$_[2] || "0"; # 안 해주면, 종성이 없을 때에는 경고메세지를 출력합니다. $_ = ($cho{$$_[0]}*21 + $jun{$$_[1]}) * 28 + $jon{$$_[2] } + 44032; } print encode('utf-8',chr($_)) foreach @output; # wide character 어쩌구 오류메세지를 막기 위해 인코딩을 사용했습니다. print "\n"; |
출력 결과:
| $ ./asdf.pl 예제1번 |
이 스크립트는 소정의 개인적인 목적을 위해 짜여졌으며, 내가 원하는 스크립트를 위한 중간발판 정도입니다. 때문에 저는 그냥 테스트 코드로만 작성을 해서 예외처리라든지 지저분한 점이라든지 있습니다. 태그 문제로 코드 정리도 지저분하고, 취향 때문에 사용한 몇몇 더러운 코드도 있긴 할테지만 자비롭게 봐주시면 감사합니다.
CPAN에 한국어 자모분리/합치기 모듈이 있긴 하지만 도무지 이용이 어려워 아예 스크립트를 새로 짰습니다. 그리고 딱히 자모 합치기에 대한 perl 스크립트는 보이지 않아 새로 게시를 하였습니다.
mwultong 님의 게시물에서 많은 도움을 받았습니다.
추가> 자음이나 모음만 들어간 경우를 처리하기 위해서는 좀 더 코드가 필요합니다. 중간에 while 문 안에 적당한 조건을 더 집어넣으면 되는데, 생각해보니 이프문을 두 개로 나눠놨는데 하는 짓은 똑같더군요. 예. 합쳐주면 조금이나마 더 깔끔한 코드가 될 것 같습니다.
덧.
아무래도 블로그 글 예쁘게 쓰기는 나랑 성향이 영 안 맞는 것 같다. 다음부터 대충 써야지 역시……
이 게시물 태그에 뻘짓이 있는 건, 나름 예쁘게 써보겠답시고 태그 만지고 블로그 편집기랑 싸움을 한 것 때문이다.
급 반말이 나오는 이유는, 애당초 여긴 배설 블로그였기 때문에 :P
8월 4일 16시 51분 출력 결과 수정 및 추가사항 입력. 아놔 예문 줄였으면서 그대로 올리면 어쩌자는 거지;
2009년 7월 26일 일요일
[게임] Loopy 50X50 클리어. 열시간 넘게 걸린듯.
우분투 저장소에 있던 퍼즐 게임인데, 간단하게 즐길 수 있는 퍼즐중에서 상당히 재미있는 축에 속한다. 스도쿠도 나쁘지 않다고 생각하지만, 프로그렘 추가/제거에서 깔 수 있는 로직 게임은 영 꽝이라는 생각.
윈도에서 이걸 재미있게 즐길 방법은 못 찾았는데, 같은 룰의 게임은 있긴 있었다. 내가 플레이하는 프로그램이 훨씬 정교한 느낌이지만 말이다.
Rule
기본적으로 게임의 결과물은 한 개의 원형을 찌그러트린 모양이 되어야 한다.
> 1. 선이 여러 갈래로 나뉘어져서는 안 된다. 한붓그리기 꼴. 실제로 한붓 그리기를 하려면 난이도가 안드로메다로 떠나니, 결과물이 그렇다는 것이고 과정까지 한붓그리기를 하기엔 어렵다. 가끔 도전하는 사항.
> 2. 선이 교차하는 부분이 있어서는 안 된다.
> 3. 따로 노는 선들이 있으면 안 된다. 원이 두 개 이상이 되면 에러.
윈도에서 이걸 재미있게 즐길 방법은 못 찾았는데, 같은 룰의 게임은 있긴 있었다. 내가 플레이하는 프로그램이 훨씬 정교한 느낌이지만 말이다.
Rule
기본적으로 게임의 결과물은 한 개의 원형을 찌그러트린 모양이 되어야 한다.
> 1. 선이 여러 갈래로 나뉘어져서는 안 된다. 한붓그리기 꼴. 실제로 한붓 그리기를 하려면 난이도가 안드로메다로 떠나니, 결과물이 그렇다는 것이고 과정까지 한붓그리기를 하기엔 어렵다. 가끔 도전하는 사항.
> 2. 선이 교차하는 부분이 있어서는 안 된다.
> 3. 따로 노는 선들이 있으면 안 된다. 원이 두 개 이상이 되면 에러.
플레이 스크린샷
이건 3분짜리 플레이 영상이다.
윈도에서도 Loopy 게임을 찾을 수는 있다. 기본적인 플레이는 좀 이후에 다뤄보도록 하자.
근성있게 하면서 어느정도 패턴화를 시킬 수 있다. 어느 퍼즐 게임이 안 그러겠냐만, 넓고 멀리 볼 수 있어야지 게임이 쉬워지는 것 같다. 그래도 우분투 기준으로는 반드시 깰 수 있도록 게임을 만들어주기 때문에, 어찌됐든 깰 수는 있다.
반드시 깰 수 있다는 말은 게임의 solution이 딱 하나라는 것. 윈도 버전으로 구했던 Loopy는 주어진 조건을 만족하는 많은 풀이가 가능한데, 그중에서 딱 하나만 답으로 인정을 한다. 그것도 랜덤생성도 아니라 미리 만들어둔 판에서! 거기에 크기도 작다. 최대한 크게 잡은 칸이 13 x 8 이었던가…… 더 작았던 느낌이다. 내가 제일 자주 하는 판이 15 x 15 hard인데,[1] 저건 뭐 판도 작고 플레이도 내 답을 인정 안 해줘서 짜증나고…… 그래도 그림판에서도 선 그리면서 플레이 할 수도 있긴 하지만 그렇게 할 사람은 아마 거의 없을테니까 패스.
보너스. 7x7 hard 한붓그리기. 갈등하는 장면이 좀 많지만, 한붓그리기의 실상은 머리속으로 그려보고 맞으면 마지막에 실행이다.
______
[1]플레이 타임은 빠르면
주석의 취소선에 대한 변 : 동영상 찍으면서 시간 재봤더니 저렇게 나왔음. 15x15 베스트는 8분 약간 덜 걸리고, 20x30 베스트는 우측클릭 봉인하고 24분 정도 나왔다. 그 다음 베스트는 46분(..)
피드 구독하기:
글 (Atom)





