Choinka SPOJ - pomoc w kodzie

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.


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.

0

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

3

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

Kod:

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:

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)

2

U mnie działa
https://ideone.com/UA366E

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




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

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

0

Udało mi się rozwiązać zadanie

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

Kod:


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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1