구구단

~cpp 
from: aFrom to: aTo
	| a b |
	a := aFrom.
	b := 1.
	[a <= aTo] whileTrue: [
		[b <= 9] whileTrue:[
			Transcript cr; show: a; show: ' * '; show: b; show: ' = '; show: a*b; printString.
			b := b + 1.
		].
		a := a + 1.
		b := 1.
		Transcript cr.
	].
  • 그냥 간단히...

랜덤워크

  • 머리에 쥐나는줄 알았다.--; 사소한거 하나로 삽질한게 몇가진지... --; 문법이 왜 이리 하던거랑 다른지.;;

~cpp 
RWBoard>>initialize: aSize
	size := aSize.
	numsOfWalked := Array2D width:size height:size.
	numsOfWalked atAllPut:0.

RWBoard>>isAllPut
	numsOfWalked do: [ :val | val = 0 ifTrue: [^false] ].
	^true.
		
RWBoard>>row: aRow col: aCol
	| numOfWalked |
	numOfWalked _ numsOfWalked at: aRow at: aCol.
	numsOfWalked at: aRow at:aCol put: numOfWalked + 1.

RWBoard>>setValidLocation: num
	| newValue |
	newValue := num + 3 atRandom - 2.
	newValue = 0 ifTrue: [newValue := 1].
	newValue = (1 + size) ifTrue: [newValue := size].
	^newValue.

RWBoard Class>>make: aSize
	^self new initialize:aSize.
~cpp 
RWRoach>>abroad: aBoard row: aRow col: aCol
	totalWalked := 1.
	curRow _ aRow.
	curCol _ aCol.
	aBoard row: aRow col: aCol.

RWRoach>>moveOne: aBoard
	totalWalked _ totalWalked + 1.
	self selectDirection: aBoard.
	aBoard row:curRow col:curCol.
	
RWRoach>>selectDirection: aBoard
	curRow := aBoard setValidLocation: curRow.
	curCol := aBoard setValidLocation: curCol.

RWRoach>>traverse: aBoard
	[ aBoard isAllPut = false. ] whileTrue: [ self moveOne:aBoard. ].

~cpp 
b := RWBoard make:5.
r := RWRoach new.
r abroad:b row:1 col:1.
r traverse:b.
  • 짜놓고 생각 : 이건 스몰토크프로그래밍이 아니다. C++/Java의 냄새가 너무 많이 나는것 같다. 부분부분을 좀더 간단하게 할 수 있을것 같기도 하다. 책을 더 봐야 할듯 싶다. 인스턴스 생성할때도 인자를 넘겨 받을 수 있을 텐데 잘 안된다.(지금 보니까 그렇게 하지 말라 한다. 대충 찾아보니 팩토리 메소드를 많이 쓰는것 같다. 또 클래스 메소드 만드는법 알아낼라고 줄기차게 삽질을 했다.--;) do라는 좋은게 있었군.
  • 스퀵 소스 옮기기 너무 힘들다. ㅠ.ㅠ 좀 더 커지면 어떻게 될지... 흑 ㅠ.ㅠ
  • 따로따로 있을땐 몰랐는데 지금 보니까 중복도 있다.--; 제길
  • 2차원 배열 클래스가 있었다. 레퍼런스를 잘 찾아보고 하자. 이제 조금 볼만하구나.
  • 이제 SBPP를 볼 수 있을듯 하다.

Retrieved from http://wiki.zeropage.org/wiki.php/인수/Smalltalk
last modified 2021-02-07 05:30:35