public class A{public static void main(String[] z){int o=0,c=0;for(int i=z[0].length()-1;i>=0;i--,c++)o+=(z[0].charAt(i)-64)*Math.pow(26,c);System.out.println(o);}}
public class A
{
public static void main(String[] z)
{
int m,o=0,c=0;
for(int i=z[0].length()-1;i>=0;i--,c++)
{
m=(int)Math.pow(26,c);
o+=(z[0].charAt(i)-64)*m;
}
System.out.println(o);
}
}
Предполагает ввод в верхнем регистре (через аргумент командной строки). Очевидный подход без уловок.
p('A'..$*[0]).count
Использование:
$ ruby a.rb ABC
731
x=0 for c in(...):gfind(".")do x=x*26-64+c:byte()end print(x)
в VBA я уменьшил его до 98
Sub G(s)
Dim i, t
For i = 0 To Len(s) - 1
t = t + ((Asc(Left(Right(s, i + 1), 1)) - 64)) * ((26 ^ i))
Next
MsgBox t
End Sub
chop($l=<>);$_=A;$.++,$_++while$_ ne$l;die$.,$/
chomp($n=<>);@c=split(//,uc($n));$o=64;$b=0;$l=$#c;for($i=$l;$i>=0;$i--){$b+=((26**($l-$i))*(ord($c[$i])-$o));}print$b;
Использование:
vivin@serenity ~/Projects/code/perl/excelc
$ echo WTF | perl e.pl
16074
vivin@serenity ~/Projects/code/perl/excelc
$ echo ROFL | perl e.pl
326676
Я уверен, что некоторые из здешних гуру Perl смогут придумать что-то гораздо меньшее.
(работает наоборот)
dc
не может обрабатывать ввод символов, поэтому я закодировал противоположное: введите номер столбца и выведите имя столбца:
?[26~64+rd0<LP]dsLxP
dc exccol.dc 326676 ROFL
Smalltalk arguments first reverse inject:0into:[:o :e|o*26+e digitValue]
Python
import string
letters = string.uppercase
colnum = lambda s: sum((letters.index(let)+1)*26**idx for idx, let in enumerate(s[::-1]))
print colnum('WTF')
# 16074
print colnum('ROFL')
# 326676
Яблочный текст: 188
Вот необходимый яблочный текст, состоящий из 188 символов, который очень сложно сделать недословным. Кроме того, это самый длинный ответ из всех существующих на сегодняшний день. Если кто знает, как его сократить, поделитесь.
on run s set {o, c} to {0, 0} repeat with i in reverse of (s's item 1)'s characters set m to 26 ^ c as integer set c to c + 1 set o to o + ((ASCII number of i) - 64) * m end repeat end run
Использование:
osascript /path/to/script.scpt ROFL
PHP:
<?$t=0;$s=str_split($argv[1]);$z=count($s);foreach($s as$v){$z--;$t+=(ord($v)-64)*pow(26,$z);}echo$t?>
использование: php filename.php ROFL
выводит: 326676
Пролог: 49 символов
c([],A,A). c([H|T],I,R):-J is H-64+I*26,c(T,J,R).
Используя приведенный выше код:
| ?- c("WTF",0,R). R = 16074 ? yes | ?- c("ROFL",0,R). R = 326676 ? yes
php 29 символов:
while($i++!=$t)$c++;echo$c+1;
PHP: 56 55 символов
для ($ i = 'a'; $ i ++! = Strtolower ($ argv [ 1]); @ $ c ++) {} echo ++ $ c;
PHP: 44 43 символа только для прописных букв
для ($ i = 'A'; $ i ++! = $ Argv [1]; @ $ c ++) {} echo ++ $ c;
Matlab 38 символов
Работает только с прописными буквами. Не уверен, что он должен работать и со строчными буквами (в примере нет).
x=input('')'-64;26.^(size(x)-1:-1:0)*x
Если новые строки не считаются только 37 (без точки с запятой):
x=input('')'-64
26.^(size(x)-1:-1:0)*x
Я вижу, что Matlab превосходит многие языки. Кто бы мог этого ожидать.
Пример:
Input: 'ROFL' (dont forget the '' )
Output: ans = 326676
wazoox:
echo -n WTF | perl -ple '$ = () = A .. $ '
Это печатает новую строку, чтобы ответ был более читабельным в оболочке.
фильтр : 97 символов
{ read c;i=0;while [ $c ];do eval s=({A..${c:0:1}});i=$((i*26+${#s[@]}));c=${c:1};done;echo $i;}
Использование:
echo ROFL | { read c;i=0;while [ $c ];do eval s=({A..${c:0:1}});i=$((i*26+${#s[@]}));c=${c:1};done;echo $i;}
326676
функция : 98 символов
C(){ i=0;while [ $1 ];do eval s=({A..${1:0:1}});i=$((i*26+${#s[@]}));set -- ${1:1};done;echo $i;}
Использование:
C ROFL
326676
Объяснение версии фильтра:
read c;i=0;
Инициализировать столбец и сумму.
while [ $c ];do
пока остались символы столбца
eval s=({A..${c:0:1}});
$ {c: 0: 1}
возвращает первый символ столбца; s = ({A..Z})
делает s массивом, содержащим буквы от A до Z
i=$((i*26+${#s[@]}));
$ ((...))
завершает арифметическое вычисление; $ {# s [@]}
- количество элементов в массиве. $ S
c=${c:1};done;
$ {c: 1}
- символы в $ c после первого. done
завершает цикл while
echo $i
ммм, я забыл
лучше, но сомнительно
Удаление 5 символов «эхо» приведет к тому, что для входа «ROFL» будет выведено
326676: command not found
Также i = 0
, вероятно, не требуется, если вы уверены, что у вас нет этой переменной, установленной в вашей текущей оболочке.
Мое решение Javascript имеет длину всего 82 символа и использует Integer.parseInt с Radix 36. Было бы хорошо, если бы кто-нибудь мог добавить это в раздел Javascript этой ветки! : -)
a=function(b){t=0;b.split('').map(function(n){t=parseInt(n,36)-9+t*26});return t};
with(prompt())for(l=length,i=0,v=i--;++i<l;)v+=(charCodeAt(l-1-i)-64)*Math.pow(26,i);alert(v)
26_sv -64+_ic
Использование:
26_sv -64+_ic"ROFL"
326676
Пояснение:
reduce(lambda a,b:a*26+ord(b)-64,raw_input(),0)
работает только с прописными буквами
Josl из 48 символов
main 0 0 argv each 64 - swap 26 * + next print
Примеры:
$ josl numequiv.j A
1
$ josl numequiv.j ABC
731
$ josl numequiv.j ROFL
326676
Чтение из стандартного ввода:
main 0 STDIN read-line each 64 - swap 26 * + next print
F # (37 символов):
Seq.fold (fun n c -> int c-64+26*n) 0
for($a=A;++$c,$a++!=$argv[1];);echo$c;
, например
php -r 'for($a=A;++$c,$a++!=$argv[1];);echo$c;' WTF
с использованием понимания списков:
s=input()
print sum([((26**(len(s)-i-1))*(ord(s[i])-64)) for i in range(len(s))])
OOBasic: 178 символов, не считая пробелов в отступах
Эта версия проходит все тесты. Я подозреваю, что гольф был бы более успешным, если бы он не «воспользовался» тем фактом, что существует электронная таблица, использующая эту систему нумерации. См. Примечания к исходной версии ниже, чтобы узнать, почему это не особенно полезно. Я не особо старался сократить счет.
Также обратите внимание, что по очевидным причинам это будет работать только при запуске как макрос из электронной таблицы OO calc.
Function C(st as String) as Long
C = 0
while len(st)
C = C*26 + ThisComponent.Sheets(0).getCellRangeByName(left(st,1) &"1").CellAddress.Column+1
st = mid(st,2)
wend
End Function
OOBasic (OpenOffice Basic), слишком много символов (124):
Function C(co As String) As Long
C = ThisComponent.Sheets(0).getCellRangeByName(co &"1").CellAddress.Column+1
End Function
Ограничения:
Примечания:
В любом случае ввод = C («A»)
, = C («ABC»)
и т. Д. В ячейке работает для первых четырех тестовых случаев; последние два выдают ошибки.
Фактор: 47 символов
обратный [26 swap ^ swap 64 - *] сумма индекса карты
p ("A" .. $ * [0]). To_a.size
let e2n (c: string) = c |> Seq.map (fun x -> (int) x - 64) |> Seq.reduce (fun ea -> a * 26 + e)