Jeżeli zbuforujesz dane do pojedynczego wypisania to teoretycznie będzie to najszybsze, ale konkatencja stringów ma swój koszt, na potrzeby konkursu najlepiej byłoby eksperymentalnie ustalić w jakich zakresach danych konkretne rozwiązanie jest efektywniejsze. Co do jednolinijkowca to fajny, ale lepiej żebyś użył generatorów zamiast tablic. Kwestia zmiany []
na ()
(w argumencie join
po prostu wykasowanie []
) a zysk zauważalny: praktycznie brak dodatkowej alokacji i konstrukcji list, kolejne elementy są leniwie ewaluowane. Krotkę stringów można rozpakować w for
, będzie szybsze i czytelniejsze niż wielokrotne indeksowanie. int
nie wymaga stripniętego stringa, samo o to dba automatycznie, ew. można też się pokusić na zamianę strip
na rstrip
, odpadnie próba trymowania lewej strony stringa:
print '\n'.join('TAK' if len(x) == len(y) and y in x * 2 else 'NIE' for x, y in ((sys.stdin.readline().rstrip(), sys.stdin.readline().rstrip()) for n in xrange(int(sys.stdin.readline()))))
Dla picu można int(sys.stdin.readline())
zamienić na input()
skoro to kod specyficzny dla Pythona 2.x, koszt jednorazowego evala liczby będzie niezauważalny:
print '\n'.join('TAK' if len(x) == len(y) and y in x * 2 else 'NIE' for x, y in ((sys.stdin.readline().rstrip(), sys.stdin.readline().rstrip()) for _ in xrange(input())))
Jedno z "poważniejszych" zastosowań Pythona to taka zabawa w udziwnianie jednolinijkowców ;]