Khử mùi chuỗi


48

Hodor là một nhân vật chậm chạp nhưng đáng yêu trong chương trình Game of Thrones ( dĩ nhiên anh ta cũng có trong sách ). Từ duy nhất anh từng nói là 'hodor' .

Đáng ngạc nhiên, mặc dù không có nhiều từ vựng, Hodor luôn nói những câu hoàn chỉnh với cách viết hoa và chấm câu chính xác, và thực tế không truyền đạt ý nghĩa.

Hodor có khả năng thể hiện tất cả 128 ký tự ASCII , mặc dù anh ta phải mất toàn bộ câu để nói từng câu. Mỗi nhân vật có một đại diện duy nhất, chính xác như một câu. Một chuỗi ASCII được Hodorized bằng cách dịch tất cả các ký tự trong chuỗi thành tương đương câu Hodor của chúng, sau đó nối tất cả các câu. Vì tất cả các ký tự ánh xạ tới các câu chính xác, tất cả các chuỗi ASCII đều có một biểu diễn Hodorized duy nhất, duy nhất.

Nhân vật khử mùi

Hodor chia 128 ký tự có thể biểu thị của mình thành 4 bộ 32 bằng cách sử dụng 4 loại dấu câu khác nhau cho các câu đại diện cho các ký tự.

Câu kết thúc bằng ...

  • .nếu mã ký tự ASCII mod 4 là 0.
  • .[newline][newline] (đối với một đoạn mới) nếu mã mod 4 là 1.
  • ? nếu mã mod 4 là 2.
  • ! nếu mã mod 4 là 3.

Ví dụ: mã ký tự ASCII cho blà 98 và 98 mod 4 là 2, vì vậy câu của Hodor bchắc chắn sẽ kết thúc ?.

Nội dung của câu là một trong 32 chuỗi riêng biệt chỉ chứa từ 'hodor'. Mỗi trong số 32 ký tự của một loại dấu chấm câu cụ thể thành một chuỗi nội dung câu khác nhau. Vì vậy, với 32 chuỗi nội dung câu và 4 loại dấu câu, tất cả 128 ký tự ASCII có thể được biểu diễn dưới dạng câu Hodor riêng biệt.

Để xác định nội dung câu cho một ký tự có mã ASCII C, hãy tính (floor(C / 4) + 16) mod 32; tất cả mọi thứ sau dấu hai chấm trên dòng đó trong danh sách này là nội dung câu:

0:Hodor
1:HODOR
2:Hodor hodor
3:Hodor, hodor
4:Hodor hodor hodor
5:Hodor, hodor hodor
6:Hodor hodor hodor hodor
7:Hodor hodor, hodor hodor
8:Hodor hodor hodor hodor hodor
9:Hodor hodor, hodor hodor hodor
10:Hodor hodor hodor hodor hodor hodor
11:Hodor hodor hodor, hodor hodor hodor
12:Hodor hodor hodor hodor hodor hodor hodor
13:Hodor hodor hodor, hodor hodor hodor hodor
14:Hodor hodor hodor hodor hodor hodor hodor hodor
15:Hodor hodor hodor hodor, hodor hodor hodor hodor
16:Hodor hodor hodor hodor hodor hodor hodor hodor hodor
17:Hodor hodor hodor hodor, hodor hodor hodor hodor hodor
18:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor
19:Hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor
20:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor
21:Hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor
22:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor
23:Hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor
24:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor
25:Hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor
26:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor
27:Hodor hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor
28:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor
29:Hodor hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor hodor
30:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor
31:Hodor hodor hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor hodor

Có thể thấy rằng, ngoài HODORtrường hợp đặc biệt, các chuỗi này được tạo bằng cách nối càng nhiều hodorvà mọi chuỗi khác có một nửa dấu phẩy giữa tất cả các từ (với "nửa lớn hơn" của dấu phẩy cho một số lẻ Số từ).

Tham gia nội dung câu có dấu câu, chúng ta có thể tạo thành các câu Hodor cho tất cả 128 ký tự (số bên trái là mã ký tự):

0:Hodor hodor hodor hodor hodor hodor hodor hodor hodor.
1:Hodor hodor hodor hodor hodor hodor hodor hodor hodor.[newline][newline]
2:Hodor hodor hodor hodor hodor hodor hodor hodor hodor?
3:Hodor hodor hodor hodor hodor hodor hodor hodor hodor!
4:Hodor hodor hodor hodor, hodor hodor hodor hodor hodor.
5:Hodor hodor hodor hodor, hodor hodor hodor hodor hodor.[newline][newline]
6:Hodor hodor hodor hodor, hodor hodor hodor hodor hodor?
7:Hodor hodor hodor hodor, hodor hodor hodor hodor hodor!
8:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor.
9:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor.[newline][newline]
10:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor?
11:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor!
12:Hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor.
13:Hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor.[newline][newline]
14:Hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor?
15:Hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor!
16:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor.
17:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor.[newline][newline]
18:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor?
19:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor!
20:Hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor.
21:Hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor.[newline][newline]
22:Hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor?
23:Hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor!
24:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor.
25:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor.[newline][newline]
26:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor?
27:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor!
28:Hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor.
29:Hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor.[newline][newline]
30:Hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor?
31:Hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor!
32:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor.
33:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor.[newline][newline]
34:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor?
35:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor!
36:Hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor.
37:Hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor.[newline][newline]
38:Hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor?
39:Hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor!
40:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor.
41:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor.[newline][newline]
42:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor?
43:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor!
44:Hodor hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor.
45:Hodor hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor.[newline][newline]
46:Hodor hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor?
47:Hodor hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor!
48:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor.
49:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor.[newline][newline]
50:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor?
51:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor!
52:Hodor hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor hodor.
53:Hodor hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor hodor.[newline][newline]
54:Hodor hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor hodor?
55:Hodor hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor hodor!
56:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor.
57:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor.[newline][newline]
58:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor?
59:Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor!
60:Hodor hodor hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor hodor.
61:Hodor hodor hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor hodor.[newline][newline]
62:Hodor hodor hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor hodor?
63:Hodor hodor hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor hodor!
64:Hodor.
65:Hodor.[newline][newline]
66:Hodor?
67:Hodor!
68:HODOR.
69:HODOR.[newline][newline]
70:HODOR?
71:HODOR!
72:Hodor hodor.
73:Hodor hodor.[newline][newline]
74:Hodor hodor?
75:Hodor hodor!
76:Hodor, hodor.
77:Hodor, hodor.[newline][newline]
78:Hodor, hodor?
79:Hodor, hodor!
80:Hodor hodor hodor.
81:Hodor hodor hodor.[newline][newline]
82:Hodor hodor hodor?
83:Hodor hodor hodor!
84:Hodor, hodor hodor.
85:Hodor, hodor hodor.[newline][newline]
86:Hodor, hodor hodor?
87:Hodor, hodor hodor!
88:Hodor hodor hodor hodor.
89:Hodor hodor hodor hodor.[newline][newline]
90:Hodor hodor hodor hodor?
91:Hodor hodor hodor hodor!
92:Hodor hodor, hodor hodor.
93:Hodor hodor, hodor hodor.[newline][newline]
94:Hodor hodor, hodor hodor?
95:Hodor hodor, hodor hodor!
96:Hodor hodor hodor hodor hodor.
97:Hodor hodor hodor hodor hodor.[newline][newline]
98:Hodor hodor hodor hodor hodor?
99:Hodor hodor hodor hodor hodor!
100:Hodor hodor, hodor hodor hodor.
101:Hodor hodor, hodor hodor hodor.[newline][newline]
102:Hodor hodor, hodor hodor hodor?
103:Hodor hodor, hodor hodor hodor!
104:Hodor hodor hodor hodor hodor hodor.
105:Hodor hodor hodor hodor hodor hodor.[newline][newline]
106:Hodor hodor hodor hodor hodor hodor?
107:Hodor hodor hodor hodor hodor hodor!
108:Hodor hodor hodor, hodor hodor hodor.
109:Hodor hodor hodor, hodor hodor hodor.[newline][newline]
110:Hodor hodor hodor, hodor hodor hodor?
111:Hodor hodor hodor, hodor hodor hodor!
112:Hodor hodor hodor hodor hodor hodor hodor.
113:Hodor hodor hodor hodor hodor hodor hodor.[newline][newline]
114:Hodor hodor hodor hodor hodor hodor hodor?
115:Hodor hodor hodor hodor hodor hodor hodor!
116:Hodor hodor hodor, hodor hodor hodor hodor.
117:Hodor hodor hodor, hodor hodor hodor hodor.[newline][newline]
118:Hodor hodor hodor, hodor hodor hodor hodor?
119:Hodor hodor hodor, hodor hodor hodor hodor!
120:Hodor hodor hodor hodor hodor hodor hodor hodor.
121:Hodor hodor hodor hodor hodor hodor hodor hodor.[newline][newline]
122:Hodor hodor hodor hodor hodor hodor hodor hodor?
123:Hodor hodor hodor hodor hodor hodor hodor hodor!
124:Hodor hodor hodor hodor, hodor hodor hodor hodor.
125:Hodor hodor hodor hodor, hodor hodor hodor hodor.[newline][newline]
126:Hodor hodor hodor hodor, hodor hodor hodor hodor?
127:Hodor hodor hodor hodor, hodor hodor hodor hodor!

( [newline]Sẽ được thay thế bằng các dòng mới thực tế.)

Dây khử mùi

Khử mùi chuỗi thực sự chỉ liên quan đến việc ghép tất cả các câu ký tự của các ký tự của chuỗi với nhau. Chỉ có một vài cảnh báo:

  • Một khoảng trắng được chèn vào sau mỗi câu trừ những .[newline][newline]câu có dấu chấm câu và câu cuối cùng.
  • Nếu câu cuối cùng được chấm câu .[newline][newline], dấu câu trở thành ...do đó không có khoảng trắng ở cuối.

Ví dụ

Chuỗi F0được Hodorized như

HODOR? Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor.
  • Fcó mã ASCII 70. 70 mod 4 là 2, vì vậy câu đầu tiên kết thúc bằng ?. (floor(70 / 4) + 16) mod 32là 1 nên nội dung là HODOR.
  • 0có mã ASCII 48. 48 mod 4 là 0, vì vậy câu thứ hai kết thúc bằng .. (floor(48 / 4) + 16) mod 32là 28 vì vậy nội dung được hodorxâu chuỗi 15 không có dấu phẩy.
  • Lưu ý rằng không có dấu cách.

Chuỗi CEEđược Hodorized như

Hodor! HODOR.

HODOR...
  • Lưu ý rằng không có khoảng trắng trước câu cuối cùng.
  • Lưu ý rằng dấu câu cuối cùng đã được thay đổi thành ....

Chuỗi

Hodor's real name is Walder.
Did you know?

được khử mùi như

Hodor hodor. Hodor hodor hodor, hodor hodor hodor! Hodor hodor, hodor hodor hodor. Hodor hodor hodor, hodor hodor hodor! Hodor hodor hodor hodor hodor hodor hodor? Hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor! Hodor hodor hodor hodor hodor hodor hodor! Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor. Hodor hodor hodor hodor hodor hodor hodor? Hodor hodor, hodor hodor hodor.

Hodor hodor hodor hodor hodor.

Hodor hodor hodor, hodor hodor hodor. Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor. Hodor hodor hodor, hodor hodor hodor? Hodor hodor hodor hodor hodor.

Hodor hodor hodor, hodor hodor hodor.

Hodor hodor, hodor hodor hodor.

Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor. Hodor hodor hodor hodor hodor hodor.

Hodor hodor hodor hodor hodor hodor hodor! Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor. Hodor, hodor hodor! Hodor hodor hodor hodor hodor.

Hodor hodor hodor, hodor hodor hodor. Hodor hodor, hodor hodor hodor. Hodor hodor, hodor hodor hodor.

Hodor hodor hodor hodor hodor hodor hodor? Hodor hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor? Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor? HODOR. Hodor hodor hodor hodor hodor hodor.

Hodor hodor, hodor hodor hodor. Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor. Hodor hodor hodor hodor hodor hodor hodor hodor.

Hodor hodor hodor, hodor hodor hodor! Hodor hodor hodor, hodor hodor hodor hodor.

Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor. Hodor hodor hodor hodor hodor hodor! Hodor hodor hodor, hodor hodor hodor? Hodor hodor hodor, hodor hodor hodor! Hodor hodor hodor, hodor hodor hodor hodor! Hodor hodor hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor hodor hodor!

(giả sử dòng mới là một \n)

Thử thách

Viết chương trình hoặc hàm nhận chuỗi ASCII và Khử mùi, in hoặc trả về chuỗi kết quả. Lấy đầu vào theo bất kỳ cách tiêu chuẩn nào (từ tệp văn bản, dòng lệnh, stdin, hàm arg).

Giải pháp có ít byte nhất sẽ thắng. Tiebreaker là bài trước. ( Bộ đếm byte tiện dụng. )


1
Thử thách này khiến tôi muốn xem lại phần 1-4 và khám phá những gì anh ấy thực sự nói. : D
mbomb007

24
Tuyệt vời, chúng tôi đã tìm thấy phiên bản tiếp theo của Ook .
ASCIIThenANSI

8
Hodor hodor. Hodor hodor hodor, hodor hodor hodor! Hodor hodor, hodor hodor hodor. Hodor hodor hodor, hodor hodor hodor! Hodor hodor hodor hodor hodor hodor hodor? Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor ...
Adam Davis

1
@AdamDavis Hodorception!
Martin Ender

1
Tôi sẽ trả lời câu hỏi này với HODOR nhưng tôi nghĩ rằng tôi có thể sụp đổ SE.
caird coinheringaahing

Câu trả lời:


26

Hodor! Hodor hodor? Hodor hodor hodor hodor hodor.

Hodor hodor hodor, hodor hodor hodor.

Hodor hodor hodor hodor hodor hodor hodor, hodor hodor hodor hodor hodor hodor Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor

Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor Hodor hodor hodor hodor hodor? Hodor hodor hodor hodor hodor hodor hodor hodor.

Hodor hodor hodor, hodor hodor hodor hodor. Hodor hodor, hodor hodor hodor.

Hodor hodor hodor hodor hodor hodor hodor!

Đó chỉ là tiêu đề ngôn ngữ và kích thước!? Đừng bận tâm, hãy mã hóa bài viết trong ASCII cũ nhàm chán. Xin lỗi nếu bạn gặp khó khăn trong việc hiểu bài, Hodor.


CJam, 85 byte

Đây là nỗ lực của tôi. Một số phần của mã này cảm thấy khá lộn xộn khi tôi viết chúng, vì vậy có khả năng có thể đánh bại điều này!

qW%{'@^4md('.X1$N?_++a"?!."XLS?f++=\(_)2md","*1$)"hodor":Ha*H@+@(2/\tS*0:X'HtHeu?}%W%

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

Giải trình

qW%             "Read and reverse the input.";
{               "Map each character c:";
  '@^4md          "Calculate (c^64)/4, which is the sentence content determiner,
                    and c%4, which is the sentence ending determiner.";
  (               "Calculate c%4-1 for later.";
  '.X1$N?_++      "Produce the sentence ending string for the case that c%4==1,
                   which is '.' followed by two copies of:
                    - '.' if this is the first processed (last actual) character
                    - or a newline otherwise.
  a"?!."XLS?f     "Produce a list of the sentence ending strings for the cases
                   that c%4 is 2, 3, or 0, which are:
                    - '?', '!', and '.' if this is the first processed character
                    - or these punctuation marks each followed by a space
                      otherwise.";
  ++=\            "Prepend the sentence ending string for the case that c%4==1
                   to the list for the other cases and select the element at the
                   index (c%4-1)%4 as the correct sentence ending string.";
  (               "Calculate (c^64)/4-1 for later.";
  _)2md           "Calculate the quotient and remainder of the sentence content
                   content determiner divided by 2.";
  ","*            "Produce a string of commas with a length of the remainder
                   calculated above (either 0 or 1).";
  1$)"hodor":Ha*  "Produce a list of copies of 'hodor' with a length of the
                   quotient calculated above plus one.";
  H@+@(2/\t       "Append the string of commas (either empty or one comma) to
                   the middle 'hodor'.";
  S*              "Join the sentence words into a string a space between each.";
  0:X             "Signal that later characters are not the first processed.";
  'Ht             "Capitalize the first letter of the sentence (always 'h').";
  Heu             "Produce the string 'HODOR'.";
  ?               "Select the correct sentence content, which is 'HODOR' if 
                   (c^64)/4-1 is zero or the full sentence produced before that
                   otherwise.";
}%
W%              "Reverse the reversed translation to obtain the forward one.";
                "Implicitly print the result.";

1
Gửi lời giải thích trong Hodor để dễ đọc hơn.
Bạch tuộc ma thuật Urn

102

Hodor, 602 582 byte

HoDoRHoDoR HODOR! (Hodor ){r='';Hodor!? =Hodor .Hodor!? hodor? HODOR? hodor! hodor. h;HODOR{}(Hodor? =0;Hodor? <Hodor!? ;++Hodor? ){hodor =Hodor .hodor hHODOR rHodor... odhodor? hodor?!? hodor. (Hodor? );HODOR? =(0|hodor /4+16)%32;r+='H';HODOR =HHHOOODDDDOOORRR!!! hodor?!? rrHODOR HODOR!?! (0|HODOR? /2+2);HOdor!!!(HODOR? %2)HODOR [0|(HODOR? +1)/4]=',';r+=HODOR? ==1?'ODOR':HODOR .HODOR?! oHodor? HODOR? (' hodor').Hodor Hodor!? Hodor? hodor hodor? (2);r+=['. ',Hodor? ==Hodor!? -1?'....':'.\HODOR? \HODOR? ','? ','! '][hodor %4]}HODOR:: r.Hodor Hodor!? Hodor? hodor hodor? (0,-1)}

Đây là một phiên bản chưa được chỉnh sửa ... bạn biết ... để dễ đọc:

HoDoRHoDoR HODOR! (Hodor ){
    r='';
    Hodor!? =Hodor .Hodor!? hodor? HODOR? hodor! hodor. h;
    HODOR{}(Hodor? =0;Hodor? <Hodor!? ;++Hodor? ){
        hodor =Hodor .hodor hHODOR rHodor... odhodor? hodor?!? hodor. (Hodor? );
        HODOR? =(0|hodor /4+16)%32;
        r+='H';
        HODOR =HHHOOODDDDOOORRR!!! hodor?!? rrHODOR HODOR!?! (0|HODOR? /2+2);
        HOdor!!!(HODOR? %2)HODOR [0|(HODOR? +1)/4]=',';
        r+=HODOR? ==1?'ODOR':HODOR .HODOR?! oHodor? HODOR? (' hodor').Hodor Hodor!? Hodor? hodor hodor? (2);
        r+=['. ',Hodor? ==Hodor!? -1?'....':'.\HODOR? \HODOR? ','? ','! '][hodor %4]
    }
    HODOR:: r.Hodor Hodor!? Hodor? hodor hodor? (0,-1)
}

Đúng, có một ngôn ngữ gọi là Hodor . (Và nó khá mới.) Về cơ bản, đây chỉ là sự thay thế chuỗi cho JavaScript. JS tương ứng trông như thế này:

function f(s){
  r='';
  l=s.length;
  for(i=0;i<l;++i){
    c=s.charCodeAt(i);
    n=(0|c/4+16)%32;
    r+='H';
    a=new Array(0|n/2+2);
    if(n%2)a[0|(n+1)/4]=',';
    r+=n==1?'ODOR':a.join(' hodor').slice(2);
    r+=['. ',i==l-1?'....':'.\n\n','? ','! '][c%4]
  }
  return r.slice(0,-1)
}

Do đó, trình của tôi là một hàm lấy một chuỗi và trả về tương đương Hodorised.

Thật không may, dường như không có bất kỳ thông tin nào về cách Hodor thực sự hoạt động (ngoài mã nguồn của trình thông dịch), nhưng nó đi kèm với một tập lệnh dịch mã JS2HD.

Lưu ý rằng sự thay thế của Hodor cũng được áp dụng trong chuỗi ký tự. Vì vậy, trong khi bạn có thể chỉ cần gọi các chức năng trên là

HODOR! ("CEE")

Bạn cũng có thể sử dụng như sau:

HODOR! ("Hodor... HooodorrHodor HooodorrHodor ")

nơi Hodor... HooodorrHodor HooodorrHodorsẽ được thay thế bằng CEE. Lưu ý rằng điều này có nghĩa là, nếu chính chuỗi của bạn chứa một số dạng nhất định Hodorbạn sẽ phải mã hóa nó, nếu không nó sẽ được thay thế. Ví dụ, "Hodor. "thực sự là "m"trong JavaScript. Điều đáng chú ý là các chữ cái [dhor](trường hợp không nhạy cảm) hoàn toàn không được thay thế, vì vậy bạn thậm chí không thể mã hóa điều này. Một giải pháp là tách ra theo nghĩa đen, như "Hod"+"or. "vậy, bước thay thế không tìm thấy gì để giải mã.


36
Nó làm tôi vô cùng hạnh phúc.
Alex A.

1
@AlexA. Tôi nghĩ bạn có ý muốn nói "Hodor! Hodor hodor hodor! Hodor?"
MikeTheLiar

Các dấu câu cuối cùng chỉ ...thay vì các dòng mới, không .....
mbomb007

1
@ mbomb007 Thứ tư .có thể được thay thế bởi bất cứ điều gì. Đó là một giữ chỗ cho không gian thường ở đó, được loại bỏ với trận chung kết r.slice(0,-1).
Martin Ender

1
582 byte nhưng với phần thưởng -65535 cho việc sử dụng ngôn ngữ lập trình Hodor mang lại cho câu trả lời này điểm -59713 và khiến câu trả lời này trở thành người chiến thắng rõ ràng ;-)
Josh

5

Python 2, 219 198 byte

Hãy thử nó ở đây

Sử dụng cùng một phương thức với JavaScript của Martin và nó ngắn hơn vài byte trong Python. Tôi sử dụng phép chia số nguyên tiện dụng của Python 2.7. Cảm ơn Sp3000 cho một số golf.

def f(s,r='',i=2):
    for j in s:c=ord(j);n=(c/4+16)%32;a=['']*(n/2+2);a[-~n/4]=','[:n%2];r+='H'+[' hodor'.join(a)[2:],'ODOR'][n==1]+['. ',['.\n\n',4*'.'][i>len(s)],'? ','! '][c%4];i+=1
    return r[:-1]

Và để giải trí của riêng bạn và sự thích thú và tò mò của riêng tôi ...

Đây là một chức năng lambda !!!

Con trăn 2, 349

Hãy thử ở đây , cùng với một phiên bản cũ hơn của chương trình ở trên.

f=lambda s:'H'.join(['']+[('ODOR'if(ord(s[i])/4+16)%32==1 else' hodor'.join((['']*(((ord(s[i])/4+16)%32)/2+2))[:((ord(s[i])/4+16)%32+1)/4]+([',']if ord(s[i])/4%2 else[''])+(['']*(((ord(s[i])/4+16)%32)/2+2))[((ord(s[i])/4+16)%32+1)/4+1*(ord(s[i])/4%2<1):])[2:])+['. ',4*'.'if i+2>len(s)else'.\n\n','? ','! '][ord(s[i])%4]for i in range(len(s))])[:-1]

Tạo ra điều này liên quan đến sự thay thế sâu hơn và sâu hơn cũng như một số sáng tạo thêm.

  • Mỗi jđược thay thế bằng s[i].
  • Mỗi cđược thay thế bằng ord(s[i]).
  • Mỗi nđược thay thế bằng (ord(s[i])/4+16)%32.

    • Ngoại trừ nơi tôi chỉ cần n%2, vì vậy tôi sử dụng (ord(s[i])/4%2thay thế.
  • Cuối cùng, ađược thay thế bằng (['']*(((ord(s[i])/4+16)%32)/2+2))[:((ord(s[i])/4+16)%32+1)/4]+([',']if ord(s[i])/4%2 else[''])+(['']*(((ord(s[i])/4+16)%32)/2+2))[((ord(s[i])/4+16)%32+1)/4+1*(ord(s[i])/4%2<1):].

    • Điều này là do chúng tôi không thể gán giá trị, vì vậy chúng tôi phải chia một nửa danh sách, nối thêm dấu phẩy một cách có điều kiện, sau đó nối lại nửa cuối.

1
Tôi tin điều này mang lại cho 198?
Sp3000

Thật tuyệt, tôi không biết bạn có thể cắt [:0]như thế để có được chuỗi rỗng.
mbomb007

4

MUMPS , 284 236 byte

Phiên bản mới: Sau khi xem xét một lúc, tôi đã đưa ra một phiên bản ngắn hơn (236 byte):

H(H) S L=$L(H) F O=1:1:L D
 .S D=$A($E(H,O)),R=D#4,P=$S('R:".",R=2:"?",R=3:"!",O=L:"...",1:"."_$C(10,10)),E=D\4+16#32,(S,Q)="hodor" F F=1:1:E\2 S Q=S_$S(E#2&(F=(E\4+1)):", ",1:" ")_Q,$E(Q)="H" S:E=1 Q="HODOR"
 .W Q_P_$S(L=O:"",1:" ")
 Q

Phiên bản đầu tiên:

H(H) S L=$L(H) F O=1:1:L D
 .S S=$C(10),D=$A($E(H,O)),R=D#4,P=$S('R:".",R=2:"?",R=3:"!",O=L:"...",1:"."_S_S),E=D\4+16#32,(S,Q)="hodor ",G=6*(E+1\4) F F=1:1:E\2 S Q=S_Q
 .S Q=$E(Q,1,$L(Q)-1) S:E=1 Q="HODOR" S:E#2&(E>2) Q=$E(Q,1,G-1)_","_$E(Q,G,99) S $E(Q)="H" W Q_P_$S(L=O:"",1:" ")
 Q

Mẹ kiếp Có lẽ tôi có thể lưu một số byte bằng ObjectScript (có các toán tử danh sách), nhưng tôi nghi ngờ điều đó.

Đây là một phiên bản hơi dài dòng:

VH(H)
 F I=1:1:$L(H) D              ; iterate over input string H
 .S O=$E(H,I)                 ; O is a single char
 .S D=$A(O)                   ; ascii code (dec)
 .S R=D#4                     ; #: mod, $S: $SELECT(condition:result,cond...)
 .S P=$S(R=0:".",R=2:"?",R=3:"!",I=$L(H):"...",1:"."_$C(10)_$C(10))
 .S E=D\4+16#32               ; \: integer division
 .S (S,Q)="hodor "            ; hodor
 .F J=1:1:E\2 S Q=S_Q         ; build hodor -"list"
 .I E=1 S Q="HODOR"           ; HODOR
 .I E'=1 S Q=$E(Q,1,$L(Q)-1)  ; remove trailing _
 .;                           ; insert ,
 .I E#2,E>2 S Q=$E(Q,1,6*(E+1\4)-1)_","_$E(Q,6*(E+1\4),99)
 .S $E(Q)="H"                 ; ^h->^H
 .W Q_P_$S($L(H)=I:"",1:" ")  ; Write and remove trailing _
 Q

1

C # 378 byte

string x(string h){string[]f={". ",".\n\n","? ","! "};string[]a=new string[32];string s="";int i,j,c=0;for(i=0;i<32;i++){a[i]="hodor";if(i==1)a[i]=a[i].ToUpper();else{for(j=0;j<i/2;j++){if(i%2==1&&j==c/2)a[i]+=",";a[i]+=" hodor";}if(i%2==1)c++;a[i]=char.ToUpper(a[i][0])+a[i].Substring(1);}}foreach(char b in h){s+=a[(int)(Math.Floor((double)b/4)+16)%32]+f[(int)b%4];}return s;}

Đây là lần đầu tiên tôi chơi golf, trần trụi với tôi.


1
Chào mừng bạn đến với Câu đố lập trình & trao đổi mã Golf! Bạn có thể lưu một số byte bằng cách sử dụng tên hàm một ký tự thay vì hodor. Bạn có thể cũng có thể xóa một số nếu không phải tất cả các dòng mới đó và một số khoảng trắng (ví dụ: sau foroder the if). Tuy nhiên, có lẽ bạn nên tính usingchỉ thị cho Systemhoặc đủ điều kiện Console.
Martin Ender

Cảm ơn sự giúp đỡ của bạn, tôi sẽ cố gắng cải thiện và lưu một số byte: D.
GonacFaria

Khi chơi mã C #, không cần thiết phải có một công cụ sửa đổi truy cập cụ thể; vì vậy bạn có thể bỏ publictừ khóa để lưu một số byte. Bạn cũng có thể loại bỏ khoảng trắng giữa []và tên thực của biến chứa mảng. Ngoài ra, không cần thiết phải chuyển đổi một chuỗi thành một mảng char khi bạn lặp lại tất cả các ký tự của chuỗi trong một foreach; bạn chỉ có thể làm foreach (char c in h).
Chương trìnhFOX

1
Đã chỉnh sửa, cảm ơn bạn. Quản lý để đưa nó xuống còn 378 byte, điều này thật thú vị.
GonacFaria

0

C ++, 547 452 byte

void H(string s){string e[4]={".",".\n\n","?","!"};string r;char c,m;int n=s.size();for(int i=0;i<n;i++){r.clear();c=s.at(i);m=c%4;r.append(A(c));r.append(e[m]);if(i==n-1){int k=r.size();r.pop_back();if(m==1){r.pop_back();r.append("..");}}cout<<r.c_str();}}string A(char x){string h("Hodor");int c=((int )floor(x/4)+16)%32;int n=c;bool o=(c%2==1);if(n==1)h="HODOR";else{while(n>1){h.append("hodor");if(o&&n==(int )(c/2)){h.append(",");}n--;}}return h;}

Ung dung:

#include <iostream>
#include <math.h>
using namespace std;
void Hodorise(string s);
string FromAscii(char c);

void Hodorise(string s)
{
string end[4] = {". ",".\n\n","? ","! "};
string res;
char c, m;
int n = s.size();
for (int i = 0; i < n; i++)
{
res.clear();
c = s.at(i);
m = c % 4;
res.append(FromAscii(c));
res.append(end[m]);
if (i == n - 1)
{
int k = res.size();
res.pop_back();
if (m == 1)
{
res.pop_back();
res.append("..");
}

}
cout << res.c_str();
}
}

string FromAscii(char c)
{
string hodor("Hodor");
int code = ((int)floor(c / 4) + 16) % 32;
int n = code;
bool odd = (code % 2 == 1);
if (n == 1)hodor = "HODOR";
else
{
while (n > 1)
{
hodor.append(" hodor");
if (odd && n==(int)(code/2))
{
hodor.append(",");
}
n--;
}
}
return hodor;
}
#define N 3
int main()
{
string x[N] = { "F0", "CEE", "Hodor's real name is Walder.\nDid you know ?" };
for (size_t i = 0; i < N; i++)
{
cout << endl << x[i].c_str() << ":\n";
Hodorise(x[i]);
}

char c;
cin >> c;
return 0;
}

1
Tôi chỉ đếm được 50 byte. Bạn đã đếm các ngắt dòng \r\nthay vì \n? Ngoài ra, tại sao bạn thậm chí cần hầu hết các ngắt dòng đó?
Martin Ender

2
Việc nộp cần bao gồm #include, using namespace std;vv
Potatoswatter

Hầu hết mọi người gửi câu trả lời không được tính
#incolee
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.