how can I improve this
Hello, I have solved the hamming challenge of exercism where I have to find in how many places two strings are different. my solution is : distanceStrand1: aString strand2: aString2    aString size == aString2 size       ifFalse: [ DomainError signal: (self messageFor: aString strand2: aString2) ].    ^ (1 to: aString size)       sumNumbers: [ :index |          (aString at: index) == (aString2 at: index)             ifTrue: [ 0 ]             ifFalse: [ 1 ] ] messageFor: aString strand2: aString2    aString notEmpty & aString2 notEmpty       ifTrue: [ ^ 'left and right strands must be of equal length' ].    aString ifEmpty: [ ^ 'left strand must not be empty' ].    ^ 'right strand must not be empty' Can this be improved? Roelof
Hi Roelof, Maybe something like this: String>>hammingDistanceTo: aString " Answer the amount of substitutions between the receiver and aString. Both must be of equal length " ^ (1 to: self size) count: [ : i | (self at: i) ~= (aString at: i) ] El lun., 14 sept. 2020 a las 16:15, Roelof Wobben via Pharo-users (< pharo-users@lists.pharo.org>) escribió:
Hello,
I have solved the hamming challenge of exercism where I have to find in how many places two strings are different.
my solution is :
distanceStrand1: aString strand2: aString2 aString size == aString2 size ifFalse: [ DomainError signal: (self messageFor: aString strand2: aString2) ]. ^ (1 to: aString size) sumNumbers: [ :index | (aString at: index) == (aString2 at: index) ifTrue: [ 0 ] ifFalse: [ 1 ] ]
messageFor: aString strand2: aString2 aString notEmpty & aString2 notEmpty ifTrue: [ ^ 'left and right strands must be of equal length' ]. aString ifEmpty: [ ^ 'left strand must not be empty' ]. ^ 'right strand must not be empty'
Can this be improved?
Roelof
SequenceableCollection has with:do:. Add with: other count: testBlock |r| r := 0. self with: other do: [:x :y | (testBlock value: x value: y) ifTrue: [r := r + 1]]. ^r I have this in my library anyway. Now distanceStrand1: a strand2: b ^a with: b count: [:x :y | x ~= y] #with:do: already checks that the sequences have the same size; it's too confusing if the error reported in this case is different from the error for #with:do:. On Tue, 15 Sep 2020 at 16:59, Roelof Wobben via Pharo-users < pharo-users@lists.pharo.org> wrote:
Op 14-9-2020 om 22:19 schreef Hernán Morales Durand:
^ (1 to: self size) count: [ : i | (self at: i) ~= (aString at: i) ]
With that code I get a few problems but this is working
distanceStrand1: aString strand2: aString2 aString size == aString2 size ifFalse: [ DomainError signal: (self messageFor: aString strand2: aString2) ]. ^ (1 to: aString size) count: [ :i | (aString2 at: i) ~= (aString at: i) ]
Roelof
participants (3)
-
Hernán Morales Durand -
Richard O'Keefe -
Roelof Wobben