按字符数排序的最短代码,将输出Excel列字符串的数字等效值.
例如,A列为1,B为2,依此类推.一旦你点击Z,下一列变为AA,然后AB依此类推.
A: 1
B: 2
AD: 30
ABC: 731
WTF: 16074
ROFL: 326676
Run Code Online (Sandbox Code Playgroud)
代码计数包括输入/输出(即完整程序).
Dan*_*bić 339
使用正确的工具:
=COLUMN()
Run Code Online (Sandbox Code Playgroud)

Dav*_*vid 96
$_=()=A..$_
Run Code Online (Sandbox Code Playgroud)
用法:
$ echo -n WTF | perl -ple '$_=()=A..$_'
16074
Run Code Online (Sandbox Code Playgroud)
使用echo -n减少到17以避免chop呼叫.
使用say而不是print来减少到15.
使用-p而不是说减少到11.
说明:
A在字符串上下文中计算,并A..$_构建一个从"A"开始的字符串,并以字符串为单位递增到输入字符串.Perl 在字母上下文中对字符串解释++运算符(因此也是如此..),例如$_="AZ";$_++;print输出BA.
=()=(又名"goatse"运算符)强制在列表上下文中计算表达式,并返回该表达式返回的元素数,即$scalar = () = <expr>对应于@list = <expr>; $scalar = @list.
Dav*_*vid 71
26#.64-~av
Run Code Online (Sandbox Code Playgroud)
例:
26#.64-~av 'WTF'
16074
Run Code Online (Sandbox Code Playgroud)
说明:
av返回其参数中每个字符的ascii索引列表,例如av'ABC'返回65 66 67.64-~.#.动词将列表转换为base 26 .Tes*_*rex 55
,[>>>[->>+++++[-<+++++>]<+<]>[-<+>]<<++++++++[<++++++++>-]<[<->-]<[>>>+<<<-],]>>>
Run Code Online (Sandbox Code Playgroud)
,[ // get character input into p[0], enter loop if it isn't null (0)
>>>[->>+++++[-<+++++>]<+<] // take what's in p[3] and multiply by 26, storing it in p[4]
>[-<+>] // copy p[4] back to p[3]
<<++++++++[<++++++++>-]< // store 64 in p[1]
[<->-]< // subtract p[1], which is 64, from the input char to get it's alphabetical index
[>>>+<<<-] // add p[0] to p[3]
,] // get another character and repeat
>>> // move to p[3], where our final result is stored
Run Code Online (Sandbox Code Playgroud)
所以你会注意到我实际上没有将数值转换为ascii字符串进行打印.这可能会破坏乐趣.但我赞成将指针移动到具有结果的单元格,所以至少它对机器有用.
嘿,你知道什么,我击败了C#!
Mar*_*off 31
p ('A'..$_).count
Run Code Online (Sandbox Code Playgroud)
用法:
$ echo -n ROFL | ruby -n a.rb 326676 $ echo -n WTF | ruby -n a.rb 16074 $ echo -n A | ruby -n a.rb 1
Ken*_*Ken 23
13个字符
把价值放在x:
x?'WTF'
Run Code Online (Sandbox Code Playgroud)
然后计算它:
26?(?aV?x)-65
Run Code Online (Sandbox Code Playgroud)
J击败我的唯一原因是因为括号.我认为应该有一些方法来重新排列它以避免它们的需要,但这是漫长的一天.想法?
(嘿,你这个有30多个角色解决方案的程序员非常可爱!)
ken*_*ytm 14
支持最多XFD:
=COLUMN(INDIRECT(A1&"1"))
Run Code Online (Sandbox Code Playgroud)
安装:
用法:
支持ROFL还:
(A2) =MAX(B:B)
(B2) =IFERROR(26*B1+CODE(MID(A$1,ROW()-1,1))-64,0)
Run Code Online (Sandbox Code Playgroud)
安装:
用法:
Cam*_*and 13
using System.Linq;class P{static void Main(string[]a){System.Console.Write(
a[0].Aggregate(0,(t,c)=>(t+c-64)*26)/26);}}
Run Code Online (Sandbox Code Playgroud)
Ungolfed:
using System.Linq;
class P
{
static void Main(string[] a)
{
System.Console.Write(a[0]
.Aggregate(0, (t, c) => (t + c - 64) * 26) / 26);
}
}
Run Code Online (Sandbox Code Playgroud)
Joh*_*ooy 12
[0]\+{31&\26*+}*
$ echo -n WTF | ./golfscript.rb excel.gs
16074
$ echo -n ROFL | ./golfscript.rb excel.gs
326676
Run Code Online (Sandbox Code Playgroud)
ken*_*ytm 11
main=interact$show.foldl(\x->(26*x-64+).fromEnum)0
Run Code Online (Sandbox Code Playgroud)
用法:
~:166$ echo -n "ROFL" | ./a.out
326676
~:167$ echo -n "WTF" | ./a.out
16074
Run Code Online (Sandbox Code Playgroud)
s=0
for c in raw_input():s=26*s+ord(c)-64
print s
Run Code Online (Sandbox Code Playgroud)
您也可以替换raw_input()与input()4,减少文字数,但是那需要输入含有周围引号.
这是一个以47个字符计时的子程序:
f=lambda x:len(x)and 26*f(x[:-1])+ord(x[-1])-64
Run Code Online (Sandbox Code Playgroud)
小智 9
26/:1+.Q.A?
Run Code Online (Sandbox Code Playgroud)
说明:
.Q.A 在k4中定义 - 它是向量 "ABC...XYZ"? 是find运算符 - x arg中y arg中项目的第一个匹配的索引26/: 转换为基数26一个警告 - 这只适用于传入列出的类型的地方:
26/:1+.Q.A? "AD"
30
26/:1+.Q.A? "WTF"
16074
Run Code Online (Sandbox Code Playgroud)
但:
26/:1+.Q.A? ,"A"
1
Run Code Online (Sandbox Code Playgroud)
function a(p)Array.reduce(p,function(t,d)t*26+d.charCodeAt()-64,0)
Run Code Online (Sandbox Code Playgroud)
function a(p)(t=0,p.replace(/./g,function(d)t=t*26+d.charCodeAt()-64),t)
Run Code Online (Sandbox Code Playgroud)
function a(p){t=0;p.split("").map(function(d){t=t*26+d.charCodeAt(0)-64});return t}
Run Code Online (Sandbox Code Playgroud)
function a(p){r=0;t=1;l=p.length;for(i=0;i<l;i++){r+=(p.charCodeAt(l-1-i)-64)*t;t*=26}return r}
Run Code Online (Sandbox Code Playgroud)
function a(p,i){i=i||0;l=p.length;return p?(p.charCodeAt(l-1)-64)*Math.pow(26,i)+a(p.slice(0,l-1),i+1):0}
Run Code Online (Sandbox Code Playgroud)
用法:
a("A") // 1
a("B") // 2
a("AD") // 30
a("ABC") // 731
a("WTF") // 16074
a("ROFL") // 326676
Run Code Online (Sandbox Code Playgroud)
[char[]]$args[($s=0)]|%{$s=$s*26+$_-64};$s
Run Code Online (Sandbox Code Playgroud)
斯卡拉,30个字符
print((0/:args(0))(_*26+_-64))"
Run Code Online (Sandbox Code Playgroud)
例:
C:\>scala -e "print((0/:args(0))(_*26+_-64))" AD
30
Run Code Online (Sandbox Code Playgroud)
s;main(c){while(c=getchar()+1)s=26*s+c-65;printf("%d",s);}
Run Code Online (Sandbox Code Playgroud)
输入(stdin)必须仅包含AZ,不允许其他字符(包括换行符).
尼斯.很久以前,我在http://aboutdev.wordpress.com/2009/12/19/excelcification-brain-teaser-code/上写了一些更多的解释 .虽然它不是一个优化的版本!
仅供参考.基数26算术称为hexavigesimal,Excel的最大列是XFD,它转换为16383(使用0作为第一个单元格),恰好恰好是2 ^ 14个单元格.
任何人都可以猜到为什么它是2 ^ 14 ??
(defun x(s)(reduce(lambda(x y)(+(* 26 x)y))(map 'vector(lambda(b)(-(char-code b)(char-code #\A)-1))s)))
Run Code Online (Sandbox Code Playgroud)
与Perl,Ruby和APL相比没有任何竞争,但到目前为止对其他C#/ Java答案的改进.
这使用了霍纳的规则.
class C{static void Main(string[]a){int t=0;foreach(var c in a[0]){t=(t+c-64)*26;}System.Console.Write(t/26);}}
Run Code Online (Sandbox Code Playgroud)