• @AndyOPM
    link
    27 months ago

    I solved that problem a little differently:

    : reverse-vowels-2 ( str -- str' )
      [ clone ] [
        >lower [ vowel? ] find-all
        [ values reverse ] [ keys ] bi
      ] bi                       ! str vowels idxs
      [                          ! str | vowel idx
        pick dupd nth            ! str | vowel idx orig
        1string upper?           ! str | vowel idx t/f
        swapd [ ch>upper ] when  ! str | idx vowel
        set-nth-of               ! str'
      ] 2each                    ! str'
    ;
    

    Maybe clearer on lemmy without the comments:

    : reverse-vowels-2 ( str -- str' )
      [ clone ] [
        >lower [ vowel? ] find-all
        [ values reverse ] [ keys ] bi
      ] bi                       
      [                          
        pick dupd nth            
        1string upper?           
        swapd [ ch>upper ] when  
        set-nth-of               
      ] 2each                    
    ;