Hodorize eine Zeichenfolge

48

Hodor ist ein langsamer, aber liebenswerter Charakter in der Show Game of Thrones ( er ist natürlich auch in den Büchern ). Das einzige Wort, das er jemals sagt, ist "hodor" .

Überraschenderweise spricht Hodor, obwohl er nicht viel Vokabular hat, immer in vollständigen Sätzen mit korrekter Groß- und Kleinschreibung und Zeichensetzung und vermittelt tatsächlich Sinn.

Hodor ist in der Lage, alle 128 ASCII- Zeichen auszudrücken , obwohl er einen ganzen Satz braucht, um jedes einzelne auszudrücken . Jedes Zeichen hat eine einzelne exakte Darstellung als Satz. Eine ASCII-Zeichenfolge wird Hodorisiert, indem alle Zeichen in der Zeichenfolge in ihre Hodor- Satzäquivalente übersetzt und dann alle Sätze zusammengefügt werden. Da alle Zeichen exakten Sätzen zugeordnet sind, haben alle ASCII-Zeichenfolgen eine einzige, eindeutige Hodorized-Darstellung.

Hodorizing Charaktere

Hodor unterteilt seine 128 ausdrückbaren Zeichen in 4 Sätze zu je 32 Zeichen, indem er 4 verschiedene Interpunktionsarten für die Sätze verwendet, die Zeichen darstellen.

Der Satz endet mit ...

  • .wenn der ASCII-Zeichencode mod 4 0 ist.
  • .[newline][newline] (für einen neuen Absatz), wenn der Code mod 4 1 ist.
  • ? wenn der Code mod 4 2 ist.
  • ! wenn der code mod 4 ist 3.

Zum Beispiel ist der ASCII-Zeichencode für b98 und 98 mod 4 ist 2, so dass Hodors Satz für bmit Sicherheit endet ?.

Der Inhalt des Satzes ist eine von 32 verschiedenen Zeichenfolgen, die nur das Wort "hodor" enthalten. Jedes der 32 Zeichen eines bestimmten Interpunktionstyps wird einer anderen Satzinhaltszeichenfolge zugeordnet. So können mit 32 Satzinhaltszeichenfolgen und 4 Interpunktionstypen alle 128 ASCII-Zeichen als unterschiedliche Hodor-Sätze dargestellt werden.

Um den Satzinhalt für ein Zeichen mit ASCII-Code C zu bestimmen, berechnen Sie (floor(C / 4) + 16) mod 32; alles nach dem Doppelpunkt in dieser Zeile in dieser Liste ist der Satzinhalt:

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

Es ist zu sehen, dass HODORdiese Zeichenfolgen , abgesehen vom Sonderfall, durch das Verbinden von mehr und mehr Zeichenfolgen generiert werden hodorund jede zweite Zeichenfolge ein Komma in der Mitte zwischen allen Wörtern enthält (wobei die "größere Hälfte" rechts vom Komma für eine ungerade steht) Anzahl der Wörter).

Wenn wir den Satzinhalt mit Interpunktion verbinden, können wir die Hodor-Sätze für alle 128 Zeichen bilden (die Zahl links ist der Zeichencode):

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]sollen durch aktuelle Zeilenumbrüche ersetzt werden.)

Hodorizing Strings

Das Hodorisieren eines Strings besteht eigentlich nur darin, alle Zeichensätze der Zeichen des Strings miteinander zu verknüpfen. Es gibt nur ein paar Einschränkungen:

  • Nach jedem Satz wird ein Leerzeichen eingefügt, mit Ausnahme der .[newline][newline]Satzzeichen und des letzten Satzes.
  • Wenn der letzte Satz mit .[newline][newline]unterbrochen wird, wird die Interpunktion ...so, dass kein Leerzeichen nachgestellt wird.

Beispiele

Die Saite F0ist Hodorized als

HODOR? Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor.
  • Fhat den ASCII Code 70. 70 mod 4 ist 2, also endet der erste Satz in ?. (floor(70 / 4) + 16) mod 32ist 1, also ist der Inhalt HODOR.
  • 0hat den ASCII-Code 48. 48 mod 4 ist 0, also endet der zweite Satz in .. (floor(48 / 4) + 16) mod 32ist 28, der Inhalt ist also 15 hodorohne Komma aneinander gereiht.
  • Beachten Sie, dass kein Leerzeichen vorhanden ist.

Die Saite CEEist Hodorized als

Hodor! HODOR.

HODOR...
  • Beachten Sie, dass vor dem letzten Satz kein Leerzeichen steht.
  • Beachten Sie, dass die Interpunktion des letzten Satzes in geändert wurde ....

Die Saite

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

ist Hodorized als

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

Hodor hodor hodor hodor hodor.

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

Hodor hodor hodor, hodor hodor hodor.

Hodor hodor, hodor hodor hodor.

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

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

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

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

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

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

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

(vorausgesetzt die Newline ist eine Single \n)

Herausforderung

Schreiben Sie ein Programm oder eine Funktion, die eine ASCII-Zeichenfolge aufnimmt, und hodorisieren Sie sie, indem Sie die resultierende Zeichenfolge drucken oder zurückgeben. Übernehmen Sie Eingaben auf eine beliebige Standardart (aus Textdatei, Befehlszeile, stdin, Funktionsargument).

Die Lösung mit den wenigsten Bytes gewinnt. Tiebreaker ist früherer Beitrag. ( Handy-Byte-Zähler. )

Calvins Hobbys
quelle
1
Diese Herausforderung bringt mich dazu, die Staffeln 1 bis 4 noch einmal anzuschauen und herauszufinden, was er wirklich sagt. : D
mbomb007
24
Toll, wir haben die nächste Version von Ook gefunden .
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
Ich würde diese Frage mit HODOR beantworten, aber ich denke, ich kann SE zum Absturz bringen.
Caird Coinheringaahing

Antworten:

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!

Das ist nur die Sprache und Größe Header!? Lassen Sie uns den Beitrag einfach in langweiliges altes ASCII kodieren. Entschuldige, wenn du Probleme hast, den Beitrag zu verstehen, Hodor.


CJam, 85 Bytes

Hier ist mein Versuch. Einige Teile dieses Codes fühlten sich ziemlich klobig an, als ich sie schrieb, also gibt es wahrscheinlich das Potenzial, dies zu übertreffen!

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

Probieren Sie es online aus.

Erläuterung

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.";
Runer112
quelle
1
Schreiben Sie die Erklärung in Hodor, um sie besser lesbar zu machen.
Magic Octopus Urn
102

Hodor, 602 582 Bytes

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

Hier ist eine ungolfed Version ... du weißt schon ... zur besseren Lesbarkeit:

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

Ja, es gibt eine Sprache namens Hodor . (Und es ist ziemlich neu.) Es ist im Wesentlichen nur ein String-Ersatz für JavaScript. Das entsprechende JS sieht folgendermaßen aus:

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

Daher ist meine Übermittlung eine Funktion, die eine Zeichenfolge nimmt und das Hodorised-Äquivalent zurückgibt.

Leider scheint es keine Informationen darüber zu geben, wie Hodor tatsächlich arbeitet (abgesehen vom Quellcode des Interpreters), aber es wird mit einem JS2HD-Übersetzungsskript geliefert.

Beachten Sie, dass Hodors Substitutionen auch in String-Literalen angewendet werden. Also kann man dabei einfach die obige Funktion als aufrufen

HODOR! ("CEE")

Sie können auch Folgendes verwenden:

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

wo Hodor... HooodorrHodor HooodorrHodorwird ersetzt durch CEE. Beachten Sie, dass dies bedeutet, dass wenn Ihre Zeichenfolge selbst bestimmte Formen von enthält, HodorSie sie codieren müssen, oder sie wird ersetzt. ZB "Hodor. "ist eigentlich "m"in JavaScript. Der Haken ist, dass die Buchstaben [dhor](ohne Rücksicht auf Groß- und Kleinschreibung) überhaupt nicht ersetzt werden, sodass Sie sie nicht einmal codieren können. Eine Lösung besteht darin, das Literal so aufzuteilen "Hod"+"or. ", dass der Substitutionsschritt nichts zum Dekodieren findet.

Martin Ender
quelle
36
Das freut mich sehr.
Alex A.
1
@AlexA. Ich denke du wolltest sagen "Hodor! Hodor hodor hodor! Hodor?"
MikeTheLiar
Die letzte ...Satzinterpunktion steht nur anstelle der Zeilenumbrüche, nicht .....
mbomb007
1
@ mbomb007 Die vierte .könnte durch nichts ersetzt werden. Es ist ein Platzhalter für den Raum, der normalerweise dort ist und der mit dem Finale entfernt wird r.slice(0,-1).
Martin Ender
1
582 Bytes, aber mit einem Bonus von -65535 für die Verwendung der Programmiersprache Hodor gibt diese Antwort eine Punktzahl von -59713 und macht diese Antwort zum klaren Gewinner ;-)
Josh
5

Python 2, 219 198 Bytes

Probieren Sie es hier aus

Verwendet dieselbe Methode wie Martins JavaScript und ist in Python um einige Bytes kürzer. Ich benutze die praktische Ganzzahldivision von Python 2.7. Danke an Sp3000 fürs Golfen.

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]

Und zu Ihrer eigenen Unterhaltung und meinem eigenen Vergnügen und meiner Neugier ...

Hier ist es als Lambda-Funktion !!!

Python 2, 349

Probieren Sie es hier zusammen mit einer älteren Version des obigen Programms aus.

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]

Um dies zu erreichen, waren immer tiefere Substitutionen sowie zusätzliche Kreativität erforderlich.

  • Jedes jwird durch ersetzt s[i].
  • Jedes cwird durch ersetzt ord(s[i]).
  • Jedes nwird durch ersetzt (ord(s[i])/4+16)%32.

    • Außer wo ich nur brauche n%2, also benutze ich (ord(s[i])/4%2stattdessen.
  • Schließlich awird durch ersetzt (['']*(((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):].

    • Dies liegt daran, dass wir keinen Wert zuweisen können. Daher müssen wir die Liste in zwei Hälften teilen, das Komma bedingt anhängen und dann die letzte Hälfte erneut anhängen.
mbomb007
quelle
1
Ich glaube das gibt 198?
Sp3000,
Cool, ich wusste nicht, dass man so eine Scheibe schneiden kann [:0], um eine leere Saite zu bekommen.
mbomb007
4

MUMPS , 284 236 Bytes

Neue Version: Nachdem ich es mir eine Weile angesehen hatte, kam ich auf eine kürzere Version (236 Bytes):

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

Erste Version:

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

Verdammt, CJam! Vielleicht könnte ich mit ObjectScript ein paar Bytes speichern (es gibt Listenoperatoren), aber ich bezweifle es.

Hier ist eine etwas ausführliche Version:

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
trurl
quelle
1

C # 378 Bytes

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

Es ist mein erstes Mal, dass ich Golf spiele.

GonacFaria
quelle
1
Willkommen beim Programmieren von Puzzles & Code Golf Stack Exchange! Sie können einige Bytes speichern, indem Sie anstelle von einen einzelnen Funktionsnamen verwenden hodor. Sie können wahrscheinlich auch einige, wenn nicht alle Zeilenumbrüche und mehrere Leerzeichen (z. B. nach foroder nach if) entfernen . Sie sollten jedoch wahrscheinlich entweder die usingDirektive zählen Systemoder sich vollständig qualifizieren Console.
Martin Ender
Vielen Dank für Ihre Hilfe, ich werde versuchen, einige Bytes zu verbessern und zu speichern: D.
GonacFaria
Beim Golfspielen von C # -Code ist kein bestimmter Zugriffsmodifikator erforderlich. Sie können also das publicSchlüsselwort löschen, um einige Bytes zu sparen. Sie können auch das Leerzeichen zwischen []und den tatsächlichen Namen der Variablen entfernen , die das Array enthält. Außerdem ist es nicht erforderlich, einen String in ein char-Array zu konvertieren, wenn Sie alle Zeichen eines Strings in einem foreach durchlaufen. Sie können einfach tun foreach (char c in h).
ProgramFOX
1
Bearbeitet, danke. Verwalten, um es auf 378 Bytes zu reduzieren, das macht Spaß.
GonacFaria
0

C ++, 547 452 Bytes

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;
}
Bacchusbeale
quelle
1
Ich zähle nur 505 Bytes. Haben Sie die Zeilenumbrüche als \r\nstatt gezählt \n? Warum brauchen Sie überhaupt die meisten dieser Zeilenumbrüche?
Martin Ender
2
Die Einreichung muss enthalten #include, using namespace std;etc.
Potatoswatter
Die meisten Leute, die Antworten einreichen, zählen nicht #include oder Importe etc
Bacchusbeale