# Golf Practice: Pyth [closed]

This is a challenge about the the tricks and optimizations that can be used when golfing in Pyth. Pyth golfers may recognize many of the tricks involved. However, unfamiliar approaches and constructs may be involved, so take a look at the Pyth Tips as well as the Pyth Character Reference if you get stuck. Solutions may be tested here.

Goal: There are 8 problems, each with a Pyth snippet for you to optimize. Your goal is to create something equivalent but shorter. The reference solutions total 80 bytes. Your goal is to beat that by as much as possible.

The winner will go to the submission that solves all 8 problems with the smallest total number of bytes. Tiebreaker is earlier post.

Each submission should answer every problem and give the corresponding byte count, but feel free to use the reference implementation if you cannot improve it.

Details: If the question calls for a certain value or output, q equality is desired, so 1 and !0 are equivalent. If the question calls for testing whether a condition is true, the output must be truthy if the condition is true and falsy if the condition is false, but is unconstrained beyond that. You may not swap true for false and false for true. If the question calls for something to be printed, nothing else may be printed except a trailing newline.

All answers must be valid for the most recent Pyth commit as of this question's posting.

Problem 1: Given a set in Q, output a list containing the elements of Q in any order.

; 3 bytes
f1Q


Problem 2: Output the list [1, 1, 0, 0, 1, 1, 0].

; 9 bytes
[J1JZZJJZ


Problem 3: Given a positive integer in Q, test whether all of Q's digits are positive (not zero).

; 7 bytes
!f!TjQT


Problem 4: Given a string in z, test whether z contains any quotation marks - " or '.

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


Problem 5: Map Q=1 to 'Win', Q=0 to 'Tie' and Q=-1 to 'Lose'.

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


Problem 6: Print 0123456789.

; 6 bytes
smdUT


Problem 7: Given a string in z, count the number of inversions.

(Indexes i and j form an inversion if i < j but z[i] > z[j]).

; 17 bytes
ssmm>@zd@zkrdlzUz


Problem 8: Given a list in z, count the number of repeated adjacent elements.

; 9 bytes
lfqFT.:z2

• @user1737909 That answer is correct. f1Q filters Q on a function that is always true, so it always outputs every element of the set. f outputs a list, which meets the objective in that question. Feb 4, 2016 at 17:28
• I'm closing this question as off-topic because multi-part challenges with no interaction between the parts are disallowed. meta.codegolf.stackexchange.com/a/8464/45941 May 30, 2017 at 10:27

# 52 bytes

Problem 1: 2 bytes

    SQ

Problem 2: 5 bytes
    jC\f2

Problem 3: 4 bytes
    -0Q
Problem 4: 6 bytes
    @z+N\'
Problem 5: 17 bytes
    %3>"LTWoiisene"hQ
or
    @c3"LoseTieWin"hQ
Problem 6: 3 bytes
    pMT
Problem 7: 9 bytes
    s>R_d.cz2
Problem 8: 6 bytes
    sqVztz
Combining @xnor's solution for problem 4 with mine (both 6 bytes) gives a nice 4 bytes solution. So 48 bytes are possible.

• You can't combine your solution with xnor's, because xnor's is invalid (see my comment on his answer).
– orlp
Jul 16, 2015 at 19:54
• @orlp *combining everything but the invalid stuff ;-) Added the solution in my post. Jul 16, 2015 at 20:03
• Ah, I see now :) Guess I was 6 bytes (and counting) worse than optimal.
– orlp
Jul 16, 2015 at 20:10
• aaah! thanks! hadn't realized :). I'll remove that.
– Ven
Feb 12, 2016 at 14:45

# 54 bytes

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

• Nicely golfed :-) Jul 16, 2015 at 11:47
• is you answer for task 4 valid since on falsey it just prints a blank line? Jul 16, 2015 at 12:20
• @Maltysen Yes, because the truthy value of "" is False because not "" is True.
– orlp
Jul 16, 2015 at 12:21

# 58 bytes

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

• I didn't know about V (although I still don't fully understand it, since you're doing vector operations on inequal length operands), so I'm excused for that one, but I really should've thought of C\f =/
– orlp
Jul 16, 2015 at 12:13
• @orlp V automatically truncates unequal inputs Jul 16, 2015 at 12:19

This post is for the accumulation of the best solutions across all answers. Please edit in the solution and the answerer who first found that solution if there any improvements.

# 48 bytes

1. SQ - 2 bytes, first posted by @orlp
2. jC\f2 - 5 bytes, first posted by @Maltysen
3. -0Q - 4 bytes, first posted by @Jakube
4. @zN - 4 bytes, mixture of @xnor and @Jakube, but not in any answers yet.
(I didn't see it when writing the question, either)
5. @c3"LoseTieWin"hQ - 17 bytes, first posted by @orlp
6. pMT - 3 bytes, first posted by @Jakube
7. s>M.cz2 - 7 bytes, first posted by @orlp
8. sqVtzz - 6 bytes, first posted by @Maltysen

• are we restricting to Pyth versions from before the question ? Jul 21, 2015 at 12:10
• "All answers must be valid for the most recent Pyth commit as of this question's posting." Put I'd be interested to hear what you were thinking of. @Optimizer Jul 21, 2015 at 12:14
• Pyth is ever evolving, right ? (at a much faster pace than other golfing languages). So its very likely that this number (48) will easily go sub 40 in near future. And since this is a practice challenge, you would ideally want to practice using the latest Pyth version for newer challenges. Jul 21, 2015 at 12:16

## 57 bytes

1. (2) SQ Sort.
2. (5) jC\f2 Convert f to ASCII val then base 2.
3. (5) /Q0 Count '0' in the number string.
4. (5) @z\' Takes the set intersection of the string with "'".
5. (18) @c"Tie Win Lose"dQ Makes the list with split. I didn't get slicing to work.
6. (4) jkUT Join range(10). Apparently converts to a string automatically.
7. (9) sm>d_d.:zCounts substrings that are greater than their reverse.
8. (9) l@C,zz.:z Length of intersection of sublists of the list and pairs of elements in the list. Same length as reference solution.

• Your solution for #4 is invalid. For example the string te\\st` is a false positive.
– orlp
Jul 16, 2015 at 19:53
• @orlp Replaced it with different, shorter solution.
– xnor
Jul 16, 2015 at 20:09