CJam , 6 bytes (programa completo) / 7 bytes (bloque de código)
q),^W=
Pruébalo en línea!
Este es un programa completo de CJam que lee la cadena de entrada desde la entrada estándar e imprime la letra que falta en la salida estándar. CJam en realidad no tiene "métodos", que es lo que pide el desafío, pero lo más cercano probablemente sería un bloque de código ejecutable, como este:
{),^W=}
Pruébalo en línea!
Este bloque de código, cuando se evalúa, toma la entrada como una cadena (es decir, una matriz de caracteres) en la pila y devuelve el carácter faltante también en la pila.
Explicación: en el programa completo, q
lee la cadena de entrada y la coloca en la pila. )
luego saca el último carácter de la cadena de entrada, y el operador de rango lo ,
convierte en una matriz que contiene todos los caracteres con puntos de código debajo (incluidas todas las letras anteriores en el alfabeto). Así, por ejemplo, si la entrada fue cdfgh
, entonces después de ),
la pila contendría las cadenas cdfg
(es decir, la entrada con la última letra eliminada) y ...abcdefg
, donde ...
representa un grupo de caracteres con códigos ASCII a continuación a
(es decir, todos los caracteres debajo de la última entrada eliminada carta).
El operador de diferencia de conjunto simétrico ^
combina estas cadenas en una sola cadena que contiene exactamente los caracteres que aparecen en una de las cadenas, pero no en ambas. Conserva el orden en que aparecen los caracteres en las cadenas, por lo que para la entrada de ejemplo cdfg
, el resultado posterior ),^
será ...abe
, donde ...
nuevamente representa un grupo de caracteres con los códigos ASCII a continuación a
. Finalmente, W=
solo extrae el último carácter de esta cadena, que es exactamente el carácter faltante e
que queríamos encontrar (y descarta el resto). Cuando finaliza el programa, el intérprete de CJam imprime implícitamente el contenido de la pila.
Bonus: GolfScript , 6 bytes (programa completo)
),^-1>
Pruébalo en línea!
Resulta que casi el mismo código también funciona en GolfScript. Guardamos un byte en la versión completa del programa debido a la entrada implícita de GolfScript, pero perdemos un byte porque, a diferencia de CJamW
, GolfScript no tiene una variable útil de una sola letra inicializada en -1.
Además, CJam tiene tipos enteros y de caracteres separados (y las cadenas son solo matrices que contienen caracteres), mientras que GolfScript solo tiene un tipo entero único (y tiene un tipo de cadena especial que se comporta de manera algo diferente de las matrices normales). El resultado de todo esto es que, si queremos que el intérprete de GolfScript imprima la letra faltante real en lugar de su número de código ASCII, debemos devolver una cadena de un solo carácter en lugar de solo el carácter en sí. Afortunadamente, hacer ese cambio aquí solo requiere reemplazar el operador de indexación =
con el operador de truncamiento izquierdo de la matriz / cadena >
.
Por supuesto, gracias a la E / S implícita de GolfScript, el código anterior también se puede usar como un fragmento que lee una cadena de la pila y devuelve una cadena de un solo carácter que contiene la letra que falta. O, mejor dicho, cualquier fragmento que tome una sola cadena en la pila como argumento, y devuelva su salida como una cadena imprimible en la pila, también es un programa completo de GolfScript.