Tablica Polibiusza jest kwadratową tabelą zawierającą litery alfabetu łacińskiego. Kolumny numerujemy od 0 do 4, a wiersze od 1 do 5. Kodujemy słowo, zastępując każdą literę sumą numerów wiersza i kolumny, w których stoi. Na przykład litera s zostanie zastąpiona liczbą 6.
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
1 | a | b | c | d | e |
2 | f | g | h | i/j | k |
3 | l | m | n | o | p |
4 | q | r | s | t | u |
5 | v | w | x | y | z |
Napisz jednoparametrową procedurę/funkcję koduj, której parametrem jest słowo składające się z co najmniej 2 i co najwyżej 18 małych liter alfabetu łacińskiego. Po jej wywołaniu na środku ekranu powstaje rysunek zakodowanego słowa. Każdą literę słowa zastępujemy liczbą, według zasady podanej powyżej, a następnie rysujemy zawijas stopnia takiego, jak liczba odpowiadająca zakodowanej literze. Pierwszy odcinek zawijasa jest poziomą kreską. Każdy kolejny odcinek zawijasa jest o 4 krótszy od poprzedniego. Odległości między kolejnymi zawijasami są równe 1/5 długości najdłuższego odcinka. Szerokość rysunku wynosi 780.
Rozwiązywanie zadania warto rozpocząć od napisania procedury do rysowania pojedynczej spirali. Będzie ona przyjmować dwa argumenty: długość najdłuższego boku :a oraz ile odcinków ma zostać narysowanych :st.
Rozwiązywanie zadania warto rozpocząć od napisania procedury do rysowania pojedynczej spirali. Będzie ona przyjmować dwa argumenty: długość najdłuższego boku :a oraz ile odcinków ma zostać narysowanych :st.
Teraz można przejść do napisania głównej funkcji koduj. Na początku wyznaczamy odpowiednie rozmiary i przesuwamy się do lewego, dolnego rogu, gdzie rozpoczynamy całe rysowanie.
W pętli spirala jest rysowana dla każdego znaku. W celu uzyskania wartości dla wczytanego znaku należy pobrać znak i przeliczyć go na kod ASCII. Następnie sprawdzamy czy litera jest powyżej literki i. Jeśli tak to zmniejszamy wartość o 1. Dzięki temu litery I j J będą miały tą samą pozycję. Następnie numer kolumny to reszta dzielenia pozycji znaku w alfabecie podzielona przez 5, a wiersza to pozycja minus poprzednio wyliczona reszta i podzielona przez 5. Dodanie jedynki rekompensuje indeksowanie wierszy od 1. Po każdym narysowaniu pętli wracamy do pozycji z której rozpoczęliśmy rysowanie, kierujemy się w prawo i kontynuujemy rysowania przesuwając się do przodu.
W Turtlandii przygotowują neon do zawieszenia na dwóch słupach. Słupy stoją w rzędzie, odległość pomiędzy dwoma sąsiednimi wynosi 2. Dział marketingu uzależnia wybór słupów od oceny zdefiniowanej jako suma ich wysokości i odległości między nimi.
Napisz jednoparametrową funkcję neon, której wynikiem jest najwyższa możliwa ocena. Parametr jest listą wysokości kolejnych słupów (ma co najmniej 2 elementy, co najwyżej 500). Wysokość każdego słupa wynosi od 1 do 10 000.
neon [10 4 5 7 1 4 1] | 24 |
---|---|
neon [1 10 1] | 13 |
Rozwiązanie zadania polega na policzeniu sumy dla każdej pary wartości i znalezienie maksimum pośród nich. Oto przykładowa implementacja funkcji neon:
W celu wybrania wszystkich par przechodzimy po kolejnych elementach i dla każdego parujemy z każdym elementem następującym po nim. W ten sposób uzyskujemy dwie pozycje elementów :x oraz :y. Dla takiej pary liczymy sumę, a następnie sprawdzamy czy nie jest to nowe maksimum.
Adam ma papierową torebkę. Wrzuca do niej cukierki, a następnie częstuje nimi znajomych. Cukierki są wrzucane i wyciągane pojedynczo. Postępuje tak wielokrotnie: wrzuca i częstuje. Adam zastanawia się, ile razy w torebce było dokładnie n cukierków.
Napisz dwuparametrową funkcję ilerazy, której pierwszym parametrem jest n (od 1 do 10 000). Drugim parametrem funkcji jest parzystej długości lista dodatnich liczb całkowitych, zawierająca na przemian liczby wrzucanych i wyjmowanych cukierków. Na przykład lista zawierająca 4, 1, 3 i 2 oznacza, że kolejno do torebki zostały wrzucone cztery cukierki, wyjęty jeden, wrzucone trzy i wyjęte dwa. Długośćlisty wynosi od 2 do 1 000. Wynikiem funkcji jest liczba określająca, ile razy w torebce było dokładnie n cukierków.
ilerazy 2 [3 2] | 2 | kolejno w koszyku: 0, 1, 2, 3, 4, 5, 4, 3, 2, 3, 4, 5 |
---|---|---|
ilerazy 4 [5 3 5 3 2 1] | 4 | kolejno w koszyku: 0, 1, 2, 3, 4, 5, 4, 3, 2, 3, 4, 5, 6, 7, 6, 5, 4, 5, 6, 5 |
W zadaniu najwygodniej jest użyć podwójnej pętli: jedna przechodzi po kolejnych wartościach z listy, a druga odpowiednio zwiększa i zmniejsza wartość.
Na początku deklarowane są następujące zmienne :teraz - ile jest aktualnie cukierków w koszyku, zm - będzie określać czy dokładamy do koszyczka czy wyjmujemy oraz :ile - ile razy w koszyczku było :n elementów. Dla każdego elementu wykonujemy pętle, która tyle razy zmienia zawartość koszyka jaki element przeglądamy. Po każdej zmianie sprawdzamy czy w koszyku jest poszukiwana ilość. Po zakończeniu pętli wewnętrznej zmieniamy dokładanie na wyjmowanie (lub odwrotnie) poprzez zmianę wartości zmiany :zm na przeciwną (czyli mnożymy przez -1).