Programozó versenyek

Magas szintű programozási nyelvek 1, 2016. március 30., Sz16 ZH

2016. március 30. 16:05 – 2016. március 30. 17:45

Ha nincs otthon a macska, cincognak az egerek

Adott a következő fejlécállomány:

myheader.h

  1. #ifndef _MYHEADER_H
  2. #define _MYHEADER_H 1
  3. int foo(char *, int);
  4. #endif /* myheader.h */
letöltés szöveges állományként

Írja meg a myheader.h állományban deklarált foo() függvényt, amely paraméterként megkap egy sztringet, valamint egy n pozitív egész számot! A sztring egy egérlyukakkal teli szoba egy falát írja le, ahol 'O' (nagy O betű) egy egérlyukat jelöl, '>' egy jobb felé néző egeret, '<' egy bal felé néző egeret, a '.' (pont) karakter pedig a fal többi részét. A fal mindkét végében, a szoba sarkaiban található egy-egy egérlyuk.

Brit tudósok bebizonyították, hogy ha az egerek macskát szimatolnak a közelben, akkor ijedtükben abba az irányba kezdenek el szaladni, amerre éppen néznek. Az egerek mindegyike egységnyi utat tesz meg egy másodperc alatt, és amint elérnek egy egérlyukat, fürgén be is bújnak oda. Ha két egér szembetalálkozna egymással a fal mentén menekülés közben, akkor időveszteség nélkül ügyesen kikerülik egymást, és futnak tovább.

A függvény igaz értéket adjon vissza, ha egy n másodperc múlva érkező macska nem talál egyetlen egeret sem a fal mellett, és hamisat egyébként!

Megjegyzés

A függvényt helyezze a foo.c nevű állományba, és ezt az állományt küldje be megoldásként a kiértékelő rendszernek! Megoldását az alábbi állományok segítségével tesztelheti. Megoldásának kiértékelését a tesztelő rendszer nem feltétlenül ezeknek az állományoknak a felhasználásával végzi!

main.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "myheader.h"
  4. int main()
  5. {
  6.     char line[1000];
  7.     int n;
  8.     while (scanf("%s %d", line, &n) != EOF)
  9.         puts(foo(line, n) ? "YES" : "NO");
  10.     return EXIT_SUCCESS;
  11. }
letöltés szöveges állományként

Makefile

  1. SRCS = main.c foo.c
  2. OBJS = $(SRCS:%.c=%.o)
  3. TARGETS = main
  4. .PHONY: clean
  5. all: $(TARGETS)
  6. main: $(OBJS)
  7. $(CC) $(OBJS) -o main
  8. %.o: %.c
  9. $(CC) -Wall -c $< -o $@
  10. clean:
  11. rm -rf $(OBJS) *~ $(TARGETS)
letöltés szöveges állományként

Példa bemenet

  1. O..>.O...<..O 5
  2. O..>.<..O 3
  3. O..<.O 3
letöltés szöveges állományként

A példa tesztprogram kimenete

  1. YES
  2. NO
  3. YES
letöltés szöveges állományként
Debreceni Egyetem, Informatikai Kar, v. 2019.03.01.