¿Cómo, no puedes recordar el número de teléfono de 6 o 7 dígitos que apareció en la pantalla del televisor por un segundo? ¡Usando la técnica especial que se describe a continuación, se convertirá en una guía telefónica ambulante!
Obviamente, el número 402
es más fácil de recordar que el número 110010010
, y el número 337377
es más fácil de recordar que el número 957472
. Esto significa que el número memorizado, por un lado, debe contener la menor cantidad de dígitos posible y, por otro lado, es deseable que el número contenga tantos números repetidos como sea posible.
Como criterio para la dificultad de recordar, tomamos la suma del número de dígitos en número y el número de dígitos diferentes en número. Un número memorizado puede escribirse en otro sistema de números, quizás entonces sea más fácil de recordar. Por ejemplo, se 65535
ve el número en la notación hexadecimal FFFF
.
Tarea
Debe escribir un programa para seleccionar la base del sistema de números para minimizar el criterio de complejidad. La base del sistema de números debe seleccionarse en el rango de 2 a 36, luego los números 0-9
y las letras en inglés A-Z
se pueden usar para representar el número.
Entrada
La entrada contiene un entero decimal del 1 al 999999999.
Salida
La salida debe contener la base del sistema numérico (de 2 a 36), minimizando el criterio de complejidad de memorización y el número en el sistema numérico seleccionado, separados por un espacio. Si varias bases dan el mismo valor para el criterio, elija la más pequeña entre ellas.
Notas
- Las letras deben ser mayúsculas (
A-Z
).
Casos de prueba
De entrada y salida
1
2 1
2
3 2
65535
16 FFFF
123
12 A3
fuente
a-z
lugar deA-Z
?A-Z
?Respuestas:
Perl 6 ,
5554 bytes-1 byte gracias a Jo King.
Pruébalo en línea!
fuente
@$_
con@_
y todavía funciona.Python 2 ,
150149127144 bytesPruébalo en línea!
Python 3 , 136 bytes
Pruébalo en línea!
Python 3.8 (prelanzamiento) , 131 bytes
Pruébalo en línea!
c
convierte un número base 10 en cualquier base (2-36), y la primera función (anónima) encuentra el resultado más pequeño.fuente
05AB1E ,
1614 bytes-1 byte gracias a Kevin Cruijssen
Pruébalo en línea!
O agregue R) »al final para ajustarse exactamente al formato de salida especificado, pero la mayoría de las otras respuestas no molestaron.
Explicación:
fuente
₆L©B®ø
lugar de₆LεBy‚}
ā
, parece que siempre te olvidas de ese.JavaScript (ES6),
8785101 bytesEditar: +16 bytes inútiles para cumplir con el formato de salida estricto
Pruébalo en línea!
fuente
Japt v2.0a0
-gS
,2423 bytesNo es bonito, pero hace el trabajo. +2 bytes para el requisito completamente innecesario de que la salida sea mayúscula.
Intentalo
fuente
PHP ,
124119 bytesPruébalo en línea!
Una pena sobre los +12 bytes en PHP para poner en mayúscula la salida ... pero ... de todos modos.
fuente
Zsh , 85 bytes
Para este número de declaraciones dentro del ciclo for, el uso
...&&...&&...
es más corto que{...;...;...;}
.Pruébalo en línea!
Aquí hay una solución de 81 bytes que se imprime en el formulario
[base]#[num]
:Pruébalo en línea!
fuente
J , 67 bytes
Pruébalo en línea!
fuente
Carbón , 38 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Ingrese el entero.
Conviértalo de la base 2 a la base 36 ...
... deduplica, concatena y toma la longitud.
Tome el índice de la complejidad mínima y agregue 2 para obtener la base.
Imprima la base y el entero convertido a esa base en mayúsculas.
fuente
Stax , 19 bytes
Ejecutar y depurarlo
Sin algoritmo sofisticado, solo fuerza bruta directa. Alrededor de un tercio del programa está discutiendo el formato de las reglas de salida precisas.
Programa de bonificación: Salida para [1..1000]
fuente
Jalea , 25 bytes
Pruébalo en línea!
Un enlace monádico que toma un número entero como argumento y devuelve una cadena Jelly del formato deseado. Si una lista de dos elementos fuera una salida aceptable (según la mayoría de los desafíos), podría ahorrar 2 bytes. Si la base 1 fuera aceptable para el caso límite de 1 como entrada, podría guardar otros 2 bytes.
fuente
Brachylog , 44 bytes
Pruébalo en línea!
Esto duele un poco para escribir.
fuente
Perl 5 , 161 bytes
Pruébalo en línea!
fuente
Python 2 ,
140135 bytesPruébalo en línea!
fuente
Perl 5
-Minteger -MList::Util=uniq,first -ap
,123112 bytesPruébalo en línea!
fuente
Wolfram Language (Mathematica) ,
109111 bytes+2: fijo. Gracias por la captura @Roman
OrderingBy
se introdujo en Mathematica 12.0, que TIO no parece haberse actualizado todavía.fuente
OrderingBy
no cumple con este requisito.MinimalBy
, como esto ?123
, su solución se imprime en36 3F
lugar de la requerida12 A3
. DeOrderingBy[123~IntegerDigits~Range@36, Tr[1^#] + Tr[1^Union@#] &]
donde obtengo la respuesta{36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 6, 5, 11, 10, 9, 8, 7, 4, 3, 2, 1}
, entonces la suposición habitual de no reordenar entradas equivalentes parece ignorarse aquí. Mi$Version
es "12.0.0 para Mac OS X x86 (64 bits) (7 de abril de 2019)".C (clang) , 165 bytes
Pruébalo en línea!
n // entrada
, i = 2 // iterador de base 2 a 36
, j // complejidad actual
, p = 99 // mejor complejidad
, r // resultado = iterador
, m // copia temporal de n
, x; // m% i
char * g // ptr de cadena actual
, * _ // mejor str ptr
, b [74] [37]; // tampón
/ * [37 + 37] = [cadenas obtenidas + prueba de caracteres usados] * /
Tennesse){
para (; g = b [i], // mover ptr
para (j = 0, m = n; m; m / = i, // extraer dígito
j + = b [i + 36] [x = m% i] ++? 1: 2; // incrementa el byte relativo al caracter
// y si fuera 0 incrementa j por 2: 1 para el nuevo carácter utilizado y 1 para el recuento de dígitos
// de lo contrario, solo incr. los dígitos cuentan + mover el puntero
// printf ("% s -", g); // prueba
// printf ("r% ip% ij% i \ n", r, p, j); // prueba
}
printf ("% i,% s", r, _); // salida
}
fuente
Japt v2.0a0, 31 bytes
Intentalo
fuente