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.|

BFNTEST - Precz z komentarzami!

Pani z Informatyki, która od wielu lat uczyła już Jasia, z trudem mogła ręcznie przebrnąć przez oceniane kody źródłowe doszukując się w nich rzeczywistych czy wyimaginowanych podobieństw. Poprosiła więc swojego najzdolniejszego ucznia, Jasia, o pomoc w tym arcytrudnym zadaniu. Jaś po przeanalizowaniu problemu, doszedł do wniosku, że pierwszym zadaniem jest usunięcie z programów źródłowych licznych i nieistotnych z punktu widzenia oceny podobieństw kodów, komentarzy, którymi upstrzone były (nierzadko do przesady) kody źródłowe młodszych kolegów.
Komentarze w programach źródłowych napisanych w językach C/C++ wystepują w dwóch postaciach:

/* to jest komentarz
   to wciąż jest komentarz */
lub 
          // to jest komentarz (aż do końca linii).

Zadaniem Jasia jest napisać program, który z podanego na wejściu poprawnego kodu źródłowego (o rozmiarze nie większym niż 50kB) napisanego w języku C/C++ usunie wszystkie komentarze, a pozostały nienaruszony teskt programu wydrukuje na wyjście.

Przykład 1

Wejście:

#define R(p) rand()%('9'-(p)+1)+(p) // makropolecenie
#define P(p) putc((p),stdout)
#define PP(p) P(R(p)) // makropolecenia zagnieżdżone

#include <iostream>
#include <cstdlib>

#include <cstdio>

using namespace std;

/* funkcja generująca ciąg cyfr */
void gen(int x) 
{
	if (x) PP('1'); else PP('0');
	for(;x;x--) PP('0');
}

int main()
{
	int a, d, n;
	cin >> a; srand(a); /* inicjalizacja generatora
        liczb pseudolosowych /* */
	cin >> d; cin >> n; cout << n << endl;
	for(;n;n--)
	{
		gen(rand()%d);  P(' ');
		gen(rand()%d);  P('\n');
	}
	return 0;
}

Wyjście:

#define R(p) rand()%('9'-(p)+1)+(p)
#define P(p) putc((p),stdout)
#define PP(p) P(R(p))

#include <iostream>
#include <cstdlib>

#include <cstdio>

using namespace std;


void gen(int x)
{
        if (x) PP('1'); else PP('0');
        for(;x;x--) PP('0');
}

int main()
{
        int a, d, n;
        cin >> a; srand(a);
        cin >> d; cin >> n; cout << n << endl;
        for(;n;n--)
        {
                gen(rand()%d);  P(' ');
                gen(rand()%d);  P('\n');
        }
        return 0;
}

Przykład 2

Wejście:

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

typedef struct _road{
    int cost;//,Id;
    int from,to;
    struct _road *next;
}road;

int readInt(void);
inline int roadcmp(const void *a,const void *b){
    return ((road*)a)->cost-((road*)b)->cost;
};

inline void swap(road *a,road *b){
/* zamienia die zmienne point miejscami */
    road tmp=*a;
    *a=*b;
    *b=tmp;
};
/* Heapify, BuildHeap, HeapSort - funkcje sortujace tablice punktow uzywajac
   porzadku definiowanego przez funkcje compare
   wywolac nalezy poprzez HeapSort */
void Heapify(road *A,int n, int i);
void BuildHeap(road *A,int n);
void HeapSort(road *A,int n);

int city[10000]; //czy jest juz w drzewie
int main(){} /* to juz jest koniec....*/

Wyjście:

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

typedef struct _road{
    int cost;
    int from,to;
    struct _road *next;
}road;

int readInt(void);
inline int roadcmp(const void *a,const void *b){
    return ((road*)a)->cost-((road*)b)->cost;
};

inline void swap(road *a,road *b){

    road tmp=*a;
    *a=*b;
    *b=tmp;
};

void Heapify(road *A,int n, int i);
void BuildHeap(road *A,int n);
void HeapSort(road *A,int n);

int city[10000];
int main(){}

Dodane przez:mima
Data dodania:2005-05-08
Limit czasu wykonania programu:0.161s
Limit długości kodu źródłowego50000B
Limit pamięci:1536MB
Cluster: Cube (Intel G860)
Języki programowania:All except: GOSU
Pochodzenie:-

ukryj komentarze
2017-04-03 10:12:01
To zadanie nie powinno być w kategorii trudne, bo to zwykłe proste parsowanie stringa.
2012-05-07 12:13:54 Maciej Boniecki
Spacje mają znaczenie i należy je zostawiać. Sporo testów do tego zadania możesz znaleźć na forum.
2012-05-06 17:52:24 Jan Bartnik
Głupie pytanie - czy spacje mają znaczeni przy ocenie poprawnego rozwiązania? Bo patrząc na przykłady to mamy przykładowo wejście:
int main(){} /* to juz jest koniec....*/
A na wyjściu w przykładzie spacji przed komentarzem już nie ma. I tak wszędzie w przykładach. Moje rozwiązanie zostawia spację zamiast ją usuwać ale dostaję 5 punktów - czyżby przez to?
Przy okazji - jak zgaduję należy przewidzieć np. taką sytuację jak:
printf("tekst i /*to nie jest komentarz*/ ?");
2010-02-25 15:36:49 Micha³ Guzek
Sprawdzaliście czy może w C-stringach jest znak komentarza - a jeśli tak to go ignorujecie (bo w C-stringach można takie znaki umieszczać) ?
2009-06-24 12:51:14 Dawid Kalinowski
Może w testach są komentarze zagnieżdżone?
© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.