• 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 ...)

Object Storage Arubacloud
0 głosów
1,619 wizyt
pytanie zadane 5 listopada 2015 w JavaScript przez Janusz92 Bywalec (2,150 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,800 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,150 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,800 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,800 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,150 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 454 wizyt
pytanie zadane 21 sierpnia 2020 w SPOJ przez magda_19 Gaduła (3,080 p.)
+1 głos
2 odpowiedzi 4,116 wizyt
pytanie zadane 9 października 2018 w C i C++ przez lucelka Początkujący (260 p.)
0 głosów
1 odpowiedź 1,244 wizyt
pytanie zadane 17 sierpnia 2018 w C# przez MS Początkujący (430 p.)

92,552 zapytań

141,399 odpowiedzi

319,533 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...