あなたの質問はまったく明確ではありませんが、おそらくこれがあなたが望むものです:
ary = [2, 4, 6, 8, 3]
ary.join(' ') # => "2 4 6 8 3"
ary * ' ' # => "2 4 6 8 3"
おそらく、ループの仕方を理解していませんか?
ary = [2, 4, 6, 8, 3]
5.times do
puts ary.join(' ')
end
# >> 2 4 6 8 3
# >> 2 4 6 8 3
# >> 2 4 6 8 3
# >> 2 4 6 8 3
# >> 2 4 6 8 3
それとも、コマンドライン アプリが STDIN を読み取る方法を理解していないのでしょうか?
STDIN の処理は、パイプを作成するときに役立ちます。1 つの小さな特殊なアプリケーションを別のアプリケーションにチェーンし、それらをまとめて大きなタスクを実行させることは、*nix システムの基本的な前提です。すべてを実行しようとするモノリシック アプリは、作成/維持および使用する主要な PITA です。
STDIN またはキーボードから 1 行の入力を読み取りたい場合に適してgets
います。一連の行を読みたい場合は、Ruby の ARGF クラスを見て、その方法STDIN
と$stdin
動作に精通してください。
Ruby のコマンド ライン スクリプトを作成するのは簡単ですが、Perl、Python、または C で作成するのと同じように、受信データがどのようにアクセスされるか、そのデータの型 (常に文字列)、およびそれがどのように処理されるかを認識しておく必要があります。構造化: 改行 ( "\n"
) または改行 + 改行( )で終了する文字"\r\n"
。
仕組みを理解していないのではないでしょうto_i
か?
"2 4 6 8 3".to_i # => 2
"24683".to_i # => 24683
"2_4_6_8_3".to_i # => 24683
to_i
最初の文字から文字列を読み取り、数字以外が見つかるまで続けます。したがって、上記の例で2
は、 は最初の文字列の最初の数字で、その後にスペースが続きます。スペースは非数字であるため、to_i
処理を停止し、 のみを返します2
。2 番目の例ではスペースがないためto_i
、文字列全体を処理して単一の値として返します。3 番目では、Ruby は他の言語と同様_
に、数値文字列の一部として受け入れるためto_i
、完全な値を再び返します。_
のように、値のコンマ位置をマークするために使用されます1_000_000
。
より多くのコードを書くときは、時間をかけて明確かつきれいに記述してください。視覚的なノイズを減らし、脳に取り入れやすいコードが必要です。Ruby を使用すると、理解しやすいクリーンで表現力豊かなコードを簡単に記述できますが、コーディング スタイルが悪いと、Ruby コードがすぐに判読不能になる可能性があります。
これはアルゴリズムを修正しようとするものではなく、コードのスタイルをどのようにすべきかを示すためのものです:
def insertion_sort(ar)
key = ar.last
(ar.size - 2).downto(0) { |x|
if (key < ar[x])
ar[x + 1] = ar[x]
p ar
else
ar[x + 1] = key
p ar
break
end
}
end
# Tail starts here
count = gets.to_i
ar = gets.strip.split.map { |i| i.to_i }
insertion_sort(ar)
- メソッドは常に snake_case で記述され、CamelCase では記述されません。
- 空白を使用します。目と脳に論理的な休憩を与え、何が起こっているのかを定義するのに役立ちます。演算子と制御構造は、前後と上下に空白を入れることでメリットがあります。
- インデントにはスペースを使用し、タブ ストップは 2 スペースに設定します。これがRuby標準です。なぜそれら?人々が異なるエディター間でコードを移動する際の一貫性。プロのコーディング ハウスで作業している場合は、より厳格なコーディング標準が適用されていることに気付くでしょう。