• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Generowanie numeracji alfabetycznej (AA, AB, AC ...)

0 głosów
976 wizyt
pytanie zadane 5 listopada 2015 w JavaScript przez Janusz92 Bywalec (2,130 p.)
WItam, napisałem funkcję generującą numerację alfabetyczną, czyli zamiast 1, 2, 3 będzie A, B, C. Gdy alfabet osiągnie Z, to kolejnymi numerami będą AA, AB, AC itd.

Problem w tym, że nie wiem jak rozwinąć funkcję w taki spoób, aby po osiągnięciu indeksów wyższych niż (bodajże) 701 funcka zwracała kolejne alfabetyczne numeracje, np. AAA, AAB, AAC itd. Gdy wartość z kolei przekroczy 3 pozycje liter (ZZZ), to oczywiście zwróci AAAA, AAAB, AAAC itd. i tak do updałego :)

Tymczasem mam funkcję skonstruowaną w taki sposób, że jest w stanie prawidłowo wygenerować numerację tylko do ZZ.

Kod: https://jsfiddle.net/zgnwp5dh/2/

Z góry dzięki.

1 odpowiedź

+1 głos
odpowiedź 5 listopada 2015 przez furas Maniak (53,820 p.)
wybrane 5 listopada 2015 przez Janusz92
 
Najlepsza
Można to opisać za pomoca trzech punktów

1. Jeśli liczba jest równa zero to koniec zamieniania

2. Liczbę podziel przez 26 i resztę z dzielenia zamień na literę.

3. Część całkowitą z dzielenia potraktuj jak nową liczbę czyli wróć do punktu 1

---

To jest taki sam algorytm jak zamiana liczby dziesiętnej na zapis dwójkowy lub szesnastowy - tylko wynik zamiast cyfr i liter używa samych liter.

---

EDIT: poniższe zamienia liczby na zapis literowy dowolnej dlugości ale zaczyna to od liczby 1.

https://jsfiddle.net/zgnwp5dh/3/

Jest to zrobione rekurencyjnie ale da się to przerobić na `for` lub `while`
komentarz 5 listopada 2015 przez Janusz92 Bywalec (2,130 p.)
Super działa, dzięki.

Btw, to normalne że wygenerowanie 20 000 pozycji dla tej funkcji trwa po kilka minut?
komentarz 5 listopada 2015 przez furas Maniak (53,820 p.)
Na prędkość może wpływać kilka rzeczy

1. funkcja wykorzystuje rekurencję a rekurencja potrzebuje wywołania funkcji co zajmuje odrobinę czasu. Wykorzytanie pętli `for` lub `while` mogło by to zmienić.

2. funkcja jest uniwersalna - zamienia na tekst dowolnie podaną liczbę - więc dla każdej liczby wykonuje działania od początku. Gdyby była ona bardziej wyspecjalizowana np. generował od razu wyniki dla kilku kolejnych liczb to może mogła by stosować inną metode niż dzielenie. Przykładowo dla liczb od 1 do 26 nie trzeba wcale dzielić tylko wystarczy zwrócić llistę/tablice zawierającą kolejne litery, które mozna pobrać z `alphabet` za pomocą `for` bez potrzeby dzielenia..
komentarz 5 listopada 2015 przez furas Maniak (53,820 p.)
Sklejanie tekstów też zajmuje odrobinę czasu - może dało by się to inaczej robić niż przez wielokrotne dodawanie tekstów do siebie.

Wielokrotne pobieranie elementy HTML aby dokleić kawałek tekstu i ponownie go wstawić do HTML to też wymaga czasu. Może lepiej było by najpierw skleić cały tekst a dopiero potem go wstawić do HTML.
komentarz 5 listopada 2015 przez Janusz92 Bywalec (2,130 p.)
Pewnie masz rację :)

Po podstawieniu nowej funkcji do reszty mojego kodu działa to o wiele, wiele sprawniej. Ale zbędne moje gadanie, bo wtedy bym musiał pokazać resztę kodu.

Pewności nie mam, ale wygląda na to, że właśnie konkatenacja miała spory wpływ na czas wykonania, gdyż w moim kodzie łączę wygenerowane literki dopiero po przypisaniu ich do zmiennej. Rekurencji nie zmieniałem.

W każdym razie jest okej.

Szcerze mówiąc okoliczności w jakich ta funkcja będzie działać nie przewidują generowania większej ilości pozycji niż 30 - 40, lecz chciałem aby stała się ona bardziej uniwersalna.

Podobne pytania

0 głosów
0 odpowiedzi 327 wizyt
pytanie zadane 21 sierpnia 2020 w SPOJ przez magda_19 Gaduła (3,010 p.)
+1 głos
2 odpowiedzi 3,029 wizyt
pytanie zadane 9 października 2018 w C i C++ przez lucelka Początkujący (260 p.)
0 głosów
1 odpowiedź 789 wizyt
pytanie zadane 17 sierpnia 2018 w C# przez MS Początkujący (430 p.)

89,693 zapytań

138,297 odpowiedzi

309,243 komentarzy

59,623 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...