Inspirado por esto . Hay un número, dado como entero, cadena o conjunto de dígitos (a elección). Encuentre la base en la que la representación del número tendrá más "4" y devuelva esa base.
Resultado numérico 624 5 444 10 68 16
restricciones:
- La base devuelta no debe ser mayor que la entrada.
- los números menores o iguales a abs (4) no deben considerarse entradas válidas, por lo que los retornos indefinidos son aceptables
[1,15,3,64,43]
por ejemplo, para algún número en la base80
. Solo está generando el número base, por lo que técnicamente podría probar cada base desde2
hastan
.1
,2
y3
, que tienen el mismo número de "4" s (0) en cada base? Además, muchos números tienen el mismo número de "4" en muchas bases (por ejemplo,4
en cualquier base> 5,44
en cualquier base> 45,14
en la base 9 o en cualquier base> 15, etc.). ¿Debería ser la respuesta correcta la base más pequeña con el mayor número de "4"?Respuestas:
APL (
3119)Ahora prueba todas las bases posibles.
Explicación:
⍳K←⎕
: lea la entrada del usuario, almacene en K. Haga una lista del 1 al K, que son las bases para probar.{
...}¨
: para cada uno de estos, ejecute la siguiente funciónK⊤⍨K⍴⍵
: codifica K en esa base dando una lista de dígitos (como números) por base. Use los dígitos K (una gran sobreestimación, pero no importa porque los no utilizados serán todos cero de todos modos).4=
: ver cuál de estos es igual a 4+/
: suma estos, ahora sabemos cuántas patas por base⊃⍒
: proporcione los índices de la lista si se ordenaron hacia abajo, de modo que el índice del más grande se encuentre al frente. Tome el primer elemento de esta lista.fuente
⍨
GolfScript, 30 caracteres
Funciona para cualquier base: pruebe el código en línea .
Comentario: esta solución se basó en la versión original de la pregunta. Por lo tanto, puede devolver una base más grande que la entrada, por ejemplo, para la entrada 4 devuelve correctamente la base 5, que ya no es válida según las nuevas reglas.
fuente
GolfScript (23 caracteres)
o
o
Tenga en cuenta que esto toma la entrada de stdin: para una comparación justa con la versión de Howard GolfScript reste un carácter.
Howard señala que las reglas han cambiado, y no es muy lógico que ahora excluyan
4
como una posible entrada cuando tiene una salida válida (cualquier número entero mayor que 4). Para cubrir ese caso también se requieren 2 caracteres adicionales, que se pueden agregar de muchas maneras:o
siendo un par de los obvios.
fuente
Python 2.x, 77 caracteres
Funciona hasta la base 98 y números de 98 dígitos como máximo.
fuente
J, 38 caracteres
Uso:
fuente
VBA, 121
uso:
?k(num)
=k(A1)
fuente
For w=5To a
Mathematica 59
Código
Démosle un nombre a la función anterior.
Explicación
Count[IntegerDigits[n,k],4]
: Cuenta el número de cuatro patas en la representación base k de n .Sort
las bases de menos a más 4s.Algunos números especiales
Ahora apliquemos whichBase a los siguientes números especiales.
Si convierte cada número a la base correspondiente, verá lo que tiene de especial.
fuente
n
allí. Además,MaximalBy
realmente ayuda, lo reduce a 49 bytes:MaximalBy[Range[a=#],a~IntegerDigits~#~Count~4&]&
(solo ignore los mensajes que intentan usar base-1)Japt
-h
, 10 bytes444
en base10
es el[4,4,4]
que contiene el número y el dígito4
3 veces, pero444
en base100
es el[4,44]
que también contiene el dígito4
3 veces, pero solo como un número una vez. Dado el resultado esperado en el desafío para el444
caso de prueba, supongo que debemos contar el número 4:Intentalo
Pero si nos estamos contando los dígitos 4 a continuación:
Intentalo
fuente
C - (114 caracteres)
En todo es gloria de golf:
Y de alguna manera no golfista:
Solo por diversión, aquí está la salida de los números
[0,127]
(estas son las bases más grandes debajo del número de entrada en sí).fuente
R -
148137caracteres(por lo tanto, lejos del resto de la competencia pero aún así)
Básicamente, transforme la entrada de la base 10 a todas las bases de 4 a n (usando la
%%
división de módulo y entero%/%
) y elija el índice de la primera que tenga más 4s.fuente
Traducción J de la solución APL de @marinus:
Solo por interés, aquí hay algunos valores:
Produce la base más pequeña que da una transformación más cuádruple. Para los últimos valores de la tabla, las representaciones se ven como "4n" (por ejemplo, 31 en la base 7 es "43").
fuente
Jalea , 6 bytes
Pruébalo en línea!
Emite "todas" las bases hasta N, lo que da la mayor cantidad de 4. Si desea una base máxima o mínima, agregue
Ṁ
(max) oṂ
(min) respectivamente.Cómo funciona
fuente
05AB1E ,
109 bytes-1 byte gracias a @Cowabunghole .
Si varias bases tienen la misma cantidad de 4s, generará la más pequeña (es decir,
16
dará como resultado6
, pero12
también habría sido una salida posible).Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Qƶà
conk>
? es decir, encontrar el índice basado en 0 del máximo e incrementarlo?C # con Linq 273
o
Es bastante seguro que el número de variables se puede reducir y los if se pueden convertir a? S. Oh bien...
fuente
C # (
482~ 423 bytes)Primer intento de una solución 'golfizada'. Utilicé básicamente el mismo algoritmo que el VBA anterior. Probablemente podría guardar algunos bytes alineando la función de conversión o acortando el nombre. Como dije, este es un primer intento, así que por favor sé gentil.
Con espacios en blanco:
fuente
namespace
se requiera. Todos los nombres deben ser un solo carácter, incluidosProgram
ycBase
. Y sí, deberías estar en líneacBase
. Asimismo, se combinan declaración e inicialización, es decir,int c=0,m=0
.int
parámetros y devuelvaint
parámetros, sin siquiera unMain
método, y llame al personaje a contar su puntaje.Burlesque - 28 bytes
Pruébalo en línea.
fuente
k , 18 bytes
Pruébalo en línea!
fuente
Perl 6 , 44 bytes
Pruébalo en línea!
Buen viejo polymod .
fuente
Casco , 9 bytes
Pruébalo en línea!
fuente