2016-09-15 3 views
0

私はコード戦争のいくつかの課題を解決しようとします。私は列のタイトル(Excelで発生)を返すメソッドを作成する必要があります。メソッドは1つのパラメータを取得します。たとえば、次のようにExcelの列のタイトルを取得するには?

def get_column_title(n) 
//code 
end 

場合、それはA.

enter image description here

enter image description here

テストケースを返す必要があります= 1である。n:

Test.assert_equals(get_column_title(1), "A") 
Test.assert_equals(get_column_title(26), "Z") 
Test.assert_equals(get_column_title(52), "AZ") 
Test.assert_equals(get_column_title(53), "BA") 
Test.assert_equals(get_column_title(702), "ZZ") 

私が持っているもの:

def number_values 
    { 
     1 => 'A', 2 => 'B', 3 => 'C', 4 => 'D', 5 => 'E', 6 => 'F', 7 => 'G', 
     8 => 'H', 9 => 'I', 10 => 'J', 11 => 'K', 12 => 'L', 13 => 'M', 14 => 'N', 
     15 => 'O', 16 => 'P', 17 => 'Q', 18 => 'R', 19 => 'S', 20 => 'T', 
     21 => 'U', 22 => 'V', 23 => 'W', 24 => 'X', 25 => 'Y', 26 => 'Z' 
    } 
    end 

def translate_values 
    if @n <= 26 
     number_values[@n-26*0] 
    elsif @n <= 52 
     'A'+ number_values[@n-26*1] 
    elsif @n <= 78 
     'B' + number_values[@n-26*2] 
    end 
end 

問題: このタスクをアルゴリズム的に解決する方法はわかりません。私はループで26を数で割ることを考えました。 タスクにアプローチする方法についていくつかのヒントを教えてもらえますか?運動の

出典: codewars.com

+1

を出力http://stackoverflow.comを見ている場合/ a/182924/390819 – GolfWolf

答えて

1

あなたがベース26にあなたの番号を変換し、A...Zの代わり0...25を使用する必要があります。唯一のトリックは、各ステップであなたの番号から1つを減算することです。申し訳ありません

1
{alphabetCount=26 
alphabetOffset=1 

for i in 0 .. 1000 
    i = i + alphabetOffset 
    category="" 

    while i>alphabetCount do 
     j=i%alphabetCount 

     if j==0 then 
      j=alphabetCount 
     end 

     category=(64+j).chr + category 
     i=(i-j)/alphabetCount 

     if j==0 then 
      i=i-1 
     end 
    end 

    category=(64+i).chr + category + "\n" 
    puts category 
end} 

それは少しグラグラですが、私はオンラインコンパイラ:( を介して移動し、できる唯一のテストで午前しかし、それは

0=A 
... 
25=Z 
.... 
702=AAA 
関連する問題