W jakim języku, ogólnie ujmując, można tworzyć najkrótsze w ilości znaków programy? Słyszałem o Prologu, ale: może mylę, a może też są jakieś krótsze? Mam nadzieję, że rozumiecie, czego potrzebuję. Mam tylko nadzieję na język z dobrą dokumentacją, ale podawajcie wszystkie wasze typy. Mogą to oczywiście być języki wyspecjalizowane w konkretnych zadaniach. Nieistotny jest poziom skomplikowania języka, oraz ogólnie jego typ.
Chodzi o _ code golf _. Jak najmniejsza ilość znaków do napisania tego samego algorytmu, a nie o najmniejszą ilość komend.
Znam Brainfucka dość dobrze i jest to najprostszy język pod względem składni, ale i najtrudniejszy pod względem logicznym. Jednakże z całą pewnością nie jest najkrótszy, więc niczym się nie popisałeś.
Perl - do code golfa jest popularny, ale to dlatego, że on sam jest jest prekursorem tego typu zawodów, ze względu na dość dużą dowolność składni.
Bynajmniej mi nie pomogłeś też Ty, linux_to_syf_^^. Ten język niestety nie jest nawet kompletny. Mi nie chodzi o ilość komend, tylko o ilość znaków potrzebną do napisania tego samego programu.
Jestem hobbystą, po prostu chcę się nauczyć języka, za pomocą którego, będę w stanie jak najszybciej pisać programy - mniejsza ilość znaków = mniejszy czas. Więc szukam języka maksymalnie inteligentnego/rozbudowanego w swojej prostocie. Rozumiesz mnie już? Bo nadal nie udzielasz mi odpowiedzi, a C++ zdecydowanie to najkrótszych nie należy.
Wiem, że Prolog służy do rozwiązywania problemów logicznych, ale faktycznie jest na tyle ciekawy, że dodałem go do listy najkrótszych języków programowania. Jakieś inne propozycje?
Poza tym czuję trochę dyskomfort przy używaniu języków kompilowanych, ale ciekawe propozycję rozważę i będę za nie wdzięczny.
To zależy od typu programu. Inne języki będą zwięźlejsze w przypadku operacji na tekście, inne w przypadku obsługi plików, inne dla wielowątkowości, inne dla obliczeń matematycznych, inne dla statystycznych, inne w www, inne w desktopowym GUI. A i tak wszystko zależy od umiejętności programisty, no i od długości nazw zmiennych.
Twoje pytanie jest zbyt mało precyzyjne.
– Dodane 11.03.2013 (Pn) 23:14 –
Bzdura. Programowanie polega na myśleniu, a nie na uderzaniu w klawisze.
Zgadzam się. Nie chodzi tu o precyzję. Po prostu proszę o Wasze typy. Niech będzie w różnych kategoriach, dostajecie wolną rękę i właśnie to jest najpiękniejsze. Można się popisać wiedzą, a ja z tego sporo wyniosę. Jeśli jesteś obeznany w wielu językach programowania, będziesz mógł podać kilka języków i ich najlepsze zastosowanie. Ja jestem typem interdyscyplinisty (ah, to słowotwórstwo!)
Ależ oczywiście, że polega na myśleniu! Jednak opierając się jedynie na tej zasadzie, mogę pozostać przy Brainfucku. Jest to doskonały przykład (acz skrajny), że narzędzie też jest ważne. Pierwiastki też mogę obliczać przecież jedynie za pomocą mojego mózgu, ale od tego są odpowiednie narzędzia, czytaj procesory. Narzędzia wyspecjalizowane w obliczeniach. Na takich samych zasadach działają języki programowania, też są wyspecjalizowane w różnych dziedzinach. Jeśli język programowania jest wyspecjalizowany w renderowaniu grafiki (czysto teoretyczny przykład), to na pewno będzie miał najlepsze (co za tym idzie - najkrótsze i najprostsze) rozwiązania właśnie w tej dziedzinie. Więc - albo pomóż, stwórz krótką listę języków, które uważasz za godne polecenia, wraz z ich zastosowaniem i nie odbiegaj od tematu; albo zamilcz. Nie lubię być pouczany, kiedy o to nie proszę, tym bardziej w sprawach, o których pojęcie mam.
Na grzyba? Jestem znudzonym człowiekiem, z ciekawości ludzkiej zwyczajnej, już i tak dawno spadłem poniżej pierwszego stopnia do piekła. Kiedy mogę poszerzam w ciekawy sposób swoją wiedzę na różne tematy.
to bzdura do potęgi entej. To tak tylko dla potomnych, przyszłych informatyków itd.
Programy najszybciej piszę się w językach, w których bynajmniej nie są one najkrótsze. Skoro się “znasz”, jak to sam piszesz, to jakie języki programowania już “znasz”(w sensie, w których kalkulator już zrobiony)?
Zgadzam się w 100% z kolegą. Im mniej znaków tym kod jest bardziej zaciemniony i zazwyczaj jest tylko zrozumiały w momencie pisania. Chwilę później już trzeba analizować logikę od początku. W języku c istnieją konkursy, w których liczy się liczba znaków - im mniej tym lepiej.
Ja osobiście pisze w C#. Pod względem liczby znaków pewnie jeden z języków o największej liczbie znaków na dany problem. Ja do tego okraszam go długimi nazwami zmiennych (może nie tyle długimi co dokładnie opisującymi przeznaczenie). To samo dla nazw funkcji i innych bytów. Natomiast dzięki InteliSense i innym udogodnieniom ze strony IDE nie sądzę by można było powiedzieć że dany problem piszę dłużej niż program który będzie zawierał 10 razy mniej znaków. Natomiast w przypadku błędu i odnalezieniu go i poprawieniu, to czas potrzebny w pierwszym przypadku będzie nie porównywalnie krótszy niż w drugim.
To tylko moje zdanie, a wypowiedziałem się, żeby podkreślić jak bardzo mylnym stwierdzeniem jest, że mniejsza ilość znaków = mniejszy czas. Jeśli kolega szuka języka w celach hobbistyczny to super, życzę powodzenia, ale proszę nie stawiać tez które mogą bardzo zaszkodzić wielu mniej doświadczonym programistom.
Ja dzisiaj oglądałem cóż to za cudo F# i wydawało mi się że składnia była znacznie krótsza niż dotychczas widziałem. Ale nie znam w ogóle tego języka więc to może być źle trafiony przykład.
Niestety temat zszedł trochę na dysputy bez celu. Dzięki przykładom kolegi @RaveStar trochę załapałem o co chodzi w tym temacie jednak dalej nie widzę jego przydatności życiowej.
Szukasz języka który w krótki sposób zapisuje pewne operacje, jak w podanych przykładach:
+/A sumuje elementy tablicy.
Kontrprzykłady dla tego rozumowania:
Tak zapisane metody (przy pomocy znaków specjalnych) mogą odnosić się tylko dla prymitywnych operacji - znanych kompilatorowi (tu mały margines ale pominę tutaj).
Przykład dla języka C# M.s(A) <=> taki zapis może wykonywać to samo co podany powyżej, jeśli M będzie klasą ze statyczną metodą s sumującą wszystkie elementy podanej tablicy A. tylko 2 znaki więcej. Warunek: wcześniejsza implementacja biblioteki zawierającej taką metodę.
Tutaj przechodzimy do sedna sprawy (przynajmniej moim zdaniem). Biblioteki. Ja pisałem w wielu językach, i zawsze stosowałem metodę język per problem. Czyli jak mniej policzyć współczynnik przy n tej potędze funkcji tworzącej używałem języka Mathematica (btw polecam się zapoznać, chociaż oprogramowanie jest strasznie drogie i ja miałem przyjemność pracować dzięki uczelni inaczej to wiecie…)
Operacje macierzowe - Matlab.
Liczby permutacji - Mathematica.
Liczba permutacji przy danych założeniach (constraint) - Prolog
User Friendly interfejs do przedstawienia jakiś danych z pliku - C# WinForms.
Jeszcze raz dodam - były to zastosowania rozwiązujący jakiś problem i zazwyczaj nie zawierały więcej niż 40 linijek.
Dodam tu jeszcze język Go (nie widziałem w poprzednich postach), nie znam ale pamiętam że był reklamowany jako język o zwięzłej strukturze - może przypadnie ci do gustu.