﻿#include <stdio.h>
#include <stdlib.h>

// ----------------------------------------------------------------
// Autor: Sylwester Łuczak
//        sylwester.luczak@gmail.com
//        www.sylwester-luczak.pl
// ----------------------------------------------------------------
// O programie:
//		  Program wypisuje wyrazy o podanych numerach z każdego
//		  wiersza tekstu podanego na standardowym wejściu.
//		  Numery wyrazów do wypisania podajemy jako argumenty
//	      wywołania programu w postaci:
//		  	1) Konkretnych liczb:	1 2 7 9
//			2) Zakresów: 			7-10 1-89
//		  Przyjmujemy, że zakresy podane są poprawnie (7-10, a nie 10-7)

#define MAX 10000                                       /* Maksymalna liczba znaków w wierszu */
#define C 48                                            /* Stała, jaką trzeba odjąc, aby kod znaku liczby był tą liczbą */
#define W 100                                           /* Maksymalna liczba wyrazów w jednym wierszu */

int main(int argc, char *argv[])
{
    char linia[MAX], *n;
    int w[W] = {0};                                     /* Jeśli dany element ma wartość 0 to indeks tego elemntu jest numerem wyrazu,
                                                           który należy wypisać. Incjujemy z samymi zerami. */
    for(int i = 1; i < argc; i++)                       /* Odczytuje i zapisuje do tablicy w numery wyrazów, które należy wypisać */
    {
        int len = sizeof(argv[i])/sizeof(char);
        for(int z = 0; z < len; z++)
        {
            if(argv[i][z] == '-')                       /* Jeżeli w danym argumencie występuje myślnik */
            {
                int from, to = 0;
                sscanf(argv[i], "%d-%d", &from, &to);           /* Rodzielamy argument względem myślnika */
                for(int j = from; j <= to; j++)                 /* Zapisujemy wszystkie numery wyrazów z podanego przedziału */
                {
                    w[j] = 1;
                }
            }
            else
            {
                int num = 0;
                sscanf(argv[i], "%d", &num);
                w[num] = 1;
            }
        }
    }

    while((n = gets(linia)) != NULL)                    /* Pobiera linię dopóki nie napotka końca */
    {
        int WyrazObecny = 1, k = 0;
        while(linia[k] != '\0')                          /* Dopóki nie dojdzie do końca linii */
        {
            if(w[WyrazObecny])                          /* Jeżeli wyraz obecnie drukowany jest na liście wyrazów do wypisania */
            {
                printf("%c", linia[k]);
            }
            if((int)linia[k] <= 32)                          /* Jeżeli napotkał koniec wyrazu */
            {
                WyrazObecny++;
            }
            k++;
        }
        printf("\n");
    }
    return 0;
}
