Hodorizar una cuerda

48

Hodor es un personaje de mente lenta pero entrañable en el programa Game of Thrones ( también está en los libros , por supuesto). La única palabra que dice es "hodor" .

Sorprendentemente, a pesar de no tener mucho vocabulario, Hodor siempre habla en oraciones completas con mayúsculas y puntuación correctas, y de hecho transmite significado.

Hodor es capaz de expresar los 128 caracteres ASCII , aunque le toma una oración completa decir cada uno. Cada personaje tiene una representación única y exacta como una oración. Una cadena ASCII se Hodoriza traduciendo todos los caracteres de la cadena a sus equivalentes de oración Hodor, luego uniendo todas las oraciones. Como todos los caracteres se asignan a oraciones exactas, todas las cadenas ASCII tienen una representación Hodorizada única y única.

Personajes hodorizantes

Hodor divide sus 128 caracteres expresables en 4 conjuntos de 32 mediante el uso de 4 tipos diferentes de puntuación para las oraciones que representan caracteres.

La oración termina con ...

  • .si el código de carácter ASCII mod 4 es 0.
  • .[newline][newline] (para un nuevo párrafo) si el código mod 4 es 1.
  • ? si el código mod 4 es 2.
  • ! si el código mod 4 es 3.

Por ejemplo, el código de caracteres ASCII para bes 98, y 98 mod 4 es 2, por lo que la oración de Hodor bseguramente terminará en ?.

El contenido de la oración es una de las 32 cadenas distintas que solo contienen la palabra 'hodor'. Cada uno de los 32 caracteres de un tipo de puntuación particular se asigna a una cadena de contenido de oración diferente. Entonces, con 32 cadenas de contenido de oraciones y 4 tipos de puntuación, los 128 caracteres ASCII se pueden representar como oraciones Hodor distintas.

Para determinar el contenido de la oración para un carácter con código ASCII C, calcule (floor(C / 4) + 16) mod 32; todo después de los dos puntos en esa línea en esta lista es el contenido de la oración:

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

Se puede ver que, aparte del HODORcaso especial, estas cadenas se generan uniendo más y más hodor, y cada otra cadena tiene una coma a mitad de camino entre todas las palabras (con la "mitad más grande" a la derecha de la coma para un extraño número de palabras).

Al unir el contenido de la oración con la puntuación, podemos formar las oraciones de Hodor para los 128 caracteres (el número a la izquierda es el código de caracteres):

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]Se reemplazarán por líneas nuevas reales).

Hodorizing Strings

Hodorizar una cadena realmente solo implica concatenar todas las oraciones de caracteres de los caracteres de la cadena. Solo hay un par de advertencias:

  • Se inserta un espacio después de cada oración, excepto las .[newline][newline]puntuadas y la última oración.
  • Si la última oración se puntúa con .[newline][newline], la puntuación se convierte ...así que no hay espacios en blanco al final.

Ejemplos

La cadena F0está Hodorizada como

HODOR? Hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor hodor.
  • Ftiene el código ASCII 70. 70 mod 4 es 2, por lo que la primera oración termina en ?. (floor(70 / 4) + 16) mod 32es 1, entonces el contenido es HODOR.
  • 0tiene el código ASCII 48. 48 mod 4 es 0, por lo que la segunda oración termina en .. (floor(48 / 4) + 16) mod 32es 28, por lo que el contenido está hodorunido a 15 sin coma.
  • Tenga en cuenta que no hay espacio final.

La cadena CEEestá Hodorizada como

Hodor! HODOR.

HODOR...
  • Observe que no hay espacio antes de la última oración.
  • Observe que la puntuación de la última oración se cambió a ....

La cuerda

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

es Hodorizado como

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

Hodor hodor hodor hodor hodor.

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

Hodor hodor hodor, hodor hodor hodor.

Hodor hodor, hodor hodor hodor.

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

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

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

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

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

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

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

(suponiendo que la nueva línea es única \n)

Desafío

Escriba un programa o función que tome una cadena ASCII y la hodorice, imprimiendo o devolviendo la cadena resultante. Tome la entrada de cualquier manera estándar (desde un archivo de texto, línea de comando, stdin, función arg).

La solución con la menor cantidad de bytes gana. Tiebreaker es una publicación anterior. ( Práctico contador de bytes ) .

Pasatiempos de Calvin
fuente
1
Este desafío me hace querer volver a ver las temporadas 1-4 y descubrir lo que realmente está diciendo. : D
mbomb007
24
Genial, encontramos la próxima versión de 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 hodor ...
Adam Davis
1
@AdamDavis Hodorception!
Martin Ender
1
Contestaría esta pregunta con HODOR pero creo que puedo bloquear SE.
caird coinheringaahing

Respuestas:

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 hodor hodor hodor hodor hodor!

¿¡Eso es solo el encabezado de idioma y tamaño !? No importa entonces, simplemente codifiquemos la publicación en un viejo y aburrido ASCII. Lo siento si tienes problemas para entender la publicación, Hodor.


CJam, 85 bytes

Aquí está mi intento. Algunas partes de este código se sintieron bastante torpes cuando las escribí, ¡por lo que es probable que supere esto!

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

Pruébalo en línea.

Explicación

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
fuente
1
Publique la explicación en Hodor para que sea más legible.
Urna de pulpo mágico
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)}

Aquí hay una versión sin golf ... ya sabes ... para facilitar la lectura:

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

Sí, hay un idioma llamado Hodor . (Y es bastante nuevo). Es esencialmente solo una sustitución de cadena para JavaScript. El JS correspondiente se ve así:

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

Por lo tanto, mi sumisión es una función que toma una cadena y devuelve el equivalente Hodorizado.

Desafortunadamente, no parece haber ninguna información sobre cómo funciona realmente Hodor (aparte del código fuente del intérprete), pero viene con un script de traducción JS2HD.

Tenga en cuenta que las sustituciones de Hodor también se aplican dentro de literales de cadena. Entonces, si bien puede llamar a la función anterior como

HODOR! ("CEE")

También puede usar lo siguiente:

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

donde Hodor... HooodorrHodor HooodorrHodorserá sustituido con CEE. Nótese que esto significa, que si su propia cadena contiene ciertas formas de Hodorque te tienen para codificarla, o de lo contrario serán sustituidos. Por ejemplo, en "Hodor. "realidad está "m"en JavaScript. El problema es que las letras [dhor](sin distinción entre mayúsculas y minúsculas) no se reemplazan en absoluto, por lo que ni siquiera puede codificar esto. Una solución es dividir el literal, como "Hod"+"or. ", de modo que el paso de sustitución no encuentre nada que decodificar.

Martin Ender
fuente
36
Esto me hace tan feliz.
Alex A.
1
@AlexA. Creo que querías decir "Hodor! Hodor hodor hodor! Hodor?"
MikeTheLiar
La puntuación de la última oración es solo en ...lugar de las nuevas líneas, no .....
mbomb007
1
@ mbomb007 El cuarto .podría ser reemplazado por cualquier cosa. Es un marcador de posición para el espacio que generalmente está allí, que se elimina con la final r.slice(0,-1).
Martin Ender
1
582 bytes pero con una bonificación de -65535 por usar el lenguaje de programación Hodor le da a esta respuesta una puntuación de -59713 y hace que esta respuesta sea el claro ganador ;-)
Josh
5

Python 2, 219 198 bytes

Pruébalo aquí

Utiliza el mismo método que el JavaScript de Martin, y es varios bytes más corto en Python. Hago uso de la práctica división entera de Python 2.7. Gracias a Sp3000 por jugar al 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]

Y para su propio entretenimiento y mi propio disfrute y curiosidad ...

¡Aquí está como una función lambda !

Pitón 2, 349

Pruébelo aquí , junto con una versión anterior del programa anterior.

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]

Crear esto implicaba sustituciones cada vez más profundas, así como algo de creatividad extra.

  • Cada jse reemplaza con s[i].
  • Cada cse reemplaza con ord(s[i]).
  • Cada nse reemplaza con (ord(s[i])/4+16)%32.

    • Excepto donde solo necesito n%2, así que lo uso (ord(s[i])/4%2en su lugar.
  • Finalmente, ase reemplaza con (['']*(((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):].

    • Esto se debe a que no podemos asignar un valor, por lo que debemos dividir la lista por la mitad, agregar condicionalmente la coma y luego agregar la última mitad nuevamente.
mbomb007
fuente
1
Creo que esto da 198?
Sp3000
Genial, no sabía que podías cortar [:0]así para obtener una cuerda vacía.
mbomb007
4

MUMPS , 284 236 bytes

Nueva versión: después de mirarlo por un tiempo, se me ocurrió una versión más corta (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

Primera versió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

¡Maldita seas, CJam! Tal vez podría guardar algunos bytes usando ObjectScript (hay operadores de lista), pero lo dudo.

Aquí hay una versión algo detallada:

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
fuente
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 mi primera vez jugando al golf, tan desnudo conmigo.

GonacFaria
fuente
1
¡Bienvenido a Programming Puzzles & Code Golf Stack Exchange! Puede guardar algunos bytes utilizando un nombre de función de un solo carácter en lugar de hodor. También es probable que pueda eliminar algunos, si no todos los saltos de línea, y varios espacios (por ejemplo, después forde oder del if). Sin embargo, probablemente debería contar la usingdirectiva Systemo calificar completamente Console.
Martin Ender
Gracias por su ayuda, intentaré mejorar y guardar algunos bytes: D.
GonacFaria
Al jugar golf en el código C #, no es necesario tener un modificador de acceso específico; para que pueda soltar la publicpalabra clave para guardar algunos bytes. También puede eliminar el espacio entre []y el nombre real de la variable que contiene la matriz. Además, no es necesario convertir una cadena en una matriz de caracteres cuando itera sobre todos los caracteres de una cadena en un foreach; simplemente puedes hacer foreach (char c in h).
ProgramFOX
1
Editado, gracias. Lograr reducirlo a 378 bytes, esto es divertido.
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;}

Sin golf:

#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
fuente
1
Cuento solo 505 bytes. ¿Contaste los saltos de línea como en \r\nlugar de \n? Además, ¿por qué necesitas la mayoría de esos saltos de línea?
Martin Ender
2
La presentación debe incluir #include, using namespace std;etc.
Potatoswatter
La mayoría de las personas que envían respuestas no cuentan #incluye o importa, etc.
bacchusbeale