Praktyka golfa: Pyth [zamknięty]

10

Jest to wyzwanie dotyczące sztuczek i optymalizacji, które można wykorzystać podczas gry w golfa w Pyth. Golfiści Pyth mogą rozpoznać wiele z trików. Mogą jednak dotyczyć nieznanych podejść i konstrukcji, więc jeśli utkniesz, zapoznaj się z Pyth Tips, a także Pyth Character Reference . Rozwiązania mogą być testowane tutaj .

Cel: Istnieje 8 problemów, z których każdy zawiera fragment kodu Pyth do optymalizacji. Twoim celem jest stworzenie czegoś równoważnego, ale krótszego. Rozwiązania referencyjne mają łącznie 80 bajtów. Twoim celem jest pokonanie tego w jak największym stopniu.

Zwycięzca przejdzie do zgłoszenia, które rozwiązuje wszystkie 8 problemów przy najmniejszej całkowitej liczbie bajtów. Tiebreaker jest wcześniejszym postem.

Odpowiedź: Proszę zepsuć całą swoją odpowiedź, z wyjątkiem całkowitego wyniku. Celem jest, abyś nie patrzył na odpowiedzi innych ludzi przed przesłaniem własnych.

Każde przesłanie powinno rozwiązać każdy problem i podać odpowiednią liczbę bajtów, ale możesz skorzystać z implementacji referencyjnej, jeśli nie możesz jej poprawić.

Szczegóły: Jeśli numer zapytania do pewnej wartości lub wyjście, qpożądane jest równość, tak 1i !0są równoważne. Jeśli pytanie wymaga przetestowania, czy warunek jest prawdziwy, wynik musi być prawdziwy, jeśli warunek jest prawdziwy, lub fałsz, jeśli warunek jest fałszywy, ale nie jest ograniczony. Nie możesz zamieniać wartości true na false i false for true. Jeśli pytanie wymaga wydrukowania czegoś, nic innego nie może zostać wydrukowane, tylko końcowy znak nowej linii.

Wszystkie odpowiedzi muszą być aktualne dla ostatniego zatwierdzenia Pyth w chwili zamieszczania tego pytania.

Problem 1: Biorąc pod uwagę zestaw w Q, wypisz listę zawierającą elementy Q w dowolnej kolejności.

; 3 bytes
f1Q

Problem 2: Wydrukuj listę [1, 1, 0, 0, 1, 1, 0].

; 9 bytes
[J1JZZJJZ

Problem 3: Biorąc pod uwagę dodatnią liczbę całkowitą w Q, sprawdź, czy wszystkie cyfry Q są dodatnie (nie zero).

; 7 bytes
!f!TjQT

Problem 4: Biorąc pod uwagę ciąg znaków z, sprawdź, czy z zawiera znaki cudzysłowu - "lub '.

; 9 bytes
|}\'z}\"z

Problem 5: Mapa Q = 1 na „Wygrana”, Q = 0 na „Remis”, a Q = -1 na „Przegrana”.

; 20 bytes
@["Tie""Win""Lose")Q

Problem 6: Drukuj 0123456789.

; 6 bytes
sm`dUT

Problem 7: Biorąc pod uwagę ciąg znaków z, policz liczbę inwersji.

(Indeksuje ii jtworzy inwersję, jeśli i < jale z[i] > z[j]).

; 17 bytes
ssmm>@zd@zkrdlzUz

Problem 8: Biorąc pod uwagę listę w, policz liczbę powtarzających się sąsiadujących elementów.

; 9 bytes
lfqFT.:z2
isaacg
źródło
@ user1737909 Ta odpowiedź jest poprawna. f1Qfiltruje Qfunkcję, która jest zawsze prawdziwa, więc zawsze wypisuje każdy element zestawu. fwypisuje listę, która spełnia cel tego pytania.
isaacg
Zamykam to pytanie jako nie na temat, ponieważ wyzwania wieloczęściowe bez interakcji między częściami są niedozwolone. meta.codegolf.stackexchange.com/a/8464/45941
Martin Ender

Odpowiedzi:

9

52 bajty

Problem 1: 2 bajty

    SQ

Problem 2: 5 bajtów
    jC\f2

Problem 3: 4 bajty
    -0`Q
Problem 4: 6 bajtów
    @z+N\'
Problem 5: 17 bajtów
    %3>"LTWoiisene"hQ
lub
    @c3"LoseTieWin"hQ
Problem 6: 3 bajty
    pMT
Problem 7: 9 bajtów
    s>R_d.cz2
Problem 8: 6 bajtów
    sqVztz
Połączenie rozwiązania @ xnor dla problemu 4 z moim (oba 6 bajtów) daje dobre rozwiązanie 4 bajtów . Możliwe jest więc 48 bajtów.

Jakube
źródło
Nie możesz połączyć swojego rozwiązania z xnor's, ponieważ xnor's jest nieprawidłowe (zobacz mój komentarz do jego odpowiedzi).
orlp
@orlp * łącząc wszystko oprócz nieprawidłowych rzeczy ;-) Dodano rozwiązanie w moim poście.
Jakube,
Ach, widzę teraz :) Chyba miałem 6 bajtów (i wciąż rośnie) gorszy niż optymalny.
orlp
aaaa! dzięki! nie zdawałem sobie sprawy :). Usunę to.
Ven
7

54 bajty

Zadanie 1, 2 bajty : SQ
Zadanie 2, 6 bajtów : j102 2
Zadanie 3, 5 bajtów : *FjQT
Zadanie 4, 6 bajtów : @z"'\"
Zadanie 5, 17 bajtów : @c3"LoseTieWin"hQ
Zadanie 6, 4 bajty : jkUT
Zadanie 7, 7 bajtów : s>M.cz2
Zadanie 8, 7 bajtów :sqM.:z2

orlp
źródło
Ładnie
grał w
czy odpowiedź na zadanie 4 jest ważna, ponieważ na falsey drukuje tylko pustą linię?
Maltysen
@Maltysen Tak, ponieważ prawdziwą wartością ""jest False, ponieważ not ""jest Prawdą.
orlp
3

58 bajtów

Zadanie 1, 2 bajty : SQ
Zadanie 2, 5 bajtów : jC\f2
Zadanie 3, 6 bajtów : !}ZQ
Zadanie 4, 8 bajtów : |}\'z}Nz
Zadanie 5, 18 bajtów : @c"Tie\nWin\nLose"bQ
Zadanie 6, 4 bajty : jkUT
Zadanie 7, 9 bajtów : lf>FT.cz2
Zadanie 8, 6 bajtów :sqVtzz

Maltysen
źródło
Nie wiedziałem o tym V(chociaż nadal nie do końca to rozumiem, ponieważ wykonujesz operacje wektorowe na operandach o nierównej długości), więc przepraszam za ten jeden, ale naprawdę powinienem pomyśleć o C\f= /
orlp
@orlp Vautomatycznie obcina nierówne dane wejściowe
Maltysen
3

Ten post służy do gromadzenia najlepszych rozwiązań we wszystkich odpowiedziach. Edytuj w rozwiązaniu i w programie odpowiadającym, który pierwszy znalazł to rozwiązanie, jeśli są jakieś ulepszenia.

48 bajtów

1. SQ- 2 bajty, najpierw wysłane przez @orlp
2. jC\f2- 5 bajtów, najpierw wysłane przez @Maltysen
3. -0`Q- 4 bajty, pierwsze wysłane przez @Jakube
4. @z`N- 4 bajty, mieszanina @xnor i @Jube, ale nie w jeszcze jakieś odpowiedzi.
(Nie widziałem tego również podczas pisania pytania)
5. @c3"LoseTieWin"hQ- 17 bajtów, po raz pierwszy wysłany przez @orlp
6. pMT- 3 bajty, pierwszy wysłany przez @Jakube
7. s>M.cz2- 7 bajtów, pierwszy wysłany przez @orlp
8. sqVtzz- 6 bajtów, po raz pierwszy opublikowanych przez @Maltysen

isaacg
źródło
czy ograniczamy się do wersji Pythona sprzed pytania?
Optymalizator
1
„Wszystkie odpowiedzi muszą być aktualne dla ostatniego zatwierdzenia Pyth w chwili zamieszczania tego pytania”. Mówiąc, chciałbym usłyszeć, o czym myślisz. @Optimizer
isaacg
Pyth ewoluuje, prawda? (w znacznie szybszym tempie niż inne języki gry w golfa). Jest więc bardzo prawdopodobne, że liczba ta (48) z łatwością spadnie poniżej 40 w najbliższej przyszłości. A ponieważ jest to wyzwanie praktyczne, najlepiej byłoby ćwiczyć przy użyciu najnowszej wersji Pyth dla nowych wyzwań.
Optymalizator
2

57 bajtów

1. (2) SQSortuj.
2. (5) jC\f2 Konwertuj fna ASCII val, a następnie bazę 2.
3. (5) /`Q`0Policz '0'ciąg liczbowy.
4. (5) @z`\'Wykonuje ustawione przecięcie łańcucha z "'".
5. (18) @c"Tie Win Lose"dQTworzy listę z podziałem. Nie dostałem krojenia do pracy.
6. (4) jkUTDołącz range(10). Najwyraźniej konwertuje się automatycznie na ciąg.
7. (9) sm>d_d.:zZlicza podciągi większe niż ich odwrotność.
8. (9) l@C,zz.:zDługość przecięcia list podrzędnych listy i par elementów na liście. Ta sama długość co rozwiązanie referencyjne.

xnor
źródło
Twoje rozwiązanie dla nr 4 jest nieprawidłowe. Na przykład ciąg te\\stjest fałszywie dodatni.
orlp
@orlp Zastąpił je innym, krótszym rozwiązaniem.
xnor