challenge 文字列の均等分割

一行の文字列を指定した数の行にできるだけ文字数が均等になるように分割してください.
ただし,除算や剰余算を使わないで書いてみてください.

sample = "ゆめよりもはかなき世のなかをなげきわびつゝあかしくらすほどに四月十よひにもなりぬれば木のしたくらがりもてゆく"

divid 4 sample =>
 "ゆめよりもはかなき世のなかを"
 "なげきわびつゝあかしくらすほ"
 "どに四月十よひにもなりぬれ"
 "ば木のしたくらがりもてゆく"

divid 5 sample => 
 "ゆめよりもはかなき世の"
 "なかをなげきわびつゝあ"
 "かしくらすほどに四月十"
 "よひにもなりぬれば木の"
 "したくらがりもてゆく"

divid 6 sample => 
 "ゆめよりもはかなき"
 "世のなかをなげきわ"
 "びつゝあかしくらす"
 "ほどに四月十よひに"
 "もなりぬれば木のし"
 "たくらがりもてゆく"

この問題は、除算だけでははく算術演算とか、文字列の長さをstrlenの類いで測るとかをしなくても、多分書けるのではないかと思います。

Posted feedbacks - Smalltalk

Squeak Samlltalk で。

shiro さんの #4217 の考え方をお借りして。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
| sample divide |
divide := [:sourceStr :numOfLines |
    | stream ones zeros |
    stream := sourceStr readStream.
    ones := (sourceStr as: Array) atAllPut: 1.
    zeros := Array new: numOfLines withAll: 0.
    (ones, zeros groupsOf: numOfLines atATimeCollect: [:group | group]) sum
        collect: [:numOfChars | stream next: numOfChars]].

sample := 'ゆめよりもはかなき世のなかをなげきわびつゝあかしくらすほどに四月十よひにもなりぬれば木のしたくらがりもてゆく'.

divide value: sample value: 4.
"=> #('ゆめよりもはかなき世のなかを' 'なげきわびつゝあかしくらすほ' 'どに四月十よひにもなりぬれ' 'ば木のしたくらがりもてゆく') "

divide value: sample value: 5.
"=> #('ゆめよりもはかなき世の' 'なかをなげきわびつゝあ' 'かしくらすほどに四月十' 'よひにもなりぬれば木の' 'したくらがりもてゆく') "

divide value: sample value: 6.
"=> #('ゆめよりもはかなき' '世のなかをなげきわ' 'びつゝあかしくらす' 'ほどに四月十よひに' 'もなりぬれば木のし' 'たくらがりもてゆく') "

Index

Feed

Other

Link

Pathtraq

loading...