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
fonte
0==Math.log10(input)%1
while(input%10==0) input/=10; return input == 1;
Respostas:
PostgreSQL, 158 caracteres
fonte
Teclas do Vim 97
Bem, hoje estou em um rolo com o vim produzindo java, então por que não continuar a tendência!
fonte
fL
com$
poderia poupar-lhe uma combinação de teclasinput == 1L
está desalinhado por um byte ...x
deve ser alterado parar<sp>
e, em seguida, o número de teclas seria inalterado05AB1E ,
999796949387 bytesCódigo:
Experimente online!
Usa a codificação CP-1252 .
fonte
CJam, 52 caracteres
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:
Etapa 2
O processo de decodificação acima gera o seguinte código-fonte ( 98 bytes ).
Experimente online!
O código faz o seguinte:
fonte
Java,
217215220219192 bytesGolfe:
Ungolfed:
(primeira resposta, wuhu)
Obrigado!
-2 bytes: user902383
-1 byte: Denham Coote
Alterar:
fonte
()->{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.for(int i=1;i<19;i++)
você pode escreverfor(int i=1;i++<19;)
o que economiza um byteint i=1,k;
e, em seguida, você pode escreverfor(;i++<19;)
efor(k=0;k++<i;)
Pitão,
118106103 bytesExperimente 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!
fonte
r
e concatenando osn
resultados nisso (98 bytes).C # (CSI)
181180179 byteHá apenas um pequeno truque envolvido. A maneira direta de escrever isso seria:
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.
fonte
{ return ... }
pode ser substituído por=>...
.PowerShell, 120 bytes
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%
de0
to18
e cada iteração construindo uma string que começa cominput == 1
concatenada com o número correspondente de zeros. Isso cuspirá uma matriz de seqüências de caracteres. Em seguida,-join
cada 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.fonte
Javascript,
172157152 152150148 bytesMostrar snippet de código
fonte
${10**i}
vez de1${'0'.repeat(i)}
.C,
158155 bytesExperimente online aqui .
fonte
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);}
Geléia, 75 bytes
(Esses são bytes na página de códigos personalizada do Jelly .)
Experimente aqui.
Explicação
fonte
Vimscript, 120 bytes
É melhor usar a ferramenta certa para o trabalho.
Isso pressupõe que o autoindent, etc. não foi definido.
^[
e^M
são caracteres de escape para os caracteresESC
eCR
respectivamente.A
a
macro duplica a linha atual e adiciona um 0 à cópia. A:norm
linha gera todo o clichê e aindent == 1L
linha e depois usaa
para criar os outros.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.
fonte
Oracle SQL 9.2, 311 bytes
fonte
Perl
5-130141EDIT: corrigido para ter recuo exato
fonte
g
bandeira para a substituição. Além disso, como você tem uma única\n
em que seqüência, você pode simplesmente combiná-lo e tudo depois que:$s[$#s]=~s/\n.+/;\n}/
. Mas umjoin
outro baseado ainda seria menor: pastebin.com/hQ61Adt8ES6, 139 bytes
Eu amo essas perguntas de geração de triângulo.
fonte
KOTLIN,
194193 caracteresTeste-o em http://try.kotlinlang.org/
fonte
Ruby,
125119 bytesGraças ao manatwork por -6 bytes!
fonte
jq, 123 caracteres
(Código de 121 caracteres + opção de linha de comando de 2 caracteres.)
Exemplo de execução:
Teste on-line (a passagem do
-r
URL não é suportada - verifique você mesmo Raw Output.)fonte
Javascript 175 bytes
Vamos fazer isso regularmente
Bem pequeno. Agora, um pouco de magia javascript, como sem ponto-e-vírgula, ou sem var's, etc .:
fonte
Python (3.5)
137136 bytesVersão anterior
fonte
print "public static boolean isPowerOfTen(long input) {\n return\n %s;\n}"%"\n || ".join("input == %r"%10L**i for i in range(19))
print
(sem parênteses) ganhar outroANSI-SQL, 252 caracteres
Ungolfed:
Não é uma tentativa séria, apenas cutucando as entradas Oracle SQL / T-SQL.
fonte
JavaScript (Node.js), 156 bytes
O valor
i-1
será apenas 0 (e, portanto, falsey) na primeira rodada (é apenas um pouco menor quei!=1
.Sugestões são bem-vindas!
fonte
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)
fonte
CJam, 112 caracteres
fonte
Shell AWK +, 157 bytes
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.
fonte
echo
:awk '…'<<<18
T-SQL
289,277,250, 249 bytesAtualizar: Obrigado @Bridge, também encontrei mais alguns espaços :)
Update2: Mudou CTE para subconsulta -27 caracteres :) Update3: Outro espaço morde a @bridge poeira :)
fonte
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
Golfe
Ungolfed
fonte
Perl 6 (115 bytes)
X
O operador lista a operação do produto cartesiano, por exemplo,10 X** ^19
fornece 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).fonte
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):
Retorno de string (166):
Versão legível:
fonte
Lote,
230208206205 bytesEditar: salvou 22 bytes, evitando repetir
input ==
e reutilizar a sub-rotina da linha com o ponto e vírgula extra. Salva23 bytes removendo espaços desnecessários.fonte
==
?