Choinka SPOJ - pomoc w kodzie

Choinka SPOJ - pomoc w kodzie
CR
  • Rejestracja:prawie 7 lat
  • Ostatnio:12 miesięcy
  • Postów:92
0

Próbowałem rozwiązać zadanie ze SPOJ.
Napisz program, który dla zadanego n < 1001, narysuje połowę choinki o boku n, składająca się z dwóch krzaczków i nóżki.
Input
Jedna liczba określająca długość każdego elementu choinki oraz jeden znak, z którego mają się składać elementy choinki.
Output
Choinka narysowana z danego znako o długości n każdego elementu.

Limit czasu wykonania programu: 0.102s
Limit długości kodu źródłowego 50000B
Limit pamięci: 1536MB

Poniżej kod.

Kopiuj

znak=input("znak")   #wybór znaku rysowania choinki np #
n=int(input("podaj wysokosc segmentu choinki"))   #długość każdego elementu choinki

for j in range(n):
    for i in range (0,n):
        print (znak*(i+1))
for k in range(n):
    print(znak)

Po wysłaniu na SPOJ, wyświetla mi komunikat: Przekroczono limit czasu i MEM 23M
Wysyłałem rozwiązanie z funkcja input i bez niej.
Co można zmienić w kodzie, by SPOJ zaakceptował rozwiązanie? Z góry dziękuję za pomoc.

Marcin Marcin
Nie powinieneś na spoj podczas wczytywania danych wypisywać żadnego tekstu. Sprawdza to automat n, char = input().split(" ") Tak powinieneś z tego korzystać funkcja split dzieli stringa i zwraca do niego listę dwóch zmiennych którą przypisujesz do n i char
SI
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 9 godzin
0

Daj link do zadania, nie mogę go znaleźć

Marcin Marcin
  • Rejestracja:około 6 lat
  • Ostatnio:2 miesiące
  • Postów:610
3

Link do zadania: https://www.spoj.com/WSDOCPP/problems/CHOINKA/

Kod:

Kopiuj
n, char = input().split(" ")
for x in range(2):
	for y in range(int(n)):
		print(char * (y+1))
for x in range(int(n)):
	print(char)

Napisałem to strasznie, nieczytelnie i brzydko.
Tu masz kurs pythona:


Fan moderatora somekind
CR
  • Rejestracja:prawie 7 lat
  • Ostatnio:12 miesięcy
  • Postów:92
0

@Marcin Marcin: Marcin próbowałem uruchomić twój kod w PyScripterze. Wywala taki komunikat:
n, char = input().split(" ")
ValueError: not enough values to unpack (expected 2, got 1)

Marcin Marcin
  • Rejestracja:około 6 lat
  • Ostatnio:2 miesiące
  • Postów:610
2

Fan moderatora somekind
CR
  • Rejestracja:prawie 7 lat
  • Ostatnio:12 miesięcy
  • Postów:92
0

Przepraszam, rzeczywiście w ideon.com działa. Mógłbyś mi wyjaśnić skąd w pętli

for x in range(2):
wartość 2

W mojej wersji umieszczałem w niej wartość n wprowadzona przez użytkownika. Pętla ta odpowiadała za narysowanie n trójkątów. U Ciebie jest z góry przekazywana 2. Przepraszam za proste pytania.

edit
Już chyba rozumiem niepotrzebnie komplikowałem kod
zgodnie z zadaniem pętla zawsze rysuje 2 trojkaty, a ja niepotrzebnie rysowałem ich kilka

Czy zastosowanie funkcji split zapewnia zatwierdzenie spoja. Próbowałem z poniższym kodem bez splita i przekraczam limit czasu

Kopiuj



char=input()
n=int(input())

for j in range(2):
    for i in range (n):
        print (char*(i+1))
for k in range(n):
    print(char)
edytowany 3x, ostatnio: crispia
SI
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 9 godzin
1

@crispia: Input wczytuje pełnymi liniami, więc jak masz kilka danych w jednej (tak jak w tym zadaniu, patrz przykłady) , musisz podzielić ją split-em.

Marcin Marcin
  • Rejestracja:około 6 lat
  • Ostatnio:2 miesiące
  • Postów:610
0

Przeczytaj książkę Gynwald Coldwind - zrozumieć programowanie
Tam masz wyjaśnione w jednym rozdziale o co chodzi z standardowym strumieniem wejścia, standardowym strumieniem wyjścia i standardowym strumieniem błędów


Fan moderatora somekind
CR
  • Rejestracja:prawie 7 lat
  • Ostatnio:12 miesięcy
  • Postów:92
0

Udało mi się rozwiązać zadanie

https://www.spoj.com/WSDOCPP/problems/CHOINKA2/

Kod:

Kopiuj

n=int(input())

for k in range(n):
    print("@")
for j in range(2):
    for i in range(n,0,-1):
        print(i*"@")

Zatwierdzone przez SPOJ.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.