Ten pochodzi z prawdziwego problemu z życia. Oczywiście rozwiązaliśmy to, ale nadal wydaje się, że można to zrobić lepiej, że jest to zbyt długie i okrągłe rozwiązanie. Jednak żaden z moich kolegów nie może wymyślić bardziej zwięzłego sposobu napisania tego. Dlatego przedstawiam to jako golf golfowy.
Celem jest przekonwertowanie nieujemnej liczby całkowitej na ciąg znaków w taki sam sposób, w jaki program Excel prezentuje nagłówki kolumn. A zatem:
0 -> A
1 -> B
...
25 -> Z
26 -> AA
27 -> AB
...
51 -> AZ
52 -> BA
...
16,383 -> XFD
Musi działać co najmniej do 16 383, ale poza tym jest również do przyjęcia (choć nie ma punktów bonusowych). Nie mogę się doczekać rozwiązania C #, ale zgodnie z tradycjami gry w golfa jest mile widziany każdy prawdziwy język programowania.
code-golf
conversion
Vilx-
źródło
źródło
Odpowiedzi:
Perl 6 ,
1614 bajtówDziała nawet poza XFD. Dzięki nieskończonym listom w Perlu 6 wykonanie tego nie trwa wiecznie (i pół).
Wypróbuj online!
źródło
Formuła Excel :), 36 znaków
Stosowanie:
Przepraszam, nie mogłem się oprzeć ...
źródło
<laughter type="evil">Muhahahahaha!</laughter>
"1"
z1
Perl, 17 znaków
..
Operator robi to samo, co magicznego automatycznego przyrostu, ale bez konieczności czasowego zmiennej i pętli. O ile niestrict subs
jest w zakresie, na gołe słowaA
iXFD
są interpretowane jako ciągi.( Ta odpowiedź była zasugerowana przez anonimowego użytkownika jako edycja istniejącej odpowiedzi . Czułem, że zasługuje na osobną odpowiedź, i uczyniłem ją jedną. Ponieważ nie byłoby fair, aby uzyskać z niej przedstawiciela, ja ” stworzyliśmy Wiki Wiki. )
źródło
$_
a wyjście jest wartością wyrażenia, to(A..XFD)[$_]
rozwiązuje wyzwanie tylko z 12 znakami .perl -E 'say[A..XFD]->[<>]' < number.txt
. Lub, w powłokach, które go obsługują, po prostu podaj dane w wierszu poleceń za pomocąperl -E 'say[A..XFD]->[<>]' <<< 123
.say+(A..XFD)[<>]
C, 53 znaki
To jak grać w golfa młotkiem ...
Wersja normalna:
A użycie jest takie:
źródło
Haskell, 48
Mniej golfa:
Wyjaśnienie
sequence
Kombinator Haskella pobiera listę akcji i wykonuje je, zwracając wynik każdej akcji z listy. Na przykład:jest równa:
W Haskell akcje są traktowane jak wartości i są sklejane za pomocą
>>=
(bind) ireturn
prymitywów. Każdy typ może być „działaniem”, jeśli implementuje te operatory poprzez instancję Monady .Nawiasem mówiąc, typ listy ma instancję monady. Na przykład:
To się równa
[(1,4),(1,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)]
. Zwróć uwagę, jak rozumienie listy jest uderzająco podobne:Ponieważ listy są rodzajem „akcji”, możemy ich używać
sequence
z listami. Powyższe można wyrazić jako:W ten sposób
sequence
daje nam połączona za darmo!Tak więc, aby zbudować listę:
Muszę tylko zbudować listy, aby przejść
sequence
Następnie użyj,
concatMap
aby zastosować obasequence
do list i połączyć uzyskane listy. PrzypadkowoconcatMap
jest to=<<
funkcja list, więc monada listy pozwala mi również ogolić tutaj kilka znaków.źródło
Perl, 26 znaków
źródło
Ruby, 35 znaków
Stosowanie:
Uwaga: Istnieje również krótsza wersja (30 znaków) z rekurencją.
Ale korzystając z tej funkcji, być może będziesz musiał zwiększyć rozmiar stosu dla dużych liczb w zależności od interpretera ruby.
źródło
Groovy, 47
źródło
Python 45
51źródło
+chr(65+i%26)
środka i testująci>=0
, oszczędzając 1 znak :)f=lambda i:
zamiastdef f(i):return
f = lambda i: i >= 0 and f(math.floor(i / 26 - 1)) + chr(int(round(65 + i % 26))) or ''
Scala, 62 znaki
Stosowanie:
zwroty:
Możesz tego spróbować na Simply scala . Skopiuj i wklej funkcję i użyj,
f(some integer)
aby zobaczyć wynik.źródło
""+
tejelse
skrzynki.Excel VBA, 31 bajtów
Anonimowa funkcja bezpośredniego okna VBE, która przenosi dane wejściowe z komórki
[A1]
i dane wyjściowe do bezpośredniego okna VBEźródło
JavaScript (Node.js) , 50 bajtów
Wypróbuj online!
Widząc, że wiele osób zaczęło na nie odpowiadać, ja również odpowiedziałem.
Uwaga :
Jest to w zasadzie zdzierstwo odpowiedzi @ kevinCruijssen w Javie skróconej dzięki temu, że jest JS.
źródło
PHP, 30 bajtów
Uruchom jako potok z `-nr 'lub wypróbuj online .
źródło
Z
tym[
raczej by poszłoAA
.VBA / VB6 / VBScript (inny niż Excel), 73 bajty
Dzwonienie
s(16383)
powróciXFC
.źródło
i>675
-s(676)=A@@
(oczekiwanyYZ
),s(677)=A@A
(oczekiwanyZA
)JavaScript, 147 bajtów
Miałem podobny problem. To jest golf rozwiązania. Kolumny Excel są bijective base-26 .
Rozszerzone, z wyjątkiem użycia 1-wskaźników:
źródło
Java, 57 bajtów (rekurencyjne)
Wypróbuj online.
Wyjaśnienie:
Java 10, 62 bajty (iteracyjne)
Wypróbuj online.
Wyjaśnienie:
źródło
Dalej (gforth) , 59 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
R , 65 bajtów
Odpowiedź rekurencyjna, tak jak wiele poprzednich odpowiedzi.
Wypróbuj online!
źródło
PowerShell, 68 bajtów
Alternatywna wersja rekurencyjna, 68 bajtów:
Skrypt testowy:
Wynik:
Uwaga: PowerShell nie udostępnia
div
operatora.źródło
Haskell, 48
Naprawdę myślałem, że uda mi się pokonać inne wejście do Haskell, ale niestety ...
Jestem pewien, że można zgolić kilka postaci, ale nie kodowałem w Haskell od prawie roku, więc jestem dość zardzewiały.
To nie jest dokładnie to, co nazwałbyś eleganckim.
źródło
string f(int n){return n<0?"":f(n/26-1)+(char)(n%26+65);}
57 znaków, więc prawie czułbym się źle, publikując go jako odpowiedź.Jq 1,5 , 71 bajtów
Oczekuje wkładu
N
. na przykładRozszerzony:
Wypróbuj online!
źródło
> <> , 29 bajtów
Wypróbuj online!
źródło
Ikona , 58 bajtów
Wypróbuj online!
źródło