1 / 23
Oct 2017

Kłaniam się w pas,

Tematu odnośnie tego zadania na forum jeszcze nie było, więc czas rozpocząć dyskusję. Tylko 810 osób poprawnie napisało program, dlatego powinien należeć raczej do trudnych. Kto ma pomysły jak zbudować kod? Własny program, żeby pokazać do analizy? Przykładowe rozwiązanie? Analogiczne zadanie z odpowiedzią?

Napisałem już kilka programów w Brainfucku (głównie wpisywanie/wyświetlanie tekstu), ale nie mam pomysłu jak zapisać pętlę w tym wypadku.
Na pewno na początku wpisywanie poszczególnych cyfr do momentu ASCII 10, potem przestawienie “głowicy” za pomocą ‘>’ na ostatnie miejsce liczby i wyświetlenie cyfry za pomocą kropki. Jak ktoś opisze jak przenieść to teraz na język BF, albo chociaż jak powinno wyglądać wpisywanie liczby będę bardzo wdzięczny.

Pozdrowienia.

  • created

    Oct '17
  • last reply

    Feb '18
  • 22

    replies

  • 2.1k

    views

  • 6

    users

  • 5

    likes

  • 9

    links

Jednak każda z tych 810 osób raczej potwierdzi, że to nie jest trudne zadanie. I to nie dlatego, że po zrobieniu zadania staje się ono dla robiącego automagicznie łatwe, tylko dlatego, że w porównaniu do innych zadań z bf na spoju, to jest naprawdę łatwe i najprostsze z możliwych. Jedynym powodem przesunięcia zadania do wyższej kategorii, np średniej, byłaby chęć ukrycia go przed oczami początkujących, a to za słaby powód.

Na zacytowanym linku powyżej, w mailu @mariusz193, masz prawie wprost gotową jedną z wersji programu, wymagająca tylko drobnych przeróbek. Jeżeli naprawdę tak bardzo potrzebujesz AAAC w bf [i roztroju nerwowego, przy zabawie z tym językiem :wink: ], to powinieneś natychmiast zainstalować jakieś bf IDE i pobawić się i poglądać co się dokładnie dzieje w programie i w poszczególnych komórkach pamięci, przy jego krokowym uruchamianiu.

PS
Jest dużo innych ciekawszych? dla Ciebie wątków, np: http://discuss.spoj.com/search?q=czy%20umiesz%20potęgować17
http://discuss.spoj.com/search?q=zliczacz%20liter8
http://discuss.spoj.com/search?q=Problem%20Collatza10
Ciekawszych?, bo nie sprawdzałem linków, które podałem i nie gwarantuję ich wysokiej jakości, ale wygląda, że masz problemy właśnie z tymi zadaniami.

PS 2
W treści zadania podany jest link do wiki ;-). Dodatkowo:

> … a po niej znak końca linii: ‘\n’ (ASCII 10).
Warto wiedzieć, że następnym znakiem [po powyższym] jest znak EOF (na spoju i unix’ach = -1)

Chcesz żeby to zadanie stało się łatwe? Przeczytaj sobie to: http://pl.spoj.com/problems/AL_18_07/80 :slight_smile: Myślę, że pozostałe 6 osób, które je zrobiło zgodzi się ze mną, że jest ono dość trudne.

Możesz tak zrobić, ale jest teź prostrze rozwiązanie. Pomyśl ile cyfr wczytanej liczby jest Ci potrzebne.

Ten powyższy fragment twojej wypowiedzi bardzo mnie zastanawia, czy nie wiesz o czym piszesz, i całkowicie “nie czujesz” bf czy to tylko drobna omyłka - literówka?

Co do automatu, nie zrobiłem i tym bardziej przychylam się do sklasyfikowania go jako trudne. No i po za tym nie chcę nadmiernie fukać na swojego braina [dokładnie fuckać] :wink:

Oczywiście, są dużo trudniejsze zadania z BF, ale generalnie język sam w sobie najprostszym nie jest.
Mam IDE pod BF i tak jak wspomniałem - już wcześniej napisałem kilka programów w tym języku. Polecam kompilator z tej strony:
http://kacper.kwapisz.eu/index.php?i=1933

Co do zadania:
Mój kod wygląda tak-> /tu był link do kodu, który działał bardzo dobrze/

Nie rozumiem, czemu po wpisaniu ostatniej cyfry i zatwierdzeniu enterem pętla nie zostaje przerwana. Odejmuję 10 od ASCII10, więc teoretycznie wartość powinna wynosić 0, co przerywa pętlę. Wtedy powinno nastąpić przejście do wyświetlenia przedostatniej komórki, czyli ostatniej cyfry liczby.
Dodatkowo wiem, że program nie będzie działał dla liczb jednocyfrowych. Jakieś wskazówki?

Twój program działa bardzo dobrze, dla liczb jednocyfrowych też, więc usuń link do kodu

problem leży gdzie indziej :slight_smile:

Rzeczywiście - dostałem ACC. Po prostu nie wstawiałem kodu na Spoju, bo w debbugerze i na ideone wyjście się nie zgadzało. :rofl:

Mógłbyś napisać jeszcze, z czego to wynika?

Raczej się nie domyślę, bo pierwszy raz się z czymś takim spotykam. Podejrzewam, że sędzia po prostu coś inaczej interpretuje.
W każdym razie dziękuję za wszystkie odpowiedzi. Gdyby ktoś jeszcze miał problem z tym zadaniem niech pisze - chętnie pomogę.

Zauważ, że na ideone dostałeś time limit.
Na ideone podałeś po prostu zły test [bez entera]
Czyli twój test wyglądał tak:
123456[EOF]
zamiast
123456[enter]
{EOF]

PS
W takim razie zupełnie nie rozumiem twojego pierwotnego pytania, że nie masz pomysłu(?) oraz bzdury w postaci przestawienia “głowicy” za pomocą ‘>’ gdy robisz zupełnie coś innego i jak najbardziej poprawnie. Na koniec używasz ‘<’. Przy zadawaniu pytań tak jak w programowaniu obowiązuje dokładność, bo inaczej jak podejrzewałem albo jest to literówka albo niewiedza a wtedy trudniej jest się dogadać.

PS 2
Co do twojego, polecanego IDE, to albo nie umiesz go obsługiwać [wprowadzić poprawnie entera] albo nie jest wcale takie dobre i godne polecenia.

PS1
Pomysł przyszedł, dlatego trochę zmieniłem wstępny koncept, w przeciwnym wypadku od razu wstawiłbym kod. Do kolejnej komórki przenoszę się właśnie za pomocą znaku ‘>’ i to miałem na myśli. Być może ‘głowica’ nie była tu najbardziej adekwatnym słowem. OK.

PS2
Wygląda na to, że IDE nie jest tak godne polecenia, bo nie widzę opcji wprowadzenia entera, ale nie wykluczam, że gdzieś taka opcja może być ukryta. Pozdrawiam.

LUDZIE trzymajcie mnie. Czy Ty umiesz czytać ze zrozumieniem, to co do CIebie piszę? Przecież nie chodzi mi o słowo głowica, użyte w cudzysłowiu i zupełnie w tym wypadku adekwatne i zrozumiałe. Nie chodzi mi też o ‘>’ gdzieś tam w środku programu, tylko o cofnięcie “głowicy” instrukcją ‘<’ na końcu [pod koniec] programu. Przeczytaj jeszcze raz swoje własne słowa:

potem [po wczytaniu całej liczby] przestawienie “głowicy” za pomocą ‘>’ na ostatnie miejsce liczby …
Możliwe, że to dlatego, że nie miałeś wtedy jeszcze pomysłu, ale i tak taki oipis nie zgadzał się, sam to chyba teraz rozumiesz, “po momencie ASCII 10”, a może jednak jest inne wytłumaczenie i wcześniej wysnułem właściwe podejrzenie? :wink:

Nie musisz tego tak przeżywać :joy:
Miałem problem z tym zadaniem, dlatego założyłem temat na forum i podałem mój wstępny plan na program. Dostałem kilka odpowiedzi, za które serdecznie dziękuję, po czym zmieniłem lekko początkowy koncept i stworzyłem kod. Dalsza dyskusja jest już chyba bezcelowa, ale trzymamy Cię stabilnie. :wink:

Ja aby dorzucę, że do bf istnieje kilka kompilatorów (IDE w ogóle pewnie jeszcze więcej) i różnią się sposobem wykonywania instrukcji (interpretacją?) w szczególności EOF. Warto (trzeba?) użyć tego co jest na ideone by dostać AC. Ja się z tym trochę namęczyłem bo najpierw znalazłem inny kompilator. O różnicach w obsłudze EOF jest dobrze napisane tutaj:
https://esolangs.org/wiki/Brainfuck30

Poza tym ta strona mi bardzo pomogła:
http://cydathria.com/bf/bf_ex2.html22

Dokładniej chodzi o różnice pomiędzy systemami windowsowymi [+dos], gdzie o ile pamiętam EOF = 0 i systemami unixowymi [a więc także spoj i ideoe] gdzie EOF = -1
Podobnie różnią się znaki końca linii-enter. Unix = 10 [jeden znak]. WIndows o ile pamiętam to nawet dwa znaki 10 i 13 lub odwrotnie.

3 months later

Witam. Dlaczego na Ideone przy wyrazeniu “,.” program wyswietla mi wszystkie liczby z wyjatkiem 0 ?

Zamiast 0 pokazuja mi sie komunikaty: “Standard input is empty” i “Standard output is empty”.