Dlaczego w filmie Marsjanin Mark używa szesnastkowego do komunikacji z NASA? Czy cyfry od 0 do 9 nie wystarczyłyby do wskazania liczby odpowiadającej alfabetowi?
Dlaczego w filmie Marsjanin Mark używa szesnastkowego do komunikacji z NASA? Czy cyfry od 0 do 9 nie wystarczyłyby do wskazania liczby odpowiadającej alfabetowi?
Marek wybiera system szesnastkowy przede wszystkim dlatego, że jego własna umiejętność ustalenia, na co wskazuje wskaźnik kamery, nie jest wystarczająco precyzyjna. Jeśli ma wszystkie 26 liter (plus kartę pytania i spację), istnieje rozsądna szansa, że będzie miał trudności z ustaleniem, którą literę oznaczają. Dodaj liczby od 0 do 9 i będzie jeszcze gorzej. Co więcej, jeśli obrót zostanie wyłączony nawet o kilka stopni, komunikacja z jakąkolwiek prędkością będzie prawie niemożliwa.
Dla porównania, karty szesnastkowe (plus jedna dodatkowa karta, aby wskazać pytanie) wymaga tylko 17 kart, znacznie łatwiejszej do opanowania liczby:
Będziemy musieli rozmawiać co pół godziny szybciej niż pytania tak / nie. Kamera może obracać się o 360 stopni, a części anteny mam mnóstwo. Czas zrobić alfabet. Ale nie mogę po prostu użyć liter od A do Z. Dwadzieścia sześć liter plus moja karta z pytaniami to dwadzieścia siedem kart dookoła lądownika. Każdy uzyskałby tylko 13 stopni łuku. Nawet jeśli JPL perfekcyjnie skieruje aparat, jest duża szansa, że nie będę wiedział, o którą literę chodziło.
Będę musiał użyć ASCII. W ten sposób komputery zarządzają postaciami. Każdy znak ma kod numeryczny od 0 do 255. Wartości od 0 do 255 można wyrazić jako 2 cyfry szesnastkowe. Dając mi pary cyfr szesnastkowych, mogą wysłać dowolny znak, w tym cyfry, znaki interpunkcyjne itp.
...
Więc ja ' Zrobię karty od 0 do 9 i od A do F. To daje 16 kart do umieszczenia wokół kamery oraz kartę pytań. Siedemnaście kart oznacza ponad 21 stopni każda. O wiele łatwiejszy w obsłudze. Martian: Andy Weir
Oczywiście w filmie wskaźnik wydaje się bardziej skuteczny w obracaniu i zatrzymywaniu się (co unieważnia jego rozumowanie), ale to dla ciebie Hollywood.
Oto główne powody, dla których przychodzi mi do głowy preferowanie szesnastkowego zamiast (dość arbitralnego) odwzorowania dziesiętnego nad alfabetycznym:
Szesnastkowe i ASCII powinny być czymś, co naukowcy z NASA są zaznajomieni, więc po przedstawieniu 16 kart - 0-9 i AF - intencja jest od razu oczywista: „Chcę komunikować się szesnastkowo”.
Nie ma dwuznaczności. Odwzorowanie 10 cyfr dziesiętnego systemu liczbowego na literę alfabetu zadziała, pod warunkiem, że będziesz chciał używać tylko liter alfabetu. Możliwość korzystania z rzeczywistych liczb prawdopodobnie przydałaby się w rozmowie między NASA a astronautą osiadłym na Marsie. Szesnastkowy oznacza, że każda litera alfabetu, każda cyfra oraz wiele znaków interpunkcyjnych i innych symboli może być jednoznacznie reprezentowane przez liczbę dwucyfrową.
Szesnastkowy to właściwie szybciej się komunikować. Jeśli musisz użyć „spacji” między każdą literą, to patrzysz na dwa ruchy kamery dla pierwszych 9 (lub 10, jeśli zamapujesz A na 0) liter alfabetu i trzy ruchy do końca. Szesnastkowy to dwa ruchy kamery na znak.
Nie jest informatykiem. Wymyślenie nowego sposobu przesyłania całego tekstu, który chcesz, nie będzie banalne.
Mógł stworzyć tabelę zawierającą 100 wpisów (z wartościami od 00 do 99) i każdemu przypisać znak. Ale wtedy musiałby przekazać tabelę z powrotem do siedziby NASA, i i tak potrzebowałaby takiej samej liczby wiadomości, aby przesłać postać! (2 wiadomości na znak).
Zwykłe wysłanie 01-26 w celu zakodowania liter nie jest dobre: zakodowanie liczb wymagałoby ich przeliterowania! Gorzej, jeśli muszą się komunikować ?
lub !
lub .
lub ,
lub # kod> itd. (mało prawdopodobne, ale możliwe)
ASCII będzie dobrze znane obu stronom. Nie ma potrzeby przesyłania tabeli. Zawiera podstawowy zestaw znaków, który pozwoli ci przekazać większość informacji technicznych (w tym programowanie) między jedną stroną a drugą. Na Ziemi będą mogli wpisać wiadomość w edytorze tekstu i transkodować ją do ASCII, po prostu patrząc na nieprzetworzone bajty wiadomości, i nie będą musieli do tego pisać niestandardowego oprogramowania, co sprawia, że problem jest łatwy i niezawodny po ich zakończeniu.
Krótko mówiąc, istniał już dobrze znany sposób komunikowania się przy użyciu 2 kawałków na znak. Ponowne wynalezienie nowego protokołu będzie podatne na błędy i trudniejsze. Gdy 1/17 łuku była wystarczająco duża, aby łatwo ją rozróżnić, nie ma większych korzyści z obniżenia precyzji, przynajmniej na początku.
Jak wspomniano, przejście do 26 lub 36 lub więcej napotyka problemy z precyzją (26 liter + 10 cyfr + spacja + 3 symbole = 40 lub 9 stopni łuku na znak). Zatem przesyłanie 1 litery na ruch kamery nie było praktyczne. Wykonanie 2 znaków na 3 ruchy kamery byłoby prawdopodobnie wykonalne, ale napotyka na problem „przeprojektowania” i problemy z komunikacją protokołu.
W międzyczasie wysłanie „Użyj ASCII” i znaków 0-9 A-F i a? rozwiązał problem.
Podejrzewam, że po części jest to spowodowane tym, że wygląda bardziej technicznie i imponująco.
Teoretycznie, szesnastkowy powinien zapewniać znacznie większą przepustowość - na każde dwie pozycje kamery można przesłać 1 pełny bajt, zawierający 255 możliwych znaków. Natomiast podejście dziesiętne dopuszczałoby tylko 99 znaków. Jednak nic (co mogę sobie przypomnieć) nie wskazuje na to, że dodatkowa przepustowość była konieczna lub nawet używana.
Prostszy system dziesiętny może z łatwością zawierać 26 wielkich liter, 26 małych liter, cyfry i powiązane znaki interpunkcyjne znaki.
Podejście szesnastkowe opiera się na tablicy ASCII - która zwykle ma tylko 7 bitów; tylko 4 wartości (z pełnych 16) pierwszej cyfry są używane jako drukowane litery, jeśli wykluczone są małe litery.
Tam, gdzie dodatkowe pasmo byłoby przydatne, byłoby zdefiniowanie tabeli większości -używane słowa. Mark mógł z łatwością napisać listę popularnych słów i wyświetlić je do kamery. Mogliby znacznie zwiększyć szybkość komunikacji, ponieważ mieliby do wykorzystania słownik 12x16 = 192 słów. Xkcd ( https://xkcd.com/1133/) pokazał nam, że pełna komunikacja jest możliwa przy użyciu zaledwie 1000 słów (10 bitów). Posiadanie 192 szybkich słów z pełną pisownią słów, których nie ma na liście, znacznie ułatwiłoby komunikację. Nie wydaje się też nierozsądne, aby Mark to rozgrywał i przekazywał to Ziemi. Nawet kilka słów by pomogło.
Gdyby miał więcej papieru i trochę cierpliwości, jeszcze lepszym podejściem byłoby użycie 3-cyfrowych kodów szesnastkowych - dałoby mu to 4000 słów plus alfabet.
Jeszcze lepiej byłoby przyjąć proste kodowanie Huffmana - tj. używać krótszych kodów dla częstych symboli. Potrafił umieścić najczęściej używane słowa / litery w pierwszej cyfrze, wraz ze specjalnymi kodami dla słów dwu- lub trzycyfrowych. Dałoby to różną długość wiadomości, ale nadal byłoby bardzo możliwe do ręcznego odkodowania.
Jednak najlepszym podejściem byłoby użycie komputera do opracowania optymalnie skompresowanego zestawu danych, a następnie przesłanie go przy użyciu pełnego zakresu 8 bitów. Wymagałoby to nieco skomplikowanego programowania, które prawdopodobnie by go przerosło - nie byłoby efektywne użycie standardowych bibliotek kompresji, ponieważ lepsze byłoby podejście ze stałym słownikiem. W ten sposób mógłby zbliżyć się do teoretycznego limitu 1 bitu na znak lub 4 znaków na każde ustawienie kamery.
Ale prawdopodobnie nie byłoby to tak dramatyczne dla czytelników / widzów.
(Lubię fragmenty kilku innych odpowiedzi i komentarzy, ale wszystkie mają swoje problemy, więc oto proszę ...)
"tl; dr"? Tylko pogrubienie dla zwięzłej wersji.
Uwaga , niektóre odpowiedzi lub komentarze dotyczą tego, „dlaczego nie mają odpowiadać bezpośrednio każdej pozycji wskaźnika do symbolu, a nie do kodu ”. Nowy cytat (poniżej i tak jak w odpowiedzi Richarda) wyjaśnia to, ale pytanie brzmiało po prostu „dlaczego nie używać cyfr od 0 do 9”, tj. Dziesiętnych zamiast szesnastkowych . Zacznę więc od ASCII. W przypisie końcowym powiem trochę o bardziej efektywnych schematach „wskazywania liczby odpowiadającej alfabetowi”, aby zacytować pytającego, ponieważ myślę, że miał na myśli kod, ale prawdopodobnie nie ASCII. (I może nie jest tak jasne w filmie, jak w powieści, że to jest używany kod. Nie wiem, byłem trochę wstawiony, kiedy go oglądałem. )
Najpierw odpowiedz na drugą część: po prostu „tak”, wysłanie kodów w postaci cyfr od 0 do 9 jest całkowicie wystarczające. W powieści cytat (dzięki Richardowi), który wyjaśnia, dlaczego używać ograniczonej liczby symboli, brzmi:
„Dwadzieścia sześć liter plus moja karta pytań to dwadzieścia siedem kart wokół lądownika. Każdy z nich uzyskałby tylko 13 stopni łuku. Nawet jeśli JPL celuje idealnie w kamerę, jest duża szansa, że nie będę wiedział, o którą literę chodzi. : Od 0 do 9 oznacza mniej kart, więc też dobrze.
Tym, którzy nie mają skłonności matematycznych, może się wydawać, że jest coś specjalnego w szesnastkowym ( gdzie cyfry A - F reprezentują 10-15, a pozycja cyfry wskazuje potęgę (wykładnik) 16 zamiast 10) w stosunku do ASCII, jak w tym innym cytacie:
„Muszę więc używać ASCII *. W ten sposób komputery zarządzają znakami. Każdy znak ma kod numeryczny z zakresu od 0 do 255 **. Wartości od 0 do 255 można wyrazić jako 2 cyfry szesnastkowe. ”
Ale nie : ASCII to tylko tabela, która„ odwzorowuje ” liczbę na symbol, więc ta liczba może być równie łatwo bardziej znaną liczbą dziesiętną z cyframi od 0 do 9.
Pierwsza część - „dlaczego szesnastkowo?” - nie ma odpowiedzi, przynajmniej w filmie. Prawdopodobnie najlepszą odpowiedzią jest odpowiedź spoza wszechświata: wydaje się, że to nerdowska nauka, a ten film kocha swoich nerdowskich naukowców. b> Hej, zadziałało dla Rona Howarda i Toma Hanksa.
Zasadniczo jest bardziej wydajne - mniej ruchów wskaźnika - mieć 16 „cyfr” (wskaźnik Pozycje) niż 10. Rzeczywiście, im więcej, tym lepiej, dopóki nie stanie się zbyt wiele naszych ulubionych Marsjan, aby je rozróżnić. - okoliczności bohatera robotów. Jednak @Ghanima i @Peter Davidson są najbardziej trafni zauważając, że używając ASCII, tak jak w The Marsian, możliwa efektywność posiadania 16 na 10 cyfr na ruch wskaźnika jest w większości zmarnowana. Aby wyjaśnić, jak niewielką różnicę ma to w rzeczywistym przypadku: W ASCII liczby reprezentujące każdą z „spacji”, 0 - 9, A - Z (ale nie az) i symbole oprócz {|} ~ są mniej niż 99, więc jeśli nie masz nic przeciwko Byciu krzykliwym kutasem dla swojego kumpla z Martianina, wysyłając SMS-y w ALLCAPS i możesz oprzeć się „przytulaniu” {{Matt Damon}} (Możesz? jest uroczy!) nie potrzebujesz więcej ruchów wskaźnika (2) na znak w systemie dziesiętnym niż szesnastkowym .
Przypisy końcowe:
* Hej Mark, nie, nie musisz używać ascii. Najwyraźniej możesz przekazać NASA każdą wymyśloną metodę, której chcesz, aby użyła. Na przykład (nadal używając szesnastkowego, jeśli myślisz numerycznie) jedna, w której każda z 15 najpopularniejszych liter jest reprezentowana tylko przez jedną „cyfrę” (jeden ruch wskaźnika), od 0 do F pomijając 1, a pozostałe 11 przez wartości od 10 do 1A. Wartość „1” jest pomijana, aby podczas wysyłania było jasne, że jest to pierwsza cyfra dwucyfrowej wartości kodu.
Podobnie jak ASCII jest to prosty schemat kodowania symboli, ale znaczna większość wysłanych listów potrwa o połowę krócej. Wysyłanie liczb ma mniejszy priorytet (nie było to wspomniane w powieściach ani w filmie, który myślę). Nawet w ascii punkt kodowy dla każdej cyfry jest liczbą dwucyfrową. Więc jeśli chcesz wysłać dużo cyfr, zamiast kodować je jak w ascii i / lub jednym z wcześniej opublikowanych komentarzy, możesz wysłać je jako „zwykłe liczby”. Jeśli kilka dodatkowych pozycji wskaźnika nie jest zbyt wiele, prostym sposobem jest dodanie takiej, która będzie oznaczać, że „następny krok to liczba”, a druga to „to, co jest następne, nie jest liczbą”. Sygnalizowanie tego bez tych dodatkowych pozycji (to znaczy używanie tylko wartości kodu, które mogą być danymi liczbowymi) jest pozostawione jako ćwiczenie dla czytelnika.
Inni wspominają o bardziej wymyślnych rzeczach, takich jak kodowanie Huffmana, ale hej, Mark jest po prostu najlepszym botanikiem na Marsie - może to zostawić matematycznym lub komputerowym maniakom w NASA.
** [odsuwa okulary kujona na grzbiecie nosa]: w rzeczywistości ASCII używa tylko 0 - 127, a nie 0 - 255.
Cóż, zakładając, że masz na myśli, dlaczego nie użyli po prostu kodu ASCII ułamków dziesiętnych zamiast szesnastkowego?
Technicznie mogliby mieć, mam na myśli, że 32 to znak spacji, 97 to litera „a”, 117 to „u” i tak dalej.
Technicznie rzecz biorąc, Mark mógł po prostu napisać na swojej tablicy „ASCII używając liczb dziesiętnych”, aby wysłać tę wiadomość jako obraz, a następnie użyć tylko 11 innych anten do reprezentowania wszystkich 10 cyfr od 0 do 9 i znaku zapytania.
To dałoby mu szerszy zakres dla każdej litery, ALE większość liter alfabetu w tabeli ASCII jest reprezentowana przez 3 cyfry (na podstawie 10), więc komunikacja trwałaby nieco dłużej.
To jedyny powód, dla którego myślę, że ma to dla mnie sens, czas, jaki zajęłoby im przesłanie każdej litery, zwiększyłby ogólny czas komunikacji.
Większość wykresów referencyjnych dla ASCII organizuje znaki w tabeli 16 kolumn i 16 wierszy (cóż, ściśle mówiąc tylko 8 wierszy; lub może tak jak ten historyczny przykład w 16 wierszy i 8 kolumn), dzięki czemu szczególnie łatwe jest dekodowanie / kodowanie od / do par cyfr szesnastkowych.
Jakkolwiek pokroisz, 17 kart daje mu 17 symboli, czy to liter, czy cyfr. Jedyną zaletą szesnastkowego jest to, że symbole od 10 do 16 są prawdopodobnie węższe w szesnastkowym (A - F). Jeśli liczy się odstęp między kartami, nie ma żadnej korzyści. Brzmi dobrze, ale to nonsens.