0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

B問題「高層タワー」テストコード

Last updated at Posted at 2019-03-26

もっとスマートなのもあるだろうが今はこれが精一杯
エンジニアが死滅した世界「高層タワー」

問題文

単語を組み合わせて新単語を作ります。
新単語は N 個の文字列を、前から順に結合して作ります。
この時、冗長さをなくすため、 前から結合した単語の末尾 と 後ろの単語の先端 が一番長く一致するように結合します。
例えば、 入力例 1 の "paiza", "apple", "letter" の場合、
先頭から "paiza", "apple" を条件どおり重ねると "paizapple" となります。
この単語を更に次の単語と重ねると "paizappletter" となります。

高層タワー_spec.rb
require 'spec_helper'

RSpec.describe High_rise_tower do
  it '入力例1' do
    # やりやすいように引数の文字列を「/」で区切りました
    result = High_rise_tower.new.combine(word: 'paiza/apple/letter')
    expect(result).to eq 'paizappletter'
  end
  it '入力例2' do
    result = High_rise_tower.new.combine(word: 'poh/p/oh')
    expect(result).to eq 'pohpoh'
  end
end
高層タワー.rb
class High_rise_tower

    def initialize
      # その都度新単語がこの変数に入っていく
      @new_word = ''
    end

    def combine(word:)
      word.split('/').each do |w|
        w.to_s
        if @new_word == '' # 1回目は必ず、ただの単語が入るように条件分岐
          @new_word = w
        else
          num = w.length # 比較する単語が、前の単語と重なる部分があるかを調べるために、比較する単語の長さを調べてその長さ分、後ろから確かめる
          cut_word = w
          while num >= 1
            break if @new_word.index(cut_word, -num) != nil
            # 一回ずつ文字列の末尾を削って、合致するかをみる
            cut_word = cut_word.chop
            num -= 1
          end
          # つまりは、chopしていった結果合致するものがなく、からの文字列が帰ってきたのではなければ、切った文字列の長さ分を、比較された単語から削って新しい単語にくっつける
          if cut_word == ''
            @new_word += w
          else
            int = cut_word.length
            if int == 1
              w.slice!(0)
              @new_word += w
            else
              w.slice!(0..int -1)
              @new_word += w
            end
          end
        end
    end
    # 最後にブロック引数として新しい単語を返す
    @new_word
  end
end

thank youにゃー
また更新したいけど、需要のなさそうなこれらの、どこをどう直しましょうか?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?