Problem hidden
|This problem was hidden by Editorial Board member probably because it has incorrect language|version or invalid test data, or description of the problem is not clear.|

WIPING53 - Interpreter

Zadanie eliminacyjne w konkursie WIPING5 organizowanym przez
Wydział Informatyki Zachodniopomorskiego Uniwersytetu Technologicznego w Szczecinie

Interpreter

Twoim zadaniem jest napisanie interpretera języka WIPING, który – jak się spodziewamy – już niebawem dotrze na szczyty rankingu TIOBE.

 

Język opiera się na zbiorze funkcji wbudowanych, a każda linia programu zawiera jedno wyrażenie języka. Język nie zna pojęcia zmiennej – zamiast tego używa predefiniowanej jednowymiarowej tablicy o nazwie Ints, której rozmiar trzeba ustalić własnoręcznie. Elementy w tablicy indeksowane są od zera, a składnia indeksowania jest identyczna z używaną w języku „C”. Nieznane są również operatory arytmetyczne – zamiast nich używa się dedykowanych funkcji. Język jest „case-sensitive” - wielkość liter ma znaczenie. Interpreter wykonuje program linia po liniii – nie rozpocznie analizy linii następnej, jeśli nie zakończył wykonania linii poprzedniej. Niewykorzystany wynik funkcji jest tracony.

 

Oto zbiór funkcji dostępnych w języku WIPING:

  • SetIntBuffer(n, val) – tworzy tablicę o rozmiarze n, wypełnioną wartościami val (tylko jedna instancja tablicy może istnieć w danej chwili; ponowne wywołanie funkcji spowoduje utratę poprzedniej instancji); funkcja zwraca długość utworzonej tablicy.
  • SetIntBuffer(n) - tworzy tablicę o rozmiarze n, wypełnioną wartościami 0 (tylko jedna instancja tablicy może istnieć w danej chwili; ponowne wywołanie polecenia spowoduje utratę poprzedniej instancji); zwraca długość utworzonej tablicy.
  • Print(val) – wypisuje na stdout wartość argumentu wraz ze znakiem nowej linii.
  • Sum(val1, val2) – dodaje dwie liczby i zwraca ich sumę.
  • Mul(val1, val2) – mnoży dwie liczby i zwraca ich sumę.
  • Increase(dest, val) – dodaje wartość val do dest i zwraca nową wartość dest.
  • Assign(dest, val) – zapisuje podaną wartość val w miejscu dest; zwraca zapisaną wartość.

Jako argument val można użyć stałej, odwołania do elementu tablicy Ints lub wywołania funkcji, a jako argument dest można użyć wyłącznie odwołania do elementu tablicy Ints.

Interpreter zatrzymuje się natychmiast po wykryciu jednego z następujących błędów:

  • odwołania się do nieistniejącego elementu tablicy Ints – w takim przypadku interpreter wyprowadza na stdout komunikat o treści:
    Index out of range
    i kończy pracę

  • użycia stałej zamiast odwołania do elementu tablicy – w takim przypadku interpreter wyprowadza na stdout komunikat o treści:
    Passed argument is const value where array reference is expected
    i kończy pracę

  • błędu składni (nieznana funkcja, niepoprawne stałe oraz wszelkie inne usterki, o których nie wspomniano wcześniej) – w takim przypadku interpreter wyprowadza na stdout komunikat o treści:
    Syntax error
    i kończy pracę

Wejś›cie

  • nieznana z góry, niezerowa liczba wierszy, zawierających program w języku WIPING 

Wyjś›cie

  • wynik działania interpretera

Przykł‚ad

Wejś›cie: 

SetIntBuffer(5, 10)
SetIntBuffer(3, 5)
Increase(Ints[0], 5)
Print(Ints[0])
Print(Sum(Ints[0], Ints[2]))
Print(Increase(Ints[2], 7))
Increase(Ints[3], 7)

Wyjście:

10
15
12
Index out of range

Informacje dodatkowe

  • program zostanie uruchomiony 10 razy dla różnych zestawów danych

  • każde poprawne rozwią…zanie daje 10% punktacji zadania

  • zadanie ma wartość‡ punktową… 5,0

Dodane przez:Sławomir Wernikowski
Data dodania:2016-11-10
Limit czasu wykonania programu:1s
Limit długości kodu źródłowego15000B
Limit pamięci:1536MB
Cluster: Cube (Intel G860)
Języki programowania:C-CLANG C CSHARP C++ 4.3.2 CPP CPP14 CPP14-CLANG C99 JAVA OBJC PAS-GPC PAS-FPC PERL PERL6 PHP PYTHON PYPY PYTHON3 PY_NBC RUBY
© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.