ดับกลิ่นสตริง


48

Hodorเป็นตัวละครที่ช้า แต่น่ารักในเกม Game of Thrones ( เขาอยู่ในหนังสือด้วย) คำเดียวที่เขาเคยบอกว่าเป็น'Hodor'

แม้จะไม่มีคำศัพท์มากมาย Hodor พูดในประโยคที่สมบูรณ์ด้วยตัวพิมพ์ใหญ่และเครื่องหมายวรรคตอนที่ถูกต้องเสมอและในความเป็นจริงสื่อความหมาย

Hodor สามารถแสดงอักขระ ASCIIทั้ง 128 ตัวได้แม้ว่าจะต้องใช้ประโยคทั้งประโยคในการบอกแต่ละตัว ตัวละครแต่ละตัวมีการแสดงประโยคเดียวที่แน่นอน สตริง ASCII ถูกHodorizedโดยการแปลตัวละครทั้งหมดในสตริงให้เทียบเท่ากับประโยคประโยค Hodor ของพวกเขาจากนั้นเข้าร่วมประโยคทั้งหมด เนื่องจากอักขระทุกตัวจับคู่กับประโยคที่ถูกต้องสตริง ASCII ทั้งหมดจึงมีการแสดง Hodorized ที่ไม่ซ้ำใคร

ตัวละคร Hodorizing

Hodor แบ่ง 128 อักขระที่แสดงออกได้ของเขาออกเป็น 4 ชุด 32 โดยใช้เครื่องหมายวรรคตอน 4 ประเภทที่แตกต่างกันสำหรับประโยคที่แสดงถึงตัวละคร

ประโยคลงท้ายด้วย ...

  • .ถ้ารหัสอักขระ ASCII mod 4 เป็น 0
  • .[newline][newline] (สำหรับย่อหน้าใหม่) หากรหัส mod 4 คือ 1
  • ? ถ้ารหัส mod 4 เป็น 2
  • ! ถ้ารหัส mod 4 คือ 3

ตัวอย่างเช่นรหัสอักขระ ASCII สำหรับbเป็น 98 และ 98 4 สมัยคือ 2 ดังนั้นประโยค Hodor สำหรับมั่นใจว่าจะจบลงในb?

เนื้อหาของประโยคเป็นหนึ่งใน 32 สายอักขระที่แตกต่างกันซึ่งมีคำว่า 'hodor' เท่านั้น อักขระ 32 ตัวของเครื่องหมายวรรคตอนแต่ละอันจับคู่กับสตริงเนื้อหาประโยคที่แตกต่างกัน ดังนั้นด้วยสตริงเนื้อหา 32 ประโยคและเครื่องหมายวรรคตอน 4 ประเภทอักขระ ASCII 128 ตัวทั้งหมดจึงสามารถแทนด้วยประโยค Hodor ที่แตกต่างกันได้

การตรวจสอบเนื้อหาประโยคสำหรับตัวอักษรที่มีรหัส ASCII C, คำนวณ(floor(C / 4) + 16) mod 32; ทุกอย่างหลังจากโคลอนในบรรทัดนั้นในรายการนี้คือเนื้อหาประโยค:

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

จะเห็นได้ว่านอกเหนือจากHODORกรณีพิเศษสตริงเหล่านี้ถูกสร้างขึ้นโดยการเข้าร่วมมากขึ้นเรื่อย ๆ และhodorสตริงอื่น ๆ มีเครื่องหมายจุลภาคครึ่งทางระหว่างคำทั้งหมด (กับ "ครึ่งใหญ่" ด้านขวาของเครื่องหมายจุลภาคสำหรับคี่ จำนวนคำ)

การเข้าร่วมเนื้อหาประโยคด้วยเครื่องหมายวรรคตอนเราสามารถสร้างประโยค Hodor สำหรับ 128 ตัวอักษรทั้งหมด (หมายเลขด้านซ้ายคือรหัสตัวอักษร):

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]จะถูกแทนที่ด้วยบรรทัดใหม่จริง)

Hodorizing Strings

การทำให้สตริงน่าจะเกี่ยวข้องกับการเชื่อมประโยคทั้งหมดของตัวละครเข้าด้วยกัน มีคำเตือนเพียงสองสามข้อเท่านั้น:

  • ช่องว่างจะถูกแทรกหลังทุกประโยคยกเว้น.[newline][newline]เว้นวรรคที่เว้นวรรคและประโยคสุดท้าย
  • หากประโยคสุดท้ายถูกคั่นด้วย.[newline][newline]เครื่องหมายวรรคตอนจะกลายเป็น...ดังนั้นไม่มีช่องว่างต่อท้าย

ตัวอย่าง

สตริงF0ถูก Hodorized เป็น

HODOR? Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor.
  • Fมีรหัส ASCII 70. 70 mod 4 คือ 2 ดังนั้นประโยคแรกจึงลงท้าย?ด้วย (floor(70 / 4) + 16) mod 321 HODORเพื่อให้เนื้อหานั้น
  • 0มี ASCII รหัส 48 48 4 สมัยคือ 0 .ดังนั้นประโยคที่สองสิ้นสุดลงใน (floor(48 / 4) + 16) mod 32คือ 28 ดังนั้นเนื้อหาจึงถูกhodorโยงเข้าด้วยกัน15 รายการโดยไม่มีเครื่องหมายจุลภาค
  • ขอให้สังเกตว่าไม่มีช่องว่างต่อท้าย

สตริงCEEถูก Hodorized เป็น

Hodor! HODOR.

HODOR...
  • ขอให้สังเกตว่าไม่มีที่ว่างก่อนประโยคสุดท้าย
  • ...ขอให้สังเกตว่าเครื่องหมายวรรคตอนประโยคสุดท้ายก็เปลี่ยนไป

สตริง

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

ถูก Hodorized เป็น

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

Hodor hodor hodor hodor hodor.

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

Hodor hodor hodor, hodor hodor hodor.

Hodor hodor, hodor hodor hodor.

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

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

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

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

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

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

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

(สมมติว่าบรรทัดใหม่เป็นหนึ่งเดียว\n)

ท้าทาย

เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้ในสตริง ASCII และ Hodorizes มันพิมพ์หรือส่งกลับสตริงผลลัพธ์ รับอินพุตในวิธีมาตรฐานใด ๆ (จากไฟล์ข้อความ, บรรทัดคำสั่ง, stdin, ฟังก์ชัน arg)

โซลูชันที่มีจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ Tiebreaker เป็นโพสต์ก่อนหน้า ( ตัวนับไบต์ที่มีประโยชน์ )


1
ความท้าทายนี้ทำให้ฉันต้องการดูฤดูกาลที่ 1-4 อีกครั้งและค้นพบสิ่งที่เขาพูดจริงๆ : D
mbomb007

24
ดีที่เราพบรุ่นถัดไปของ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 ...
อดัมเดวิส

1
@AdamDavis Hodorception!
Martin Ender

1
ฉันจะตอบคำถามนี้กับHODORแต่ฉันคิดว่าฉันอาจผิดพลาดทางทิศตะวันออก
caird coinheringaahing

คำตอบ:


26

Hodor! Hodor hodor Hodor hodor hodor hodor

Hodor hodor hodor, Hodor hodor

เฮอร์โมสฮอสสฮอสสสสสเดอเรสสเดอพส์ฮอสสส ................................ ใน.. เครื่องดูดฝุ่นเครื่องดูดฝุ่นเครื่องดูดฝุ่นเครื่องดูดฝุ่นเครื่องดูดฝุ่นเครื่องดูดฝุ่นเครื่องดูดฝุ่นเครื่องเล็ก เฮอร์โมสฮอสสฮอสสสสสเดอเรสสเดอพส์ฮอสสส

................................ ใน.. Hodor Hodor Hodor Hodor H? Hodor Hodor Hodor Hodor Hodor Hodor Hodor เครื่องช่วยหายใจ.

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

hodor hodor hodor hodor hodor hodor hodor!

นั่นเป็นเพียงส่วนหัวของภาษาและขนาด! ไม่เป็นไรแล้วลองเข้ารหัสโพสต์ใน ASCII เก่าที่น่าเบื่อ ขออภัยหากคุณมีปัญหาในการเข้าใจโพสต์ Hodor


CJam, 85 ไบต์

นี่คือความพยายามของฉัน บางส่วนของรหัสนี้รู้สึกค่อนข้างงอแงเมื่อฉันเขียนพวกเขาดังนั้นจึงมีโอกาสที่จะเอาชนะได้!

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

ลองออนไลน์

คำอธิบาย

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
โพสต์คำอธิบายใน Hodor เพื่อให้อ่านง่ายขึ้น
Magic Octopus Urn

102

Hodor 602 582 ไบต์

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)}

นี่คือเวอร์ชันที่ไม่ดี ... ที่คุณรู้ ... สำหรับการอ่านได้:

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)
}

อ๋อมีภาษาที่เรียกว่าHodor (และมันค่อนข้างใหม่) มันเป็นแค่การแทนที่สตริงสำหรับ JavaScript JS ที่เกี่ยวข้องมีลักษณะดังนี้:

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)
}

ดังนั้นการส่งของฉันคือฟังก์ชั่นรับสตริงและคืนค่าเทียบเท่ากับ Hodorised

น่าเสียดายที่ดูเหมือนว่าจะไม่มีข้อมูลใด ๆ เกี่ยวกับการทำงานของ Hodor (นอกเหนือจากซอร์สโค้ดของล่าม) แต่มันมาพร้อมกับสคริปต์แปล JS2HD

โปรดทราบว่าการแทนที่ของ Hodor จะนำไปใช้ภายในตัวอักษรสตริงด้วย ดังนั้นในขณะที่คุณอาจจะเรียกฟังก์ชั่นด้านบนเป็น

HODOR! ("CEE")

คุณยังสามารถใช้สิ่งต่อไปนี้:

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

ที่จะถูกแทนที่ด้วยHodor... HooodorrHodor HooodorrHodor CEEโปรดทราบว่านี่หมายความว่าหากสตริงของคุณมีรูปแบบที่แน่นอนHodorคุณจะต้องเข้ารหัสมันมิฉะนั้นจะถูกแทนที่ เช่น"Hodor. "อยู่"m"ใน JavaScript การจับก็คือตัวอักษร[dhor]( ตัวพิมพ์เล็ก - ใหญ่) จะไม่ถูกแทนที่ดังนั้นคุณจึงไม่สามารถเข้ารหัสได้ ทางออกหนึ่งคือการแบ่งตัวอักษรเช่น"Hod"+"or. "ขั้นตอนการทดแทนไม่พบอะไรที่จะถอดรหัส


36
ทำให้ฉันมีความสุขมาก
Alex A.

1
@AlexA ฉันคิดว่าคุณตั้งใจจะพูดว่า "Hodor! Hodor hodor hodor! Hodor?"
MikeTheLiar

สุดท้ายวรรคตอนประโยคเป็นเพียงแทนการขึ้นบรรทัดใหม่ไม่ได้... ....
mbomb007

1
@ mbomb007 ที่สี่.สามารถถูกแทนที่ด้วยอะไรก็ได้ r.slice(0,-1)มันเป็นตัวยึดสำหรับพื้นที่ที่มักจะมีซึ่งจะถูกลบด้วยขั้นสุดท้าย
Martin Ender

1
582 ไบต์ แต่มีโบนัสสำหรับ -65,535 ใช้ภาษาการเขียนโปรแกรม Hodorให้คำตอบนี้คะแนนของ-59,713และทำให้คำตอบนี้ผู้ชนะที่ชัดเจน ;-)
Josh

5

Python 2, 219 198 ไบต์

ลองที่นี่

ใช้วิธีการเดียวกับ JavaScript ของ Martin และมีขนาดสั้นลงหลายไบต์ใน Python ฉันใช้ประโยชน์จากการหารด้วยจำนวนเต็มสะดวกของ Python 2.7 ขอบคุณ Sp3000 สำหรับการเล่นกอล์ฟ

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]

และเพื่อความบันเทิงของคุณและความเพลิดเพลินและความอยากรู้ของฉัน ...

นี่มันเป็นฟังก์ชั่นแลมบ์ดา !!!

Python 2, 349

ลองที่นี่พร้อมกับโปรแกรมเวอร์ชั่นเก่าด้านบน

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]

การสร้างสิ่งนี้เกี่ยวข้องกับการทดแทนอย่างลึกซึ้งและลึกซึ้งรวมถึงความคิดสร้างสรรค์เพิ่มเติม

  • ทุกคนจะถูกแทนที่ด้วยjs[i]
  • ทุกคนจะถูกแทนที่ด้วยcord(s[i])
  • ทุกคนจะถูกแทนที่ด้วยn(ord(s[i])/4+16)%32

    • ยกเว้นที่ฉันต้องการเท่านั้นn%2ดังนั้นฉันจึงใช้(ord(s[i])/4%2แทน
  • สุดท้ายจะถูกแทนที่ด้วยa(['']*(((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):]

    • นี่เป็นเพราะเราไม่สามารถกำหนดค่าได้ดังนั้นเราจึงต้องแบ่งรายการออกเป็นสองส่วนต่อท้ายเครื่องหมายจุลภาคแบบมีเงื่อนไขแล้วจึงผนวกครึ่งสุดท้ายอีกครั้ง

1
ฉันเชื่อว่าสิ่งนี้ให้ 198
Sp3000

เยี่ยมฉันไม่ทราบว่าคุณสามารถฝืน[:0]แบบนั้นเพื่อให้ได้สตริงว่าง
mbomb007

4

MUMPS , 284 236 ไบต์

เวอร์ชันใหม่: หลังจากดูไปซักพักฉันก็เจอรุ่นที่สั้นกว่า (236 ไบต์):

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

รุ่นแรก:

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

เจ้าจาม CJam! บางทีฉันอาจบันทึกบางไบต์โดยใช้ObjectScript (มีตัวดำเนินรายการ) แต่ฉันสงสัย

นี่เป็นเวอร์ชั่นที่ค่อนข้างละเอียด:

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 ไบต์

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;}

มันเป็นครั้งแรกที่ฉันเล่นกอล์ฟ


1
ยินดีต้อนรับสู่การเขียนโปรแกรมปริศนา & รหัสแลกเปลี่ยนกองกอล์ฟ! hodorคุณสามารถบันทึกไบต์บางโดยใช้ตัวเดียวชื่อฟังก์ชันแทน คุณสามารถอาจจะยังลบบางส่วนหากไม่ได้ทั้งหมดของการขึ้นบรรทัดใหม่เหล่านั้นและหลายช่องว่าง (เช่นหลังจากforoder if) แต่คุณอาจจะทั้งนับusingสั่งสำหรับหรือเต็มมีคุณสมบัติSystem Console
Martin Ender

ขอบคุณสำหรับความช่วยเหลือของคุณฉันจะพยายามปรับปรุงและบันทึกไบต์: D
GonacFaria

เมื่อเล่นกอล์ฟรหัส C # คุณไม่จำเป็นต้องมีตัวดัดแปลงการเข้าถึงเฉพาะ เพื่อให้คุณสามารถวางpublicคำหลักเพื่อบันทึกบางไบต์ นอกจากนี้คุณยังสามารถลบช่องว่างระหว่าง[]และชื่อจริงของตัวแปรที่เก็บอาร์เรย์ นอกจากนี้ไม่จำเป็นต้องแปลงสตริงเป็นอาร์เรย์ถ่านเมื่อคุณวนซ้ำสตริงทั้งหมดใน foreach foreach (char c in h)คุณก็สามารถทำได้
ProgramFOX

1
แก้ไขแล้วขอบคุณ จัดการเพื่อนำมาลงที่ 378 ไบต์นี่คือความสนุก
GonacFaria

0

C ++, 547 452 ไบต์

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;}

Ungolfed:

#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
ฉันนับได้เพียง 505 ไบต์ คุณนับการขึ้นบรรทัดใหม่\r\nแทน\nหรือไม่? นอกจากนี้ทำไมคุณถึงต้องการการขึ้นบรรทัดใหม่อีกด้วย
Martin Ender

2
ส่งต้องมี#include, using namespace std;ฯลฯ
Potatoswatter

คนส่วนใหญ่ที่ส่งคำตอบจะไม่นับรวม #include หรือนำเข้าและอื่น ๆ
bacchusbeale
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.