1 / 16
Dec 2004

why my prolog solution gets Time Limit Exceeded for the problem TEST?

program :- readln(X), check(X). 
check("42"):-!. 
check(X):-write(X),nl, readln(Z),check(Z).
  • created

    Dec '04
  • last reply

    Jul '10
  • 15

    replies

  • 1.3k

    views

  • 9

    users

  • 5

    links

In SWI Prolog using readln the way you do it will create a one element list [n] rather than a scalar value.

Hello,

Thanks for ur reply.

I am new in prolog & using turbo prolog. Turbo prolog possibly does not support functions like get_char(). I tried to solve the 'TEST' problem with readint(X) function, which also got TLE. So my query is :- if I try to solve other problems of SPOJ using readint() and/or readln(X) will I get TLE ? Also, would you plz show me how to get the problem solved within time limit not using get_char()... but possibly using readint() or readln().

finally, (to all prolog programmars) can anybody mention some problem numbers in SPOJ that has been solved by Prolog anyone.

bye
~nirjon.

Unfortunately, this is so. I would recommend downloading SWI Prolog for Windows, it really has a nice IDE to work with (http://www.swi-prolog.org/1).

program :- readln(X), check(X). 
check([42]):-!. 
check([X]):-write(X),nl, readln(Z),check(Z).

We don't offer a search-by-language function (perhaps we should), but you can browse through (or google) the ranks of any problem in search of 'prolog'.

At present this is a complete list of problems solved in prolog:
ADDREV
DYZIO
KAMIL
MARBLES
MAYA
ONP
TEST
TREE1

But I'm sure that more than 50 problems (most of those without the "large i/o" warning) can be solved in prolog if you try hard enough smile.

4 years later

Hi,

I've tried

program :- readln(X), check(X).
check([X]):-dif(X,42), write(X),nl, readln(Z),check(Z).
check([42]).

(it's ok with swi)
it failed with spoj!
why?

I've also tried (Small factorials Problem code: FCTRL2)

program :- readln([K]), facs(K).
facs(0).
facs(K):- K>0, readln([N]), fac(N,R), write(R), nl, L is K-1, facs(L).
fac(0,1).
fac(N,F):- N>0,  M is N-1, fac(M,E), F is E*N.

(it's ok with swi)
it failed too with spoj!
why?

10 months later

Finally, I've had a 'nl' at the end, and it works !

program :- readln(X), check(X).
check([X]):-dif(X,42), write(X),nl, readln(Z),check(Z).
check([42]):-nl.

BDenis.

idem for the second problem, a 'nl' at the end ...

program :- readln([K]), facs(K).
facs(0):-nl.
facs(K):- K>0, readln([N]), fac(N,R), write(R), nl, L is K-1, facs(L).
fac(0,1).
fac(N,F):- N>0,  M is N-1, fac(M,E), F is E*N.

BDenis.

2 months later

Z programem, który dostał AC:

Wejście:

OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOX
XOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOZOOOOOOOOOZOOOOOOOOOZOOOOOOOOOZOOOOOOOOOZOOOOOOOOOZOOOOOOOOOZOOOOOOOOOZZZZZZZZZOOOOOOOOOO

Uwaga: W ostatnim przykładzie należy zamienić wszystkie Z na X.

Wyjście:

0
0
1

Wszystkie test dały mi poprawną poprawną odpowiedź, tj. identyczną ja wyżej podana. Może mam coś źle z wczytywaniem, spojrzy ktoś?

char tab[10][10];
    string a;
    while (cin>>a)
    {
        for (int i = 0; i < 10; i++)
        {
            for (int j = 0; j < 10; j++)
            {
                int z = 10*i+j;
                tab[i][j] = a[z];
            }
        }
        // tu coś się dzieje :P
     }
4 months later

Czesc odświeżam temat czy ktoś mógłby wrzucić więcej testów do tego zadania, mój program przechodzi wszystkie testy jakie tylko wymyślę ale ciągle WA, bardzo proszę o pomoc>

Też jeszcze nie udało mi sięrozwiązać tego zadania, ale oto testy mojego autorstwa (może też podalibyście wasze testy, nawet jeśli nie zaliczyliście tego zadania, bo mogłoby to pomóc innym):
Input:

OOOXOOOXOOXXOXOXOXOOOXOOOXOXOOOXXXXXOXOOOOOXOOOXOOOXOXOXXXOOOXOOOXOOOOOXXXXXOXXOOOXOOOOOXOXOOOXXXXXO
OOOOOOOOOOXXOXXXXOXOOOOOOOXOOOOOOOOOXXXXOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOXXXXXXXXXOXOOOXOOOXOXOXOXOXOXOXOOOXOOOXOXOXOOOXOOOXOXOXOXOXOXOXOOOXOOOXOXXXXXXXXOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOXXXXOXXXXXOOOOOOOOOOXXXXXXXXXOOOOOOOOOOOOXXXXXXXXXOOOOOOOOOO
OOXOXOXOXOXOOOOOOOOOXOXOXOXOXOOOOOOOOOOOXOXOXOXOXOOOOOOOOOOOXOXOXOXOXOOOOOOOOOOOXOXOXOXOOXOOOOOOOOXO
OXOXOXOXOXOOOOOOOOOOOXOXOXOXOXOOXOOOOOOOOXXXXXXXXXOXOXOOOXOOOOXOOXOOXOOXOXOXXOOOOOXOOOOXOXOOOOXOXOOO

Output:

1
1
1
1
0
1

Jak ktoś ma jeszcze inne podchwytliwe testy, to dorzucam się do prośby. smile

dlaczego pozostałe labirynty są oznaczone jako [SPAM]??

Wydaje mi się, że skrypt traktuje ciąg trzech X, jako link do stron pornograficznych, a w tych testach było dużo X stuck_out_tongue

jawa350: zamiast na gg, wrzucę Ci tu, bo nie podaję gg każdemu, kto poprosi (bez urazy), a tak to inni też skorzystają smile

tiny.pl/hqqcg

//Jakby komuś to pomogło, to można spróbować to zrobić metodą prawej-lewej ręki
dodatkowe linki pomocnicze:
tiny.pl/hq1sg
tiny.pl/hq1st