User talk:Nigel Galloway: Difference between revisions
no edit summary
(→Special_Ordered_Sets_of_Type_N: Candidate for deletion?) |
No edit summary |
||
Line 14:
:<math>a_1 + b^2</math>
This lets you avoid having to fiddle around with uploading pictures. (Mediawiki's configured to convert simple math to UNICODE for rendering, and complex stuff gets run through (La)TeX.) It's pretty awesome to use this for things like [[Continued fractions]]… –[[User:Dkf|Donal Fellows]] 21:28, 27 February 2012 (UTC)
==Minor tweaks to Ruby Semordnilap==
Line 45 ⟶ 36:
==[[Talk:Special_Ordered_Sets_of_Type_N#Candidate for deletion?]]==
Hi, just to make you aware .... --[[User:Paddy3118|Paddy3118]] ([[User talk:Paddy3118|talk]]) 04:38, 7 July 2013 (UTC)
==Thinning==
==={{header|Ruby}}===
First I define a function zs which given a point and its eight neighbours returns 1 if the point may be culled, 0 otherwise. g indicates if this is step 1 or step 2 in the task description. zs may be changed to remembers the step independently if the reader does not wish to explore the algorithm.
Substituting for g==0 in the code
<lang>
(ng[1][2] + ng[0][1] + ng[1+g][g]) (ng[g][1+g] + ng[2][1] + ng[1][0])
</lang>
gives (P4 P2 P8) (P2 P8 P6) in the nomenclature used in the task description.
Similarly substituting g==1 gives (P4 P2 P6) (P4 P6 P8).
This line must be correct; each of the 4 directions is ignored in one of the triples, each of [1][2], [0][1], [2][1], and [1][0] is ignored as required by the algorithm!!!!!!!--[[User:Nigel Galloway|Nigel Galloway]] ([[User talk:Nigel Galloway|talk]]) 09:43, 21 October 2013 (UTC)
<lang ruby>
# Thinning RC
# Nigel_Galloway: October 18th., 2013.
require 'csv'
s2 = CSV.read("smallRC.csv", converters: :numeric)
@r = 1
s1 = Array.new(s2.length){Array.new(s2[0].length,0)}
def zs(ng,g)
return 0 if ng[1][1] == 0 or (ng[1][2] + ng[0][1] + ng[1+g][g]) == 3 or (ng[g][1+g] + ng[2][1] + ng[1][0]) == 3
t = -1; ng.each{|n| n.each{|g| t+=g}}; return 0 unless (2 <= t and t <= 6)
t=-1;[ng[0][1],ng[0][2],ng[1][2],ng[2][2],ng[2][1],ng[2][0],ng[1][0],ng[0][0],ng[0][1]].each{|n| t+=(t==0 or t==2)? n : 1-n}
return 0 unless t==1 or t==2
@r=1
end
</lang>
To reproduce the output described in the task description it is necessary to call zs first with g=1 (though either way produces a valid thinned output): See [[Zhang-Suen thinning algorithm/bigRC.csv]] for the input file contents
<lang ruby>
s2.each{|row| row.each{|col| print(col==1? "#": " ")}; print("\n")}
while @r == 1
@r = 0
(1...s2.length-1).each{|n| (1...s2[0].length-1).each{|g| s1[n][g] = s2[n][g] - zs(s2[n-1..n+1].collect{|n| n[g-1..g+1]},1)}}
(1...s2.length-1).each{|n| (1...s2[0].length-1).each{|g| s2[n][g] = s1[n][g] - zs(s1[n-1..n+1].collect{|n| n[g-1..g+1]},0)}}
end
s2.each{|row| row.each{|col| print(col==1? "#": " ")}; print("\n")}
</lang>
{{out}}
<pre>
################# #############
################## ################
################### ##################
######## ####### ###################
###### ####### ####### ######
###### ####### #######
################# #######
################ #######
################# #######
###### ####### #######
###### ####### #######
###### ####### ####### ######
######## ####### ###################
######## ####### ###### ################## ######
######## ####### ###### ################ ######
######## ####### ###### ############# ######
# ########## #######
## # #### #
# # ##
# # #
# # #
# # #
############ #
# # #
# # #
# # #
# # #
# ##
# ############
### ###
</pre>
|