Generieren Sie Java


14

Ihr Chef möchte, dass Sie folgenden Code schreiben:

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, unter /codereview//a/117294/61929 )

das ist effizient und so, aber nicht so lustig zu tippen. Da Sie die Anzahl der zu drückenden Tasten minimieren möchten, schreiben Sie ein kürzeres Programm oder eine kürzere Funktion (oder Methode), die diese Funktion für Sie ausgibt (oder eine auszugebende Zeichenfolge zurückgibt). Und da Sie Ihre eigene benutzerdefinierte Unicode-Tastatur mit vollem Funktionsumfang haben, die alle 120.737 Tasten enthält, die für Unicode 8.0 erforderlich sind, zählen wir Unicode-Zeichen anstelle von Tastendrücken. Oder Bytes, wenn Ihre Sprache keinen Unicode-Quellcode verwendet.

Jede Eingabe, die Ihr Programm oder Ihre Funktion vornimmt, zählt für Ihre Punktzahl, da Sie diese natürlich auch eingeben müssen.

Erläuterungen und Änderungen:

  • 3 nachgestellte Leerzeichen nach dem letzten entfernt }
  • Ein einzelnes Leerzeichen nach entfernt return
  • Die Rückgabe einer Ausgabezeichenfolge von einer Funktion / Methode ist in Ordnung

12
0==Math.log10(input)%1
SuperJedi224

7
Sie sagen " Wir zählen Unicode-Zeichen ", aber dann sagen Sie sofort " Oder Bytes ". Welches ist es?
Türknauf

2
Was auch immer Sie bevorzugen, dh das, das Ihnen die niedrigste Punktzahl gibt. Bytes hinzugefügt, um Sprachen zuzulassen, die keine Textquelle verwenden.
Filip Haglund

1
while(input%10==0) input/=10; return input == 1;
PSkocik

4
05AB1E verwendet den Windows-CP1252, der aus Bytes und nicht aus Unicode besteht. Ich strebe Standardregeln an, aber mir wird immer wieder gesagt, dass ich falsch liege.
Filip Haglund

Antworten:


15

PostgreSQL, 158 Zeichen

select'public static boolean isPowerOfTen(long input) {
  return
   '||string_agg(' input == 1'||repeat('0',x)||'L','
  ||')||';
}'from generate_series(0,18)x

Ich habe noch nie ein RDBMS als Code-Golf-Antwort gesehen ... süß! +1
Chris Cirefice

@ChrisCirefice SQL ist auf dieser Site eigentlich etwas verbreitet. (Oder zumindest häufiger als man erwarten könnte.)
Alex A.

@AlexA. Hm, nun, PCG ist eine meiner weniger frequentierten SE-Sites, daher habe ich noch nie eine SQL-Antwort gesehen :)
Chris Cirefice

7

Vim 97 Tastenanschläge

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

Nun, ich bin heute mit der Java-Produktion von Vim in Fahrt gekommen. Warum also nicht den Trend fortsetzen?


Ersetzen fLdurch $könnte Ihnen einen Tastendruck ersparen
Undichte Nonne

Außerdem ist die dritte Zeile input == 1Lum ein Byte falsch ausgerichtet ...
Leaky Nun,

Das letzte xsollte also auf geändert werden, r<sp>und dann würde die Anzahl der Tastenanschläge unverändert bleiben
Leaky Nun,

7

05AB1E , 99 97 96 94 93 87 Bytes

Code:

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

Probieren Sie es online!

Verwendet die CP-1252- Codierung.


7

CJam, 52 Zeichen

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

Probieren Sie es online!

Bühne 1

Mit den Unicode-Zeichen U + 10000 bis U + 10FFFF können 20 Bits in einem einzelnen Zeichen codiert werden. CJam verwendet 16-Bit - Zeichen intern, so dass jeder wird als ein Paar von codiert werden Surrogate , eines im Bereich von U + D800 bis U + DBFF, gefolgt von einer im Bereich von U + DC00 bis U + DFFF.

Indem wir das bitweise UND jedes Ersatzzeichens mit 1023 nehmen, erhalten wir die 10 von ihm codierten Informationsbits. Wir können das resultierende Array von der Basis 1024 in die Basis 128 konvertieren, um eine beliebige Zeichenfolge von Unicode-Zeichen außerhalb des BMP in eine ASCII-Zeichenfolge zu decodieren.

Der Code bewirkt Folgendes:

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.

Stufe 2

Der Dekodierungsprozess von oben ergibt den folgenden Quellcode ( 98 Bytes ).

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

Probieren Sie es online!

Der Code bewirkt Folgendes:

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

Man könnte erwarten, dass eine SE-Site wie Judaism die Unicode-Unterstützung der Site auf die Probe stellt, aber das ist verrückt: D
Filip Haglund

Ich kann genau zwei der Zeichen zwischen den Anführungszeichen sehen. Kannst du einen Hexdump posten?
Pavel

Sie können tatsächlich zwei von ihnen sehen? Ich habe kein Glück ... Wenn ich die Zeichen als UTF-8 kodiere, würde der Hexdump so aussehen. tio.run/nexus/bash#AagAV///eHhkIC1nIDH//…
Dennis

6

Java, 217 215 220 219 192 Bytes

Golf gespielt:

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

(erste Antwort, wuhu)

Vielen Dank!
-2 Byte: user902383
-1 Byte: Denham Coote

Änderungen:

  • Tabulatoren anstelle von Leerzeichen verwenden
  • verpasste die letzte Ausgabezeile: 18 -> 19
  • innere Schleife entfernt
  • wurde vom Drucken zum Zurückgeben der Zeichenfolge geändert

4
Ihre innere for-Schleife benötigt keine Klammern
user902383

Verwenden Sie die Java 8-Syntax, und verkürzen Sie auch einige andere Dinge: ()->{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 Byte) Gibt jetzt die Zeichenfolge zurück, anstatt sie zu drucken, aber das ist kürzer.
Addison Crump

1
+1 für das Schreiben eines ausführlichen Java-Programms, um ein noch ausführlicheres Java-Programm zu generieren.
Cyoce

Stattdessen for(int i=1;i<19;i++)können Sie schreiben, for(int i=1;i++<19;)was ein Byte speichert
Denham Coote

Auch deklarieren int i=1,k;und dann können Sie schreiben for(;i++<19;)undfor(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\}

Probieren Sie es online!

All diese String-Hardcodierung verschlingt wirklich eine Menge Bytes , aber ich kann nichts dagegen tun .

Update: 3 Bytes mit einem gepackten String gespeichert. Danke @ user81655 für den Hinweis!


Sie könnten gepackte Zeichenfolgen verwenden ...
user81655

Ich weiß Pyth nicht und ich bin nicht sicher , ob es eine Möglichkeit gibt , die vollständige Zeichenfolge zu packen (würde das Packprogramm immer ändern) , sondern packen zu rund Verketten die nErgebnisse in diesen (98 Byte).
user81655

@ user81655 Danke, wusste nicht, dass Pyth das hat. :) Es ist nur sinnvoll, die erste große Zeichenfolge zu packen, da sich der Overhead, den Sie beim Entpacken von Formularen verursachen, für kleinere Zeichenfolgen nicht lohnt.
Denker

@ user81655 Mir ist das bekannt, aber ich zähle 103 Zeichen. Wie bist du zu 97 gekommen?
Denker

Hoppla, mein Fehler, ich habe sie falsch gezählt.
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;
}")

Es gibt nur einen kleinen Trick. Der direkte Weg, dies zu schreiben, wäre:

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

Indem ich die Zeichenkette mit den ersten 18 Zeichen des Textes benutze, die ich sowieso brauche, kann ich den langen Enumerable.Range loswerden. Dies funktioniert, weil string IEnumerable implementiert und es eine Version von Select gibt, die das Item (nicht benötigt) und den Index, den wir wollen, an die Lambda-Funktion übergibt.


1
@WashingtonGuedes Danke
raggy

1
füge bitte eine Erklärung hinzu
Eumel

1
Unterstützt CSI Ausdruckskörper? Wenn ja, { return ... }kann die durch ersetzt werden =>....
Mittwoch,

Derzeit nicht auf dem Computer, daher kann ich das nicht testen. Entweicht die letzte wörtliche Zeichenfolge der Klammer darin? Oder ist es ein großartiger Trick, von dem ich nichts wusste? :)
Yytsi

4

PowerShell, 120 Byte

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

Die ersten beiden Zeilen sind einfach String-Literale, die unverändert ausgegeben werden.

Die dritte Zeile beginnt mit drei Leerzeichen und endet mit L;`n}"den letzten paar Bytes. Das mittlere Bit innerhalb des Skriptblocks $(...)wird durch For-Loop %von 0bis 18und jede Iteration erstellt, wobei eine Zeichenfolge erstellt wird, die input == 1mit der entsprechenden Anzahl von Nullen verkettet beginnt . Dadurch wird eine Reihe von Zeichenfolgen ausgespuckt. Wir haben dann -joinjedes Element des Arrays mit L`n ||den Newline-Pipes zu erreichen. Dieser große String ist die Ausgabe des Skriptblocks, der automatisch in die Mitte eingefügt und ausgegeben wird.

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 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
In ES7 können Sie 9 Bytes sparen, indem Sie ${10**i}anstelle von verwenden 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}");}

Probieren Sie es hier online aus .


Sie können ein Byte abschneiden, wenn Sie den Rückgabewert von 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

Jelly, 75 Bytes

(Dies sind Bytes in Jellys benutzerdefinierter Codepage .)

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

Probieren Sie es hier aus.

Erläuterung

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

Könnte auch das richtige Werkzeug für den Job verwenden.

Dies setzt voraus, dass Autoindent usw. nicht eingestellt wurde. ^[und ^Msind Escape - Zeichen für die ESCund CRZeichen sind.

Das aMakro dupliziert die aktuelle Zeile und fügt der Kopie eine 0 hinzu. Die :normLinie generiert die gesamte Kesselplatte und die indent == 1LLinie und erstellt dann adie anderen.

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

Falls die nachfolgenden Leerzeichen in der Beispielausgabe in zwei Zeilen keine Tippfehler waren, finden Sie hier eine 126-Byte-Version, in der sie enthalten sind.

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

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"

BEARBEITEN: Fix für exakte Einrückung


Um den Bereich müssen keine runden Klammern verwendet werden. Im Wechsel wäre es schön, den genauen Einzug wiederzugeben.
Manatwork

Danke für die Klammer, die ich vergessen habe. Ich habe es behoben, um die genaue Einrückung zu haben.
ChatterOne

gFür die Substitution ist das Flag nicht erforderlich . Auch , wie Sie eine einzelne haben \nin diesem String, können Sie einfach passen und alles danach: $s[$#s]=~s/\n.+/;\n}/. Aber ein joinBasis eines wäre noch kürzer: pastebin.com/hQ61Adt8
Manatwork

Vielen Dank, aber ich denke nicht, dass es schön wäre, wenn ich Ihre Lösung einfach kopiert und eingefügt hätte. Ich lasse sie einfach so, wie ich es getan habe. Mit der Zeit werde ich besser im Golfen :-)
ChatterOne

2

ES6, 139 Bytes

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

Ich liebe diese Fragen der Dreiecksgeneration.


2

Kotlin, 194 193 Zeichen

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

Testen Sie es unter http://try.kotlinlang.org/


Willkommen bei Programming Puzzles & Code Golf. Schöne erste Antwort, aber bitte fügen Sie einen Link zu einem Online-Dolmetscher hinzu oder fügen Sie ein Beispiel hinzu, wie dieses Programm ausgeführt wird, damit andere es überprüfen können. Aber viel Spaß hier! :)
Denker

2

Ruby, 125 119 Bytes

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

Danke an manatwork für -6 Bytes!


Nicht viel original als die meisten Lösungen machen diese Art und Weise, aber immer noch kürzer: pastebin.com/1ZGF0QTs
Manatwork

2

jq, 123 Zeichen

(121 Zeichen Code + 2 Zeichen Befehlszeilenoption.)

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

Probelauf:

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

Online-Test (Das Übergeben einer -rURL wird nicht unterstützt. Prüfen Sie die Raw-Ausgabe selbst.)


1

Javascript 175 Bytes

Machen wir das regelmäßig

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

Ziemlich klein. Nun, etwas Javascript Magie, wie kein Semikolon benötigt, oder keine 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)

Können Sie erklären, wie diese Magie funktioniert? :)
Marv

3
JavaScript kümmert sich nicht um Semikolons, zumindest solange die Schlüsselwörter (for, while, var usw.) nichts anderes "berühren". Wenn Sie das Schlüsselwort var nicht verwenden, erhalten Sie globale Variablen. Dies ist die schlechteste Funktion, die ich bisher in einer Programmiersprache gesehen habe.
Bálint

@ Bálint. Warum ist dies die schlechteste Funktion ?
entfernt

@WashingtonGuedes You know, most languages remind you if you misstyped something inside a function. Because javascript takes that as if you made a whole new variable, it does not going to say anything about that.
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}")

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.


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!


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

0

CJam, 112 chars

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

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.


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


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

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


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

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.


Do you need spaces around ==?
Pavel

@Pavel That's not code; it's part of the output.
Dennis
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.