1. ホーム
  2. excel

コードゴルフ:Excelの列名に相当する数値

2023-11-01 01:38:31

質問

課題

Excelの列の文字列と同等の数値を出力する、文字数で最も短いコード。

例えば A の列は1です。 B は2、といった具合です。一度 Z になると、次の列は AA となり、次に AB といった具合になります。

テストケースです。

A:    1
B:    2
AD:   30
ABC:  731
WTF:  16074
ROFL: 326676

コード数には入出力(つまりプログラム全体)が含まれます。

どのように解決するのですか?

Perlの場合。 36 34 33 31 30 17 15 11文字

$_=()=A..$_

使用方法

$ echo -n WTF | perl -ple '$_=()=A..$_'
16074

を避けるために echo -n を使用することで17に削減。 chop の呼び出しを避けるために echo -n を使用することで17を削減しました。

printの代わりにsayを使用することにより、15に削減。

say の代わりに -p を使用することにより、11 に削減。

説明 A は文字列コンテキストで評価され A..$_ は "A"から始まり、入力文字列まで文字列インクリメントされたリストを構築します。Perlは ++ 演算子(つまり .. ) をアルファベット文脈の文字列に対して使用できるので、例えば $_="AZ";$_++;print と出力されます。 BA .

=()= (別名 演算子 ) は、リストコンテキストで評価される式を強制し、その式によって返される要素の数、すなわち、以下を返します。 $scalar = () = <expr> に対応するのは @list = <expr>; $scalar = @list .