Programming contests

50 Programming Exercise for Beginners

January 2, 2019 12:00 AM – December 31, 2019 12:00 AM

Drone Images

Many hikers are walking in the hiking trails of Hungary even in rainy weather. In this case, we can spot two things in an image of the pathway created by a drone: people and puddles. Given the current situation of the hikers and knowing that all hikers want to keep clear of the puddles, it is easy to determine the position of the hikers in the moment after the next step.

Hikers go from left to right on the pathways, and in the moment after the next step, they all move to the next place where there is no puddle. Thus, there will be hikers who take only a small step to the next adjacent section of the pathway, but there will be some who have to jump to the section of the pathway that follows the puddles in front of them.

Consider the following header file:

myheader.h

  1. #ifndef _MYHEADER_H
  2. #define _MYHEADER_H 1
  3. void foo(const char *, char *);
  4. #endif /* myheader.h */
download as text file

Write the function foo() declared in myheader.h that takes the address of two strings as parameters. The first string describes a pathway, in which an asterisk character ('*') denotes a hiker, an at sign ('@') denotes a puddle, and an equal sign ('=') indicates a free passage of the pathway.

The foo() function should compute the position of the hikers in the next moment and store it in a string of the same format as the input. You may assume that no one in the starting position has reached the goal of the tour, nor has the target flag been set in a puddle, so there will be at least one free passage in front of each participant.

Note

Place the function in file foo.c and submit this file as a solution to the evaluation system. You can test your solution using the following files. The evaluation system does not necessarily perform the evaluation using these files.

main.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include "myheader.h"
  5. int main()
  6. {
  7.     char source[100], destination[100];
  8.     while (fgets(source, 100, stdin) != NULL)
  9.     {
  10.         if (source[strlen(source) - 1] == '\n')
  11.             source[strlen(source) - 1] = '\0';
  12.         foo(source, destination);
  13.         printf("%s\n", destination);
  14.     }
  15.     return EXIT_SUCCESS;
  16. }
download as text file

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)
download as text file

Sample Input

  1. ==*====*====
  2. ===@===
  3. **@@@==*@@=*@*=
  4. *=*=*=*=*=*=
  5. ==*@===*=*@=
download as text file

Output for Sample Input

  1. ===*====*===
  2. ===@===
  3. =*@@@*==@@*=@**
  4. =*=*=*=*=*=*
  5. ===@*===*=@*
download as text file

One possible solution is available in: main.c.

Acknowledgement This work was supported by the construction EFOP-3.4.3-16-2016-00021. The project was supported by the European Union, co-financed by the European Social Fund.
University of Debrecen; Faculty of Informatics; v. 03/01/2019