Problema:
Está creando un nuevo teléfono donde las personas pueden escribir números de teléfono especializados, por ejemplo 1-800-program
, y se convertirían automáticamente en un número de teléfono utilizable, como 1-800-7764726
(para el ejemplo anterior).
Su programa recibirá una cadena de cualquier longitud con números, letras y guiones, y convertirá todas las letras a sus números correspondientes.
Aquí hay un teclado, para referencia:
Reglas:
- Su programa recibirá una cadena.
- Lo procesará y devolverá / imprimirá otra cadena
- Cualquier idioma es aceptado
- Como es el código de golf , gana el código más corto
Respuestas:
GolfScript, 24 caracteres
Prueba de entrada:
Prueba de salida:
Explicación:
{ }%
aplica el código entre llaves a cada carácter de la entrada..96>{ }*
ejecuta el código entre las llaves internas si y solo si el código ASCII del carácter es mayor que 96 (es decir, es una letra minúscula).El primero
,
convierte el carácter en una lista de todos los caracteres con códigos ASCII más bajos y91,'qx'+-
filtra todos los caracteres con códigos ASCII inferiores a 91, así como las letrasq
yx
, de la lista. Así, por ejemplo, el personajea
se convierte en la lista de 6 caracteres[\]^_`
, mientras quez
se convierte en la lista de 29 caracteres[\]^_`abcdefghijklmnoprstuvwy
.El segundo
,
cuenta los elementos que quedan en la lista y3/
divide este recuento por tres (redondeando hacia abajo). Finalmente,`
convierte el número resultante (en el rango de 2 a 9) en una cadena.Por lo tanto, según las especificaciones, los guiones y los números no se modifican, mientras que las letras minúsculas se asignan a números de acuerdo con el diagrama del teclado de referencia. El código en realidad pasará limpiamente a través de todos los caracteres ASCII imprimibles, excepto las letras minúsculas (que se asignan como se describe) y los caracteres
{
,|
y}
(que se asignan a la cadena de dos caracteres10
). La entrada de 8 bits no ASCII producirá todo tipo de salidas numéricas extrañas.Después de todo esto, es un poco decepcionante que solo supere la solución trivial bash en solo seis caracteres.
fuente
Bash, 30
Editar: Gracias Doorknob por eliminar 3 caracteres
Ejemplo:
fuente
9
s?C,
837877656362http://ideone.com/qMsIFQ
fuente
~(c=getchar())
getch()
lugar degetchar()
?getch()
no es el estándar C, como resultado supongo que no se vincula en ideona. Sin embargo, lo probé en MSVC y realmente no funciona tristemente, ya que consume directamente la entrada del teclado, no hay forma de salir del programa, aunque traduce lo que escribes sobre la marcha, lo cual es bastante ordenado.Javascript - 103 caracteres
fuente
charCodeAt(0)
concharCodeAt()
y puede usar la función de flecha parafunction(y)...
guardar algunos bytes y~~(y/3)
puede usary/3|0
Ruby, 75 caracteres
Utiliza el
chars
bloque obsoleto con, e imprime cada letra individualmente con$><<
. También me gusta[[*?a..?z].index(c)||-1]
; agarra el carácter correspondiente a esa letra del alfabeto si es una letra, y el último carácter (que resulta ser el carácter de prueba sin cambios) si no.Ruby, 43 (o 35) caracteres
Robando descaradamente a @ace;)
Afeite 8 caracteres si puedo ejecutar en IRB con la variable
s
como la cadena:fuente
C ++ - 222 caracteres
La solución más larga hasta ahora:
fuente
Frink, 92
Un lenguaje bastante detallado, lo sé. Esto verifica 8 valores en lugar de 26 sin tener que escribir las comparaciones. ¿Puede alguna de las soluciones "222333444 .." anteriores reducirse de manera similar?
Utilizando estructuras incorporadas, 107
Usando una función recursiva personalizada, 92
fuente
Smalltalk,
7970la entrada es s:
probablemente no sea un candidato para ser el más bajo, pero puede ser de interés para un viejo truco para evitar una prueba de una condición no encontrada (indexOf: devuelve 0 en este caso). Por lo tanto, no se necesita una prueba especial para las letras. Sin embargo, algunos Smalltalks tienen cadenas inmutables y necesitamos 4 caracteres más ("copia").
Oh, una versión mejor, que incluso trata con cadenas inmutables en 70 caracteres:
fuente
Mathematica 90
Esto sigue la lógica de la solución de @ ace:
Ejemplo
fuente
1
en#1
:)1
. Todavía 90 caracteres pero cortar y pegar funcionarán. Por supuesto, comprende la motivación para usar la flecha de un solo carácter.Perl, 50
Otra copia obvia de la respuesta bash de Ace
fuente
-p
interruptor en su lugar, que le permite ir muy bien a través de cada línea de stdin. Mientras estamos en eso, el rango en y /// no necesita ponerse entre corchetes. También podemos deshacernos de tres 9 dejando solo uno y eliminar el punto y coma final:-p y/a-z/22233344455566677778889/
ya está, 30 + 1 para-p
. Gracias por utilizar Enterprise Chinese Perl Golfing y los servicios de optimización y que tenga un buen día.R, muy largo pero divertido
fuente
k [32 caracteres]
Uso
fuente
JavaScript, 85
JavaScript nunca va a ganar las guerras de golf, pero me gusta y quería hacer algo diferente a saltar en el carro de @ace.
fuente
PHP, 141
No es el más corto, pero sí más divertido:
Más legible:
fuente
strtolower
Python 2.7, 80
Soy nuevo en Python, así que estoy seguro de que debe haber una forma de jugar al golf aún más , es un enfoque diferente, ¡espero que les guste, Dios mío, es Python bonito!
Ejecute el ejemplo:
fuente
T-SQL, 216 bytes
Pasé bastante tiempo durante las últimas noches creando minuciosamente una función de secuencia matemática que se redondearía correctamente para generar los códigos ASCII adecuados para los números de los códigos ASCII alfabéticos. Tenía un número ridículo de decimales en los coeficientes, pero funcionó.
Sin embargo, el enfoque racional de mattnewport también funciona en SQL, a un costo mucho menor de bytes, por lo que descarto descaradamente mis propias matemáticas a favor de las suyas. Sube a votarlo, ¡es una solución elegante!
Aquí está el mío:
Esto usa un CTE recursivo para hacer una pila improvisada de los caracteres en el número de teléfono y traducir las letras sobre la marcha, luego un poco de truco de SQL (SELECT @ p = @ p + columnValue) para recomponer la cadena del CTE sin requerir Otra construcción de recursión.
Salida:
fuente
Python 2.7,
6665Original de Anakata
Más golf
No tengo suficiente reputación para comentar sobre la respuesta de @ anakata, así que hice una publicación separada aquí. Tuve la misma idea (tomar el módulo de ordenanzas 3) pero no pude encontrar la forma de imprimir los números correctos para s - z .
De todos modos, las mejoras de golf que hice:
cambiado
raw_input
ainput
eliminado los extraños
'\b'
y paréntesis y comillas simpleseliminó el
+2
desplazamiento y lo colocó en la resta original (97 - (3 * 2) = 91)Probado con el intérprete Python 2.7.6. Asume, según las reglas, una entrada de cadena.
fuente
PHP, 87
fuente
q [38 caracteres]
Inspirado en la solución de @ ace
Ejemplo
fuente
XQuery, 71
BaseX se utilizó como procesador XQuery.
$i
es entrada.No es la respuesta más corta, pero es bastante corta y muy legible.
fuente
Pitón, muy poco golfista
Como todos están copiando as, decidí publicar el código que inventé antes de enviar la pregunta:
fuente
EcmaScript 6 (103 bytes):
Espera
i
contener la cadena.Pruébelo en cualquier versión reciente de Firefox. No he probado Google Chrome.
fuente
Pitón 3, 121
fuente
Haskell, 93C
Uso
fuente
C # 140
fuente
Pitón
fuente
ECMASCRIPT, 101 (con entrada)
Nueva línea agregada para mayor claridad. 85 caracteres si la entrada está en una variable.
fuente
Perl, 54
Dispara, @RobHoare todavía me ganó por 4 personajes. :)
fuente
QBasic, 155
Ah, los recuerdos ...
Esto debería haber sido más corto, pero estaba probando con repl.it , que no permite
IF
declaraciones de una sola línea y se comporta de manera extraña si deja la variable desactivadaNEXT i
. Tampoco reconoce laASC
función, por lo que para ejecutar el código deberá agregar esta solución al principio:(La segunda vez que lo ejecute, el intérprete se quejará a menos que elimine la
DECLARE FUNCTION
línea, vaya a la figura).fuente
R, 110
Ejemplo:
fuente