Votre patron veut que vous écriviez du code comme ceci:
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, à /codereview//a/117294/61929 )
qui est efficace et donc, mais pas si amusant à taper. Étant donné que vous souhaitez minimiser le nombre de pressions de touches que vous devez effectuer, vous écrivez un programme ou une fonction (ou méthode) plus courte qui génère cette fonction pour vous (ou renvoie une chaîne à afficher). Et puisque vous avez votre propre clavier unicode pleine gamme personnalisé avec toutes les 120 737 touches requises pour l'ensemble de l'unicode 8.0, nous comptons les caractères unicode, au lieu des touches. Ou octets, si votre langue n'utilise pas de code source unicode.
Toute entrée de votre programme ou fonction compte pour votre score, car vous devez évidemment le saisir également.
Clarifications et modifications:
- Suppression de 3 espaces de fin après le dernier
}
- Suppression d'un seul espace de fin après
return
- Le retour d'une chaîne de sortie d'une fonction / méthode est correct
la source
0==Math.log10(input)%1
while(input%10==0) input/=10; return input == 1;
Réponses:
PostgreSQL, 158 caractères
la source
Vim 97 touches
Eh bien, je suis sur une lancée aujourd'hui avec vim produisant du java, alors pourquoi ne pas poursuivre la tendance!
la source
fL
par$
pourrait vous faire économiser une toucheinput == 1L
est décalée d'un octet ...x
devrait être changé enr<sp>
puis le nombre de frappes serait inchangé05AB1E ,
999796949387 octetsCode:
Essayez-le en ligne!
Utilise l' encodage CP-1252 .
la source
CJam, 52 caractères
Essayez-le en ligne!
Étape 1
En utilisant les caractères Unicode U + 10000 à U + 10FFFF, nous pouvons coder 20 bits en un seul caractère. CJam utilise des caractères 16 bits en interne, donc chacun sera codé comme une paire de substituts , un dans la plage de U + D800 à U + DBFF, suivi par un dans la plage de U + DC00 à U + DFFF.
En prenant le ET au niveau du bit de chaque substitut avec 1023, nous obtenons les 10 bits d'information qu'il code. Nous pouvons convertir le tableau résultant de la base 1024 en base 128 pour décoder une chaîne arbitraire de caractères Unicode en dehors du BMP en une chaîne ASCII.
Le code effectue les opérations suivantes:
Étape 2
Le processus de décodage ci-dessus donne le code source suivant ( 98 octets ).
Essayez-le en ligne!
Le code effectue les opérations suivantes:
la source
Java,
217215220219192 octetsGolfé:
Non golfé:
(première réponse, wuhu)
Merci!
-2 octets: user902383
-1 octet: Denham Coote
Changements:
la source
()->{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 octets) renvoie maintenant la chaîne au lieu de l'impression, mais c'est plus court.for(int i=1;i<19;i++)
vous pouvez écrirefor(int i=1;i++<19;)
ce qui sauve un octetint i=1,k;
et ensuite vous pouvez écrirefor(;i++<19;)
etfor(k=0;k++<i;)
Pyth,
118106103 octetsEssayez-le en ligne!
Tout ce codage en chaîne prend vraiment beaucoup d'octets
, mais je ne peux rien y faire.Mise à jour: enregistré 3 octets en utilisant une chaîne compressée. Merci @ user81655 pour l'astuce!
la source
r
et de concaténer lesn
résultats dans ce (98 octets).C # (CSI)
181180179 octetsIl n'y a qu'une petite astuce impliquée. La façon simple d'écrire ceci serait:
en utilisant la chaîne avec les 18 premiers caractères du texte dont j'ai besoin de toute façon, je peux me débarrasser du long Enumerable.Range. Cela fonctionne car la chaîne implémente IEnumerable et il existe une version de Select qui remet l'élément (non nécessaire) et l'index que nous voulons à la fonction lambda.
la source
{ return ... }
peut être remplacé par=>...
.PowerShell, 120 octets
Les deux premières lignes sont simplement des littéraux de chaîne, qui sont sortis tels quels.
La troisième ligne commence par trois espaces et se termine par
L;`n}"
pour terminer les deux derniers octets. Le bit du milieu à l'intérieur du bloc de script$(...)
est construit en forçant en boucle%
de0
à18
et à chaque itération en construisant une chaîne qui commence parinput == 1
concaténée avec le nombre correspondant de zéros. Cela crachera un tableau de chaînes. Nous avons ensuite-join
chaque élément du tableau avecL`n ||
pour réaliser les newline-pipes. Cette grosse chaîne est la sortie du bloc de script, qui est insérée automatiquement au milieu et sortie.la source
Javascript,
172157152150148 octetsAfficher l'extrait de code
la source
${10**i}
au lieu de1${'0'.repeat(i)}
.C,
158155 octetsEssayez-le en ligne ici .
la source
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ée, 75 octets
(Ce sont des octets dans la page de code personnalisée de Jelly .)
Essayez-le ici.
Explication
la source
Vimscript, 120 octets
Autant utiliser le bon outil pour le travail.
Cela suppose que l'indentation automatique, etc. n'a pas été définie.
^[
et^M
sont des caractères d'échappement pour les caractèresESC
etCR
respectivement.La
a
macro duplique la ligne actuelle et ajoute un 0 à la copie. La:norm
ligne génère tout le passe-partout et laindent == 1L
ligne, puis utilisea
pour créer les autres.Dans le cas où les espaces de fin que l'échantillon de sortie avait sur deux lignes n'étaient pas des fautes de frappe, voici une version de 126 octets qui les inclut.
la source
Oracle SQL 9.2, 311 octets
la source
Perl 5 -
130141EDIT: fixed to have exact indentation
la source
g
flag for the substitution. Also as you have a single\n
in that string, you can simply match it and everything after it:$s[$#s]=~s/\n.+/;\n}/
. But ajoin
based one would still be shorter: pastebin.com/hQ61Adt8ES6, 139 bytes
I do so love these triangle generation questions.
la source
Kotlin,
194193 charactersTest it at http://try.kotlinlang.org/
la source
Ruby,
125119 bytesThanks to manatwork for -6 bytes!
la source
jq, 123 characters
(121 characters code + 2 characters command line option.)
Sample run:
On-line test (Passing
-r
through URL is not supported – check Raw Output yourself.)la source
Javascript 175 bytes
Let's do this regularly
Pretty small. Now, some javascript magic, like no semicolons needed, or no var's, etc.:
la source
Python (3.5)
137136 bytesPrevious version
la source
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.
la source
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!
la source
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)
la source
CJam, 112 chars
la source
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.
la source
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 :)
la source
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
la source
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).la source
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:
la source
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.la source
==
?