Diberikan string, hitung jumlah kolom yang sesuai dengannya

17

Di Excel, kolom berkisar dari A-Z, AA,AB,AZ,BA,..,BZdan seterusnya. Mereka masing-masing berdiri untuk angka, tetapi lebih dikodekan sebagai string alfabet.

Dalam tantangan ini, Anda akan diberi serangkaian huruf, dan Anda harus menghitung kolom yang sesuai dengannya.

Beberapa tes:

'A' mengembalikan 1 (artinya kolom pertama)

'B' mengembalikan 2

'Z' mengembalikan 26

'AA' mengembalikan 27

'AB' mengembalikan 28

'AZ' mengembalikan 52

'ZZ' mengembalikan 702

'AAA' mengembalikan 703

Anda dapat mengasumsikan bahwa huruf kapital hanya akan diberikan.

Bytes terpendek menang.

Semoga berhasil!

K Split X
sumber
Jadi ... dasar 26 dengan alfabet?
Jo King
1
Itu tidak cukup basis 26 karena tidak ada nol.
J.
@ J. Oh, saya kira Anda benar. Saya tidak memperhatikan karena solusi saya secara otomatis diperlakukan Zsebagai 10
Jo King
Mundur tantangan .
user202729
6
@JoKing Bijective base .
user202729

Jawaban:

9

Perl 6 , 17 byte

{:26[.ords X-64]}

Cobalah online!

Blok kode anonim yang mengurangi 64 dari setiap nilai byte dan mengkonversi dari basis 26 dengan Zmeluap ke kolom berikutnya.

Jo King
sumber
7

Google Sheets, 21 byte

(rumus mengevaluasi hasil, mengambil input dari sel A1)

=column(indirect(A1&2
pengguna202729
sumber
Akan memposting versi yang sedikit kurang golf ini.
ATaco
1
Saya juga punya solusi di Google Sheets yang tidak mengandalkan builtin COLUMN, coba lihat. (Selain itu, saya merasa tidak enak bahwa solusi yang saya upayakan lebih banyak mendapat perhatian kurang ... itu adalah masalah khas dengan pemungutan suara, terutama ketika tantangannya ada pada HNQ.)
user202729
6

R , 48 43 byte

-5 byte terima kasih kepada @Giuseppe, menggunakan logika yang sama, tetapi sebagai program yang menghilangkan ncharpanggilan.

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

Cobalah online!

J.Apakah
sumber
4

Java (JDK) , 39 byte

s->s.chars().reduce(0,(a,b)->a*26+b%32)

Cobalah online!

Olivier Grégoire
sumber
Platform java mana yang mendukung ini?
Syed Hamza Hassan
@SyedHamzaHassan Java 8 atau lebih.
Olivier Grégoire
3

05AB1E , 6 byte

Çžx-₂β

Cobalah online!

Okx
sumber
Karena penasaran, mengapa menggunakan žxbukan saja 64?
Kevin Cruijssen
Aku tidak tahu, kurasa lebih bagus?
Okx
3

PHP, 41 38 byte

-3 Terima kasih kepada Jo King.

for($c=A;$c!=$argn;$i++)$c++;echo$i+1;

dijalankan sebagai pipa dengan -nr

output unary, 34 byte:

1<?for($c=A;$c!=$argn;$c++)echo 1;

membutuhkan PHP 7.1. simpan ke file, jalankan sebagai pipa dengan -nF.

Titus
sumber
@ JoKing Ya, itu bisa dilakukan: sandbox.onlinephpfunctions.com/code/…
Ismael Miguel
@Titus Baiklah kalau begitu
2

APL (NARS), 11 karakter, 22 byte

{+/26⊥⎕A⍳⍵}

uji

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

C (gcc) , 46 , 43 byte

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

Cobalah online!

Degolf

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.

sumber
1

Google Sheets, 100 byte

(rumus mengevaluasi hasil, mengambil input dari sel A1)

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

Semua ruang ditambahkan hanya untuk kejelasan.

Catatan .

  • Saya tidak tahu apakah mungkin menghapus duplikasi row(indirect("1:"&len(A1)).
  • Meskipun Google Sheets memiliki decimalfungsi, transliterasi akan membutuhkan banyak byte.
pengguna202729
sumber
1

APL + WIN, 12 byte

Asal indeks 1.

26⊥¯65+⎕av⍳⎕

Cobalah online! Atas perkenan Dyalog Classic

Penjelasan:

⎕av⍳⎕ Prompts for input and gets Ascii integer value for each character

¯65+ subtracts 65 to give integers 1-26 for A-Z

26⊥ converts resulting vector from base 26 to single integer
Graham
sumber
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;}

Cobalah online!

Keluaran

A = 1

B = 2

Z = 26

AA = 27

AB = 28

AZ = 52

ZZ = 702

AAA = 703

Syed Hamza Hassan
sumber
Saya bukan ahli golf Java, tapi Anda bisa mengurangi ini dengan mengembalikan alih-alih mencetak, menyederhanakan loop, menghapus spasi dan menyingkirkan variabel pdan n. 92 byte! .
Jo King
Luar biasa .......
Syed Hamza Hassan
1
Anda dapat menghapus staticuntuk mendapatkan 7 byte. Anda juga bisa menjadikan fungsi ini lambda untuk menyimpan lebih banyak byte. Saya juga berpikir bahwa versi rekursif dapat menghemat byte. Bagaimanapun, inilah solusi 39 byte saya .
Olivier Grégoire
Indah sekali.
Syed Hamza Hassan
1

J , 11 byte

26#.64|3&u:

Cobalah online!

Bagaimana itu bekerja

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
Bubbler
sumber
1

Japt -h, 10 byte

åÈ*26+InYc

Cobalah

Atau tanpa bendera. Byte pertama dapat dihapus jika kita dapat mengambil input sebagai array karakter.

¨c aI̓26

Cobalah


Penjelasan

åÈ             :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
Shaggy
sumber
0

J , 20 byte

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

Cobalah online!

Penjelasan:

 [:(#.~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)
Galen Ivanov
sumber
0

Arang , 10 byte

I↨²⁶ES⊕⌕αι

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

     S      Input string
    E       Map over characters
         ι  Current character
        α   Uppercase alphabet
       ⌕    Find index
      ⊕     Increment
  ²⁶        Literal 26
 ↨          Base conversion
I           Cast to string
            Implicitly print
Neil
sumber
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

Keluaran:

? AZ
 52

? ZZ
 702

? AAA
 703
wooshinyobject
sumber
0

kode mesin x86, 19 byte

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

Majelis:

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

Cobalah online!

Logern
sumber
0

Kotlin , 29 byte

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

Cobalah online!

Dijelaskan

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
    }
}
siput_
sumber