Thứ hai Mini-Golf: Một loạt các thử thách golf-code ngắn , được đăng (hy vọng!) Vào mỗi thứ Hai.
(Xin lỗi người này hơi muộn.)
Tôi chắc rằng hầu hết các bạn đã nghe về khoảng cách Levenshtein , một thuật toán để tính khoảng cách giữa hai chuỗi. Chà, thử thách này là về việc thực hiện một thuật toán tương tự của phát minh của riêng tôi *, được gọi là khoảng cách đảo chữ . Sự khác biệt chính là thứ tự của các nhân vật không quan trọng; thay vào đó, chỉ các ký tự duy nhất cho một chuỗi hoặc chuỗi kia được đo.
Thử thách
Mục tiêu của thử thách là viết một chương trình hoặc hàm có hai chuỗi và trả về khoảng cách đảo chữ giữa chúng. Cách chính để làm điều này là sử dụng logic sau:
- Chuyển đổi cả hai chuỗi thành chữ thường và (tùy chọn) sắp xếp các ký tự của mỗi người theo thứ tự bảng chữ cái.
- Trong khi các chuỗi chứa ít nhất một ký tự bằng nhau, hãy xóa phiên bản đầu tiên của ký tự này khỏi mỗi chuỗi.
- Thêm độ dài của các chuỗi còn lại và trả về / xuất kết quả.
Thí dụ
Nếu đầu vào là:
Hello, world!
Code golf!
Sau đó, hạ cấp và sắp xếp, chúng trở thành: (theo cách sắp xếp mặc định của JS; lưu ý các khoảng trắng hàng đầu)
!,dehllloorw
!cdefgloo
Xóa tất cả các ký tự trong cả hai chuỗi, chúng tôi kết thúc bằng:
,hllrw
cfg
Do đó, khoảng cách đảo chữ giữa hai chuỗi gốc = 6 + 3 = 9.
Chi tiết
- Các chuỗi có thể được thực hiện trong bất kỳ định dạng hợp lý.
- Các chuỗi sẽ chỉ bao gồm ASCII có thể in.
- Bản thân các chuỗi sẽ không chứa bất kỳ khoảng trắng nào ngoài các khoảng trắng thông thường. (Không có tab, dòng mới, v.v.)
- Bạn không cần sử dụng thuật toán chính xác này, miễn là kết quả là như nhau.
Các trường hợp thử nghiệm
Đầu vào 1:
Hello, world!
Code golf!
Đầu ra 1:
9
Đầu vào 2:
12345 This is some text.
.txet emos si sihT 54321
Đầu ra 2:
0
Đầu vào 3:
All unique characters here!
Bdfgjkmopvwxyz?
Đầu ra 3:
42
Đầu vào 4:
This is not exactly like Levenshtein distance,
but you'll notice it is quite similar.
Đầu ra 4:
30
Đầu vào 5:
all lowercase.
ALL UPPERCASE!
Đầu ra 5:
8
Chấm điểm
Đây là mã golf , vì vậy mã hợp lệ ngắn nhất tính bằng byte thắng. Tiebreaker đi đến trình mà đạt đến số byte cuối cùng của nó đầu tiên. Người chiến thắng sẽ được chọn vào thứ Hai tới, ngày 12 tháng 10. Chúc may mắn!
Chỉnh sửa: Xin chúc mừng người chiến thắng, @isaacg, sử dụng Pyth (một lần nữa) cho 12 byte đáng kinh ngạc !
* Nếu thuật toán này đã được sử dụng ở nơi khác và / hoặc được đặt tên khác, vui lòng cho tôi biết! Tôi không thể tìm thấy nó với một tìm kiếm 20 phút.