코드골프 공략용


이 글은 아마 심심할때 업데이트(...)
그저 최신사항 업데이트가 목적.
저작자 표시 비영리 동일 조건 변경 허락

분류없음 2010/02/05 14:57 posted by d3m3vilurr

d3m3vilurr의 미투데이 - 2009년 5월 6일

이 글은 d3m3vilurr님의 2009년 2월 3일에서 2009년 5월 6일까지의 미투데이 내용입니다.


me2day 2009/05/07 04:32 posted by d3m3vilurr

모에적성검사 올해에도 한번

작년에 이어 올해에도 한번 해봤습니다.

작년에는 IE에서 안되더니 올해는 잘 되는군요. 뒤로갈수록 귀찮길래 그냥 적당히 클릭한 결과


전체적으로 작년과 비슷하네요(...)
저작자 표시 비영리 동일 조건 변경 허락

분류없음 2009/04/12 22:46 posted by d3m3vilurr

파이썬 자동 테스트

python.or.kr에 제 블로그가 링크된 기념(...)

파이썬 자동 테스트는 확인해보면 사실 간단한 코드져. 일정시간동안 슬립하면서 변경된 파일이 있다면, 단위 테스트를 다시 돌리는 프로그램입니다.

예전 포스팅에서는 snarl을 이용해서 윈도에서 notify를 했었는데요. 지금은 리눅스에서 /usr/local/bin에 넣어놓고, pynotify를 이용하고 있습니다.

#!/usr/bin/env python

import glob,os,stat,time,string,sys

class NoneNotifyViewer:
    def __init__(self):
        pass

    def setNotification(self, topic, msg, staus, timeout):
        pass

   
class GtkNotifyViewer:
    def __init__(self):
        import pygtk
        pygtk.require('2.0')
        import pynotify, gtk

        if not pynotify.init("autotest"):
            print "python-notify init error"
            exit(1)

    def setNotification(self, topic, msg, status, timeout):
        import pynotify
        n = pynotify.Notification(topic, msg, self.__getStatusImage(status))
        n.set_timeout(timeout)
        if not n.show():
            print "Fail notify error"
            sys.exit(1)

    def __getStatusImage(self, status):
        iconPath = 'file:///usr/local/share/icons/test_icons/'
        if (status == 'fail'): return iconPath + 'fail.png'
        elif (status == 'success'): return iconPath + 'success.png'
        else: return iconPath + 'info.png'

class NoseNotify:
    @staticmethod
    def __getNotifyViewer():
        return NoseNotify.__viewer 
 
    @staticmethod
    def notify(topic, msg, status, timeout):
        n = NoseNotify.__getNotifyViewer()
        n.setNotification(topic, msg, status, timeout)
   
    @staticmethod
    def setNotifyViewer(viewer):
        NoseNotify.__viewer = viewer

    #init
    __viewer = NoneNotifyViewer()


class AutoTest:
    def __init__(self):
        self.val = 0

    def checkSum(self):
        return self.__getCheckSum('.py') + self.__getCheckSum('.kid')

    def __getCheckSum(self, fileType):
        val = 0
        for dirpath, dirs, files in os.walk("."):
            for file in [file for file in files if file[-1 * len(fileType):] == fileType]:
                f = os.path.join(dirpath, file)
                stats = os.stat(f)
                val += stats[stat.ST_SIZE] + stats[stat.ST_MTIME]
        return val
 
    def run(self):
        while (True):
            checkSum = self.checkSum()
            if checkSum != self.val:
                self.val = checkSum

                # test run
                result = os.popen3('/usr/bin/nosetests')[-1]
                msg = result.readlines()
                isPass = (msg[-1] == 'OK\n')
                print string.join(msg, "")
              
                r = "Test Success" if isPass else "Test Fail"
                i = 'success' if isPass else 'fail'
                notice_msg(r, string.join(msg[-3:]), i)
            try:
                time.sleep(1)
            except (KeyboardInterrupt, SystemExit):
                notice_msg("autotest", 'autotest was end', 'info')
                sys.exit(0)


def notice_msg(title, msg, status='info', timeout=3000):
    NoseNotify.notify(title, msg, status, timeout)


if __name__ == '__main__':
    NoseNotify.setNotifyViewer(GtkNotifyViewer())
    autoTest = AutoTest()
    notice_msg("autotest", 'autotest was started')
    autoTest.run()
    

# vim: ft=python ts=4 sw=4 et syn=on

아이콘 이미지는 어디선가 구해서(저도 어딘지 잘..) file:///usr/local/share/icons/test_icons/ 에 넣어놨구요
그냥 마구 야매인 코드라 보기엔 좀 힘드시지 않으실지;;;
뭐 저도 아무렇게나 짠거라(............)

동영상은 테스트 삼아 찍어봤는데 어딜 올려도 화질이 별로 안좋네요 그냥 올려봅니다(...)
나중에 생각나면 서버에 원본을 올리던지 그런식으로(.........)

유튜브에 올렸습니다. 그냥 사용동영상이니..;;





저작자 표시 비영리 동일 조건 변경 허락

분류없음 2009/02/27 17:48 posted by d3m3vilurr

자미두수 한번...

야꿀옹이 했길래 나도 심심해서 한번.

이 사람은 눈이 반짝이는 것이 특징이며 정직하고 청렴결백한 편으로 총명하고 수단도 뛰어나지만 고집이 강하고 주관이 뚜렷하여 자기가 하고 싶은 말은 상대를 가리지 않고 솔직하게 다 말한다. 한번 화를 내면 대단하고 자기가 옳다고 생각하면 여간해서 다른 사람 말은 듣지를 않으며 어려서 클때도 부모에게 야단도 많이 맞고 크는 사람으로 목소리도 큰 편이고 뚝심도 있는 사람이다. 삼십이 넘으면서 본 면목이 발휘되는 형인데 사람이 점잖아지고 대인관계도 싹싹해지며 매사 얼렁뚱땅하지 않고 이해관계가 분명해진다.
대개 맏이나 막내에서 많이 보고 중간이라면 형제간 맏이 노릇을 하며 나중에 부모를 많이 생각하는 효자효녀이다. 일도 꼼꼼하게 마무리를 잘하고 겉치레나 체면보다는 실속위주로 살아가며 엄청 구두쇠이기도 한데 한번 쓸 때는 뒤끝이 없이 화끈하게도 쓴다. 갑자기 일이 닥쳐도 당황하거나 허둥대지 않으며 오히려 침착해지는 성격이고 매사 말로 왈가 불가 하는 것보다 직접 부딪혀 가면서 실천하는 것을 좋아하는 형이다. 자기가 싫어하는 사람은 아예 상대도 안 하지만 한번 사귀면 변함이 없는 사람으로 밖에 나가면 친구도 다양하지만 특히 이성과의 대화가 더 편하게 느껴지는 사람이 많다. 평상시는 다정다감하지만 아니다 싶으면 절대로 웃어넘기지 않으며 강자에게는 강한데 약자에겐 약한 타입이라 속정이 많다.
사람이 약간 고지식하고 봉건적인 면이 있으며 애 어른을 구별할 줄 알고 공공장소나 전철에서 노인에게 자리 양보도 잘하고 술 담배도 함부로 안하며 예의를 갖출 줄 아는 사람이다. 밖에서 힘든 일이 있어도 집에서는 말도 별로 없지만 상당히 가정적이고 자기가 한 말에 대해서는 책임감도 강하며 하지 못 할 일은 입장이 곤란해도 분명하게 거절을 하는 성격이다.
이 사람은 학벌에 연연하지 않고 본인의 지혜와 능력을 위주로 사회생활을 해가며 직업의 귀천을 가리지는 않지만 남의 밑에서 속박된 생활은 못하고 자율적으로 일하는 것을 좋아하는 사람이다. 직업도 일반 월급쟁이는 별로이며 사업을 하거나 특수 전문직인데 관직이나 금융, 무역, 컴퓨터, 디자인, 전기, 전자, 군, 경찰, 사법, 교수, 예술 쪽으로 많다. 또한 서비스업이나 유흥업도 잘맞는데 오락, 호텔 숙박, 한정식, 요정, 외식사업 등 규모가 있고 고급스러운 것이 잘 맞는다.
이 사람은 학교 다닐 때 공부도 스스로 알아서 하는 타입인데 고등학교 때 수학이 좀 떨어지는 편이나 외국어는 잘 맞으니 영어나 일어를 꼭 익혀두는 것이 좋다. 맞는 대학은 국립대를 위주로 고대, 홍대, 성균관대, 한양대, 세종대, 건대, 단대, 한성대, 이대, 숙대 등과 지방대나 전문대만 나와도 상당한 실력을 발휘한다. 전공은 군경, 사법, 사범, 신문방송, 한의, 컴퓨터, 무역, 회계, 전기전자 등과 예술 쪽이 좋으며 공부를 많이 못했어도 한가지 특기만 익히면 살아가는 데는 큰 어려움이 없는 사람이다.
결혼은 중매나 소개로 궁합을 잘보고 해야하는데 연애는 거의가 실패가 많으며 서기로 홀수 년에 만나고 결혼도 해야 문제없이 살아간다. 특이한 것은 평소에 남녀간 잘 어울리고 대화도 잘되는데 막상 데이트 상대에겐 말도 제대로 못하고 속을 안주는 사람이 많아 결혼이 잘 안된다. 상대는 맏이나 막내에서 많이 나오며 부모를 모시는 사람이고 또한 부모가 반대하는 결혼은 이루기가 힘들다. 남녀 공히 인물이나 학벌보다는 사람 자체 됨됨이를 봐야 하고 평소엔 말이 별로 없지만 속으로는 정이 많고 정직하며 능력이 있고 가정을 소중히 생각하는 상대다. 특히 여자는 애를 낳으면 남편이 힘들게 해도 이혼이 잘 안되니 궁합을 잘 봐야 하고 신랑감으로는 품위가 있으며 균형 잡힌 얼굴로 언행이 부드럽고 여유와 재능이 있는 사람인데 리더쉽이 있고 믿음이 가는 남자다. 남자의 신부감으로는 이마가 넓고 붉은 입술에 흰 치아를 가진 여성인데 다정다감하고 심지가 깊으며 일처리에 능숙한 스타일로 실속이 꽉 차고 재능이 많은 여자이다.


뭔지 잘 모르겠는데 너 님은 말을 못해서 솔로임 헤헤 이런 말로 번역되서 들리는데 오해져?
(.............)

점 잘 믿진 않는데 뭔가 전체적으로 맞는것도 안맞는것도 뭐 그런게 많은듯...
저작자 표시 비영리 동일 조건 변경 허락

분류없음 2009/02/26 14:00 posted by d3m3vilurr

Roman to Decimal

로마자를 정수로 바꾸는 쉬운문제 이지만 IV를 4로 바꿔야 하는 등의 기묘한 부분이 있어서 코드가 늘어난다.
어쨌거나 100bytes 안을 목표로 공략했으나 110bytes안에 들어간 걸로 일단 커밋.

잠자다가 zip을 쓰면?! 이라는 생각에 깨서 110bytes안에 들어갔음.

2009년 2월 22일 12시 45분 rev1(108bytes)
2009년 5월 17일 13시 45분 rev2(101bytes) # zip을 없앴다!
저작자 표시 비영리 동일 조건 변경 허락

분류없음 2009/02/22 13:06 posted by d3m3vilurr

코드골프 Choose

이쯤 되니 너무 쉬운 문제만 골라 풀고 있는게 아닌가 싶어지는데, 쉬운 문제다 보니 사람들 수식은 거의 비슷하지 않을까 싶다.
팩토리얼 f와 두 입력 n, k를 받아서 f(n)/f(k)/f(n-k) 를 연산하는 문제로, 그야말로 단순, 심플
f(n)/f(k)를 줄여써서 f(n,k)로 만들고 f(n,k)/f(n-k)를 했더니 결과가 1바이트가 더 많아지는 이상함(.........)
코드골프 풀면서 느끼는건데 최상위권에 랭크되고 있는 괴수들은 대체 어떤 코드를 짜는거지?(...........)

rev1을 올리자 마자 1바이트를 더 줄일 수 있는데 안한게 보여서 바로 재시도

2009년 2월 5일 21시 13분 rev2(67bytes)
2009년 2월 5일 21시 13분 rev3(65bytes)
저작자 표시 비영리 동일 조건 변경 허락

분류없음 2009/02/05 21:21 posted by d3m3vilurr

코드골프 소인수분해

알고리즘 자체는 쉽다면 쉬울 수 있는 문제.
그저 입력값을 인수분해 해서 출력하면 된다. 복잡하고 효과적인 알고리즘도 있을 수 있겠으나, 알고 있겠지만 버블소트가 라인수가 가장 짧거든?(의미불명)

현재 코드골프에서 파이썬 1위는 100바이트. 하지만 내가 짜는건 줄여도 줄여도 줄질 않는다 orz.

2009년 2월 5일 11시 즈음 첫 포스트한 인수분해 rev1(125bytes)

저작자 표시 비영리 동일 조건 변경 허락

분류없음 2009/02/05 15:17 posted by d3m3vilurr

요즘 정말 생활에 의욕을 잃고 있어서

(전략)
....그런고로 머리를 식히기 위해 어제 지인과 함께 codegolf를 시작했습니다. 순전히 재미로 시작한건데다가, 지인이 파이썬을 배우기 시작한지 3일쯤 되어서, 연습을 위해 시작한거였고 들어가자마자 보이는 문제 하나를 골라 시작했습니다. 근데 역시 천재는 뭐가 달라도 다른듯 싶네요(...)
배운지 3일된 사람이 나보다 잘해..점수가 나보다 높아(...)

이래서 천재란 것들은....

일단 고민을 해서 저도 255바이트 까지 줄인 상태인데, 이 로직으로는 200바이트 초반을 노리기 힘들거 같고 처음부터 다시 짜봐야겠네요(침울)

2009년 2월 4일 19시 36분 현재 충분히 obfuscated 되있는 맥주병 코드 rev14(255bytes)
2009년 2월 4일 20시 03분 현재 더욱 obfuscated 되버린 맥주병 코드 rev15(251bytes)
2009년 2월 5일 01시 48분 현재 맥주병 코드 rev16(247bytes)
2009년 2월 5일 14시 55분 새로짜서 시도한 맥주병 코드 rev18(243bytes)
저작자 표시 비영리 동일 조건 변경 허락

분류없음 2009/02/04 19:40 posted by d3m3vilurr

d3m3vilurr의 미투데이 - 2009년 1월 30일

이 글은 d3m3vilurr님의 2008년 8월 8일에서 2009년 1월 30일까지의 미투데이 내용입니다.


me2day 2009/01/31 04:34 posted by d3m3vilurr