태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

D2, array.reverse property has a side-effect. orz

Tech 2011.07.12 17:29
얼마 전 코딩도장에서 N-Queen 문제를 손대본 적이 있다. 유명하고 어려운 문제라서 많은 사람들이 도전했고, 그만큼 효율적인 코드도 많이 알려져 있다. ... 코딩도장에서는 나이브하게 Coffeescript로 만들어 보고, 집에 와서는 요즘 연습 중인 D로 다시 만들어 보았다.

속도를 위한 최적화는 별로 없고, 그냥 무난하면서 Out-of-memory를 띄우지 않을 정도의 코드만 만들고 끝내야지 ~ 했는데, 테스트가 계속 실패한다. 각 Row에서 퀸의 위치를 Bit flag로 나타내는 식으로 보드를 저장하고 있었고, 실패하는 코드는 "현재 Queen의 위치 리스트" + "이번 Row에 놓고 싶은 Queen의 위치" 를 받아서 유효한지를 돌려주는 함수 부분이다.

테스트는 그냥 가볍게 이번에 놓고 싶은 Queen의 위치 - Row, Col - 에서 위로 한칸씩 올라가며 3개씩 확인하는 방식으로 했다.

(Row-1, Col), (Row-1, Col-1), (Row-1, Col+1)
(Row-2, Col), (Row-2, Col-2), (Row-2, Col+2)
...
(Row-k, Col), (Row-k, Col-k), (Row-2, Col+k)

이렇게 지금까지 놓인 Queen의 위치 리스트를 역으로 올라가면서 테스트를 하고 싶어서 이런 코드를 만들었다.

bool validate(in uint[] cur, in uint c) {
   uint l=c, r=c;
   foreach(uint _c; cur.reverse) {
       if (_c&c | _c&(l<<=1) | _c&(r>>=1))
           return false;
   }
   return true;
}

cur.reverse 가 뒤집힌 녀석을 리턴하는건지, 스스로를 뒤집는건지 잘 모르겠지만 cur 에 변화가 있다면 저기 달아놓은 in qualifier 가 못한다고 말해주겠지 - 라고 생각했다. in 은 const 를 강제하니까. 그리고 이녀석은 컴파일이 된다. 헤헤 안심 ~하고 다음으로 넘어가보자 했는데 ... 계속 테스트가 실패하네?

알아보니 reverse는, 1. 스스로를 뒤집고, 2. 그 뒤집은걸 리턴, 도 하는 녀석이다. 배열의 property 를 참조하면 배열 자체가 뒤집혀 버리는 상황. -_-; 뭐 이래? 거기까지면 괜찮은데 왜 컴파일이 된거야?. 어이가 없어서 위의 in 을 immutable 로 고치고 테스트 했는데, 역시 컴파일이 되고 실행도 된다. 아놔... ;; 결국 side-effect가 있는 property는 immutable, const 를 그냥 씹어 드신다는 뜻.

짧게 정리하면, 

import std.stdio;

int main() {
    immutable uint[] a=[1,2,3]; writeln(a); a.reverse; writeln(a);
    return 0;
}

이 코드가 컴파일+실행된다는 사실을 발견. ... 실행하면 [1, 2, 3] [3, 2, 1] 을 차례로 찍는다. 뭐라굽쇼? property 에 대해서는 수정 불가 조건을 검사하지 않는 것 같은데, 그 property가 side-effect 만땅 ... 이라는 암울한 상황이다. IRC에 가서 물어봤더니 돌아오는 대답은,

  1. Looks like a bug
  2. Those properties like reverse, sort will be deprecated.

였다. 으으, 아직 D 두번째 스펙이 불안정하다고는 하지만 이건 좀 지나친 거 아닌가 싶기도 하고.

-----
D 2.053, 2.054 에서 확인.

'Tech' 카테고리의 다른 글

Amazon glacier ... 를 쓸 뻔 했던 이야기  (0) 2012.08.23
회사일 하면서 삽질하거나 느낀거 끄적  (2) 2012.08.10
D2, array.reverse property has a side-effect. orz  (45) 2011.07.12
Thrift in D  (6) 2011.05.15
fix: ugly gitweb page  (3) 2010.12.12
(1/2) Programming in clojure  (4) 2010.08.08
Trackbacks 0 : Comments 45
  1. 이터모리 2011.07.13 11:17 Modify/Delete Reply

    내부적으로 idup을 써버렸으면 패스겠지..ㅎㅎ

    • Favicon of http://deisys.net dgoon 2011.07.13 13:16 Modify/Delete

      idup 넣어서 돌아가는거 확인했었음. 근데 그거 느려 ...

  2. 이터모리 2011.07.13 16:42 Modify/Delete Reply

    어쨌든 원했던 것은 reverse_iterator 같은 거였나..?
    n-queen 문제 재미 없어서 안풀어봤는데.. 효율적인 코드 구경도 못해봤네..
    bitset으로 풀면 재밌겠다. ㅎㅎ

    • Favicon of http://deisys.net dgoon 2011.07.13 17:51 Modify/Delete

      빠른 코드 만드는거 생각보다 만만하지 않더라고 ... ㅋㅋ

  3. Favicon of http://etermory.blogspot.com/ 이터모리 2011.07.14 14:16 Modify/Delete Reply

    http://etermory.blogspot.com/2011/07/n-queen-problem.html
    처음 생각한 bitset을 이용한 방법으로 한 번 풀어봤어.
    컴파일러가 없어서 http://codepad.org/ 를 이용해서 11까지는 돌려봤는데..
    그 뒤로는 Timeout 나와서 죽는지 안 죽는지 몰겠다.

    • Favicon of http://deisys.net dgoon 2011.07.14 17:18 Modify/Delete

      codepad로 돌려볼 수도 있는거였냐? 근데 D는 Spec1 이라 안되네 ㅋㅋ 난 http://git.dgoon.net/?p=kata.git;a=blob;f=NQueen/nqueen2.d 이렇게 했음

    • Favicon of http://edmedsinfo.com/ Deliverance 2013.01.15 23:40 Modify/Delete

      car insurance quotes hikkh online auto insurance quotes 32969 life insurance :OOO buy propecia in usa 2362

    • Favicon of http://www.quotesfromtopinsurers.com/ Delphia 2013.01.19 20:04 Modify/Delete

      carinsurance %-PP car insurance quotes 8( propecia zup

    • Favicon of http://www.bestautoinsurancepolicies.net/ Jacalyn 2013.01.21 11:47 Modify/Delete

      life insurance 05238 cheap auto insurance 88062 nj car insurance vephc

    • Favicon of http://www.carinsuranceiseasy.com/ Zyah 2013.01.24 11:39 Modify/Delete

      car insurance quotes vvtvhu no exam life insurance pext nj car insurance kax

    • Favicon of http://www.treatpatternhairloss.com/ Elly 2013.01.25 03:17 Modify/Delete

      car insurance quotes :-( cheap auto insurance >:(( life insurance 445382 car insurance :(((

    • Favicon of http://www.treatmentsguide.net/ Snow 2013.02.01 10:47 Modify/Delete

      viagra online >:-(( free car insurance quotes 8-((( online auto insurance 747

    • Favicon of http://www.treatbacterialinfections.com/ Minerva 2013.02.03 20:15 Modify/Delete

      auto insurance quotes 67836 amoxicillin cheap drug renova ultram huja buy cialis 35953 buy cialis 85879

    • Favicon of http://www.edguidanceonline.com/ Deejay 2013.02.03 20:15 Modify/Delete

      nexium %-(( infinity auto insurance cqx classic car insurance wcgm buy cialis rtjm

    • Favicon of http://www.menshealthprice.com/ Kayleigh 2013.02.03 20:15 Modify/Delete

      buy valtrex on web 48077 doxycycline 8-OOO amoxicillin cheap drug renova ultram drl

    • Favicon of http://www.buyfirstmedication.com/ Trixie 2013.02.03 20:16 Modify/Delete

      generic viagra caverta sildenafil for 80917 buy online physicians cialis cuu cheap accutane online qaxey amoxicillin cheap drug renova ultram gfmx

    • Favicon of http://www.edgenericmedication.com/ Ronalee 2013.02.07 03:12 Modify/Delete

      lasix eocc sildenafil oral =-D acyclovir :D buy viagra 8[

    • Favicon of http://www.treatallergicdisorder.com/ Tyanne 2013.03.08 08:48 Modify/Delete

      cheap cialis 352 buy cialis %) a auto insurance :P

    • Favicon of http://www.lowestdrugprices.net/ Maryland 2013.03.15 09:46 Modify/Delete

      car insurance quote :]]] online bachelors degree xgrsgb sildenafil 8-(

    • Favicon of http://www.actionaid-nigeria.org/ Dotty 2013.03.22 22:27 Modify/Delete

      accutane >:-DDD sildenafil tknt best buy generic viagra ctrync buy viagra online ebjos

    • Favicon of http://www.edmedicationguide.com/ Lavon 2013.03.25 20:00 Modify/Delete

      car insurance quotes 558680 order cialis online 68844 auto insurance quotes 7520 cialis online %(((

    • Favicon of http://www.apwaspring2012wa.org/ Kayleigh 2013.03.29 01:50 Modify/Delete

      viagra =O cheapest cialis 33437 cheap viagra 8-((( auto insurance online 56820 cheap auto insurance 018756 cheapest auto insurance qeeas

    • Favicon of http://www.getyourquotesonline.com/ Kiana 2013.05.04 23:09 Modify/Delete

      viagra =[[ cheap car insurance uheuq degrees online cozmia cheap auto insurance >:-DDD affordable auto insurance knmm

    • Favicon of http://www.carinsurcompanies.com/ Jodecy 2013.05.08 12:39 Modify/Delete

      where to buy levitra 970 car insurance leqegf buy viagra 484 cheap auto insurance %PP cialis osn car insurance rates >:-DDD

    • Favicon of http://www.medspricechart.com/ Woods 2013.05.11 23:59 Modify/Delete

      cialis kzqvf cialis 917833 cheap car insurance 8[[[ price of cialis abfn car insurance online >:PPP Acheter du cialis ktz

    • Favicon of http://www.edmedsonline4you.com/ Lorene 2013.05.17 22:40 Modify/Delete

      buy viagra cheap wsfg car insurance quotes seecix buy viagra =O levitra viagra munhhg cialis :[ new york car insurance >:[[[ cheap auto insurance irdnt

    • Favicon of http://www.searchinsurancedeals.com/ Flip 2013.05.21 03:58 Modify/Delete

      viagra 8(( sildenafil qdsopj car insurance quotes 669 car insurance quotes %O state auto insurance %(((

    • Favicon of http://www.compareedmedsprices.com/ Buck 2013.05.21 03:58 Modify/Delete

      Cialis online 8DDD generic propecia 8]] viagra on line 8[[[ state auto insurance %-[[ car insurance quotes 8-PP Acheter du cialis >:P

    • Favicon of http://www.usaglobalquotes.com/auto-insurance-quotes-missouri.html Katty 2013.05.23 11:00 Modify/Delete

      buy viagra bdx cheap car insurance >:-PPP auto insurance quotes 116 buy propecia 5mg bidphn auto insurance online :(((

    • Favicon of http://www.getyourerectionsback.com/ Lavar 2013.05.31 04:25 Modify/Delete

      buy cialis online =-PPP where to buy prednisone :-]] auto insurance quotes 260218 auto insurance quotes 0984 cialis 183 Des Moines car insurance quotes 3786

    • Favicon of http://www.yourcarinsurancequotes.net/ Elyza 2013.06.02 21:19 Modify/Delete

      accredited online colleges 4523 best buy generic viagra qoxyb car insurance online >:-(( cialis gwcuzq car insurance rates ddqygp

    • Favicon of http://www.edmedspartners.com/ Randhil 2013.06.02 21:19 Modify/Delete

      buy viagra 25mg kqwjl how does viagra work eahl omaha poker hands %OOO auto insurance quotes IN dinl cheapest car insurance fvxtkx

    • Favicon of http://www.bestqualityedtreatment.com/ Lorin 2013.06.05 02:32 Modify/Delete

      life insurance quotes 012 levitra buy >:O cialis online qmw levitra 94926 viagra >:] good hands in poker 2670

    • Favicon of http://www.topallergytreatment.com/ Taimi 2013.06.12 04:27 Modify/Delete

      accutane %PPP buy viagra 5254 sildenafil vogq Chicago cheap car insurance 6910 ordering viagra :-PP cheap auto insurance njcw

    • Favicon of http://www.amarzauto.com/ Candie 2013.06.18 01:26 Modify/Delete

      car insurance quotes Tennessee =) auto insurance quotes 451 automobile insurance discount yxcayn auto insurance quotes online 8672 buy viagra %-]] car insurance online 91505

    • Favicon of http://www.compareinsuroffersonline.com/ Kevlyn 2013.06.20 10:13 Modify/Delete

      car insurance free quotes 920980 cheap car insurance Utah :-DDD insurance auto auctions 27069 buy cialis 3052 auto insurance quotes Billings mzk Auto Insurance qoutes =]] best car insurance quotes dvn

    • Favicon of http://www.obs-dfw.org/ China 2013.06.28 12:40 Modify/Delete

      online college degree jaeps online colleges 4359 free online auto insurance quotes apnr car insurance quotes lsv car insurance best deal 8-]]]

    • Favicon of http://insuredcar.net/ Polly 2013.07.07 21:35 Modify/Delete

      springfield college online 711 viagra online =D small business insurance costs omdz auto insurance free quotes =-D insurance australian cheap travel xkveh herbal impotence 993769 auto insirance qoutes :P

    • Favicon of http://www.insurcompanieslist.com/ Romby 2013.07.11 08:30 Modify/Delete

      car insurance temp =-]] cheapest car insurance :( haggerty insurance classic car %[[ cialis rvq levitra buy ceeh viagra online without prescription overnight =( order viagra online without prescription gcrgp

    • Favicon of http://www.edtabletsshop.com/ Rosie 2013.07.13 06:32 Modify/Delete

      auto insurance quotes yhnga car insurance for classic car best rates 256 levitra vgr free quotes auto insurance 315886 cheap insurance for car 414

    • Favicon of http://www.autoinsurpolicy.com/ Tayten 2013.07.14 17:18 Modify/Delete

      affordable car insurance for teens bqpedz free low car insurance quotes >:O auto insurance quotes lsbo modified car insurance quote otsfgf viagra online no prescription >:(( childcare insurance wxidl best price on cialis 487871

    • Favicon of http://sandiegoinsuranceonline.net/ Snowy 2013.07.17 22:31 Modify/Delete

      order viagra from cvs canada >:-) collector car insurance grundy zwukhx garage insurance liability 68805 get car insurace dqcp nj auto insurance quotes 531228 real viagra pfizer 56176

    • Favicon of http://carinsuranceindenver.net/ Tibbie 2013.07.20 21:56 Modify/Delete

      California free car insurance quote online :-]] insurance car buget :(( IN car insurance >:[ liability insurance event lqcdvj cheap car insurance quotes CA iek

  4. Favicon of http://etermory.blogspot.com/ 이터모리 2011.07.15 11:04 Modify/Delete Reply

    포스팅의 D에만 집중해서 어떤 의도였는지 모른채로 코드를 펼치고는
    너무 불친절해!! 이건 암호야!! 라는 생각으로 한참 봤는데..
    d == 0 일 때 절반만 돌린 부분에 대해서는 패스 하고 if (validate) {} 부분만 보니
    이거 나랑 반대로 만들었다는 걸 알고 나니 슬쩍 넘어갔던 포스팅의 '역으로 올라가면서'가 기억났어.
    validate라는 이름을 본 순간 '역으로'를 떠올렸어야 하는 건데.. ㅎㅎ
    근데 이렇게 하면 N = 15 일 경우 얼마나 걸려?

    • Favicon of http://deisys.net dgoon 2011.07.15 11:28 Modify/Delete

      내 컴에서 이렇게 걸리네:

      dgoon@tifa:~/works/kata/NQueen$ time ./nqueen 15
      15-queen: 2279184

      real 2m41.426s
      user 2m40.710s
      sys 0m0.130s

      어떤 아저씨는 이걸 800mhz 코어에서 3초에 끊는다고 함 ㅋㅋ

Write a comment