brainfuck_converter 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +13 -0
  3. data/README.md +2 -0
  4. data/lib/brainfuck_converter.rb +40 -44
  5. metadata +16 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c08e5e4a5d77feebda6066f7179d82c793261df3068262fdfb3f9e14a36d72e2
4
- data.tar.gz: a39d32789909b1db55415a73e4fb30877258deefda3a45e9835c0c39e5eaa0f7
3
+ metadata.gz: 43df11e483a96f0a38b849a4bcb1af18707246932373b88aa213d1ff665adaa7
4
+ data.tar.gz: 27c6d1055223d616a9c23de677e9815254b1df869a827e9231713faa08cb2c33
5
5
  SHA512:
6
- metadata.gz: afa32bc2d86c91882080a7c5c987860251ce7df3f73d2d05166e38ad9e474cebc9d1e5d8e41841a5af7817260cfbac1e9cb8cc22746043673c7f2b4b03474683
7
- data.tar.gz: 6fd090138d52569de4f92d1db8bf30e3850ea520db2a3dd5de6e5745dbec7b60a283b65ee466b9880b9c3601547cf7c14873ffd4873f580f5bc7c0ef96396314
6
+ metadata.gz: c47111e9e6954e8c6818411e0cd5f3d67b0ce1552033f39eebe7a474342d1aef6708b96000bb97ae03a8c4f1351cb94e2c7fa63597f7cad6499da7245ae5d19e
7
+ data.tar.gz: c78ac2adf3b2d790d1423580d442e35d17360ff39de92519b0be95ce2c95d090e6b28f5203933ff6a71782ea1d880fc7158e2cbe33a3ecfd42619d768a4b076b
data/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
2
+ Version 2, December 2004
3
+
4
+ Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
5
+
6
+ Everyone is permitted to copy and distribute verbatim or modified
7
+ copies of this license document, and changing it is allowed as long
8
+ as the name is changed.
9
+
10
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
11
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
12
+
13
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
data/README.md ADDED
@@ -0,0 +1,2 @@
1
+ # BrainfuckConverter
2
+ Gem, which makes it possible to convert any ASCII characters into brainfuck code
@@ -1,58 +1,56 @@
1
-
1
+ # Class, which includes a function to convert text into Brainfuck code.
2
+ # Furthermore, it is possible to change the character set used in Brainfuck.
2
3
  class BrainfuckConverter
3
-
4
4
  DEFAULT_COMMANDS = {
5
- inc_val: "+",
6
- dec_val: "-",
7
- inc_ptr: ">",
8
- dec_ptr: "<",
9
- output: ".",
10
- loop_begin: "[",
11
- loop_end: "]"
12
- }
13
-
5
+ inc_val: '+',
6
+ dec_val: '-',
7
+ inc_ptr: '>',
8
+ dec_ptr: '<',
9
+ output: '.',
10
+ loop_begin: '[',
11
+ loop_end: ']'
12
+ }.freeze
13
+
14
14
  attr_reader :code
15
15
  attr_accessor :cmds
16
-
16
+
17
17
  # Initializes a new Brainfuck Converter
18
18
  #
19
19
  # @param bf_cmds [Hash] Command sign. If not specified, the default command
20
20
  # set under BrainfuckConverter::DEFAULT_COMMANDS will be used.
21
- def initialize bf_cmds = DEFAULT_COMMANDS
21
+ def initialize(bf_cmds = DEFAULT_COMMANDS)
22
22
  @cmds = bf_cmds
23
23
  end
24
-
24
+
25
25
  # Converts an ASCII string to Brainfuck code.
26
26
  #
27
27
  # @param text [String] The text to be converted into Brainfuck code.
28
28
  # @param cells_num [Integer] Number of cells to be used. All values from 0
29
29
  # can be used. If not specified, 8 cells are used. Regardless of the number
30
30
  # specified here, an additional cell is used.
31
- # @return [String]
31
+ # @return [String, FalseClass]
32
32
  # @example
33
- # require "brainfuck_converter"
34
- #
33
+ # require 'brainfuck_converter'
34
+ #
35
35
  # con = BrainfuckConverter.new
36
- #
37
- # con.convert "Hello World!" # => "Hello World!"
38
- # con.code # => "++++++++++++++[>+>++>+++>++++>+++++>++++++>++++++... too long"
39
- #
40
- # con.convert "Hallo Welt!", 15 # => "Hallo Welt!"
41
- # con.code # => "+++++++[>+>++>+++>++++>+++++>++++++>+++++++>+++++... too long"
42
- def convert text, cells_num = 8
43
- # To output a string in Brainfuck, "auxiliary numbers" are written into
36
+ #
37
+ # con.convert 'Hello World!' # => 'Hello World!'
38
+ # con.code # => '++++++++++++++[>+>++>+++>++++>+++++>++++++>++++++... too long'
39
+ #
40
+ # con.convert 'Hallo Welt!', 15 # => 'Hallo Welt!'
41
+ # con.code # => '+++++++[>+>++>+++>++++>+++++>++++++>+++++++>+++++... too long'
42
+ def convert(text, cells_num = 8)
43
+ # To output a string in Brainfuck, 'auxiliary numbers' are written into
44
44
  # certain cells. If a letter is to be output, the letter is converted into
45
45
  # an ASCII value and the auxiliary number that is closest to it is searched for.
46
46
  # This is then adjusted so that it corresponds to the ASCII value of the letter.
47
47
  # The auxiliary number or the letter is then output.
48
-
49
- if cells_num < 1
50
- return false
51
- end
52
-
48
+
49
+ return false if cells_num < 1
50
+
53
51
  # Code is cleared. A new Brainfuck program is started.
54
- @code = ""
55
-
52
+ @code = ''
53
+
56
54
  # Calculating the auxiliary numbers
57
55
  space_cells = 127 / (cells_num + 1)
58
56
  @cell_values = []
@@ -80,38 +78,36 @@ class BrainfuckConverter
80
78
  # because it was only used as a counter for the loop.
81
79
  @pointer = 0
82
80
 
83
- text.each_byte { |search|
81
+ text.each_byte do |search|
84
82
  # Search for the next auxiliary number
85
- diffs = @cell_values.map { |val|
83
+ diffs = @cell_values.map do |val|
86
84
  (search - val).abs
87
- }
85
+ end
88
86
  nearest = diffs.index(diffs.min)
89
- diff = search - @cell_values[nearest]
90
87
 
91
88
  # It goes to the auxiliary number. This is changed accordingly and the
92
89
  # corresponding ASCII_character is output.
93
90
  move_pointer @pointer, nearest
94
91
  change_value search
95
92
  output_cell
96
- }
93
+ end
97
94
  end
98
-
95
+
99
96
  protected
100
-
101
- def move_pointer cur_pos, target_pos
97
+
98
+ def move_pointer(cur_pos, target_pos)
102
99
  move = target_pos - cur_pos
103
- @code += (move < 0 ? @cmds[:dec_ptr] : @cmds[:inc_ptr]) * move.abs
100
+ @code += (move.negative? ? @cmds[:dec_ptr] : @cmds[:inc_ptr]) * move.abs
104
101
  @pointer = target_pos
105
102
  end
106
103
 
107
- def change_value target_value
104
+ def change_value(target_value)
108
105
  change = target_value - @cell_values[@pointer]
109
- @code += (change < 0 ? @cmds[:dec_val] : @cmds[:inc_val]) * change.abs
106
+ @code += (change.negative? ? @cmds[:dec_val] : @cmds[:inc_val]) * change.abs
110
107
  @cell_values[@pointer] = target_value
111
108
  end
112
109
 
113
110
  def output_cell
114
111
  @code += @cmds[:output]
115
112
  end
116
-
117
113
  end
metadata CHANGED
@@ -1,27 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brainfuck_converter
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
- - Marek Kuethe
7
+ - Marek
8
+ - Küthe
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2022-01-13 00:00:00.000000000 Z
12
+ date: 2023-04-27 00:00:00.000000000 Z
12
13
  dependencies: []
13
14
  description: Gem, which makes it possible to convert any ASCII characters into brainfuck
14
15
  code
15
16
  email: m.k@mk16.de
16
17
  executables: []
17
18
  extensions: []
18
- extra_rdoc_files: []
19
+ extra_rdoc_files:
20
+ - LICENSE
21
+ - README.md
19
22
  files:
23
+ - LICENSE
24
+ - README.md
20
25
  - lib/brainfuck_converter.rb
21
- homepage: https://github.com/marek22k/BrainfuckConverter
26
+ homepage: https://codeberg.org/mark22k/BrainfuckConverter
22
27
  licenses:
23
28
  - WTFPL
24
- metadata: {}
29
+ metadata:
30
+ source_code_uri: https://codeberg.org/mark22k/BrainfuckConverter
31
+ bug_tracker_uri: https://codeberg.org/mark22k/BrainfuckConverter/issues
32
+ rubygems_mfa_required: 'true'
25
33
  post_install_message:
26
34
  rdoc_options: []
27
35
  require_paths:
@@ -30,14 +38,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
30
38
  requirements:
31
39
  - - ">="
32
40
  - !ruby/object:Gem::Version
33
- version: '0'
41
+ version: '3.1'
34
42
  required_rubygems_version: !ruby/object:Gem::Requirement
35
43
  requirements:
36
44
  - - ">="
37
45
  - !ruby/object:Gem::Version
38
46
  version: '0'
39
47
  requirements: []
40
- rubygems_version: 3.3.4
48
+ rubygems_version: 3.4.12
41
49
  signing_key:
42
50
  specification_version: 4
43
51
  summary: Gem, which makes it possible to convert any ASCII characters into brainfuck