Article View: pl.comp.programming
Article #215807Re: "Najbardziej imponujący kod, jaki widziałem"
From: godek.maciek
Date: Tue, 06 Aug 2019 20:57
Date: Tue, 06 Aug 2019 20:57
65 lines
6210 bytes
6210 bytes
W dniu wtorek, 6 sierpnia 2019 10:55:05 UTC+2 użytkownik Maciej Sobczak napisał:
> > Jeżeli masz jakieś pytania na temat mojej osobowości, to lepiej zapytaj
>
> Nie da się. W tym zakresie nikt nie potrafi się sam zdiagnozować, muszę więc polegać na swoich (subiektywnych) odczuciach.
Szczerze powiedziawszy, jeżeli idzie o poznawanie ludzi, to mamy cały arsenał środków o wiele lepszych niż swoje subiektywne odczucia. Zresztą nawet to, w jaki sposób chcemy kategoryzować ludzi, czy wręcz sam fakt, że w ogóle chcemy ich kategoryzować, w większym stopniu świadczy o naszym własnym "kosmosie wewnętrznym", niż o tych osobach.
Serio. Jeżeli masz jakieś wątpliwości co do moich motywacji, to nic nie stoi na przeszkodzie, żeby przed wydaniem osądu zapytać. Z mojego doświadczenia odbiór tekstu potrafi się drastycznie różnić od intencji autora (kiedyś rozmawiałem z kolegą na czacie, i rozmowa poszła w takim kierunku, że prawie zaczęliśmy skakać sobie do gardeł. Kiedy porozmawialiśmy na żywo, okazało się, że jest luz)
> > > Prosta sprawa - zmodyfikuj rozwiązanie w Mathematice tak, żeby koszt zamiany elementu wynosił 2 a nie 1.
> >
> > Pytanie jest fair i odpowiedź (również fair) jest taka: sam sobie policz.
>
> OK, żeby nie było, że jestem nieuprzejmy, i dla własnej zabawy, zrobiłem mały research w tej sprawie.
> Jest taka fajna funkcja:
>
> https://reference.wolfram.com/language/ref/SequenceAlignment.html
>
> Ta funkcja rozpisuje różnice między sekwencjami, z czego można wyciągnąć poszczególne operacje (usunięcie, wstawienie, zamiana). Jeżeli dobrze zrozumiałem ćwiczenie, to rozwiązeniem może być takie coś:
>
> myDistance[s1_, s2_] := Total[
> Min[#] + Max[#] & /@
> Cases[SequenceAlignment[s1, s2], a_List :> StringLength /@ a]
> ]
>
> Pozwoliłem sobie użyć skróconych (idiomatycznych) zapisów na podstawowe operacje mapowania i lambdy - skoro w innych językach są śmieszne znaczki, to ja też skorzystam.
No właśnie, i to mi się nie podoba. Widziałem w swoim życiu już takie wynalazki, i choć może przyspieszają nieznacznie samo pisanie, zdecydowanie utrudniają czytanie (i komplikują reguły użycia języka)
Kiedyś napisałem w Schemie takie rozwiązanie:
[define [edit-distance a b]
[match `[,a ,b]
[`[,a []]
[length a]] ; insert all from a
[`[[] ,b]
[length b]] ; insert all from b
[`[[,a0 . ,a*] [,b0 . ,b*]]
[min [+ [edit-distance a* b] 1] ; delete a0
[+ [edit-distance a b*] 1] ; delete b0
[+ [edit-distance a* b*] ; replace or leave alone
[if [equal? a0 b0] 0 2]]]]]]
Co prawda trzeba sobie przyswoić specjalne znaczenie przecinków i apostrofów, ale oprócz tego nie ma tu prawie nic oprócz nazywania i budowania/rozkładania struktur, a jedyne funkcje biblioteczne użyte w kodzie to min, length, + i equal?.
Struktura kodu blisko odzwierciedla matematyczną definicję z Wikipedii. Jak się zastosuje memoizację, to i szybkość działania tego programu nie jest tragiczna.
Pewnie w Mathematice można podobnie. Może nawet w jakimś sensie ładniej, bo nie trzeba tych przecinków i apostrofów. Ale też nie trzeba się w definicji odwoływać do tajemniczych funkcji, których zrozumienie samo w sobie jest wyzwaniem
[...]
> Czyli nadal nie wyszło jakoś dramatycznie dużo tego kodu, prawda?
Nie wyszło. Ale nadal wyszło mniej, niż powinno.
> Nadal jednak szukałbym gotowych implementacji tutaj (choćby po to, żeby skorzystać z optymalizacji, które ktoś zrobił za mnie):
>
> https://reference.wolfram.com/language/guide/DistanceAndSimilarityMeasures.html
>
> I właśnie na tym polega użyteczność tego produktu.
Jeżeli jest użyteczny, to super. Ale mam nadzieję, że teraz lepiej rozumiesz moją perspektywę i niechęć do środowisk programistycznych o zamkniętym kodzie.
Zresztą moim ideałem jest, żeby to kompilator szukał za mnie gotowych implementacji, żebym mógł korzystać z gotowych optymalizacji, które ktoś zrobił za mnie.
Technical Details
Message-ID:
<82173aaf-ab06-498e-babc-9eb734bba184@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!b26no7113116qtq.0!news-out.google.com!a5ni1420qtd.0!nntp.google.com!b26no7113115qtq.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<edc55064-0038-4844-a994-4cddd7d77d76@googlegroups.com> <11e4b1d7-2d97-48ac-8a3d-9172df46bf0b@googlegroups.com> <c10e995b-108e-4770-840c-f27c95c0d36c@googlegroups.com> <004de5cc-bf54-4740-92d9-d7f5892c68f1@googlegroups.com> <ba268c8f-c446-4d4c-93e9-b640ebd0f75e@googlegroups.com> <d570836b-f9da-4359-b307-981afc6d4b40@googlegroups.com> <2f6d1e89-c868-49ad-bf88-81e0560f48c9@googlegroups.com> <cff169cc-d481-4ded-ba90-43d0f5ecc05e@googlegroups.com> <b9c338d3-c80c-4b42-99ff-da12417126b7@googlegroups.com> <10218256-a88b-4be5-9815-723d2b757225@googlegroups.com> <ae20996a-1fd5-44dc-a39e-e627c633cc06@googlegroups.com> <e8792740-b3b1-48c6-917f-1dfb1fe8bab1@googlegroups.com> <c4e3147c-61af-4b8b-86f2-9e367e44b228@googlegroups.com>Show Full Headers
Complete Article Headers
X-Received: by 2002:a05:620a:137c:: with SMTP id d28mr5175054qkl.351.1565125077551; Tue, 06 Aug 2019 13:57:57 -0700 (PDT) X-Received: by 2002:a37:4e92:: with SMTP id c140mr4775008qkb.48.1565125077389; Tue, 06 Aug 2019 13:57:57 -0700 (PDT) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!b26no7113116qtq.0!news-out.google.com!a5ni1420qtd.0!nntp.google.com!b26no7113115qtq.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.programming Date: Tue, 6 Aug 2019 13:57:57 -0700 (PDT) In-Reply-To: <c4e3147c-61af-4b8b-86f2-9e367e44b228@googlegroups.com> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=37.248.215.4; posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r NNTP-Posting-Host: 37.248.215.4 References: <edc55064-0038-4844-a994-4cddd7d77d76@googlegroups.com> <11e4b1d7-2d97-48ac-8a3d-9172df46bf0b@googlegroups.com> <c10e995b-108e-4770-840c-f27c95c0d36c@googlegroups.com> <004de5cc-bf54-4740-92d9-d7f5892c68f1@googlegroups.com> <ba268c8f-c446-4d4c-93e9-b640ebd0f75e@googlegroups.com> <d570836b-f9da-4359-b307-981afc6d4b40@googlegroups.com> <2f6d1e89-c868-49ad-bf88-81e0560f48c9@googlegroups.com> <cff169cc-d481-4ded-ba90-43d0f5ecc05e@googlegroups.com> <b9c338d3-c80c-4b42-99ff-da12417126b7@googlegroups.com> <10218256-a88b-4be5-9815-723d2b757225@googlegroups.com> <ae20996a-1fd5-44dc-a39e-e627c633cc06@googlegroups.com> <e8792740-b3b1-48c6-917f-1dfb1fe8bab1@googlegroups.com> <c4e3147c-61af-4b8b-86f2-9e367e44b228@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <82173aaf-ab06-498e-babc-9eb734bba184@googlegroups.com> Subject: Re: "Najbardziej imponujący kod, jaki widziałem" From: godek.maciek@gmail.com Injection-Date: Tue, 06 Aug 2019 20:57:57 +0000 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit