문자열이 주어지면 해당 열의 수를 계산하십시오.


17

Excel에서 열의 범위는 다양 A-Z, AA,AB,AZ,BA,..,BZ합니다. 실제로는 각각 숫자를 나타내지 만 알파벳 문자열로 인코딩됩니다.

이 도전에서, 당신은 알파벳 문자열을 받게 될 것이고, 당신은 그것이 대응하는 열을 계산해야합니다.

일부 테스트 :

'A'는 1을 반환합니다 (첫 번째 열임을 의미)

'B'는 2를 반환합니다

'Z'는 26을 반환

'AA'는 27을 반환합니다

'AB'는 28을 반환

'AZ'는 52를 반환합니다

'ZZ'는 702를 반환합니다

'AAA'는 703을 반환합니다

대문자 만 제공한다고 가정 할 수 있습니다.

최단 바이트가 이깁니다.

행운을 빕니다!


알파벳이 26 번지?
Jo King

1
0이 없기 때문에 기준이 26이 아닙니다.
J.Doe

@ J.Doe Ah, 당신 말이 맞아요. 내 솔루션이 자동으로 처리하기 때문에 나는 통지를하지 않은 Z10 어쨌든
조 왕에게


답변:



7

Google 스프레드 시트, 21 바이트

(수식은 결과를 평가하고 셀 A1에서 입력을받습니다)

=column(indirect(A1&2

약간 덜 골프 버전을 게시하려고합니다.
ATaco

1
또한 내장 COLUMN에 의존하지 않는 Google 스프레드 시트 솔루션을 확인하십시오. (또한, 더 많은 노력을 기울인 솔루션에 대한 관심이 줄어든다는 것은
안타까운








2

APL (NARS), 11 자, 22 바이트

{+/26⊥⎕A⍳⍵}

테스트

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

2

C (gcc) , 46 , 43 바이트

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

온라인으로 사용해보십시오!

데 고프

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 스프레드 시트, 100 바이트

(수식은 결과를 평가하고 셀 A1에서 입력을받습니다)

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

모든 공백은 명확성을 위해 추가되었습니다.

참고 .

  • 중복을 제거 할 수 있는지 모르겠습니다. row(indirect("1:"&len(A1)) .
  • Google 스프레드 시트에는 decimal기능 이 있지만 음역에는 많은 바이트가 필요합니다.


1

자바 (JDK) , 92 바이트

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;}

온라인으로 사용해보십시오!

산출

A = 1

B = 2

Z = 26

AA = 27

AB = 28

AZ = 52

ZZ = 702

AAA = 703


나는 골프를 치는 Java의 전문가는 아니지만 인쇄 대신 반환, for 루프를 단순화하고 공백을 제거하고 pn변수를 제거하여 상당히 골프를 줄 수 있습니다 . 92 바이트! .
Jo King

멋진 .......
Syed Hamza Hassan

1
static7 바이트를 얻기 위해 제거 할 수 있습니다 . 더 많은 바이트를 절약하기 위해이 함수를 람다로 만들 수도 있습니다. 또한 재귀 버전은 바이트를 절약 할 수 있다고 생각합니다. 어쨌든 여기에 39 바이트 솔루션이 있습니다.
Olivier Grégoire

훌륭 하군요.
Syed Hamza Hassan




1

J , 11 바이트

26#.64|3&u:

온라인으로 사용해보십시오!

작동 원리

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 바이트

åÈ*26+InYc

시도 해봐

또는 깃발없이. 문자 배열로 입력을받을 수 있으면 첫 번째 바이트를 제거 할 수 있습니다.

¨c aI̓26

시도 해봐


설명

åÈ             :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 바이트

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

온라인으로 사용해보십시오!

설명:

 [:(#.~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

, 10 바이트

I↨²⁶ES⊕⌕αι

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

     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 바이트

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

산출:

? AZ
 52

? ZZ
 702

? AAA
 703

0

x86 기계 코드, 19 바이트

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

어셈블리:

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

온라인으로 사용해보십시오!


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.