Đồng hồ (phiên âm) Mật mã


12

Giới thiệu:

Tôi có vô số mật mã khác nhau được lưu trữ trong một tài liệu tôi từng biên soạn khi còn bé, tôi đã chọn một vài trong số những mật mã mà tôi nghĩ là phù hợp nhất cho các thử thách (không quá tầm thường và không quá khó) và biến chúng thành thử thách. Hầu hết trong số họ vẫn còn trong hộp cát, và tôi không chắc liệu tôi sẽ đăng tất cả chúng hay chỉ một vài. Đây là cái thứ ba và dễ nhất (sau Mật mã máy tínhMật mã Trifid tôi đã đăng trước đó).


Với Mật mã đồng hồ, chúng tôi sử dụng hình ảnh sau để mã hóa văn bản:

nhập mô tả hình ảnh ở đây
Vì vậy, một câu như this is a clock ciphersẽ trở thành:

t  h i s     i s     a     c l  o  c k     c i p  h e r    (without additional spaces of course, but added as clarification)
19:7:8:18:00:8:18:00:AM:00:2:11:14:2:10:00:2:8:15:7:4:17

Thử thách:

Đưa ra một chuỗi sentence_to_encipher, mã hóa nó như mô tả ở trên.

Quy tắc thử thách:

  • Bạn có thể giả sử di sentence_to_encipherchúc chỉ chứa các chữ cái và dấu cách.
  • Bạn có thể sử dụng cả chữ thường hoặc chữ hoa đầy đủ (vui lòng cho biết cái nào bạn đã sử dụng trong câu trả lời của mình).
  • Bạn không được phép thêm các số 0 đứng đầu cho các chữ cái được mã hóa một chữ số bthông qua j, nhưng hai số không 00là bắt buộc đối với khoảng trắng.
  • Bạn nên sử dụng :như dấu phân cách và :không được phép dẫn đầu hoặc theo dõi bổ sung .
  • Bạn được phép sử dụng chữ thường ampmthay vì chữ hoa AMPM, miễn là phù hợp.

Quy tắc chung:

  • Đây là , vì vậy câu trả lời ngắn nhất bằng byte thắng.
    Đừng để ngôn ngữ mã-golf ngăn cản bạn đăng câu trả lời với các ngôn ngữ không mã hóa. Cố gắng đưa ra một câu trả lời càng ngắn càng tốt cho ngôn ngữ lập trình 'bất kỳ'.
  • Quy tắc chuẩn áp dụng cho câu trả lời của bạn với quy tắc I / O mặc định , vì vậy bạn được phép sử dụng STDIN / STDOUT, các hàm / phương thức với các tham số thích hợp và kiểu trả về, chương trình đầy đủ. Cuộc gọi của bạn.
  • Lỗ hổng mặc định bị cấm.
  • Nếu có thể, vui lòng thêm một liên kết với một bài kiểm tra cho mã của bạn (ví dụ TIO ).
  • Ngoài ra, thêm một lời giải thích cho câu trả lời của bạn rất được khuyến khích.

Các trường hợp thử nghiệm:

Input:  "this is a clock cipher"
Output: "19:7:8:18:00:8:18:00:AM:00:2:11:14:2:10:00:2:8:15:7:4:17"

Input:  "test"
Output: "19:4:18:19"

Input:  "what time is it"
Output: "22:7:AM:19:00:19:8:12:4:00:8:18:00:8:19"

Input:  "acegikmoqsuwy bdfhjlnprtvxz"
Output: "AM:2:4:6:8:10:12:14:16:18:20:22:24:00:1:3:5:7:9:11:13:15:17:19:21:23:PM"

Input:  "easy peazy"
Output: "4:AM:18:24:00:15:4:AM:PM:24"


Là nó cho phép để đầu ra [7, ":", 8, ":", "00", ":", 1, ":", 14, ":", 1]cho hi bob, hoặc người ta phải tham gia kết quả? Nhân tiện, mật mã gọn gàng!
Ông Xcoder

@ Mr.Xcoder Xin lỗi, vì lợi ích của chủ đề mật mã, tôi muốn nói rằng nó nên được nối vào một chuỗi (hoặc toàn bộ là một danh sách các ký tự như thế ['7', ':', '8', ':', '0', '0', ':', '1', ':', '1', '4', ':', '1']).
Kevin Cruijssen

Câu trả lời:



5

05AB1E , 22 21 byte

„AM24L„PM00)˜Að«s‡':ý

Hãy thử trực tuyến! hoặc như một bộ thử nghiệm

Một số giải pháp 21 byte thay thế :

':ýAð«24L„AMš„PMª00ª‡
00„AM24L„PM)˜AIk>è':ý

Câu trả lời hay, tôi đã quản lý để có được 23 byte thông qua nhiều cách tiếp cận (một trong số đó là câu trả lời hiện đang bị xóa của tôi). Đó là một cách gọn gàng để sắp xếp ngăn xếp của bạn để tiết kiệm một byte!
Ông Xcoder

1
Một thay thế 22 byter kết hợp câu trả lời của chúng tôi: Hãy thử trực tuyến!
Ông Xcoder

@ Mr.Xcoder: Ý tưởng đầu tiên của tôi thực sự trông như thế, nhưng tệ hơn 2 byte vì tôi không nhớ rằng nó ªđã thay đổi :)
Emigna

Tôi đã tìm thấy 20 byter bằng cách sử dụng một phần phương pháp của @ Mr.Xcoder , nhưng tôi sẽ để bạn tự tìm ra nó trước khi tôi giới thiệu nó. :)
Kevin Cruijssen

1
@KevinCruijssen: Tôi sẽ cho bạn biết sau khi tôi đã tìm hiểu thêm;)
Emigna

4

Perl 6 , 47 byte

*.ords>>.&{<<00 AM{1..24}PM>>[$_%32]}.join(":")

Hãy thử trực tuyến!

Ẩn danh Bất cứ lambda nào lấy một chuỗi của một trong hai trường hợp và trả về chuỗi được mã hóa.

Giải trình:

*.ords>>.&{                         } # Map the ordinal values to
           <<              >>[$_%32]  # The index in the list
              00 AM{1..24}PM  # 00, AM, the numbers 1 to 24 and PM
                                     .join(":")   # And join with colons

3

Bình thường, 25 byte

j\:m@+++"AM"S24"PM""00"xG

Dùng thử trực tuyến tại đây hoặc xác minh tất cả các trường hợp thử nghiệm cùng một lúc tại đây .

j\:m@+++"AM"S24"PM""00"xGdQ   Implicit: Q=eval(input()), G=lowercase alphabet
                              Trailing dQ inferred
            S24               [1-24]
       +"AM"                  Prepend "AM"
      +        "PM"           Append "PM"
     +             "00"       Append "00" - this is the dictionary
   m                      Q   Map each element of Q, as d, using:
                       xGd      Get the index of d in G, -1 if not present (i.e. space)
    @                           Get the element from the dictionary at the above index
j\:                           Join the result on ":", implicit print



3

C # (Trình biên dịch tương tác Visual C #) , 70 byte

s=>string.Join(":",s.Select(a=>a<33?"00":a<66?"AM":a>89?"PM":a%65+""))

Đưa đầu vào dưới dạng một chuỗi các chữ cái viết thường. Đầu tiên kiểm tra nếu char là một khoảng trắng, và nếu có, chuyển đổi nó thành 00. Tiếp theo, nó kiểm tra xem char có phải là A không, và chuyển đổi nó thành AM. Nó kiểm tra lại Z và chuyển đổi thành PMnếu có. Cuối cùng, nếu char vượt qua tất cả các kiểm tra, nó sẽ được chuyển đổi thành thứ tự chữ cái-1.

-2 byte nhờ @dana

Hãy thử trực tuyến!

// Input taking a string
s => 
// Join the following IEnumerable<char> with a ":" character
string.Join(":", 
// Map all the characters in the string
s.Select(a => 
// Is the char less than 33, aka a space?
a < 33 ? 
// If so, it's a "00"
"00" 
// Else, is this an 'A'?
: a < 66 ?
// If so, convert it to "AM"
"AM" : 
// If it's not 'A' or a space, could it be a 'Z'?
a > 89 ?
// If it is, turn the character into "PM"
"PM" : 
// If it fails all of the checks above, get the characters position in the alphabet and subtract one from that.
a % 65 + ""))



2

05AB1E , 20 byte

':ýð00:A24L„AMš„PMª‡

Rất lấy cảm hứng từ @ Mr.Xcoder 's 22-byter trong các bình luận của 05AB1E câu trả lời hiện tại bằng cách @Emigna .

Lấy đầu vào là một danh sách các ký tự chữ thường (sẽ là 21 byte với một đầu Snếu tôi lấy đầu vào là một chuỗi).

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

':ý            '# Join the (implicit) input list of characters by ":"
                #  i.e. ["e","a","s","y"," ","p","e","a","z","y"] → "e:a:s:y: :p:e:a:z:y"
ð00:            # Replace all spaces " " with "00"
                #  i.e. "e:a:s:y: :p:e:a:z:y" → "e:a:s:y:00:p:e:a:z:y"
A               # Push the lowercase alphabet
 24L            # Push a list in the range [1,24]
    AMš        # Prepend "AM" at the start of this list
        PMª    # And append "PM" at the end of the list
               # Transliterate; mapping letters to the list-items at the same indices
                # (and output the result implicitly)
                #  i.e. "e:a:s:y:00:p:e:a:z:y" → "4:AM:18:24:00:15:4:AM:PM:24"

1
À đúng rồi. Thay thế không gian riêng biệt tiết kiệm một byte. Tôi nên đã thử nó. Nice :)
Emigna



1

Than , 26 byte

UB:Fθ«→≡ι ×0²a¦AM¦z¦PMI⌕βι

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Đưa đầu vào bằng chữ thường (có thể thay đổi tầm thường thành chữ hoa). Giải trình:

UB:

Đặt ký tự nền thành :. Điều này sẽ lấp đầy khoảng trống giữa các giá trị đầu ra được tạo bởi chuyển động đúng.

Fθ«→

Lặp lại mỗi ký tự, để lại một khoảng cách mỗi lần. (Di chuyển đầu tiên không có hiệu lực vì khung vẽ vẫn trống vào thời điểm này.)

≡ι ×0²a¦AM¦z¦PM

Bật ký tự và nếu đó là khoảng trắng, ahoặc zsau đó xuất mã phù hợp. Tôi sử dụng ×0²thay vì 00ở đây vì cái sau sẽ có giá hai byte trong các dấu tách bổ sung.

I⌕βι

Mặt khác, xuất vị trí chỉ mục 0 của chữ cái trong bảng chữ cái chữ thường dưới dạng chuỗi.


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.