Sha256: 4b10279b933e1138044cb9d5d7ef9123507877d527f152664c867b61aa4425e1

Contents?: true

Size: 752 Bytes

Versions: 129

Compression:

Stored size: 752 Bytes

Contents

class Crypto

  def initialize(plaintext)
    @plaintext = plaintext
  end

  def ciphertext
    transposed.join(' ')
  end

  private

  def normalize_plaintext
    @normalized ||= @plaintext.downcase.gsub(/\W/, '')
  end

  def plaintext_segments
    if size > 0
      normalize_plaintext.chars.
                          each_slice(size).
                          map{ |s| s.join('') }.
                          to_a
    else
      []
    end
  end

  def size
    Math.sqrt(normalize_plaintext.length).ceil
  end

  def transposed
    chunk_size = size
    chunks = plaintext_segments.map do |s|
        Array.new(chunk_size) { |i| s[i] or ' ' }
    end
    chunks.transpose.map{ |s| s.join('') }
  end

end

module BookKeeping
  VERSION = 1
end

Version data entries

129 entries across 129 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb
trackler-2.2.1.179 tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb
trackler-2.2.1.178 tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb
trackler-2.2.1.177 tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb
trackler-2.2.1.176 tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb
trackler-2.2.1.175 tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb
trackler-2.2.1.174 tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb
trackler-2.2.1.173 tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb
trackler-2.2.1.172 tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb
trackler-2.2.1.171 tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb
trackler-2.2.1.170 tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb
trackler-2.2.1.169 tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb
trackler-2.2.1.167 tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb
trackler-2.2.1.166 tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb
trackler-2.2.1.165 tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb
trackler-2.2.1.164 tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb
trackler-2.2.1.163 tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb
trackler-2.2.1.162 tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb
trackler-2.2.1.161 tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb
trackler-2.2.1.160 tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb