Ve a generar algo de Java

14

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
Filip Haglund
fuente
12
0==Math.log10(input)%1
SuperJedi224
77
Dices " contamos los caracteres unicode ", pero inmediatamente dices " O bytes ". ¿Cuál es?
Pomo de la puerta
2
Cualquiera que prefiera, es decir, el que le da la puntuación más baja. Se agregaron bytes para permitir idiomas que no usan fuente de texto.
Filip Haglund
1
while(input%10==0) input/=10; return input == 1;
PSkocik
44
05AB1E usa Windows CP1252, que es bytes, no unicode. Estoy buscando reglas estándar, pero me dicen que estoy equivocado todo el tiempo.
Filip Haglund

Respuestas:

15

PostgreSQL, 158 caracteres

select'public static boolean isPowerOfTen(long input) {
  return
   '||string_agg(' input == 1'||repeat('0',x)||'L','
  ||')||';
}'from generate_series(0,18)x
hombre trabajando
fuente
Nunca he visto un RDBMS utilizado como código de respuesta de golf ... ¡dulce! +1
Chris Cirefice
@ChrisCirefice SQL es en realidad algo común en este sitio. (O al menos más común de lo que cabría esperar.)
Alex A.
@AlexA. Hm, bueno, PCG es uno de mis sitios SE menos frecuentados, por lo que nunca he visto una respuesta SQL :)
Chris Cirefice
7

Vim 97 pulsaciones de teclas

ipublic static boolean isPowerOfTen(long input) {
  return
  || input == 1L<esc>qyYpfLi0<esc>q16@yo}<esc>3Gxx

Bueno, hoy estoy en racha con vim produciendo java, así que ¿por qué no continuar con la tendencia?

DJMcMayhem
fuente
reemplazar fLcon $podría ahorrarle una pulsación de tecla
Leaky Nun
Además, la tercera línea input == 1Lestá desalineada por un byte ...
Leaky Nun
Por lo tanto, el último xdebe cambiarse a r<sp>y luego la cantidad de pulsaciones de teclas no se modificará
Leaky Nun
7

05AB1E , 99 97 96 94 93 87 bytes

Código:

“‚Æ£‹ÒŒ€ˆPowerOfTen(“?“¢„î®) {
 «‡
   “?19FN0›i"  ||"?}’ î® == ’?N°?'L?N18Qi';,"}"?}"",

Pruébalo en línea!

Utiliza la codificación CP-1252 .

Adnan
fuente
7

CJam, 52 caracteres

YA#_("𐀑򀺸󆚜񸎟񜏓񞍁򛟯󩥰󾐚򉴍􍼯𹾚򶗜򳙯󭧐񹷜񊽅𸏘򴂃򦗩󧥮𤠐𰑈򶂤𘏧󔆧򇃫󡀽򊠑񊩭򯐙񛌲񊚩𤱶𻺢"f&bY7#b:c~

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:

YA#    e# Push 1024 as 2 ** 10.
_(     e# Copy and decrement to push 1023.

"𑅰󻢶񹱨񉽌񍍎񄆋򎿙򧃮񑩹󠷽􂼩􉪦񭲣񶿝򭁩󭰺􄔨񍢤𘎖񮧗򦹀𹀠񐢑񜅈𠟏򘍎󾇗򲁺􅀢򅌛񎠲򦙤򃅒𹣬񧵀򑀢"

f&     e# Apply bitwise AND with 1023 to each surrogate character.
b      e# Convert the string from base 1024 to integer.
Y7#    e# Push 128 as 2 ** 7.
b      e# Convert the integer to base 128.
:c     e# Cast each base-128 to an ASCII character.
~      e# Evaluate the resulting string.

Etapa 2

El proceso de decodificación de arriba produce el siguiente código fuente ( 98 bytes ).

"public static boolean isPowerOfTen(long input) {
  return
   ""L
  || input == ":S6>AJ,f#S*"L;
}"

Pruébalo en línea!

El código hace lo siguiente:

e# Push the following string.

"public static boolean isPowerOfTen(long input) {
  return
   "

e# Push the following string and save it in S.

"L
  || input == ":S

e# Discard the first 6 characters of S. The new string begins with " input".

6>

e# Elevate 10 (A) to each exponent below 19 (J).

AJ,f#

e# Join the resulting array, using the string L as separator.

S*

e# Push the following string.

"L;
}"
Dennis
fuente
Puede esperar que un sitio de SE como el judaísmo sea el que prueba el estrés del soporte Unicode del sitio, pero esto es una locura: D
Filip Haglund
Puedo ver exactamente dos de los caracteres entre comillas. ¿Puedes publicar un hexdump?
Pavel
¿Realmente puedes ver dos de ellos? No tengo tanta suerte ... Codificando los caracteres como UTF-8, el hexdump se vería así. tio.run/nexus/bash#AagAV///eHhkIC1nIDH//…
Dennis
6

Java, 217 215 220 219 192 bytes

Golfizado:

public static String b(){String s="public static boolean isPowerOfTen(long input) {\n  return\n    input == 1L",z="";for(int i=0;i++<18;){z+="0";s+="\n  || input == 1"+z+"L";}return s+";\n}";}

Sin golf:

  public static String a(){
    String s = "public static boolean isPowerOfTen(long input) {\n  return\n    input == 1L", z="";
    for (int i=0; i++ < 18;) {
        z += "0";
        s += "\n  || input == 1"+z+"L";
    }
    return s + ";\n}";
  }

(primera respuesta, wuhu)

¡Gracias!
-2 bytes: usuario902383
-1 byte: Denham Coote

Cambios:

  • pestañas usadas en lugar de espacios
  • perdió la última línea de salida: 18 -> 19
  • lazo interno eliminado
  • cambió de impresión a cadena de retorno
Filip Haglund
fuente
44
su bucle for interno no necesita corchetes
user902383
Use la sintaxis de Java 8, también acorta algunas otras cosas: ()->{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.
Addison Crump
1
+1 para escribir un programa Java detallado para generar un programa Java aún más detallado.
Cyoce
en lugar de for(int i=1;i<19;i++)usted puede escribir lo for(int i=1;i++<19;)que ahorra un byte
Denham Coote
Además, declara int i=1,k;y luego puedes escribir for(;i++<19;)yfor(k=0;k++<i;)
Denham Coote
4

Pyth, 118 106 103 bytes

s[."
{Z-L¡JxÙÿ
LæÝ<­í?¢µb'¥ÜA«Ç}h¹äÚÏß"\nb*4dj"\n  || "ms[." uøs|ÀiÝ"*d\0\L)U19\;b\}

Prué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!

Denker
fuente
Podría usar cadenas empaquetadas ...
user81655
No conozco a Pyth y no estoy seguro de si hay una manera de empaquetar la cadena completa (el programa de empaque siempre lo alteraría) pero empacando ry concatenando los nresultados en esto (98 bytes).
user81655
@ user81655 Gracias, no sabía que Pyth tenía esto. :) Solo tiene sentido empacar la primera cadena grande aunque, la sobrecarga que produce al desempacar no vale la pena para una cadena más pequeña.
Denker
@ user81655 Soy consciente de eso, pero cuento 103 caracteres. ¿Cómo llegaste a 97?
Denker
Vaya, mi error, los estaba contando mal.
user81655
4

C # (CSI) 181 180 179 byte

string i=" input == 1",e="public static bool";Console.Write(e+@"ean isPowerOfTen(long input) {
  return
   "+i+string.Join(@"L
  ||"+i,e.Select((_,x)=>new string('0',x)))+@"L;
}")

Solo hay un pequeño truco involucrado. La forma directa de escribir esto sería:

string.Join("L\n  || input == 1",Enumerable.Range(0,18).Select(x=>new string('0',x)))

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.

desigual
fuente
1
@WashingtonGuedes Gracias
desigual
1
agregue alguna explicación por favor
Eumel
1
¿CSI admite cuerpos de expresión? Si es así, { return ... }se puede reemplazar por =>....
mınxomaτ
Actualmente no en la computadora, así que no puedo probar esto. ¿La última cadena literal escapa del soporte dentro de ella? ¿O es un gran truco que no conocía? :)
Yytsi
4

PowerShell, 120 bytes

'public static boolean isPowerOfTen(long input) {'
'  return'
"   $((0..18|%{" input == 1"+"0"*$_})-join"L`n  ||")L;`n}"

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 %de 0a 18y cada iteración la construcción de una cadena que comienza con input == 1concatenado con el correspondiente número de ceros. Esto escupirá una serie de cadenas. Luego, -joincada elemento de la matriz con L`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.

PS C:\Tools\Scripts\golfing> .\go-generate-some-java.ps1
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;
}
AdmBorkBork
fuente
3

Javascript, 172 157 152 150 148 bytes

p=>`public static boolean isPowerOfTen(long input) {
  return${[...Array(19)].map((x,i)=>`
  ${i?'||':' '} input == 1${'0'.repeat(i)}L`).join``};
}`

remoto
fuente
2
En ES7 puede guardar 9 bytes utilizando en ${10**i}lugar de 1${'0'.repeat(i)}.
Neil
3

C, 158155 bytes

i;main(){for(puts("public static boolean isPowerOfTen(long input) {\n  return");i<19;)printf("  %s input == 1%0.*dL%s\n",i++?"||":" ",i,0,i<18?"":";\n}");}

Pruébelo en línea aquí .

Cole Cameron
fuente
Puede eliminar un byte si utiliza el valor de retorno de printf: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);}
algmyr
3

Jalea, 75 bytes

(Estos son bytes en la página de códigos personalizada de Jelly ).

0r18⁵*;@€⁶j“¢œḤḅg^NrÞḢ⁷ẉ»“⁵®UẆƓḃÐL⁴ṖịṛFþẈ¹9}¶ ƁḋȮ¦sẒẆd€Ḟɼ¿ỌṀP^µ\f@»;;“L;¶}”

Pruébalo aquí.

Explicación

0r18      Range [0..18]
⁵*        Take the 10^ of each number
;@€⁶      Prepend a space to each number
j“...»    Join by compressed string "L\n  || input =="
“...»;    Prepend compressed string "public static ... =="
;“L;¶}”   Append "L;\n}"
Lynn
fuente
3

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 ^Mson caracteres de escape para los caracteres ESCy CRrespectivamente.

La amacro duplica la línea actual y agrega un 0 a la copia. La :normlínea genera todo el repetitivo y elindent == 1L línea, luego se usa apara crear las demás.

:let @a='yyp$i0^['
:norm ipublic static boolean isPowerOfTen(long input) {^M  return^M  || input == 1L^[18@a$a;^M}
:3s/||/ /

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.

:let @a='yyp/L^Mi0^['
:norm ipublic static boolean isPowerOfTen(long input) {^M  return ^M  || input == 1L^[18@a$a;^M}   
:3s/||/ /
Rayo
fuente
2

Oracle SQL 9.2, 311 bytes

SELECT REPLACE(REPLACE('public static boolean isPowerOfTen(long input) {'||CHR(10)||'  return'||c||';'||'}', 'n  ||', 'n'||CHR(10)||'   '),CHR(10)||';', ';'||CHR(10)) FROM(SELECT LEVEL l,SYS_CONNECT_BY_PATH('input == '||TO_CHAR(POWER(10,LEVEL-1))||'L'||CHR(10),'  || ')c FROM DUAL CONNECT BY LEVEL<20)WHERE l=19
Jeto
fuente
2

Perl 5 - 130 141

@s=map{'input == 1'.0 x$_."L\n  ||"}0..18;$s[$#s]=~s/\n  \|\|/;\n}/g;print"public static boolean isPowerOfTen(long input){\n  return\n    @s"

EDITAR: arreglado para tener una sangría exacta

ChatterOne
fuente
No es necesario usar paréntesis alrededor del rango. En cambio, sería bueno reproducir la sangría exacta.
manatwork
Gracias por el paréntesis que olvidé. Lo arreglé para que tenga la sangría exacta.
ChatterOne
No hay necesidad de la gbandera para la sustitución. También como usted tiene un solo \nen esa cadena, sólo tiene que coincidir con ella y todo después de que: $s[$#s]=~s/\n.+/;\n}/. Pero joinuno basado aún sería más corto: pastebin.com/hQ61Adt8
manatwork
Gracias, pero no creo que sería bueno si solo copiara y pegara su solución, así que lo dejaré como es mi mejor esfuerzo. Con el tiempo,
mejoraré
2

ES6, 139 bytes

_=>"0".repeat(19).replace(/./g,`
 || input == 1$\`L`).replace(`
 ||`,`public static boolean isPowerOfTen(long input) {
  return\n  `)+`;
}`

Me encantan estas preguntas de generación de triángulos.

Neil
fuente
2

Kotlin, 194193 caracteres

fun main(u:Array<String>){var o="public static boolean isPowerOfTen(long input) {\n\treturn"
var p:Long=1
for(k in 0..18){
o+="\n\t"
if(k>0)o+="||"
o+=" input == ${p}L"
p*=10
}
print("$o;\n}")}

Pruébelo en http://try.kotlinlang.org/

Sean
fuente
Bienvenido a Programming Puzzles & Code Golf. Buena primera respuesta, pero agregue un enlace a un intérprete en línea o agregue un ejemplo sobre cómo ejecutar este programa, para que otros puedan verificarlo. Sin embargo, ¡diviértete aquí! :)
Denker
2

Ruby, 125 119 bytes

$><<'public static boolean isPowerOfTen(long input) {
  return
   '+(0..19).map{|i|" input == #{10**i}L"}*'
  ||'+';
}'

¡Gracias a manatwork por -6 bytes!

Pomo de la puerta
fuente
No es muy original, ya que la mayoría de las soluciones lo hacen de esta manera, pero aún más corto: pastebin.com/1ZGF0QTs
manatwork
2

jq, 123 caracteres

(Código de 121 caracteres + opción de línea de comando de 2 caracteres).

"public static boolean isPowerOfTen(long input) {
  return
   \([range(19)|" input == 1\("0"*.//"")L"]|join("
  ||"));
}"

Ejecución de muestra:

bash-4.3$ jq -nr '"public static boolean isPowerOfTen(long input) {
>   return
>    \([range(19)|" input == 1\("0"*.//"")L"]|join("
>   ||"));
> }"'
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;
}

Prueba en línea ( -rno se admite el paso por la URL; compruebe usted mismo la salida sin formato).

hombre trabajando
fuente
1

Javascript 175 bytes

Hagamos esto regularmente

var s = "public static boolean isPowerOfTen(long input) {\n\treturn\n\t\tinput == 1";
for (var i = 1; i < 20; i++) {
    s += "\n\t|| input == 1";
    for (var j = 0; j < i; j++) {
        s += "0";
    }
    s += "L" ;
}
s += ";\n}";
alert(s);

Muy pequeña. Ahora, algo de magia javascript, como no se necesitan puntos y comas, o no var, etc .:

k="input == 1"
s="public static boolean isPowerOfTen(long input) {\n\treturn\n\t\t"+k+"L"
for(i=1;i<20;i++){s+="\n\t|| "+k
for(j=0;j<i;j++)s+="0";s+="L"}s+=";\n}"
alert(s)
Bálint
fuente
¿Puedes explicar cómo funciona esa magia ? :)
Marv
3
A Javascript no le importan los punto y coma, al menos hasta que las palabras clave (para, while, var, etc.) no "toquen" nada más. Además, si no usa la palabra clave var, obtendrá variables globales, que es la peor característica que he visto en un lenguaje de programación hasta ahora.
Bálint
@ Bálint. ¿Por qué esta sería la peor característica ?
eliminado
@WashingtonGuedes Ya sabes, la mayoría de los idiomas te recuerdan si escribiste mal algo dentro de una función. Debido a que JavaScript toma eso como si hicieras una variable completamente nueva, no va a decir nada al respecto.
Bálint
Also, same one applies to = returning a true.
Bálint
1

Python (3.5) 137 136 bytes

print("public static boolean isPowerOfTen(long input) {\n  return\n   ",'\n  || '.join("input == %rL"%10**i for i in range(19))+";\n}")

Previous version

print("public static boolean isPowerOfTen(long input) {\n  return\n   ",'\n  || '.join("input == 1"+"0"*i+"L"for i in range(19))+";\n}")
Erwan
fuente
135 with Python 2.7: print "public static boolean isPowerOfTen(long input) {\n return\n %s;\n}"%"\n || ".join("input == %r"%10L**i for i in range(19))
moooeeeep
@moooeeeep you're right, the use of %r win 1 bytes and the python 2 print (without parenthesis ) win another one
Erwan
0

ANSI-SQL, 252 characters

WITH t as(SELECT '   'x,1 c,1 l UNION SELECT'  ||',c*10,l+1 FROM t WHERE l<19)SELECT 'public static boolean isPowerOfTen(long input) {'UNION ALL SELECT'  return 'UNION ALL SELECT x||' input == '||c||'L'||SUBSTR(';',1,l/19)FROM t UNION ALL SELECT'}   ';

Ungolfed:

WITH t as (SELECT '   ' x,1 c,1 l UNION
           SELECT '  ||',c*10,l+1 FROM t WHERE l<19)
SELECT 'public static boolean isPowerOfTen(long input) {' UNION ALL
SELECT '  return ' UNION ALL
SELECT x||' input == '||c||'L'||SUBSTR(';',1,l/19) FROM t UNION ALL
SELECT '}   ';

Not a serious attempt, just poking at the Oracle SQL/T-SQL entries.

user1361991
fuente
For 40 additional chars I can add "from dual " and make it an "Oracle SQL" entry.
user1361991
0

JavaScript (Node.js), 156 bytes

s="public static boolean isPowerOfTen(long input) {\n  return "
for(i=1;i<1e19;i*=10)s+="\n  "+(i-1?"||":" ")+" input == "+i+"L"
console.log(s+";\n}   \n")

The i-1 will only be 0 (and thus falsey) on the very first round (it's just slightly shorter than i!=1.

Suggestions welcome!

Nateowami
fuente
0

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)

$i="input";for(1..18){$b.="  || $i == 1"."0"x$_."L;\n"}print"public static boolean isPowerOfTen(long $i) {\n  return\n    $i == 1L;\n$b}"
Paul Picard
fuente
0

CJam, 112 chars

"public static boolean isPowerOfTen(long input) {
  return
    input == 1"19,"0"a19*.*"L
  || input == 1"*"L;
}"
username.ak
fuente
0

AWK+shell, 157 bytes

echo 18|awk '{s="input == 1";printf"public static boolean isPowerOfTen(long input) {\n return\n    "s"L";for(;I<$1;I++)printf"\n  ||%sL",s=s"0";print";\n}"}'

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.

Robert Benson
fuente
Passing a here-string is shorter than piping from echo: awk '…'<<<18
manatwork
I knew about here-file but not here-string. Thanks for the info.
Robert Benson
0

T-SQL 289, 277, 250, 249 bytes

SELECT'public static boolean isPowerOfTen(long input){return '+STUFF((SELECT'||input=='+N+'L 'FROM(SELECT TOP 19 FORMAT(POWER(10.0,ROW_NUMBER()OVER(ORDER BY id)),'F0')N FROM syscolumns)A FOR XML PATH(''),TYPE).value('.','VARCHAR(MAX)'),1,2,'')+';}'

Update: Thanks @Bridge, I found a few more spaces too :)

Update2: Changed CTE to subquery -27 chars :) Update3: Another space bites the dust @bridge :)

Liesel
fuente
1
I was able to trim off 7 more spaces (282 bytes) without changing the rest of the code: 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, '')+';}'
Bridge
1
Now I look back I can see all the extra spaces in my original comment! I've found one more space you can get rid of - the one immediately after ROW_NUMBER()
Bridge
0

R, 185 bytes

Golfed

options(scipen=999);p=paste;cat(p("public static boolean isPowerOfTen(long input) {"," return",p(sapply(0:19,function(x)p(" input == ",10^x,"L",sep="")),collapse="\n ||"),"}",sep="\n"))

Ungolfed

options(scipen=999)
p=paste
cat(
  p("public static boolean isPowerOfTen(long input) {",
        " return",
        p(sapply(0:19,function(x)p(" input == ",10^x,"L",sep="")),collapse="\n ||"),
        "}",
        sep="\n")
)
Argenis García
fuente
0

Perl 6 (115 bytes)

say "public static boolean isPowerOfTen(long input) \{
  return
   {join "L
  ||",(" input == "X~(10 X**^19))}L;
}"

X operator does list cartesian product operation, for example 10 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).

Konrad Borowski
fuente
0

Java, 210 / 166

Score is depending on whether returning the input from a function meets the definition of 'output'.

Console output (210):

class A{public static void main(String[]z){String a=" input == 1",t="L\n  ||"+a,s="public static boolean isPowerOfTen(long input) {\n  return\n   "+a;for(int i=0;++i<19;)s+=t+="0";System.out.print(s+"L;\n}");}}

String return (166):

String a(){String a=" input == 1",t="L\n  ||"+a,s="public static boolean isPowerOfTen(long input) {\n  return\n   "+a;for(int i=0;++i<19;)s+=t+="0";return s+"L;\n}";}

Legible version:

String a() {
    String a=" input == 1", t = "L\n  ||"+a,
        s = "public static boolean isPowerOfTen(long input) {\n  return\n   "+a;
    for (int i = 0; ++i < 19;)
        s += t += "0";
    return s + "L;\n}";
}
Kevin K
fuente
0

Batch, 230 208 206 205 bytes

@echo off
echo public static boolean isPowerOfTen(long input) {
echo   return
set m=input == 1
echo    %m%L
for /l %%a in (1,1,17)do call:a
call:a ;
echo }
exit/b
:a
set m=%m%0
echo  ^|^| %m%L%1

Edit: Saved 22 bytes by avoiding repeating input == and reusing the subroutine for the line with the extra semicolon. Saved 2 3 bytes by removing unnecessary spaces.

Neil
fuente
Do you need spaces around ==?
Pavel
@Pavel That's not code; it's part of the output.
Dennis