Як можна поліпшити Pyth? [зачинено]


24

Pyth постійно розвивається, тобто нові функції постійно додаються.

Я хочу зробити Pyth кращим мовою, тому я хотів би знати, які особливості шукають люди.

Це місце, де ви можете розмістити ідеї для покращення Pyth.

У своїй відповіді просимо зазначити:

  • Те, що ви хочете бачити, змінили / додали.

  • Приклад використання зміни.

Я коментую, якщо я планую реалізувати пропозицію.

Перевірте, чи вже запропонована ідея, яку ви хочете запропонувати. Оновіть ідеї, які хотіли б реалізувати.


Реалізовані пропозиції:


Це було на тему відповідно до цього мета-питання, коли я розміщував це питання, це вже не ясно.


1
Чому це вікі спільноти?
Геобіт

4
Це більше обговорення та збір пропозицій. Ніхто не повинен отримувати та не втрачати представників пропозицій щодо функції Pyth. Також реалізовані пропозиції, ймовірно, повинні бути видалені. Це пов'язане питання - це також вікі спільноти.
Денніс

9
Я не впевнений, як я ставлюсь до таких питань. Я можу бачити, що це має сенс тут, тому що PPCG, ймовірно, охоплює більшість (якщо не всю) базу користувачів Pyth, але я не впевнений, що ми повинні використовувати це як трекер проблем. Я додав відповідь до мета-повідомлення.
Мартін Ендер

Чи не повинно це бути мета? Серйозно хлопці
Alec Teal

2
@AlecTeal "Мета-програмування головоломок та коду Golf Stack Exchange - це частина веб-сайту, де користувачі обговорюють роботу та політику Code Golf Stack Exchange, а не обговорюють головоломки програмування або код гольфу". Мета спеціально про цю спільноту . Це дійсно не належить до мета. Належить вона тут чи ні на PPCG, зараз обговорюється в мета-повідомленні, до якого я посилався.
Мартін Ендер

Відповіді:


7

Вкладені петлі

Якщо ви хочете вкласти forпетлі, вам наразі доведеться витратити байт для використання F<var><seq>всередині V<seq>або навпаки. Я хотів би мати те ж саме, що і з лямбдами, де змінна, яка використовується для циклу, змінюватиметься при вкладенні циклів.


Це навіть може бути розширене для інших речей, таких як L, які могли б переосмислити, скажімо, Cвдруге, коли це було названо.
FryAmTheEggman


4

Простіший імпорт модуля

Поки щоразу, коли я його використовував, $це було щось на кшталт:

$from <module> import <function> as <pyth-function-with-same-arity>$
for example:
$from unicodedata import name as neg$

Можливо, з’явилася нова функція, яка узагальнила це, наприклад .$:

.$"unicodedata""name""neg"
.$"unicodedata name neg"

Або використовуючи новіший синтаксис, як _Mце може бути непросто / можливо зробити:

_$unicodedata name$

Крім того, одній функції з кожною сукупністю може бути надано ім'я макросу з однієї літери, щоб ці дзвінки могли бути коротшими (за винятком _$опції).


4

Сплячий

Це спричинило неприємності тут , і @ mbomb007 запропонував поставити це як поліпшення Pyth . В основному, зараз, щоб спати протягом даної кількості секунд, мені потрібно зробити щось на кшталт:

Q$__import__('time').sleep(Q)$

Що дратує і довго, як чорт.


Ви можете імітувати поведінку сну за допомогою функції дати. f>.d1Q0наприклад, спить Qсекунди.
Якубе

@Jakube Це не завжди працює. Згідно з документами, в Unix він повертає, скільки часу програма працює. Що погано, коли користувач вводить дані.
kirbyfan64sos

Як щодо цього , ніж: J.d0f>-.d0JQ0. Хоча це досить довго ... Я згоден, функція сну була б непоганою.
Якубе

4

Більше лямбда

Це дійсно ідея FryAmTheEggman , але я публікую її, щоб її вивести.

Іноді я знаходжу, що використання двох одноаргументних лямбда скоротить код, тоді як використання лямбда-двох аргументів для одного не буде.

Було б непогано L, Mа друзі щоразу переосмислюють іншу функцію; наприклад, цей код:

L*b2L*b3y5'5

може скласти:

@memoized
def subsets(b):
 return times(b,2)
@memoized
def read_file(b):
 return times(b,3)
imp_print(subsets(5))
imp_print(read_file(5))

Звичайно, точний вибір функцій можна змінити.


3

Поліпшені багатовимірні масиви

Використання багатовимірних масивів наразі досить важко зробити. Наприклад, код C A[B][C][D]перекладається на @@@ABCDPyth. Щось подібне @A[BCD)було б набагато приємніше (хоч і тут не коротше). Те ж саме стосується і X; A[B][C][D] = Eв даний час X@@ABCDE, коли це могло бути XA[BCD)E.


3

Деякі незначні ідеї

  • Абсолютна різниця, тобто abs(val1 - val2). В даний час це .a-<val1><val2>.
  • min/ maxдля значень. В даний час це hS,<val1><val2>/ eS,<val1><val2>або те саме, що має більше значень. ( hS<seq>/ eS<seq>для послідовностей досить короткий.)

3

Не особливість Pyth, але все-таки ...

Модулюйте код Pyth

Це впливає лише на Pyth під кришкою. Деякі частини реалізації Pyth досить безладні. Безліч глобальних змінних та інших хакітів.

Я дійсно розчарувався кілька днів тому, коли я спробував використовувати кілька функцій реалізації Pyth (наприклад, виконання рядка команд Pyth) з іншого сценарію Python.

Щось подібне було б непогано:

from pyth import execute_pyth
print(execute_pyth(code='sQ', input='[1, 2, 3]'))

Ну, я думаю, це лише дзвінок про допомогу для Pyth5.



1

Унікальні елементи

Наразі Pyth не має короткого способу отримання унікальних елементів послідовності. Ви можете перевірити, чи унікальний він, але ви не можете отримати предмети, які насправді є унікальними. Наразі найкоротший шлях :

{.-Q{Q

6 байт! Порівняйте це з K, де отримання унікальних елементів є операцією один байт: =x.

Може .}, працював би тут?


Які випадки використання (крім одного виклику) ви думаєте?
isaacg

@isaacg Я не можу повністю згадати, але мені довелося спробувати отримати унікальні елементи списку раніше, і мені довелося використовувати щось інше (що завжди було довше).
kirbyfan64sos

Я не програміст Pyth, але я постійно стикаюся з цим у GolfScript / CJam: .&респ. _&з'являється у безлічі відповідей. Це дуже корисно.
Лінн

1
Чим це відрізняється від {Q?
isaacg

1
@isaacg Сортовано
Ypnypn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.