Bạn tôi và tôi có trò chơi này mà chúng tôi chơi với các từ. Đây là một trò tiêu khiển thú vị và nó liên quan đến việc "hủy bỏ" các chữ cái trong một từ cho đến khi không còn gì. Tôi thực sự mệt mỏi vì anh ta nhanh hơn tôi rất nhiều, vì vậy công việc của bạn là thực hiện nó và để tôi cuối cùng đánh bại anh ta. Rõ ràng, vì tôi phải làm cho chương trình dễ dàng che giấu nhất có thể, nó phải nhỏ nhất có thể.
Trò chơi này hoạt động như thế nào?
Trò chơi là một thuật toán khá đơn giản. Nó giảm một chuỗi chữ cái cho đến khi không thể giảm thêm nữa, do đó làm cho nó trở thành một loại băm. Trò chơi thực tế mà con người chúng ta làm rất khó thực hiện, nhưng nó có thể được đơn giản hóa thành thuật toán sau:
Bạn bắt đầu bằng cách gấp bảng chữ cái làm đôi và xếp thành hai mảnh như sau:
a b c d e f g h i j k l m
z y x w v u t s r p q o n
Sau đó, bắt đầu từ giữa, bạn gán các số nguyên dương cho nửa trên và âm ở dưới:
a b c d e f g h i j k l m
13 12 11 10 9 8 7 6 5 4 3 2 1
z y x w v u t s r p q o n
-13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
Sau đó, bạn lấy chuỗi của mình (chúng tôi sẽ sử dụng hello world
) và bỏ qua mọi ký tự không theo thứ tự chữ cái, dịch nó:
h e l l o w o r l d
6 9 2 2 -2 -10 -2 -5 2 10
Sau đó, bạn tổng hợp các giá trị chữ cái. Những người xếp hàng trong biểu đồ trước đó (ví dụ d
và w
, l
và o
) sẽ hủy bỏ ra, trong khi những người khác sẽ thêm lên.
sum(6 9 2 2 -2 -10 -2 -5 2 10 )=12
12 là số cho b
, vì vậy các hash của hello world
làb
Đối với một từ hoàn toàn hủy bỏ (ví dụ love
), bạn xuất "0 ký tự" : -
. Lưu ý rằng trong đầu vào, -
vẫn sẽ bị bỏ qua. Nó chỉ quan trọng trong đầu ra.
Nếu cường độ của số lớn hơn 13, thì bạn bắt đầu nhân đôi số a
của bạn và z
về cơ bản, bạn có thể lấy bao nhiêu số a
hoặc z
phù hợp với số đó và lấy bất cứ thứ gì còn lại trong chữ cái cuối cùng như vậy:
code golf: 43.
Phù hợp với 3 a
'và có 4 trái:
aaa 4: j
result: aaaj
Gợi ý: Phần này về cơ bản divmod
ngoại trừ việc nó làm tròn về 0, không -infinity
(ví dụ -43 sẽ trở thành 3 z
và một -4
là p
như vậy zzzp
).
Lưu ý: dấu gạch ngang không đến nếu a
's hoặc z
' s phù hợp trong một cách hoàn hảo, chỉ khi nó là chính xác 0
.
Làm rõ:
- Băm là trường hợp trong nhạy cảm
- Lỗ hổng tiêu chuẩn không được phép
- I / O có thể ở bất kỳ định dạng nào không quá xa lạ, stdin, stdout, dòng lệnh arg, hàm, v.v.
- Đây là mã golf để kích thước ngắn nhất tính bằng byte thắng.
Ví dụ:
hello world --> b
love --> -
this is an example --> aak
hello *&*(&(*&%& world --> b
good bye --> ae
root users --> zzs
love
trống rỗng ...