That is a nice shift! Gray3 is certainly an improvement over Gray,
o=. @: st=. 7!:2@:] ; 6!:2 ( xor=. 22 b. ) ( shift=. 33 b. ) 22 b. 33 b. ( Gray=. #: o (xor <. o -: ) f. ) #:@:(22 b. <.@:-:) ( gray3=. #: o (xor _1&shift) f. ) #:@:(22 b. _1&(33 b.)) (Gray -: gray3) i.524288 1 10 st'Gray i.524288' ┌────────┬─────────┐ │25166784│0.0399368│ └────────┴─────────┘ 10 st'gray3 i.524288' ┌────────┬─────────┐ │25166848│0.0194468│ └────────┴─────────┘ According to the jwiki discussion, solution8 http://www.jsoftware.com/jwiki/Puzzles/Gray%20Code#soln8 holds the crown, gray8=. [:>[:(({. * #@]) ,@:+ ($ (,: |.)))&.>/ (<0 1) ,~ 2: <@^ ]((($~ *)@- +:@{:) , |.@]) i.@<.&.(2&^.) gray8 4 0 1 3 2 6 7 5 4 12 13 15 14 10 11 9 8 One can rewrite grey3 to a compatible form (which turns out to be the original "Grey" but with the crucial shift instead), ( gray11=. (xor _1&shift) o i. o (2&^) f. ) (22 b. _1&(33 b.))@:i.@:(2&^) gray11 4 0 1 3 2 6 7 5 4 12 13 15 14 10 11 9 8 So, ( gray8 -: gray11 ) 19 1 100 st'gray8 19' ┌────────┬─────────┐ │13108864│0.0076141│ └────────┴─────────┘ 100 st'gray11 19' ┌────────┬──────────┐ │12583936│0.00616758│ └────────┴──────────┘ The king is dead, long live the king? On Mon, Nov 18, 2013 at 5:33 AM, Henry Rich <[email protected]> wrote: > Or: > gray2 =. [: (~: (_1 |.!.0"1 ])) 2&#.^:_1 > > > gray3 =: #:@(22 b. _1&(33 b.)) > > > Henry Rich > > > On 11/18/2013 5:10 AM, R.E. Boss wrote: > >> Replace gray by >> gray=. [: -. [: (= (_1 |.!.0"1 ])) 2&#.^:_1 >> to allow large(r) Gray codes. >> >> See solution 10 on http://www.jsoftware.com/jwiki/Puzzles/Gray%20Code >> >> ('0.4';'c12.0') (8!:2) ts' Gray i.524288' NB. 54288=2^19 >> 0.0247 33,556,352 >> >> ('0.4';'c12.0') (8!:2) ts' gray i.524288' NB. 54288=2^19 >> 0.4365 293,615,616 >> >> ('0.4';'c12.0') (8!:2) ts' #:([: ({: (({. * #@]) ,@:+ ($ (,: |.))) >> ((* #) ,@:+ # $ (,: |.))^:({.`(0: , 1:))) ] (] , 2: ^ (- 2&^)) >> <.@(2&^.)@<:) 19' >> 0.0182 26,231,168 >> >> (gray i.524288)-: #:([: ({: (({. * #@]) ,@:+ ($ (,: |.))) ((* #) ,@:+ >> # $ (,: |.))^:({.`(0: , 1:))) ] (] , 2: ^ (- 2&^)) <.@(2&^.)@<:) 19 >> 1 >> (Gray i.524288)-: #:([: ({: (({. * #@]) ,@:+ ($ (,: |.))) ((* #) ,@:+ >> # $ (,: |.))^:({.`(0: , 1:))) ] (] , 2: ^ (- 2&^)) <.@(2&^.)@<:) 19 >> 1 >> >> >> R.E. Boss >> >> (Add your info to http://www.jsoftware.com/jwiki/Community/Demographics ) >> >> -----Original Message----- >>> From: [email protected] [mailto:programming- >>> [email protected]] On Behalf Of Jose Mario Quintana >>> Sent: zondag 17 november 2013 22:28 >>> To: Programming forum >>> Subject: Re: [Jprogramming] Sets >>> >>> "Grey" and gray are related but they take different arguments and produce >>> different results. However, we can compare Gray (derived from Grey) and >>> gray. Gray is shorter than gray, >>> >>> ( gray=. [: -. [: (= (_1 |.!.0"1 ])) bin f. ) NB. Fixed >>> [: -. [: (= (_1 |.!.0"1 ])) 2 2 2 2&#: >>> >>> ( Gray=. #: @: (22 b. <.@:-:) ) NB. Fixed >>> #:@:(22 b. <.@:-:) >>> >>> Gray and gray produce the same result for the given argument, >>> >>> (Gray -: gray) i.16 >>> 1 >>> >>> Gray is more efficient than gray, >>> >>> 100 st'gray i.16' >>> ┌────┬─────────────┐ >>> │2112│4.55809702e_6│ >>> └────┴─────────────┘ >>> 100 st'Gray i.16' >>> ┌────┬─────────────┐ >>> │1408│3.12123995e_6│ >>> └────┴─────────────┘ >>> >>> and it is more general, >>> >>> (Gray ; gray) i.32 >>> ┌─────────┬───────┐ >>> │0 0 0 0 0│0 0 0 0│ >>> │0 0 0 0 1│0 0 0 1│ >>> │0 0 0 1 1│0 0 1 1│ >>> │0 0 0 1 0│0 0 1 0│ >>> │0 0 1 1 0│0 1 1 0│ >>> │0 0 1 1 1│0 1 1 1│ >>> │0 0 1 0 1│0 1 0 1│ >>> │0 0 1 0 0│0 1 0 0│ >>> │0 1 1 0 0│1 1 0 0│ >>> │0 1 1 0 1│1 1 0 1│ >>> │0 1 1 1 1│1 1 1 1│ >>> │0 1 1 1 0│1 1 1 0│ >>> │0 1 0 1 0│1 0 1 0│ >>> │0 1 0 1 1│1 0 1 1│ >>> │0 1 0 0 1│1 0 0 1│ >>> │0 1 0 0 0│1 0 0 0│ >>> │1 1 0 0 0│0 0 0 0│ >>> │1 1 0 0 1│0 0 0 1│ >>> │1 1 0 1 1│0 0 1 1│ >>> │1 1 0 1 0│0 0 1 0│ >>> │1 1 1 1 0│0 1 1 0│ >>> │1 1 1 1 1│0 1 1 1│ >>> │1 1 1 0 1│0 1 0 1│ >>> │1 1 1 0 0│0 1 0 0│ >>> │1 0 1 0 0│1 1 0 0│ >>> │1 0 1 0 1│1 1 0 1│ >>> │1 0 1 1 1│1 1 1 1│ >>> │1 0 1 1 0│1 1 1 0│ >>> │1 0 0 1 0│1 0 1 0│ >>> │1 0 0 1 1│1 0 1 1│ >>> │1 0 0 0 1│1 0 0 1│ >>> │1 0 0 0 0│1 0 0 0│ >>> └─────────┴───────┘ >>> >>> >>> On Sun, Nov 17, 2013 at 2:53 PM, Bo Jacoby <[email protected]> wrote: >>> >>> This program for graycode may be simpler? >>>> >>>> bin=.2 2 2 2&#: >>>> gray=.[:-.[:(=_1|.!.0"1])bin >>>> bin i.16 >>>> 0 0 0 0 >>>> 0 0 0 1 >>>> 0 0 1 0 >>>> 0 0 1 1 >>>> 0 1 0 0 >>>> 0 1 0 1 >>>> 0 1 1 0 >>>> 0 1 1 1 >>>> 1 0 0 0 >>>> 1 0 0 1 >>>> 1 0 1 0 >>>> 1 0 1 1 >>>> 1 1 0 0 >>>> 1 1 0 1 >>>> 1 1 1 0 >>>> 1 1 1 1 >>>> gray i.16 >>>> 0 0 0 0 >>>> 0 0 0 1 >>>> 0 0 1 1 >>>> 0 0 1 0 >>>> 0 1 1 0 >>>> 0 1 1 1 >>>> 0 1 0 1 >>>> 0 1 0 0 >>>> 1 1 0 0 >>>> 1 1 0 1 >>>> 1 1 1 1 >>>> 1 1 1 0 >>>> 1 0 1 0 >>>> 1 0 1 1 >>>> 1 0 0 1 >>>> 1 0 0 0 >>>> >>>> >>>> >>>> >>>> Den 19:40 søndag den 17. november 2013 skrev Jose Mario Quintana < >>>> [email protected]>: >>>> >>>> Thanks for the assertion and the correction. I knew it was named after >>>> a >>>> >>>>> person, hence the upper case G, but I am one of those that reads and >>>>> >>>> writes >>>> >>>>> phonetically (if you know what I mean) and I could not see (hear) the >>>>> difference between Gray and grey. >>>>> >>>>> On Sun, Nov 17, 2013 at 12:06 PM, Henry Rich <[email protected]> >>>>> >>>> wrote: >>>> >>>>> >>>>> Oh - and it's Gray code, not Grey. It's named not because you don't >>>>>> >>>>> have >>>> >>>>> black-to-white transitions on more than one bit at a time; it's named >>>>>> >>>>> for >>>> >>>>> Frank Gray. >>>>>> >>>>>> >>>>>> Henry Rich >>>>>> >>>>>> On 11/17/2013 11:24 AM, Jose Mario Quintana wrote: >>>>>> >>>>>> My understanding is that Grey codes encode numbers in such a way >>>>>>> >>>>>> that >>> >>>> the >>>> >>>>> binary representation of consecutive numbers (including the last and >>>>>>> >>>>>> first >>>> >>>>> couple) in the sequence can be produced, one from the other, by >>>>>>> >>>>>> flipping >>>> >>>>> only one bit. >>>>>>> For example, the binary representation of a four bit Grey sequence, >>>>>>> of >>>>>>> >>>>>> 2^4 >>>> >>>>> numbers, and the flipping bit to produce the next number follows, >>>>>>> >>>>>>> o=. @: >>>>>>> ( Grey=. (xor f. <. o -:) o i. o (2&^)) ( xor=. 22 b. ) >>>>>>> (22 b. <.@:-:)@:i.@:(2&^) 22 b. >>>>>>> >>>>>>> (#: ; (2 #: o (xor/\) ]) o (, {.)) o Grey 4 >>>>>>> ┌───────┬───────┐ >>>>>>> │0 0 0 0│0 0 0 1│ >>>>>>> │0 0 0 1│0 0 1 0│ >>>>>>> │0 0 1 1│0 0 0 1│ >>>>>>> │0 0 1 0│0 1 0 0│ >>>>>>> │0 1 1 0│0 0 0 1│ >>>>>>> │0 1 1 1│0 0 1 0│ >>>>>>> │0 1 0 1│0 0 0 1│ >>>>>>> │0 1 0 0│1 0 0 0│ >>>>>>> │1 1 0 0│0 0 0 1│ >>>>>>> │1 1 0 1│0 0 1 0│ >>>>>>> │1 1 1 1│0 0 0 1│ >>>>>>> │1 1 1 0│0 1 0 0│ >>>>>>> │1 0 1 0│0 0 0 1│ >>>>>>> │1 0 1 1│0 0 1 0│ >>>>>>> │1 0 0 1│0 0 0 1│ >>>>>>> │1 0 0 0│1 0 0 0│ >>>>>>> └───────┴───────┘ >>>>>>> >>>>>>> However, flipping as many as three bits are sometimes required for >>>>>>> >>>>>> the >>> >>>> referred sequence, >>>>>>> >>>>>>> T=. 0 8 12 14 15 13 10 11 9 4 6 7 5 2 3 1 >>>>>>> >>>>>>> (#: ; (2 #: o (xor/\) ]) o (, {.)) T >>>>>>> ┌───────┬───────┐ >>>>>>> │0 0 0 0│1 0 0 0│ >>>>>>> │1 0 0 0│0 1 0 0│ >>>>>>> │1 1 0 0│0 0 1 0│ >>>>>>> │1 1 1 0│0 0 0 1│ >>>>>>> │1 1 1 1│0 0 1 0│ >>>>>>> │1 1 0 1│0 1 1 1│ >>>>>>> │1 0 1 0│0 0 0 1│ >>>>>>> │1 0 1 1│0 0 1 0│ >>>>>>> │1 0 0 1│1 1 0 1│ >>>>>>> │0 1 0 0│0 0 1 0│ >>>>>>> │0 1 1 0│0 0 0 1│ >>>>>>> │0 1 1 1│0 0 1 0│ >>>>>>> │0 1 0 1│0 1 1 1│ >>>>>>> │0 0 1 0│0 0 0 1│ >>>>>>> │0 0 1 1│0 0 1 0│ >>>>>>> │0 0 0 1│0 0 0 1│ >>>>>>> └───────┴───────┘ >>>>>>> >>>>>>> Am I missing something? >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Fri, Nov 15, 2013 at 2:07 PM, R.E. Boss <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>> Actually, it IS a (4D binary reflected) Gray code. >>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> R.E. Boss >>>>>>>> >>>>>>>> (Add your info to >>>>>>>> >>>>>>> http://www.jsoftware.com/jwiki/Community/Demographics) >>>> >>>>> >>>>>>>> >>>>>>>> -----Original Message----- >>>>>>>> >>>>>>>>> From: [email protected] >>>>>>>>> >>>>>>>> [mailto:programming- >>> >>>> [email protected]] On Behalf Of Devon McCormick >>>>>>>>> Sent: vrijdag 15 november 2013 19:33 >>>>>>>>> To: J-programming forum >>>>>>>>> Subject: Re: [Jprogramming] Sets >>>>>>>>> >>>>>>>>> These look like Gray codes. >>>>>>>>> >>>>>>>>> On Nov 14, 2013 10:04 PM, "Raul Miller" <[email protected]> >>>>>>>>> >>>>>>>> wrote: >>>> >>>>> >>>>>>>>> >>>>>>>>>> Easy enough to add. >>>>>>>>>> >>>>>>>>>> It's an interesting progression though: >>>>>>>>>> >>>>>>>>>> #:/:&> (<@#~ 2 #:@i.@^ #)&.> set 2;'b';1;'a' >>>>>>>>>> 0 0 0 0 >>>>>>>>>> 1 0 0 0 >>>>>>>>>> 1 1 0 0 >>>>>>>>>> 1 1 1 0 >>>>>>>>>> 1 1 1 1 >>>>>>>>>> 1 1 0 1 >>>>>>>>>> 1 0 1 0 >>>>>>>>>> 1 0 1 1 >>>>>>>>>> 1 0 0 1 >>>>>>>>>> 0 1 0 0 >>>>>>>>>> 0 1 1 0 >>>>>>>>>> 0 1 1 1 >>>>>>>>>> 0 1 0 1 >>>>>>>>>> 0 0 1 0 >>>>>>>>>> 0 0 1 1 >>>>>>>>>> 0 0 0 1 >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Raul >>>>>>>>>> >>>>>>>>>> On Thu, Nov 14, 2013 at 6:06 PM, km <[email protected]> wrote: >>>>>>>>>> >>>>>>>>>> Cool; needs a sort. --Kip >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> psr=: (<@#~ 2 #:@i.@^ #)&.> NB. Raul's >>>>>>>>>>> psr set 0;1 >>>>>>>>>>> +----------------+ >>>>>>>>>>> |++---+---+-----+| >>>>>>>>>>> |||+-+|+-+|+-+-+|| >>>>>>>>>>> ||||1|||0|||0|1||| >>>>>>>>>>> |||+-+|+-+|+-+-+|| >>>>>>>>>>> |++---+---+-----+| >>>>>>>>>>> +----------------+ >>>>>>>>>>> ps set 0;1 NB. list inside box is sorted >>>>>>>>>>> +----------------+ >>>>>>>>>>> |++---+-----+---+| >>>>>>>>>>> |||+-+|+-+-+|+-+|| >>>>>>>>>>> ||||0|||0|1|||1||| >>>>>>>>>>> |||+-+|+-+-+|+-+|| >>>>>>>>>>> |++---+-----+---+| >>>>>>>>>>> +----------------+ >>>>>>>>>>> >>>>>>>>>>> Sent from my iPad >>>>>>>>>>> >>>>>>>>>>> On Nov 14, 2013, at 3:17 PM, Raul Miller >>>>>>>>>>> >>>>>>>>>> <[email protected]> >>> >>>> >>>>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>>> Derived from ps at http://rosettacode.org/wiki/Power_set#J >>>>>>>>>>>> >>>>>>>>>>>> ps=: (<@#~ 2 #:@i.@^ #)&.> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> Raul >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On Thu, Nov 14, 2013 at 3:17 PM, km <[email protected]> >>>>>>>>>>>> >>>>>>>>>>> wrote: >>> >>>> Here is my latest attempt at sets in J. Would anyone care to >>>>>>>>>>>>> >>>>>>>>>>>> write >>>> >>>>> >>>>>>>>>>>>> a >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>> verb ps (power set) such that ps y is the set of all subsets of set >>>>>>>>> >>>>>>>> y? >>>> >>>>> It's called the power set in part because when a set has n elements >>>>>>>>> its >>>>>>>>> power set has 2^n elements. --Kip Murray >>>>>>>>> >>>>>>>>> >>>>>>>>>> NB. A set is a box with a sorted list of boxes inside. >>>>>>>>>>>>> NB. An element is the contents of a box in the list. >>>>>>>>>>>>> NB. A -: B tests whether set A is set B. >>>>>>>>>>>>> >>>>>>>>>>>>> set =: [: < [: /:~ ~. NB. create set from list of boxes >>>>>>>>>>>>> >>>>>>>>>>>>> NB. The list may have duplicates but the set has none. >>>>>>>>>>>>> >>>>>>>>>>>>> EE =: <$0 NB. empty set, same as Ace a: >>>>>>>>>>>>> >>>>>>>>>>>>> eo =: <@[ e. >@] NB. test whether x is an element of y >>>>>>>>>>>>> >>>>>>>>>>>>> uu =: [: set ,&> NB. union >>>>>>>>>>>>> >>>>>>>>>>>>> mm =: [: < -.&> NB. minus >>>>>>>>>>>>> >>>>>>>>>>>>> sd =: mm uu mm~ NB. symmetric difference >>>>>>>>>>>>> >>>>>>>>>>>>> cp =: uu mm sd NB. common part (intersection) >>>>>>>>>>>>> >>>>>>>>>>>>> ss =: uu -: ] NB. test whether x is a subset of y >>>>>>>>>>>>> >>>>>>>>>>>>> (set 1;2;3;3) -: set 3;1;2 >>>>>>>>>>>>> 1 >>>>>>>>>>>>> >>>>>>>>>>>>> ]A =: set 2;'b';1;'a' >>>>>>>>>>>>> +---------+ >>>>>>>>>>>>> |+-+-+-+-+| >>>>>>>>>>>>> ||1|2|a|b|| >>>>>>>>>>>>> |+-+-+-+-+| >>>>>>>>>>>>> +---------+ >>>>>>>>>>>>> >>>>>>>>>>>>> ]B =: set 'b';'a';4;3;'a' >>>>>>>>>>>>> +---------+ >>>>>>>>>>>>> |+-+-+-+-+| >>>>>>>>>>>>> ||3|4|a|b|| >>>>>>>>>>>>> |+-+-+-+-+| >>>>>>>>>>>>> +---------+ >>>>>>>>>>>>> >>>>>>>>>>>>> A uu B >>>>>>>>>>>>> +-------------+ >>>>>>>>>>>>> |+-+-+-+-+-+-+| >>>>>>>>>>>>> ||1|2|3|4|a|b|| >>>>>>>>>>>>> |+-+-+-+-+-+-+| >>>>>>>>>>>>> +-------------+ >>>>>>>>>>>>> >>>>>>>>>>>>> A sd B >>>>>>>>>>>>> +---------+ >>>>>>>>>>>>> |+-+-+-+-+| >>>>>>>>>>>>> ||1|2|3|4|| >>>>>>>>>>>>> |+-+-+-+-+| >>>>>>>>>>>>> +---------+ >>>>>>>>>>>>> >>>>>>>>>>>>> A cp B >>>>>>>>>>>>> +-----+ >>>>>>>>>>>>> |+-+-+| >>>>>>>>>>>>> ||a|b|| >>>>>>>>>>>>> |+-+-+| >>>>>>>>>>>>> +-----+ >>>>>>>>>>>>> >>>>>>>>>>>>> NB. Below is the set of all subsets of set 0;1 >>>>>>>>>>>>> >>>>>>>>>>>>> set EE;(set <0);(set <1);<set 0;1 >>>>>>>>>>>>> +------------------------+ >>>>>>>>>>>>> |+--+-----+-------+-----+| >>>>>>>>>>>>> ||++|+---+|+-----+|+---+|| >>>>>>>>>>>>> ||||||+-+|||+-+-+|||+-+||| >>>>>>>>>>>>> ||++|||0|||||0|1|||||1|||| >>>>>>>>>>>>> || ||+-+|||+-+-+|||+-+||| >>>>>>>>>>>>> || |+---+|+-----+|+---+|| >>>>>>>>>>>>> |+--+-----+-------+-----+| >>>>>>>>>>>>> +------------------------+ >>>>>>>>>>>>> >>>>>>>>>>>>> Sent from my iPad >>>>>>>>>>>>> >>>>>>>>>>>>> ------------------------------------------------------------ >>>>>>>>>>>>> >>>>>>>>>>>> ---------- >>>>>>>> >>>>>>>> For information about J forums see >>>>>>>>> >>>>>>>>>> >>>>>>>>>>>>> http://www.jsoftware.com/forums.htm >>>>>>>>>>>> >>>>>>>>>>> >>>>> >>>>>>>>> >>>>>>>>>> ------------------------------------------------------------ >>>>>>>>>>>> >>>>>>>>>>> ---------- >>>>>>>> >>>>>>>> For information about J forums see >>>>>>>>> >>>>>>>>>> >>>>>>>>>>>> http://www.jsoftware.com/forums.htm >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>>> ------------------------------------------------------------ >>>>>>>>>>> >>>>>>>>>> ---------- >>>>>>>> >>>>>>>> For information about J forums see >>>>>>>>> >>>>>>>>>> >>>>>>>>>>> http://www.jsoftware.com/forums.htm >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>>> ------------------------------------------------------------ >>>> ---------- >>>> >>>>> For information about J forums see >>>>>>>>>> >>>>>>>>>> http://www.jsoftware.com/forums.htm >>>>>>>>> >>>>>>>>> ------------------------------------------------------------ >>>> ---------- >>>> >>>>> For information about J forums see >>>>>>>>> >>>>>>>> http://www.jsoftware.com/forums.htm >>>> >>>>> >>>>>>>>> >>>>>>>> ------------------------------------------------------------ >>>>>>>> ---------- >>>>>>>> For information about J forums see >>>>>>>> >>>>>>> http://www.jsoftware.com/forums.htm >>>> >>>>> >>>>>>>> >>>>>>>> ------------------------------------------------------------ >>>> ---------- >>>> >>>>> For information about J forums see >>>>>>> >>>>>> http://www.jsoftware.com/forums.htm >>> >>>> >>>>>>> ------------------------------------------------------------ >>>>>>> ---------- >>>>>>> >>>>>> For information about J forums see >>>>>> >>>>> http://www.jsoftware.com/forums.htm >>> >>>> >>>>>> ------------------------------------------------------------ >>>>> ---------- >>>>> For information about J forums see >>>>> >>>> http://www.jsoftware.com/forums.htm >>> >>>> >>>>> >>>>> ------------------------------------------------------------ >>>> ---------- >>>> For information about J forums see >>>> >>> http://www.jsoftware.com/forums.htm >>> >>>> >>>> ---------------------------------------------------------------------- >>> For information about J forums see http://www.jsoftware.com/forums.htm >>> >> >> ---------------------------------------------------------------------- >> For information about J forums see http://www.jsoftware.com/forums.htm >> >> ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
