Skip to content

Programowanie dla GC #4 - systemy liczbowe Mystery Cache

This cache is temporarily unavailable.

kranfagel: Kesz zaginął.

More
Hidden : 12/20/2022
Difficulty:
2.5 out of 5
Terrain:
1.5 out of 5

Size: Size:   micro (micro)

Join now to view geocache location details. It's free!

Watch

How Geocaching Works

Please note Use of geocaching.com services is subject to the terms and conditions in our disclaimer.

Geocache Description:


Temat keszerom pewnie dobrze znany. Istnieją różne bazy zapisu liczb i żeby poznać ich prawdziwą wartość, należy tę bazę znać. Najbardziej naturalny dla nas jest zapis liczb dziesiętnych, tj. takich, że bazą jest właśnie liczba dziesięć.

Powyższe, przeczytamy jako:

  • liczba jeden zero z bazą dziesięć (lub: w systemie dziesiętnym) jest równa jeden razy dziesięć do potęgi pierwszej dodać zero razy dziesięć do potęgi zerowej
  • liczba jeden zero trzy z bazą dziesięć jest równa jeden razy dziesięć do potęgi drugiej dodać zero razy dziesięć do potęgi pierwszej dodać trzy razy dziesięć do potęgi zerowej

Zapis dowolnej liczby możemy więc przekształcić na jej wartość mnożąc jej kolejne cyfry przez bazę podniesioną do potęgi malejącej z każdej kolejną cyfrą tak, by ostatni składnik podnieść do potęgi zerowej.

System dziesiętny, którego wszyscy uczymy się od najmłodszych lat, jest dla nas tak naturalny, że nie zastanawiamy się nawet dlaczego taki zapis cyfr w liczbie oznacza taką wartość (21 dla nas to nie jest dwa jeden w systemie dziesiętnym ale po prostu: dwadzieścia jeden).

Problem pojawia się, gdy liczby zaczynają być zapisane z inną bazą, tj. w innym systemie liczbowym. A nierzadko zdarza się, że właśnie w keszozagadkach umiejętność przeliczenia tych systemów jest potrzebna.

Liczba jeden jeden z bazą dwa (w systemie dwójkowym, binarnym) jest równa jeden razy dwa do potęgi pierwszej dodać jeden razy dwa do potęgi zerowej, co jest równe liczbie trzy w sytemie dziesiętnym.

Liczba jeden jeden z bazą osiem (w systemie ósemkowym, oktalnym) jest równa jeden razy osiem do potęgi pierwszej dodać jeden razy osiem do potęgi zerowej, co jest równe liczbie dziewięć w sytemie dziesiętnym.

Z powyższego opisu można więc wyciągnąć wniosek, że można zapisywać liczby z bazami: 2, 3, 4, 5, 6, 7, 8, 9, 10. Teoretycznie możemy nawet zapisać liczbę z bazą równą jeden, ale wtedy po prostu liczba cyfr będzie oznaczać wartość - np. 11111 będzie równe wartości 5 (każdy z nas tak kiedyś liczył - "na palcach" :-) ).

Czy możliwe jest zapisanie liczby z bazą większą niż 10? Oczywiście - tak, ale potrzebujemy wtedy więcej cyfr do jej zapisu, aby odróżnić je wartością od innych. Innymi słowy - potrzebujemy cyfrę o wartości dziesięćcyfrę o wartości jedenaście itd. W naturalnym systemie dziesiętnym wymyślono tylko dziesięć cyfr - bo tyle jest "na co dzień" potrzebne. Można jednak do zapisu liczb wykorzystać także litery, i tak - jeśli do naszych dziesięciu cyfr 0,1,2,3,4,5,6,7,8,9 dodamy także litery, np. A,B,C,D,E,F - okaże się, że tak naprawdę mamy do dyspozycji szesnaście różnych znaków, które mogą być potraktowane jak cyfry. Zgodnie z alfabetem, przyjmuje się wtedy, ze wartość liczbowa cyfry A to dziesięć, B - jedenaście itd. W ten sposób powstaje system szesnastkowy, inaczej - heksadecymalny.

Myślę, że już dasz radę to sam/sama przeczytać. Liczba be osiem ef z bazą szesznaście to...

Możemy w ten sposób opracować dowolny system liczbowy, jeśli opracujemy wystarczającą liczbę cyfr, którym przypiszemy odpowiednie wartości. W praktyce najbardziej znane są te systemy, które zaprezentowałem w listingu (binarny, oktalny, dziesiętny i heksadecymalny). Technicznie w językach programowania zazwyczaj bez nadmiernej pracy z naszej strony wspierane są wszystkie systemy, które możemy zbudować z liter i cyfr. To nam daje: 10 cyfr i 26 liter, czyli maksymalnie - liczby z bazą trzydzieści sześć.

Przecież nie będziemy tego liczyć na piechotę! Oczywiście, w sieci jest sporo przeliczników wszelkich możliwych systemów liczbowych, ale my przecież znamy już JavaScript.

Funkcja parseInt w konsoli JavaScript pozwala na przeliczenie dowolnej liczby z bazą od 2 do 36 na liczbę zapisaną w systemie dziesiętnym. A przecież właśnie w tym systemie zapisujemy współrzędne keszy, prawda? Zdecydowana większość zagadek opiera się właśnie na odnalezieniu wartości dziesiętnej liczby.

Jak przekształcać liczby w drugą stronę, czyli jak z liczby w systemie dziesiętnym uzyskiwać liczbę zapisaną w innym systemie?

Do zapisu liczby dziesiętnej w dowolnym wspieranym systemie służy funkcja toString, używana nieco inaczej niż funkcje poznane do tej pory. Tak jak na obrazku - liczba dziesiętna w nawiasie, potem .toString, i w kolejnym nawiasie podajesz pożądaną nową bazę dla liczby.

Popróbuj, pobaw się, a jak już będziesz mieć dość, to zapraszam po wpis do logbooka.

N FCCA
E EIHEH

Additional Hints (Decrypt)

qyn jvrjvóerx

Decryption Key

A|B|C|D|E|F|G|H|I|J|K|L|M
-------------------------
N|O|P|Q|R|S|T|U|V|W|X|Y|Z

(letter above equals below, and vice versa)