eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming"Najbardziej imponujący kod, jaki widziałem" › Re: "Najbardziej imponujący kod, jaki widziałem"
  • X-Received: by 2002:a37:4e92:: with SMTP id c140mr4775008qkb.48.1565125077389; 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: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erj
    e.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!a5ni1
    420qtd.0!nntp.google.com!b26no7113115qtq.0!postnews.google.com!glegroupsg2000go
    o.googlegroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Tue, 6 Aug 2019 13:57:57 -0700 (PDT)
    In-Reply-To: <c...@g...com>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=37.248.215.4;
    posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r
    NNTP-Posting-Host: 37.248.215.4
    References: <e...@g...com>
    <1...@g...com>
    <c...@g...com>
    <0...@g...com>
    <b...@g...com>
    <d...@g...com>
    <2...@g...com>
    <c...@g...com>
    <b...@g...com>
    <1...@g...com>
    <a...@g...com>
    <e...@g...com>
    <c...@g...com>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <8...@g...com>
    Subject: Re: "Najbardziej imponujący kod, jaki widziałem"
    From: g...@g...com
    Injection-Date: Tue, 06 Aug 2019 20:57:57 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    Xref: news-archive.icm.edu.pl pl.comp.programming:213763
    [ ukryj nagłówki ]

    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/SequenceA
    lignment.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/Distanc
    eAndSimilarityMeasures.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.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: