Гольф кода: Числовой эквивалент имени столбца Excel

76
задан 8 revs, 5 users 79% 30 August 2012 в 20:00
поделиться

66 ответов

Excel - 99 символов

Введите как формулу массива - я не считаю добавление Excel {}

= SUM ((CODE (MID (A1 , ROW (INDIRECT ("1:" & LEN (A1))), 1)) - 64) * 26 ^ (LEN (A1) -ROW (INDIRECT ("1:" & LEN (A1)))))

-1
ответ дан 24 November 2019 в 11:02
поделиться

Настоящий VBA, 216 без пробелов

Я тоже терплю поражение в реальном гольфе.

Private Sub CB1_Click()
Dim C, S
Range("A1").Select
Do
S = Len(ActiveCell)
x = 0
C = 0
Do
C = (Asc(Mid(ActiveCell, (S - x), 1)) - 64) * (26 ^ x) + C
x = x + 1
Loop Until x = S
ActiveCell.Offset(0, 1) = C
ActiveCell.Offset(1, 0).Activate
Loop Until ActiveCell = ""
End Sub

Использует столбец A для ввода, выводит в столбец B, запускается при нажатии кнопки команды VB. = D

0
ответ дан 24 November 2019 в 11:02
поделиться

Go: 106 символов

Это не самый короткий из всех языков. Но он может быть самым коротким из C, C ++, Java и C #.

package main
import("os"
"fmt")
func main(){t:=0
for _,c := range os.Args[1]{t=t*26+c-64}
fmt.Println(t)}

Отформатированная версия:

package main

import (
    "os"
    "fmt"
)

func main() {
    t := 0
    for _, c := range os.Args[1] {
        t = t*26 + c - 64
    }   
    fmt.Println(t)
}
0
ответ дан 24 November 2019 в 11:02
поделиться

Elang, 53/78

Shell, 53 символа:

F=fun(S)->lists:foldl(fun(C,A)->A*26+C-64end,0,S)end.

Модуль, 78 символов:

-module(g).
-export([f/1]).
f(S)->lists:foldl(fun(C,A)->A*26+C-64end,0,S).
0
ответ дан 24 November 2019 в 11:02
поделиться

Groovy: 51 символ

char[] a=args[0];t=0;for(i in a)t=26*t+i-64;print t

Вызвать как

groovy *scriptname* ROFL

или

groovy -e "char[] a=args[0];t=0;for(i in a)t=26*t+i-64;print t" ROFL

Это по сути то же самое, что и Java. Я представляю себе некоторые возможности использования диапазонов и замыканий, но в этом примере ничего не пришло в голову. Кто-нибудь еще видит способ сократить это?

Более привлекательная версия с закрытием, к сожалению, немного длиннее.

t=0;args[0].toCharArray().each{t=t*26+it-64};print t
0
ответ дан 24 November 2019 в 11:02
поделиться

как насчет нового языка
{{1} } с операторами, определенными как

# - вернет = COLUMN () EXCEL как строковое число

, - прочитанное в строке

. - напишите строку

, затем программа, которая должна это сделать, -

, #.

-4
ответ дан 24 November 2019 в 11:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: