Lời khuyên cho việc chơi golf ở Pyth


46

Pyth là ngôn ngữ lập trình thủ tục lấy cảm hứng từ Python, được tạo bởi người dùng PPCG isaacg .

Bạn có lời khuyên chung nào cho việc chơi golf ở Pyth? Tôi đang tìm kiếm những ý tưởng có thể được áp dụng cho các vấn đề về golf nói chung ít nhất là phần nào cụ thể đối với Pyth.

Một lời khuyên cho mỗi câu trả lời, xin vui lòng.

Câu trả lời:


25

Viết mã bằng Python trước

Pyth rất giống với Python nên việc dịch các chương trình Python sang Pyth khá dễ dàng. Tuy nhiên, vì Pyth là ngôn ngữ một chữ cái cho mỗi lệnh, đôi khi rất khó để viết thẳng Pyth. Bằng cách viết bằng Python trước, sẽ có ít suy nghĩ hơn tại một thời điểm (vì Python là ngôn ngữ khá dễ để viết mã).


1
Bạn cũng có thể đề cập rằng bạn vẫn có thể sử dụng cú pháp Python trong Pyth, vì vậy bạn có thể chuyển đổi các phần của chương trình riêng lẻ hoặc chỉ sử dụng python nếu cần. (Như bạn đã làm ở đây )
FryAmTheEggman

@ mbomb007 Tải xuống trình thông dịch Pyth và đọc qua các tài liệu. Đó là cách đáng tin cậy duy nhất tôi biết để viết chương trình Pyth.
Justin

@ mbomb007 Xin lỗi; đó là cách tôi học cách viết Pyth (xem qua mã nguồn). Về cơ bản không có tài liệu nào về Pyth; về cơ bản bạn phải học cú pháp bằng cách dùng thử và lỗi.
Justin

22

Biết các biến của bạn

Pyth có 3 loại biến: biến chung được khởi tạo trước, biến được khởi tạo trước dựa trên đầu vào của người dùng và các biến ngầm tạo ra một phép gán trong lần sử dụng đầu tiên.

Biến chung:

b = "\n"
d = " "
k = ""
G = "abcdefghijklmnopqrstuvwxyz"
H = {}                            # (empty dict)
N = '"'
T = 10
Y = []
Z = 0

Các biến khởi tạo đầu vào:

Q = eval(input())
z = input()

Lưu ý rằng các khởi tạo này sẽ chỉ được chạy trong một chương trình nhất định nếu biến liên quan được sử dụng bên ngoài chuỗi trong mã. Ngoài ra, thứ tự là Q, sau đó z, nếu cả hai được sử dụng.

Bài tập về các biến sử dụng đầu tiên:

JK. Nếu bạn muốn khởi tạo cả hai thành cùng một giá trị, bạn có thể làm như vậy với một biểu thức như KJ0, tương đương với độ dài hơn J0K0.


18

Sử dụng trình thông dịch trực tuyến mới hơn để kiểm tra câu trả lời của bạn.

Lưu ý rằng đây là phần mềm mới, vì vậy nó có thể có lỗi. Vui lòng báo cáo bất kỳ vấn đề với tôi.


2
Tuyệt vời! Tôi không thể tìm thấy cái này với google, đúng thứ tôi cần!
theonlygusti

12

Chuỗi ở cuối dòng không cần dấu ngoặc kép. Ví dụ:

"Hello, world!

là một chương trình Hello World hoàn toàn hợp lệ.


Thực sự khá rõ ràng, đó là kết quả google đầu tiên cho "Ngôn ngữ lập trình Pyth". Bạn đã tạo trang của riêng bạn trên esolang?
theonlygusti

3
@theonlygusti Vâng, tôi đã làm. Ngoài ra, đó không phải là kết quả đầu tiên vào tháng 10 năm ngoái.
isaacg

9

Sử dụng Cđể nén cơ sở

Điều này thực sự không có giấy tờ, C trên một chuỗi thực sự không phải là chr trực tiếp -> int mà thay vào đó là cơ sở 256 -> cơ sở 10 (tương tự trên một chuỗi char). Điều này cực kỳ hữu ích trong việc nén một int, chúng ta có thể sử dụng tập lệnh này để nén:

sCMjQ256

Hãy 12345678910, kết quả là ßÜ>(một số không thể in trong đó).

Ngoài ra với một mảng các số nguyên, bạn có thể nối chúng và với các chuỗi lớn bằng cách chuyển đổi thành các điểm mã và coi là số 128 cơ sở.

Một cách sử dụng khác C, cảm ơn @xnor đã cho tôi thấy điều này, đang tạo ra một số lượng lớn tùy ý. Cách ngây thơ là:

^TT

Nhưng chúng ta có thể làm tốt hơn một byte với:

CG

cơ sở 256 này giải mã toàn bộ bảng chữ cái. Kết quả 156490583352162063278528710879425690470022892627113539022649722= ~ 1.56e62.


Đã thêm vào doc bây giờ.
isaacg


8

Sử dụng các chức năng ngắn ... err ...

Khi đối số lambda đến maphoặc reducechỉ áp dụng một thao tác cho các đối số ,, bạn có thể sử dụng các biểu mẫu ngắn MF. fMxlà tương đương với mfdx, và fFxlà điều tương tự như .UfbZx. Chẳng hạn, giả sử chúng ta lấy một danh sách các số làm đầu vào và đầu ra mỗi số tăng lên. Cách tiếp cận đầu tiên có thể là:

mhdQ

Tuy nhiên, điều đó có thể được viết lại thành:

hMQ

Một điều tương tự áp dụng reducevới F. Ví dụ, giả sử có một thách thức để tính tích của một danh sách các số nguyên. Một lần nữa, lần thử đầu tiên có thể là:

.U*bZQ

Tuy nhiên, với F, điều đó có thể được rút ngắn thành:

*FQ

Cạo ba byte ... không tệ!


Và bạn không cần Q, vì nó được bổ sung khi chức năng bị thiếu đầu vào, làm cho nó*F
Stan Strum

7

Giữ cho việc thực hiện Pyth của bạn được cập nhật.

Tôi khá thường xuyên cải thiện Pyth, loại bỏ các tính năng ít hữu ích hơn và thêm các tính năng hữu ích hơn, vì vậy hãy theo dõi những gì mới và cập nhật bản sao triển khai của bạn thường xuyên.

Một số tính năng được thêm gần đây: (kể từ ngày 19/10/14)

y: Hoạt động như *2trên các số và dưới dạng danh sách tất cả các tập hợp con trên chuỗi và danh sách. Ví dụ:

pyth -c 'y"abc'
['', 'a', 'b', 'c', 'ab', 'ac', 'bc', 'abc']

f: fthường là lệnh lọc. Bây giờ, khi được gọi với một số làm đối số thứ hai của nó, nó sẽ lọc qua chuỗi vô hạn bắt đầu bằng số đó và đếm theo số đó, sau đó trả về phần tử đầu tiên của chuỗi kết quả.

Chẳng hạn, đây là mã để tìm số nguyên tố nhỏ nhất trên một tỷ:

pyth -c 'f!tPT^T9'
1000000007

Chúng trông giống như những bổ sung hữu ích, nhưng bạn có thể sử dụng cái gì thay vì cái cũ yz? mvdczdkhông thể là con đường ngắn nhất ...
Dennis

1
@Dennis Tôi đã loại bỏ cái cũ ybởi vì tôi không nghĩ Pyth cần phải có nhiều định dạng đầu vào được phân tích cú pháp siêu dễ dàng, chỉ một định dạng, ví dụ như định dạng Python. Vì vậy, vâng, tôi nghĩ mvdczdsẽ phải làm, thật không may.
isaacg

@Dennis Vấn đề đã được giải quyết, chỉ cần thêm phần này vào rbộ xử lý chuỗi.
isaacg

rcó vẻ khá hữu ích
Dennis

@isaacg Xin lỗi nếu điều này không đúng chủ đề, nhưng tôi tự hỏi làm thế nào để sử dụng thao tác root @trong Fdr1 + 1 @ Q2Iq% Qd0d để tạo một máy tính hệ số. Khi tôi cố gắng sử dụng nó, nó mặc định indexcó nghĩa là thay thế. Có cách nào xung quanh hành vi này?
StardustGogeta

5

Các đối số được đặt tên trong các hàm (Không còn được hỗ trợ)

Đôi khi, các giá trị mặc định trong các chức năng có thể hữu ích cho việc chơi gôn. Pyth thực sự hỗ trợ điều này (nhiều điều làm tôi ngạc nhiên). Ví dụ:

DC=Z1RZ;C;C5

Sẽ in:

1
5

Bạn cũng có thể sử dụng J và K để lưu các ký tự khi thực hiện việc này:

DgJ1K1R+JKg;g2;g2 3

in:

2
3
5

Điều này thường hữu ích cho các thuật toán đệ quy.

Điều này không còn hoạt động, nhưng tôi đã để nó ở đây trong trường hợp ai đó muốn chơi golf bằng một phiên bản cũ của Pyth.


16
Wow - Ngay cả tôi cũng không nhận ra Pyth ủng hộ điều này và tôi đã viết ngôn ngữ!
isaacg

Thật không may, điều này không còn hoạt động trong các phiên bản gần đây hơn của Pyth.
isaacg

Có nên xóa mẹo này giống như một trong những mẹo hết hạn khác không? Nếu không, có lẽ nó nên được đánh dấu với (các) phiên bản mà mẹo này áp dụng cho.
mbomb007

@ mbomb007 Tôi đã có ý định tìm phiên bản, nhưng tôi đã quá lười biếng. Tôi sẽ xóa nó nếu bạn nghĩ nó tốt hơn theo cách đó cho đến khi tôi tìm thấy nó.
FryAmTheEggman

@FryAmTheEggman Tôi nghĩ rằng nó tùy thuộc vào bạn, vì nó nói trong tiêu đề rằng nó không được hỗ trợ.
mbomb007

5

Giải nén bộ dữ liệu 2 phần tử với F

Giả sử bạn có bộ dữ liệu 2 phần tử J = (a, b), và bạn muốn r(a,b), cho một số hàm 2 arity r.

Cách ngây thơ để làm điều này là rhJeJ.

Cách ưa thích để làm điều này là r.*J, sử dụng toán tử giải nén.

Cách thực sự lạ mắt để làm điều này là rFJ, sử dụng toán tử gấp.


nó vẫn có thể sử dụng .ucho điều đó? .udường như được tích lũy giảm ngay bây giờ.
Ven

.u ->. * đây là một thay đổi đã được thực hiện trước đây, nhưng chưa bao giờ được cập nhật.
isaacg

4

Sử dụng các hàm số học ngắn

h: Khác với việc trả về phần tử đầu tiên của danh sách, nó sẽ tăng một số, ví dụ: hTước tính thành 11. Ngắn hơn +1T.

t: Điều này làm giảm một số (trừ trả về đuôi của danh sách), ví dụ: tTước tính cho 9. Ngắn hơn -T1.

y: Điều này nhân đôi một số, ví dụ: yTước tính 20, ngắn hơn *T2hoặc +TT.


4

Sử dụng mapđể tạo danh sách

Về cơ bản, nó tương đương với sự hiểu biết về danh sách ưa thích của trăn. Sử dụng danh sách hiện có hoặc một phạm vi để lặp lại và ánh xạ từng giá trị, ngay cả khi giá trị không thành vấn đề.

Hai ví dụ:

  • Tạo danh sách 8 số không.

    mZ8 thay vì *8]Z

  • Tạo danh sách 5 số ngẫu nhiên trong khoảng từ 0 đến 9:

    mOT5 thay vì V5~Y]OT)

    Cái thứ hai tự động gán danh sách cho Y(thực ra nó cũng nối với Y), nhưng thậm chí còn =YmOTU5ngắn hơn.


4

Q tiềm ẩn tại EOF

Đây là một thay đổi mới, như ngày nay.

Qlà biến được tự động khởi tạo cho đầu vào được đánh giá. Nó được mặc nhiên kết thúc vào cuối chương trình Pyth, bao nhiêu lần là cần thiết để làm cho sự ổn định hoạt động. Để xem ví dụ về cách sử dụng tính năng này cho việc chơi gôn, giả sử chúng tôi muốn tính toán hàm Collatz của đầu vào.

Một cách ngắn nhất để viết nó là như thế này:

@,/Q2h*3QQ

Tuy nhiên, vì các Qẩn được đặt ở cuối tệp, chúng ta chỉ cần viết:

@,/Q2h*3

Tiết kiệm 2 byte.

Lưu ý rằng các hàm có đối số không bắt buộc sẽ không được điền vào các đối số đó. Ví dụ: c"12 12"sẽ không có ẩn Q, vì cchỉ yêu cầu 1 đối số.


3

Sử dụng giảm để áp dụng một chức năng nhiều lần.

Giả sử bạn cần đặt một biến cho một số chức năng của chính nó và lặp lại một số lần nhất định. Lấy ví dụ, vấn đề tìm số 100 sau này trong Chuỗi Collatz từ đầu vào. Cách ngắn nhất để tìm số tiếp theo trong chuỗi, nếu số ban đầu là Q, là

@,/Q2h*Q3Q

Cách rõ ràng nhất để áp dụng điều này 100 lần và in kết quả sẽ là

V100=Q@,/Q2h*Q3Q;Q

Lặp lại 100 lần, cập nhật giá trị của Q mỗi lần, sau đó kết thúc vòng lặp và in Q.

Thay vào đó, chúng ta có thể sử dụng hàm giảm mà bỏ qua biến chuỗi ( H).

u@,/G2h*G3GU100Q

Đây là 2 ký tự ngắn hơn. Nó ngắn hơn 3 ký tự nếu bạn đang cố lặp nhiều lần như có các phần tử trong một chuỗi.


3

Thường có những lựa chọn thay thế ngắn hơn cho Bất kỳ

Khi bạn muốn tìm xem bất kỳ chuỗi nào thỏa mãn một điều kiện, bạn thường sẽ sử dụng .Em. Ví dụ: nếu bạn muốn tìm hiểu xem có bất kỳ trong danh sách nào lớn hơn hoặc bằng 5:

.Emgd5Q

Nhưng, nếu nó chỉ cần là một sự thật / falsey, không đúng / sai, smsẽ hoạt động vì sum hoạt động trên các bool.

smgd5Q

Chúng tôi thậm chí có thể làm một ngắn hơn, với filter:

fgT5Q

Cái cuối cùng trông thật xấu xí.

Đối với .All, điều duy nhất tôi có thể nghĩ đến là sử dụng điều kiện ngược lại và phủ nhận nó cho một lần lưu lại .Am:

!f<T5Q

3

Nhìn vào tất cả các tùy chọn luồng điều khiển

Vòng lặp:

F: Đối với vòng lặp. Giống như Python.

V: Cho vòng lặp trên một phạm vi. Không được đưa ra biến cũng như phạm vi, vì vậy ngắn hơn 2 ký tự.

W: Trong khi lặp lại. Giống như Python.

#: Vòng lặp vô hạn. Thoát với lỗi hoặc phá vỡ rõ ràng. Chỉ có try ... excepttính năng bây giờ trong Pyth.

Chức năng:

D: Định nghĩa chung. Giống như Python.

L: 1 đối số, không có hàm gán, như lambda của Python, nhưng được đặt tên. Tên hàm, tên biến và return ( R) không cần phải được cung cấp, vì vậy ngắn hơn 3 ký tự.

Lập trình chức năng:

f: Bộ lọc - chọn các thành phần của chuỗi đầu vào trả về giá trị trung thực trên lambda đầu vào.

f: Số nguyên đầu tiên lớn hơn hoặc bằng đầu vào, cho kết quả bộ lọc trung thực.

m: Map - biến đổi các phần tử của chuỗi đầu vào bằng lambda đầu vào.

u: Giảm - gấp chuỗi đầu vào trên lambda đầu vào, khởi tạo bộ tích lũy thành đối số thứ ba.

o: Thứ tự - các yếu tố cũ hơn của chuỗi đầu vào sử dụng lambda đầu vào làm khóa.

Thông thường, sẽ có nhiều khả năng cho bất kỳ vấn đề nào và chỉ bằng cách viết các giải pháp kiểm tra với từng vấn đề, bạn mới có thể tìm ra cái nào ngắn nhất.


.xgần đây có thể được sử dụng cho các khối ngoại trừ thử.
mbomb007

@ mbomb007 có cách nào để bỏ bê ngoại trừ khối, ý tôi là có thể để trống không? Ví dụ : .x{some_statments}{except_block - can this be empty}.
Gurupad Mamadapur

@GurupadMamadapur # ... Bcó thể được sử dụng theo cách này nếu bạn không ở trong một biểu thức
isaacg

3

Chuyển đổi hai yếu tố trong một danh sách

Chuyển đổi hai yếu tố có thể là một nhiệm vụ khá tốn kém. Vì vậy, đây là hai cách tiếp cận bạn muốn sử dụng.

Phương pháp tiếp cận biến Tmp

Để chuẩn bị, chúng tôi xác định một danh sách Yvà điền nó với một số số. Mục tiêu là để chuyển đổi yếu tố thứ hai và thứ ba.

=Y[1 3 5 3 6 7)AGH,1 2

Chúng ta chỉ cần gán biến tmp J = Q[G], thực hiện phép gán danh sách đầu tiên Y[G] = Y[H]và sau đó là lần gán cuối cùng thứ hai Y[H] = J. Mẹo ở đây là lồng hai bài tập danh sách, vì vậy bạn không phải ngừng in và không phải sử dụng tham khảo hai lần Y.

J@YGXXYG@YHHJ

thay vì

J@YG XYG@YHXYHJ

Cách tiếp cận dịch

Nếu các yếu tố mà bạn muốn chuyển đổi là duy nhất trong danh sách, hãy sử dụng phương pháp này. Nó thực sự ngắn. Vì vậy, lần này chúng ta chuyển phần tử thứ nhất và thứ ba (các giá trị 15là duy nhất).

=Y[1 3 5 3 6 7)K,Z2

Điều này sử dụng chức năng dịch của danh sách:

XYm@YdK)

Dịch này thay thế mọi yếu tố Y[0]với Y[1]và mọi Y[1]với Y[0]. Vì vậy, nếu các giá trị không phải là duy nhất, những điều xấu xảy ra. Ví dụ K,1 2kết quả trong [1, 5, 3, 5, 6, 7].

Lưu ý rằng dấu ngoặc đơn đóng là tùy chọn, nếu câu lệnh là câu cuối cùng trong mã của bạn.


3

Gỡ lỗi với <newline>

Nếu mã của bạn được viết theo kiểu lập trình bắt buộc, việc gỡ lỗi khá dễ dàng, vì bạn có thể dễ dàng in kết quả trung gian. ( permalink )

FN.:Q2                loop
      =Y+-Y-FNhN      some random command
                Y     print intermediate result
                 ;Y   end for loop and print result

Nhưng một lượng lớn chương trình Pyth sử dụng các yếu tố của lập trình chức năng, như bản đồ, bộ lọc và thu nhỏ, không cho phép in đơn giản như vậy. Nhưng nó vẫn có thể, sử dụng \nlệnh.

Mã tương tự sử dụng u(giảm) sẽ là: ( permalink )

u        .:Q2Y   reduce .:Q2, start with G = Y
 +-G-FHhH        random command

Nếu bạn muốn in các giá trị trung gian, chỉ cần chèn \n: ( permalink )

u         .:Q2Y   reduce
   \nG             print(G)
 +-\nG-FHhH        random command

\nain atrên một dòng mới và trả lại a. Vì vậy, bạn có thể chèn nó bất cứ nơi nào mà không phải lo lắng thay đổi chức năng của chương trình.


Ngày nay bạn có thể sử dụng dòng mới cho cái này, nó cũng in một dòng mới.
PurkkaKoodari

@ Pietu1998 Vâng, tôi sử dụng nó mọi lúc. Thời gian để cập nhật bài viết.
Jakube

3

Tìm tối đa hai số nguyên

g#

Ví dụ, giả sử bạn có J=5K=12. Sau đó g#JK= 12, và g#KJ= 12 là tốt.

Điều này đã được phát hiện bởi @ Pietu1998, người đã đặt nó theo cách này:

Không chắc ai đó đã tìm thấy nó chưa, nhưng có một cách hay để làm max (A, B) trong 2 byte, không cần sử dụng 3 cho eS,AB. g#ABlàm điều tương tự (Tuy nhiên, nó rất không hiệu quả vì nó lặp tối đa (1, A-B + 1) lần. Tối ưu hóa là đặt số có khả năng lớn hơn bằng B.)


@Jakube Điều này đúng. Tôi dường như nhầm lẫn một cái gì đó trong khi gõ này trong trò chuyện.
PurkkaKoodari

2

joinPhương pháp của Pyth

Các joinphương pháp trong Python có thể thường là một chút khó chịu, vì nó chỉ tham gia chuỗi. Pyth's joinhào phóng hơn. Nó biến đổi tất cả các đối tượng trong chuỗi theo mặc định.

Ví dụ: jkUTcho 0123456789hoặc jb["abc"4,5\f]7cho

abc
4
(5, 'f')
[7]

Gần đây, thậm chí nhiều chức năng chuyển đổi thành chuỗi đã được thêm vào - đối số đầu tiên cũng bị ép buộc thành một chuỗi, ví dụ j2\a\b->"a2b"
isaacg

1

Nói nếu một số là một số nguyên

Một mẹo nhỏ là sử dụng Invariant để biết nếu một số là một số nguyên như vậy:

sI

Điều này kiểm tra xem số đó có thay đổi không khi bạn cắt bớt nó, số này sẽ không thay đổi nếu đó là một số nguyên.

Ví dụ: bạn có thể sử dụng điều này như một kiểm tra hình vuông hoàn hảo:

sI@Q2

1

Sử dụng gói Pyth

Packed Pyth là một "ngôn ngữ lập trình" mới hoàn toàn giống với Pyth, ngoại trừ việc nó sử dụng 7 bit cho mỗi ký tự thay vì 8 bit cho mỗi ký tự.

Để sử dụng nó, sao chép kho lưu trữ thứ . Các tập tin packed-pyth.pylà thông dịch viên.

Nói mã của bạn là "Hello, world!.

Đầu tiên, đặt nó trong một tập tin: echo -n '"Hello, world!' > code.pyth

Tiếp theo, đóng gói mã Pyth vào tệp Pyth đóng gói: python3 packed-pyth.py -p code.pyth code.ppyth

Cuối cùng, chạy mã Pyth Packed: python3 packed-pyth.py code.ppyth

Khi chạy mã, bạn có thể cung cấp -dcờ để xem mã Pyth thực sự đang chạy là gì và bạn có thể cung cấp đầu vào dưới dạng đối số dòng lệnh thứ hai sau tệp chứa mã.

Ưu điểm:

  • Mã ngắn hơn 1/8.

Nhược điểm:

  • Chỉ ASCII.

  • Không có đầu vào tương tác.

  • Tùy chọn gỡ lỗi đầy đủ là không có sẵn.

  • Báo cáo lỗi nặng hơn.


1
Giống như chúng ta đã làm cho chế độ an toàn, chúng ta có thể di chuyển nó thành một lá cờ không?
Maltysen

Điều này thật tuyệt vời btw: D
Maltysen

@Maltysen Tôi nghĩ rằng sẽ tăng số điểm byte lên một.
isaacg

Không thể đóng gói Pyth hơn nữa vì nó chỉ sử dụng ASCII có thể in được?
lirtosiast

1

Kiểm tra phân chia bằng cách sử dụng Ivà GCD

Disclaimer: Điều này chỉ hoạt động cho các số nguyên không âm.

Để kiểm tra xem hai số nguyên không âm có chia hết không, bạn có thể làm như sau:

iI<divisor><dividend>

Nếu a chia hết cho ba b 0 , thì gcd (a, b) = b .

Nó không nhất thiết phải lưu byte !%<dividend><divisor>, nhưng nó có thể mang lại cho bạn một khoản tiết kiệm, bởi vì:

  • Bạn có thể điều chỉnh các nội dung ẩn ở cuối chương trình Pyth (như bỏ Q), khi làm việc với cổ tức.
  • Bạn có thể sử dụng nó như một <pfn>, vì nó là một chức năng của riêng mình.
  • Nó xử lý modulo bằng 0.

Thử nó!


Một ưu điểm nữa: iIlà một hàm riêng, trong khi !%không phải vậy, vì vậy bạn có thể sử dụng nó làm hàm tiền tố.
Erik the Outgolfer 31/12/17

@EriktheOutgolfer Cảm ơn, đã thêm vào danh sách các lợi thế :)
Ông Xcoder

0

Gán một biến cho một hàm áp dụng cho chính nó

Nếu bạn có chức năng của arity 1 và muốn áp dụng điều đó cho một biến và áp dụng cho chính nó, bạn có thể sử dụng cú pháp sau:

=<function><variable>

Thay vì:

=<variable><function><variable>

Ví dụ: nếu bạn muốn tăng biến Z, bạn có thể làm:

=hZ

Mà tiết kiệm một byte hơn =ZhZ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.