Stretch the wordで再生するには、次の単語を定義して、この回答と同じ方法で問題に取り組みます。
USING: kernel math sequences sequences.repeating ;
IN: stretch-words
! "bonobo" -> { "b" "bo" "bon" "bono" "bonob" "bonobo" }
: ascend-string ( string -- ascending-seqs )
dup length 1 + iota [ 0 swap pick subseq ] map
[ "" = not ] filter nip ;
! expected: "bonobo" -> "bonoobbooo"
! actual: "bonobo" -> "bbbooonnnooobbbooo"
: stretch-word ( string -- stretched )
dup ascend-string swap zip
[
dup first swap last
[ = ] curry [ dup ] dip count
repeat
] map last ;
stretch-word文字列内のその位置までに出現する回数だけ、文字列内の文字を繰り返すことになっています。ただし、私の実装では、取得した 1string のすべてのインスタンスを繰り返しています。
これは Factor で簡単に実装できると思いますが、よくわかりません。これを私が望むようにするにはどうすればよいですか?