Vá gerar um pouco de Java

14

Seu chefe quer que você escreva um 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, em /codereview//a/117294/61929 )

o que é eficiente e eficiente, mas não divertido de digitar. Como você deseja minimizar o número de pressionamentos de tecla, deve escrever um programa ou função (ou método) mais curto que produz essa função para você (ou retorna uma string para a saída). E como você possui seu próprio teclado unicode de gama completa e personalizado, com todas as 120.737 teclas necessárias para todo o unicode 8.0, contamos caracteres unicode, em vez de pressionar as teclas. Ou bytes, se o seu idioma não usar código fonte unicode.

Qualquer entrada do seu programa ou função conta para a sua pontuação, já que você obviamente precisa digitar isso também.

Esclarecimentos e edições:

  • Removido 3 espaços à direita após o último }
  • Removido um único espaço à direita após return
  • Retornar uma sequência de saída de uma função / método está ok
Filip Haglund
fonte
12
0==Math.log10(input)%1
SuperJedi224
7
Você diz " contamos caracteres unicode ", mas imediatamente diz " Ou bytes ". Qual é esse?
Maçaneta da porta
2
O que você preferir, ou seja, aquele que lhe der a menor pontuação. Bytes adicionados para permitir idiomas que não usam fonte de texto.
Filip Haglund
1
while(input%10==0) input/=10; return input == 1;
PSKocik 03/02/19
4
05AB1E usa o Windows CP1252, que é bytes, não unicode. Estou buscando regras padrão, mas me dizem que estou errado o tempo todo.
Filip Haglund 03/02

Respostas:

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
homem a trabalhar
fonte
Eu nunca vi um RDBMS usado como uma resposta de código de golfe ... doce! +1
Chris Cirefice 04/02
@ChrisCirefice SQL é realmente um pouco comum neste site. (Ou pelo menos mais comum do que se poderia esperar.)
Alex A.
@AlexA. Hm, bem PCG é um dos meus sites SE menos frequentados, então eu nunca vi uma resposta SQL :)
Chris Cirefice
7

Teclas do Vim 97

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

Bem, hoje estou em um rolo com o vim produzindo java, então por que não continuar a tendência!

DJMcMayhem
fonte
substituindo fLcom $poderia poupar-lhe uma combinação de teclas
Leaky Nun
Além disso, a terceira linha input == 1Lestá desalinhado por um byte ...
Leaky Nun
Assim, a última xdeve ser alterado para r<sp>e, em seguida, o número de teclas seria inalterado
Leaky Nun
7

05AB1E , 99 97 96 94 93 87 bytes

Código:

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

Experimente online!

Usa a codificação CP-1252 .

Adnan
fonte
7

CJam, 52 caracteres

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

Experimente online!

Estágio 1

Usando caracteres Unicode U + 10000 a U + 10FFFF, podemos codificar 20 bits em um único caractere. O CJam usa caracteres de 16 bits internamente, para que cada um seja codificado como um par de substitutos , um no intervalo de U + D800 a U + DBFF, seguido por um no intervalo de U + DC00 a U + DFFF.

Tomando o AND bit a bit de cada substituto com 1023, obtemos os 10 bits de informação que ele codifica. Podemos converter a matriz resultante da base 1024 para a base 128 para decodificar uma sequência arbitrária de caracteres Unicode fora do BMP em uma sequência ASCII.

O código faz o seguinte:

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

O processo de decodificação acima gera o seguinte código-fonte ( 98 bytes ).

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

Experimente online!

O código faz o seguinte:

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
fonte
Você pode esperar um site SE como o judaísmo ser os testes de esforço suporte a Unicode do site, mas isso é loucura: D
Filip Haglund
Eu posso ver exatamente dois dos caracteres entre as aspas. Você pode postar um hexdump?
Pavel
Você pode realmente ver dois deles? Não tenho tanta sorte ... Codificando os caracteres como UTF-8, o hexdump ficaria assim. tio.run/nexus/bash#AagAV///eHhkIC1nIDH//...
Dennis
6

Java, 217 215 220 219 192 bytes

Golfe:

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}";}

Ungolfed:

  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}";
  }

(primeira resposta, wuhu)

Obrigado!
-2 bytes: user902383
-1 byte: Denham Coote

Alterar:

  • guias usadas em vez de espaços
  • perdeu a última linha de saída: 18 -> 19
  • laço interno removido
  • alterado de impressão para string retornada
Filip Haglund
fonte
4
seu loop for interno não precisa de colchetes
user902383 3/16/16
Use a sintaxe Java 8, também encurtou algumas outras coisas: ()->{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) Agora retorna a string em vez de imprimir, mas é mais curto.
Addison Crump #
1
+1 para escrever um programa Java detalhado para gerar um programa Java ainda mais detalhado.
Cyoce 05/02
em vez de for(int i=1;i<19;i++)você pode escrever for(int i=1;i++<19;)o que economiza um byte
Denham Coote
Além disso, declarar int i=1,k;e, em seguida, você pode escrever for(;i++<19;)efor(k=0;k++<i;)
Denham Coote
4

Pitão, 118 106 103 bytes

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

Experimente online!

Toda essa codificação codificada realmente consome muitos bytes , mas nada que eu possa fazer sobre isso .

Atualização: salvou 3 bytes usando uma sequência compactada. Obrigado @ user81655 pela dica!

Denker
fonte
Você pode usar cordas embalado ...
user81655
Eu não conheço Pyth e não tenho certeza se existe uma maneira de compactar a string completa (o programa de empacotamento sempre a alterava), mas compactando re concatenando os nresultados nisso (98 bytes).
User81655
@ user81655 Obrigado, não sabia que Pyth tinha isso. :) Faz sentido empacotar a primeira string grande, mas a sobrecarga que você produz é descompactada não vale a pena para a string menor.
Denker 03/02
@ user81655 Estou ciente disso, mas conto 103 caracteres. Como você chegou a 97?
Denker
Opa, meu erro, eu estava contando que eles estavam errados.
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;
}")

Há apenas um pequeno truque envolvido. A maneira direta de escrever isso seria:

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

usando a string com os 18 primeiros caracteres do texto que eu preciso, de qualquer maneira, posso me livrar do longo Enumerable.Range. Isso funciona porque a string implementa IEnumerable e existe uma versão do Select que entrega o item (não necessário) e o índice que queremos para a função lambda.

esfarrapado
fonte
1
@WashingtonGuedes Thanks
raggy
1
adicionar um pouco de explicação, por favor
Eumel
1
O CSI suporta corpos de expressão? Nesse caso, o { return ... }pode ser substituído por =>....
mınxomaτ
No momento, não estou no computador, então não posso testar isso. A última string literal escapa do colchete dentro dela? Ou é um grande truque que eu não conhecia? :)
Yytsi
4

PowerShell, 120 bytes

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

As duas primeiras linhas são simplesmente literais de string, que são exibidas como estão.

A terceira linha começa com três espaços e termina com L;`n}"para terminar os últimos dois bytes. O bit do meio dentro do bloco de script $(...)é construído pelo loop for %de 0to 18e cada iteração construindo uma string que começa com input == 1concatenada com o número correspondente de zeros. Isso cuspirá uma matriz de seqüências de caracteres. Em seguida, -joincada elemento da matriz é L`n ||atingido para obter os novos tubos de linha. Essa grande sequência é a saída do bloco de scripts, que é inserido automaticamente no meio e na saída.

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
fonte
3

Javascript, 172 157 152 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``};
}`

removido
fonte
2
No ES7, você pode salvar 9 bytes usando em ${10**i}vez de 1${'0'.repeat(i)}.
Neil
3

C, 158 155 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}");}

Experimente online aqui .

Cole Cameron
fonte
Você pode raspar um byte se você usar o 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

Geléia, 75 bytes

(Esses são bytes na página de códigos personalizada do Jelly .)

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

Experimente aqui.

Explicação

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
fonte
3

Vimscript, 120 bytes

É melhor usar a ferramenta certa para o trabalho.

Isso pressupõe que o autoindent, etc. não foi definido. ^[e ^Msão caracteres de escape para os caracteres ESCe CRrespectivamente.

A amacro duplica a linha atual e adiciona um 0 à cópia. A :normlinha gera todo o clichê e a indent == 1Llinha e depois usa apara criar os outros.

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

Caso os espaços à direita da amostra de saída em duas linhas não tenham sido digitados, aqui está uma versão de 126 bytes que os inclui.

:let @a='yyp/L^Mi0^['
:norm ipublic static boolean isPowerOfTen(long input) {^M  return ^M  || input == 1L^[18@a$a;^M}   
:3s/||/ /
Raio
fonte
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
fonte
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"

EDIT: corrigido para ter recuo exato

ChatterOne
fonte
Não há necessidade de usar parênteses ao redor do intervalo. Na mudança, seria bom reproduzir o recuo exato.
manatwork
Obrigado pelos parênteses que eu esqueci. Corrigi-o para ter o recuo exato.
ChatterOne
Não há necessidade da gbandeira para a substituição. Além disso, como você tem uma única \nem que seqüência, você pode simplesmente combiná-lo e tudo depois que: $s[$#s]=~s/\n.+/;\n}/. Mas um joinoutro baseado ainda seria menor: pastebin.com/hQ61Adt8
manatwork
Obrigado, mas não acho que seria bom copiar e colar a sua solução, por isso deixarei como é o meu melhor esforço. Com o tempo, eu vou ficar melhor no golfe :-)
ChatterOne
2

ES6, 139 bytes

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

Eu amo essas perguntas de geração de triângulo.

Neil
fonte
2

KOTLIN, 194 193 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}")}

Teste-o em http://try.kotlinlang.org/

Sean
fonte
Bem-vindo à Programação de quebra-cabeças e código de golfe. Ótima primeira resposta, mas adicione um link a um intérprete on-line ou um exemplo de como executar este programa, para que outros possam verificá-lo. No entanto, divirta-se aqui! :)
Denker
2

Ruby, 125 119 bytes

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

Graças ao manatwork por -6 bytes!

Maçaneta da porta
fonte
Não muito original, como a maioria das soluções estão fazendo desta forma, mas ainda mais curto: pastebin.com/1ZGF0QTs
manatwork
2

jq, 123 caracteres

(Código de 121 caracteres + opção de linha de comando de 2 caracteres.)

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

Exemplo de execução:

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;
}

Teste on-line (a passagem do -rURL não é suportada - verifique você mesmo Raw Output.)

homem a trabalhar
fonte
1

Javascript 175 bytes

Vamos fazer isso 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);

Bem pequeno. Agora, um pouco de magia javascript, como sem ponto-e-vírgula, ou sem var's, 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
fonte
Você pode explicar como essa mágica funciona? :)
Marv
3
O Javascript não se importa com ponto e vírgula, pelo menos até que as palavras-chave (para, enquanto, var etc.) não estejam "tocando" mais nada. Além disso, se você não usar a palavra-chave var, obtém variáveis ​​globais, que é o pior recurso que eu já vi em uma linguagem de programação até agora.
Bálint
@ Bálint. Por que esse seria o pior recurso ?
removido
@WashingtonGuedes Você sabe, a maioria dos idiomas o lembra se você digitou algo errado dentro de uma função. Como o javascript considera isso como se você tivesse criado uma variável totalmente nova, ele não diz nada sobre isso.
Bálint 03/02
Além disso, o mesmo se aplica a = retornar um verdadeiro.
Bálint 03/02
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}")

Versão anterior

print("public static boolean isPowerOfTen(long input) {\n  return\n   ",'\n  || '.join("input == 1"+"0"*i+"L"for i in range(19))+";\n}")
Erwan
fonte
135 com 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 você está certo, o uso de% r ganhar 1 bytes e o python 2 print(sem parênteses) ganhar outro
Erwan
0

ANSI-SQL, 252 caracteres

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 '}   ';

Não é uma tentativa séria, apenas cutucando as entradas Oracle SQL / T-SQL.

user1361991
fonte
Por 40 caracteres adicionais, posso adicionar "from dual" e torná-lo uma entrada "Oracle SQL".
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")

O valor i-1será apenas 0 (e, portanto, falsey) na primeira rodada (é apenas um pouco menor quei!=1 .

Sugestões são bem-vindas!

Nateowami
fonte
0

Perl 5, 137 bytes

Não é baseado na resposta Perl anterior, mas é mais curto. Eu acredito que pode ser reduzido novamente, cuidando da primeira "entrada" dentro do loop, mas eu não tentei nada ainda (no trabalho 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
fonte
0

CJam, 112 caracteres

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

Shell AWK +, 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}"}'

A pergunta dizia contar tudo o que você teria que digitar. Isso tem o bônus adicional de poder selecionar quantas linhas seriam colocadas no método isPowersOfTen quando o chefe inevitavelmente muda de idéia.

Robert Benson
fonte
Passar uma string aqui é mais curto que a tubulação de echo:awk '…'<<<18
manatwork
Eu sabia sobre o arquivo aqui, mas não a string aqui. Obrigado pela informação.
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,'')+';}'

Atualizar: Obrigado @Bridge, também encontrei mais alguns espaços :)

Update2: Mudou CTE para subconsulta -27 caracteres :) Update3: Outro espaço morde a @bridge poeira :)

Liesel
fonte
1
Consegui cortar mais 7 espaços (282 bytes) sem alterar o restante do código: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
Agora, olhando para trás, posso ver todos os espaços extras no meu comentário original! Eu encontrei mais um espaço do qual você pode se livrar - o imediatamente apósROW_NUMBER()
Bridge
0

R, 185 bytes

Golfe

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
fonte
0

Perl 6 (115 bytes)

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

XO operador lista a operação do produto cartesiano, por exemplo, 10 X** ^19fornece potências de dez (de 10 à potência de 0 a 19, como ^é um operador de intervalo que conta de 0). Strings podem ter blocos de código com {(é por isso que escapei da primeira instância).

Konrad Borowski
fonte
0

Java, 210/166

A pontuação depende se o retorno da entrada de uma função atende à definição de 'saída'.

Saída do console (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}");}}

Retorno de string (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}";}

Versão legível:

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
fonte
0

Lote, 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

Editar: salvou 22 bytes, evitando repetir input ==e reutilizar a sub-rotina da linha com o ponto e vírgula extra. Salva 2 3 bytes removendo espaços desnecessários.

Neil
fonte
Você precisa de espaços ao redor ==?
Pavel
@ Pavel Isso não é código; faz parte da saída.
Dennis