Tu jefe quiere que escribas código como este:
public static boolean isPowerOfTen(long input) {
return
input == 1L
|| input == 10L
|| input == 100L
|| input == 1000L
|| input == 10000L
|| input == 100000L
|| input == 1000000L
|| input == 10000000L
|| input == 100000000L
|| input == 1000000000L
|| input == 10000000000L
|| input == 100000000000L
|| input == 1000000000000L
|| input == 10000000000000L
|| input == 100000000000000L
|| input == 1000000000000000L
|| input == 10000000000000000L
|| input == 100000000000000000L
|| input == 1000000000000000000L;
}
(Martin Smith, en /codereview//a/117294/61929 )
que es eficiente, pero no tan divertido de escribir. Como desea minimizar la cantidad de pulsaciones de teclas que tiene que hacer, escribe un programa o función (o método) más corto que genera esta función por usted (o devuelve una cadena a la salida). Y dado que tiene su propio teclado Unicode de rango completo personalizado con todas las 120,737 teclas necesarias para todo Unicode 8.0, contamos los caracteres Unicode, en lugar de las pulsaciones de teclas. O bytes, si su idioma no usa el código fuente Unicode.
Cualquier entrada que su programa o función tome cuenta para su puntaje, ya que obviamente también tiene que escribir eso.
Aclaraciones y ediciones:
- Se eliminaron 3 espacios finales después del último
}
- Se eliminó un solo espacio final después de
return
- Devolver una cadena de salida de una función / método está bien
fuente
0==Math.log10(input)%1
while(input%10==0) input/=10; return input == 1;
Respuestas:
PostgreSQL, 158 caracteres
fuente
Vim 97 pulsaciones de teclas
Bueno, hoy estoy en racha con vim produciendo java, así que ¿por qué no continuar con la tendencia?
fuente
fL
con$
podría ahorrarle una pulsación de teclainput == 1L
está desalineada por un byte ...x
debe cambiarse ar<sp>
y luego la cantidad de pulsaciones de teclas no se modificará05AB1E ,
999796949387 bytesCódigo:
Pruébalo en línea!
Utiliza la codificación CP-1252 .
fuente
CJam, 52 caracteres
Pruébalo en línea!
Nivel 1
Usando los caracteres Unicode U + 10000 a U + 10FFFF, podemos codificar 20 bits en un solo carácter. CJam utiliza caracteres de 16 bits internamente, por lo que cada uno se codificará como un par de sustitutos , uno en el rango de U + D800 a U + DBFF, seguido de uno en el rango de U + DC00 a U + DFFF.
Al tomar el AND bit a bit de cada sustituto con 1023, obtenemos los 10 bits de información que codifica. Podemos convertir la matriz resultante de la base 1024 a la base 128 para decodificar una cadena arbitraria de caracteres Unicode fuera del BMP en una cadena ASCII.
El código hace lo siguiente:
Etapa 2
El proceso de decodificación de arriba produce el siguiente código fuente ( 98 bytes ).
Pruébalo en línea!
El código hace lo siguiente:
fuente
Java,
217215220219192 bytesGolfizado:
Sin golf:
(primera respuesta, wuhu)
¡Gracias!
-2 bytes: usuario902383
-1 byte: Denham Coote
Cambios:
fuente
()->{String s="public static boolean isPowerOfTen(long input) {\n\treturn input == 1L";for(int i=0,k;i++<18;){s+="\n\t|| input == 1";for(k=0;k++<i;)s+="0";s+="L";}return s+";\n}";}
(180 bytes) Ahora devuelve la cadena en lugar de imprimir, pero eso es más corto.for(int i=1;i<19;i++)
usted puede escribir lofor(int i=1;i++<19;)
que ahorra un byteint i=1,k;
y luego puedes escribirfor(;i++<19;)
yfor(k=0;k++<i;)
Pyth,
118106103 bytesPruébalo en línea!
Toda esta codificación de cadena realmente consume muchos bytes
, pero no puedo hacer nada al respecto.Actualización: se guardaron 3 bytes utilizando una cadena empaquetada. Gracias @ user81655 por la pista!
fuente
r
y concatenando losn
resultados en esto (98 bytes).C # (CSI)
181180179 byteSolo hay un pequeño truco involucrado. La forma directa de escribir esto sería:
Al usar la cadena con los primeros 18 caracteres del texto que necesito de todos modos, puedo deshacerme del largo Enumerable.Range. Esto funciona porque la cadena implementa IEnumerable y hay una versión de Select que entrega el elemento (no necesario) y el índice que queremos para la función lambda.
fuente
{ return ... }
se puede reemplazar por=>...
.PowerShell, 120 bytes
Las dos primeras líneas son simplemente literales de cadena, que se generan tal cual.
La tercera línea comienza con tres espacios y termina con
L;`n}"
el último par de bytes. El bit medio en el interior del bloque de script$(...)
se construye para-bucle%
de0
a18
y cada iteración la construcción de una cadena que comienza coninput == 1
concatenado con el correspondiente número de ceros. Esto escupirá una serie de cadenas. Luego,-join
cada elemento de la matriz conL`n ||
para lograr las tuberías de nueva línea. Esa cadena grande es la salida del bloque de script, que se inserta automáticamente en el medio y la salida.fuente
Javascript,
172157152150148 bytesMostrar fragmento de código
fuente
${10**i}
lugar de1${'0'.repeat(i)}
.C,
158155bytesPruébelo en línea aquí .
fuente
i;main(){for(puts("public static boolean isPowerOfTen(long input) {\n return");printf(" %s input == 1%0.*dL%s\n",i++?"||":" ",i,0,i<18?"":";\n}")-37);}
Jalea, 75 bytes
(Estos son bytes en la página de códigos personalizada de Jelly ).
Pruébalo aquí.
Explicación
fuente
Vimscript, 120 bytes
También podría usar la herramienta adecuada para el trabajo.
Esto supone que no se ha establecido el autoindent, etc.
^[
y^M
son caracteres de escape para los caracteresESC
yCR
respectivamente.La
a
macro duplica la línea actual y agrega un 0 a la copia. La:norm
línea genera todo el repetitivo y elindent == 1L
línea, luego se usaa
para crear las demás.En caso de que los espacios finales que tenía la salida de muestra en dos líneas no fueran errores tipográficos, aquí hay una versión de 126 bytes que los incluye.
fuente
Oracle SQL 9.2, 311 bytes
fuente
Perl 5 -
130141EDITAR: arreglado para tener una sangría exacta
fuente
g
bandera para la sustitución. También como usted tiene un solo\n
en esa cadena, sólo tiene que coincidir con ella y todo después de que:$s[$#s]=~s/\n.+/;\n}/
. Perojoin
uno basado aún sería más corto: pastebin.com/hQ61Adt8ES6, 139 bytes
Me encantan estas preguntas de generación de triángulos.
fuente
Kotlin,
194193caracteresPruébelo en http://try.kotlinlang.org/
fuente
Ruby,
125119 bytes¡Gracias a manatwork por -6 bytes!
fuente
jq, 123 caracteres
(Código de 121 caracteres + opción de línea de comando de 2 caracteres).
Ejecución de muestra:
Prueba en línea (
-r
no se admite el paso por la URL; compruebe usted mismo la salida sin formato).fuente
Javascript 175 bytes
Hagamos esto regularmente
Muy pequeña. Ahora, algo de magia javascript, como no se necesitan puntos y comas, o no var, etc .:
fuente
Python (3.5)
137136 bytesPrevious version
fuente
print "public static boolean isPowerOfTen(long input) {\n return\n %s;\n}"%"\n || ".join("input == %r"%10L**i for i in range(19))
print
(without parenthesis ) win another oneANSI-SQL, 252 characters
Ungolfed:
Not a serious attempt, just poking at the Oracle SQL/T-SQL entries.
fuente
JavaScript (Node.js), 156 bytes
The
i-1
will only be 0 (and thus falsey) on the very first round (it's just slightly shorter thani!=1
.Suggestions welcome!
fuente
Perl 5, 137 bytes
Not based on the previous Perl answer, but it is somehow shorter. I believe it can be shortened down again by taking care of the first "input" inside the loop, but I didn't try anything yet (at work atm)
fuente
CJam, 112 chars
fuente
AWK+shell, 157 bytes
The question did say to count everything you would have to type. This does have the added bonus of being able to select how many lines would be placed in the isPowersOfTen method when the boss inevitably changes his mind.
fuente
echo
:awk '…'<<<18
T-SQL
289,277,250, 249 bytesUpdate: Thanks @Bridge, I found a few more spaces too :)
Update2: Changed CTE to subquery -27 chars :) Update3: Another space bites the dust @bridge :)
fuente
WITH A AS(SELECT CAST('1'AS VARCHAR(20))N UNION ALL SELECT CAST(CONCAT(N,'0')AS VARCHAR(20))FROM A WHERE LEN(N)<20)SELECT'public static boolean isPowerOfTen(long input){return '+STUFF((SELECT'|| input=='+N+'L 'FROM A FOR XML PATH(''),TYPE).value('.', 'VARCHAR(MAX)'), 1, 3, '')+';}'
ROW_NUMBER()
R, 185 bytes
Golfed
Ungolfed
fuente
Perl 6 (115 bytes)
X
operator does list cartesian product operation, for example10 X** ^19
gives powers of ten (from 10 to the power of 0 to 19, as^
is a range operator that counts from 0). Strings can have code blocks with{
(which is why I escape the first instance of it).fuente
Java, 210 / 166
Score is depending on whether returning the input from a function meets the definition of 'output'.
Console output (210):
String return (166):
Legible version:
fuente
Batch,
230208206205 bytesEdit: Saved 22 bytes by avoiding repeating
input ==
and reusing the subroutine for the line with the extra semicolon. Saved23 bytes by removing unnecessary spaces.fuente
==
?