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

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

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!


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 .


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

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

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!


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.


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

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


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 .


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

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/||/ /

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

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


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.


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/


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!


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.)


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)

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

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.


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!


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

0

CJam, 112 caracteres

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

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.


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 :)


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")
)

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).


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

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.


Você precisa de espaços ao redor ==?
— Pavel

@ Pavel Isso não é código; faz parte da saída.
— Dennis
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.