Cho một chuỗi, tính số cột tương ứng với


17

Trong Excel, các cột có phạm vi từ A-Z, AA,AB,AZ,BA,..,BZv.v. Họ thực sự từng đứng cho số, nhưng thay vào đó được mã hóa dưới dạng chuỗi bảng chữ cái.

Trong thử thách này, bạn sẽ được cung cấp một chuỗi các bảng chữ cái và bạn phải tính toán cột tương ứng.

Một số xét nghiệm:

'A' trả về 1 (có nghĩa là đó là cột đầu tiên)

'B' trả về 2

'Z' trả về 26

'AA' trả lại 27

'AB' trả về 28

'AZ' trả lại 52

'ZZ' trả về 702

'AAA' trả lại 703

Bạn có thể giả định rằng chữ in hoa sẽ chỉ được đưa ra.

Các byte ngắn nhất giành chiến thắng.

Chúc may mắn!


Vậy ... cơ sở 26 với bảng chữ cái?
Jo King

1
Nó không hoàn toàn là cơ sở 26 vì không có số không.
J.Doe

@ J.Doe Ah, tôi đoán bạn đúng. Tôi đã không nhận thấy vì giải pháp của tôi tự động được coi Zlà 10 dù sao
Jo King


Câu trả lời:



7

Google Sheets, 21 byte

(công thức ước tính cho kết quả, lấy đầu vào từ ô A1)

=column(indirect(A1&2

Chỉ cần đăng một phiên bản ít chơi golf này.
ATaco

1
Tôi cũng có một giải pháp trong Google Sheets không dựa vào COLUMN dựng sẵn, hãy kiểm tra nó. (bên cạnh đó, tôi cảm thấy tồi tệ vì giải pháp mà tôi đã nỗ lực nhiều hơn để ít bị chú ý hơn ... dù sao đó cũng là một vấn đề điển hình với việc bỏ phiếu, đặc biệt là khi thử thách diễn ra ở HNQ.)
user202729

6

R , 48 43 byte

-5 byte nhờ @Giuseppe, sử dụng cùng logic, nhưng là một chương trình loại bỏ ncharcuộc gọi.

for(i in utf8ToInt(scan(,"")))F=F*26+i-64;F

Hãy thử trực tuyến!








2

APL (NARS), 11 ký tự, 22 byte

{+/26⊥⎕A⍳⍵}

kiểm tra

  f←{+/26⊥⎕A⍳⍵} 
  f¨'A' 'AA' 'AAA'
1 27 703 
  f¨'AB' 'ZZ' 'Z'
28 702 26 

2

C (gcc) , 46 , 43 byte

a;f(int*s){for(a=0;*s;)a=*s++%64+a*26;s=a;}

Hãy thử trực tuyến!

Thuốc khử trùng

a; f(int*s)
{  for(a=0;*s;) // Loop through s, which is a null-terminated string.
       a=*s++%64 + a*26; // Multiply accumulated value by 26, and add current char modulo 64 to it.
   s=a;} // Return the accumulated value.


1

Google Sheets, 100 byte

(công thức ước tính cho kết quả, lấy đầu vào từ ô A1)

=sum(arrayformula(
  (
    code(
      mid(A1,row(indirect("1:"&len(A1))),1)
    )-64
  )*26^row(indirect("1:"&len(A1)))/26

Tất cả các không gian được thêm vào cho rõ ràng.

Lưu ý .

  • Tôi không biết nếu có thể loại bỏ sự trùng lặp row(indirect("1:"&len(A1)).
  • Mặc dù Google Sheets có decimalchức năng, việc chuyển ngữ sẽ mất rất nhiều byte.


1

Java (JDK) , 92 byte

static int m(String v){int x=0;for(int i=0;i<v.length();i++)x=x*26+v.charAt(i)-64;return x;}

Hãy thử trực tuyến!

Đầu ra

A = 1

B = 2

Z = 26

Aa = 27

AB = 28

AZ = 52

ZZ = 702

AAA = 703


Tôi không phải là một chuyên gia về chơi golf Java, nhưng bạn có thể đánh golf xuống đáng kể bằng cách quay lại thay vì in, đơn giản hóa các vòng lặp, loại bỏ khoảng trắng và loại bỏ các biến pnbiến. 92 byte! .
Jo King

Tuyệt vời .......
Syed Hamza Hassan

1
Bạn có thể loại bỏ staticđể đạt được 7 byte. Bạn cũng có thể làm cho hàm này trở thành lambda để dự phòng nhiều byte hơn. Tôi cũng nghĩ rằng phiên bản đệ quy có thể tiết kiệm byte. Trong mọi trường hợp, đây là giải pháp 39 byte của tôi .
Olivier Grégoire

Điều đó thật tuyệt vời.
Syed Hamza Hassan




1

J , 11 byte

26#.64|3&u:

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

26#.64|3&u:  Monadic verb. Input: a string.
       3&u:  Convert each character to Unicode codepoint
    64|      Modulo 64; maps A -> 1, ... Z -> 26
26#.         Interpret as base-26 digits and convert to single integer

1

Japt -h, 10 byte

åÈ*26+InYc

Thử nó

Hoặc không có cờ. Byte đầu tiên có thể được loại bỏ nếu chúng ta có thể lấy đầu vào là một mảng ký tự.

¨c aI̓26

Thử nó


Giải trình

åÈ             :Cumulatively reduce by passing each character at Y through a function, with an initial total of 0
  *26          :  Multiply current total by 26
     -I        :  Subtract 64
       n       :   Subtracted from
        Yc     :    The codepoint of Y
               :Implicitly output the last element of the resulting array



0

J , 20 byte

[:(#.~26$~#)32|a.i.]

Hãy thử trực tuyến!

Giải trình:

 [:(#.~26$~#)32|a.i.] 
                  i.    - indices 
                    ]   - of the characters of the input
                a.      - in the alphabet
             32|        - mod 32
 [:(        )           - apply the following code to the above
         $~             - create a list of (left and right arguments exchanged) 
       26               - the number 26
           #            - repeated the length of the input times
    #.~                 - to base (26)

0

Than , 10 byte

I↨²⁶ES⊕⌕αι

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

     S      Input string
    E       Map over characters
         ι  Current character
        α   Uppercase alphabet
       ⌕    Find index
      ⊕     Increment
  ²⁶        Literal 26
 ↨          Base conversion
I           Cast to string
            Implicitly print


0

MBASIC , 84 byte

1 INPUT S$:L=LEN(S$):FOR I=1 TO L:V=ASC(MID$(S$,I,1))-64:T=T+26^(L-I)*V:NEXT:PRINT T

Đầu ra:

? AZ
 52

? ZZ
 702

? AAA
 703

0

mã máy x86, 19 byte

00000000: 31c0 8b19 83e3 3f41 b21a f7e2 01d8 3831  1.....?A......81
00000010: 75f0 c3                                  u..

Hội,, tổ hợp:

section .text
	global func
func:				;this function uses fastcall conventions
	xor eax, eax		;reset eax to 0
	loop:
		;ebx=*ecx%64
		mov ebx, [ecx]	;ecx is 1st arg to this func (in fastcall conventions)
		and ebx, 63	;because 64 is a pwr of 2,n%64=n&(64-1)

		;ecx++		get next char in str by incrementing ptr
		inc ecx
		
		;eax=eax*26
		mov dl, 26	;using an 8bit reg is less bytes
		mul edx
		
		;eax+=ebx //(eax=(*ecx%64)+(eax*26))
		add eax, ebx

		;if(*ecx!='\0')goto loop
		cmp byte [ecx], dh ;dh==0
		jne loop
	ret			;return value is in eax

Hãy thử trực tuyến!


0

Kotlin , 29 byte

{it.fold(0){a,v->v-'@'+a*26}}

Hãy thử trực tuyến!

Giải thích

val column: (String) -> Int = {  // String in, Int out
    it.fold(0) { a, v ->  // acc, value
        v - '@'  // distance of char from @ (A=1 etc.)
                + a * 26
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.