Este viene de un problema de la vida real. Lo resolvimos, por supuesto, pero sigue sintiendo que podría haberse hecho mejor, que es una solución demasiado larga y indirecta. Sin embargo, ninguno de mis colegas puede pensar en una forma más sucinta de escribirlo. Por eso lo presento como código-golf.
El objetivo es convertir un entero no negativo en una cadena de la misma manera que Excel presenta sus encabezados de columna. Así:
0 -> A
1 -> B
...
25 -> Z
26 -> AA
27 -> AB
...
51 -> AZ
52 -> BA
...
16,383 -> XFD
Tiene que funcionar al menos hasta 16.383, pero más allá también es aceptable (aunque no hay puntos de bonificación). Estoy ansioso por la solución C #, pero, según las tradiciones del código de golf, cualquier lenguaje de programación real es bienvenido.
code-golf
conversion
Vilx-
fuente
fuente
Respuestas:
Perl 6 ,
dieciséis14 bytesFunciona incluso más allá de XFD. Gracias a las listas infinitas en Perl 6, esto no tarda una eternidad (y media) en ejecutarse.
Pruébalo en línea!
fuente
Fórmula Excel :), 36 caracteres
Uso:
Lo siento, no pude resistir ...
fuente
<laughter type="evil">Muhahahahaha!</laughter>
"1"
con1
Perl, 17 caracteres
El
..
operador hace lo mismo que el incremento automático mágico, pero sin la necesidad de la variable temporal y el bucle. A menos questrict subs
esté dentro del alcance, las palabras desnudasA
yXFD
se interpretan como cadenas.( Esta respuesta fue sugerida por un usuario anónimo como una edición de una respuesta existente . Sentí que merecía ser una respuesta separada, y la hice. Como no sería justo para mí obtener reputación de ella, yo ' lo he hecho Community Wiki. )
fuente
$_
y la salida es el valor de la expresión, entonces(A..XFD)[$_]
resuelve el desafío con solo 12 caracteres .perl -E 'say[A..XFD]->[<>]' < number.txt
. O, en los shells que lo soportan, simplemente ingrese la entrada en la línea de comando conperl -E 'say[A..XFD]->[<>]' <<< 123
.say+(A..XFD)[<>]
C, 53 caracteres
Es como jugar al golf con un martillo ...
Versión normal:
Y el uso es así:
fuente
Haskell, 48
Menos golfizado:
Explicación
El
sequence
combinador de Haskell toma una lista de acciones y las realiza, devolviendo el resultado de cada acción en una lista. Por ejemplo:es equivalente a:
En Haskell, las acciones se tratan como valores, y se unen usando el
>>=
(enlace) y lasreturn
primitivas. Cualquier tipo puede ser una "acción" si implementa estos operadores al tener una instancia de Monad .Por cierto, el tipo de lista tiene una instancia de mónada. Por ejemplo:
Esto es igual
[(1,4),(1,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)]
. Observe cómo la comprensión de la lista es sorprendentemente similar:Como las listas son un tipo de "acción", podemos usarlas
sequence
con listas. Lo anterior se puede expresar como:Por lo tanto,
sequence
nos da combinaciones gratis!Por lo tanto, para construir la lista:
Solo necesito crear listas para pasar a
sequence
Luego use
concatMap
para aplicar ambossequence
a las listas y concatenar las listas resultantes. Casualmente,concatMap
es la=<<
función para las listas, por lo que la mónada de la lista me permite afeitar algunos caracteres aquí también.fuente
Perl, 26 caracteres.
fuente
Ruby, 35 caracteres.
Uso:
Nota: También hay una versión más corta (30 caracteres) usando recursividad.
Pero al usar esta función, es posible que deba aumentar el tamaño de la pila para números grandes dependiendo de su intérprete de ruby.
fuente
Groovy, 47
fuente
Python 45
51fuente
+chr(65+i%26)
dentro y pruebas parai>=0
, ahorrándole 1 carácter :)f=lambda i:
lugar dedef f(i):return
f = lambda i: i >= 0 and f(math.floor(i / 26 - 1)) + chr(int(round(65 + i % 26))) or ''
Scala, 62 caracteres
Uso:
devoluciones:
Puedes probar esto en Simplemente scala . Copie y pegue la función y úsela
f(some integer)
para ver el resultado.fuente
""+
sobre elelse
caso.Excel VBA, 31 bytes
Función de ventana inmediata anónima de VBE que toma la entrada de la celda
[A1]
y las salidas a la ventana inmediata de VBEfuente
JavaScript (Node.js) , 50 bytes
Pruébalo en línea!
Al ver que mucha gente comenzó a responder esto, yo también respondí.
Nota :
Esto es básicamente una estafa de la respuesta de @ kevinCruijssen en Java acortada gracias a que esto es JS.
fuente
PHP, 30 bytes
Ejecutar como pipe con '-nr' o probarlo en línea .
fuente
Z
iría en[
lugar deAA
.VBA / VB6 / VBScript (no Excel), 73 bytes
Las llamadas
s(16383)
volveránXFC
.fuente
i>675
-s(676)=A@@
(esperadoYZ
),s(677)=A@A
(esperadoZA
)Javascript, 147 bytes
Tuve un problema similar. Este es el golf de la solución. Las columnas de Excel son biyectivas base-26 .
Ampliado, excepto que usa índices 1:
fuente
Java, 57 bytes (recursivo)
Pruébalo en línea.
Explicación:
Java 10, 62 bytes (iterativo)
Pruébalo en línea.
Explicación:
fuente
Adelante (adelante) , 59 bytes
Pruébalo en línea!
Explicación
fuente
R , 65 bytes
Respuesta recursiva al igual que muchas respuestas anteriores.
Pruébalo en línea!
fuente
Powershell, 68 bytes
Versión recursiva alternativa, 68 bytes:
Script de prueba:
Salida:
Nota: Powershell no proporciona un
div
operador.fuente
Haskell, 48
Realmente pensé que podría vencer a la otra entrada de Haskell, pero por desgracia ...
Estoy seguro de que es posible eliminar un par de personajes de esto, pero no he codificado en Haskell durante casi un año, así que estoy bastante oxidado.
No es exactamente lo que llamarías elegante.
fuente
string f(int n){return n<0?"":f(n/26-1)+(char)(n%26+65);}
57 caracteres, así que casi me sentiría mal al publicarlo como respuesta.Jq 1.5 , 71 bytes
Espera entrada en
N
. p.ejExpandido:
Pruébalo en línea!
fuente
> <> , 29 bytes
Pruébalo en línea!
fuente
Icono , 58 bytes
Pruébalo en línea!
fuente