Idź wygenerować trochę Java

14

Twój szef chce, żebyś napisał taki kod:

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

co jest wydajne i tak, ale nie jest fajnie pisać. Ponieważ chcesz zminimalizować liczbę naciśnięć klawiszy, które musisz wykonać, piszesz krótszy program lub funkcję (lub metodę), która wyprowadza tę funkcję za Ciebie (lub zwraca ciąg do wyjścia). A ponieważ masz własną niestandardową klawiaturę z pełnym zakresem unicode ze wszystkimi 120 737 kluczami wymaganymi dla wszystkich unicode 8.0, zamiast naciśnięć klawiszy liczymy znaki unicode. Lub bajty, jeśli twój język nie używa kodu źródłowego Unicode.

Każde wejście, które Twój program lub funkcja bierze pod uwagę, liczy się do twojego wyniku, ponieważ oczywiście musisz to również wpisać.

Wyjaśnienia i zmiany:

  • Usunięto 3 końcowe spacje po ostatnim }
  • Usunięto pojedyncze spacje końcowe po return
  • Zwracanie ciągu danych wyjściowych z funkcji / metody jest w porządku
Filip Haglund
źródło
12
0==Math.log10(input)%1
SuperJedi224,
7
Mówisz „ liczymy znaki Unicode ”, ale natychmiast mówisz „ Lub bajty ”. Który to?
Klamka
2
Cokolwiek wolisz, tzn. Ten, który daje najniższy wynik. Dodano bajty, aby zezwolić na języki, które nie używają źródła tekstu.
Filip Haglund
1
while(input%10==0) input/=10; return input == 1;
PSkocik
4
05AB1E używa systemu Windows CP1252, który jest bajtem, a nie Unicode. Dążę do standardowych zasad, ale cały czas słyszę, że się mylę.
Filip Haglund,

Odpowiedzi:

15

PostgreSQL, 158 znaków

select'public static boolean isPowerOfTen(long input) {
  return
   '||string_agg(' input == 1'||repeat('0',x)||'L','
  ||')||';
}'from generate_series(0,18)x
człowiek w pracy
źródło
Nigdy nie widziałem RDBMS używanego jako odpowiedź na golfa ... słodko! +1
Chris Cirefice
@ChrisCirefice SQL jest w rzeczywistości dość powszechny na tej stronie. (Lub przynajmniej częściej niż można by się spodziewać.)
Alex A.
@AlexA. Hmm, cóż, PCG jest jedną z moich mniej uczęszczanych stron SE, więc nigdy nie widziałem odpowiedzi SQL :)
Chris Cirefice
7

Klawisze Vima 97

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

Cóż, jestem dziś na dobrej drodze z Javą produkującą vim, więc dlaczego nie kontynuować trendu!

James
źródło
zastąpienie fLgo $może uratować Ci naciśnięcie klawisza
Leaky Nun
Trzecia linia input == 1Ljest również wyrównana o jeden bajt ...
Leaky Nun
Dlatego ostatnia xpowinna zostać zmieniona na, r<sp>a następnie liczba naciśnięć klawiszy pozostanie niezmieniona
Leaky Nun
7

05AB1E , 99 97 96 94 93 87 bajtów

Kod:

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

Wypróbuj online!

Wykorzystuje kodowanie CP-1252 .

Adnan
źródło
7

CJam, 52 znaki

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

Wypróbuj online!

Scena 1

Używając znaków Unicode od U + 10000 do U + 10FFFF, możemy zakodować 20 bitów w jednym znaku. CJam używa 16-bitowych znaków wewnętrznie, więc każdy z nich będzie kodowany jako para surogatów , jeden w zakresie od U + D800 do U + DBFF, a następnie jeden w zakresie od U + DC00 do U + DFFF.

Biorąc bitowe ORAZ każdego surogatu z 1023, otrzymujemy 10 bitów informacji, które koduje. Możemy przekonwertować wynikową tablicę z bazy 1024 na bazę 128, aby zdekodować dowolny ciąg znaków Unicode poza BMP na ciąg ASCII.

Kod wykonuje następujące czynności:

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.

Etap 2

Powyższy proces dekodowania daje następujący kod źródłowy ( 98 bajtów ).

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

Wypróbuj online!

Kod wykonuje następujące czynności:

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
źródło
Można się spodziewać, że strona SE, taka jak judaizm, będzie testowała stres w zakresie obsługi Unicode, ale to szaleństwo: D
Filip Haglund,
Widzę dokładnie dwa znaki między znakami cudzysłowu. Czy możesz opublikować zrzut heksowy?
Pavel
Możesz zobaczyć dwa z nich? Nie mam takiego szczęścia ... Kodując znaki jako UTF-8, zrzut heksowy wyglądałby tak. tio.run/nexus/bash#AagAV///eHhkIC1nIDH//…
Dennis
6

Java, 217 215 220 219 192 bajtów

Gra w golfa:

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

Nie golfowany:

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

(pierwsza odpowiedź, wuhu)

Dzięki!
-2 bajty: user902383
-1 bajt: Denham Coote

Zmiany:

  • używane tabulatory zamiast spacji
  • przegapił ostatni wiersz wyniku: 18 -> 19
  • usunięta wewnętrzna pętla
  • zmieniono z drukowania na zwracany ciąg
Filip Haglund
źródło
4
twoja wewnętrzna pętla for nie potrzebuje nawiasów
użytkownik902383
Użyj składni Java 8, a także skróciłem kilka innych rzeczy: ()->{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 bajtów) Teraz zwraca ciąg zamiast drukowania, ale to krócej.
Addison Crump
1
+1 za napisanie pełnego programu Java, aby wygenerować jeszcze bardziej szczegółowy program Java.
Cyoce
zamiast tego for(int i=1;i<19;i++)możesz napisać, for(int i=1;i++<19;)co oszczędza bajt
Denham Coote
Zadeklaruj, int i=1,k;a następnie możesz napisać for(;i++<19;)ifor(k=0;k++<i;)
Denham Coote
5

PowerShell, 120 bajtów

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

Pierwsze dwa wiersze to po prostu literały łańcuchowe, które są wyprowadzane w niezmienionej postaci.

Trzecia linia zaczyna się od trzech spacji, a kończy, L;`n}"kończąc ostatnie kilka bajtów. Środkowy bit wewnątrz bloku skryptu $(...)jest konstruowany przez zapętlanie %od 0do 18i każda iteracja konstruuje ciąg, który zaczyna się od input == 1konkatenacji z odpowiednią liczbą zer. Spowoduje to wyrzucenie tablicy ciągów. Następnie -joinwykonujemy każdy element tablicy w L`n ||celu uzyskania rur newline. Ten duży ciąg jest wyjściowym blokiem skryptu, który jest automatycznie wstawiany do środka i generowany.

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
źródło
Dawno temu ... :) Bardzo imponujące!
mazzy
4

Pyth, 118 106 103 bajtów

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

Wypróbuj online!

Cały ten ciąg kodowania naprawdę zjada dużo bajtów , ale nic na to nie poradzę .

Aktualizacja: Zapisano 3 bajty za pomocą spakowanego ciągu. Dzięki @ user81655 za podpowiedź!

Denker
źródło
Możesz użyć spakowanych ciągów ...
user81655
Nie znam Pytha i nie jestem pewien, czy istnieje sposób na spakowanie pełnego ciągu (program pakujący zawsze go zmienia), ale pakowanie ri łączenie nwyników w tym (98 bajtów).
user81655
@ user81655 Dzięki, nie wiedziałem, że Pyth to miał. :) Sensowne jest tylko spakowanie pierwszego dużego sznurka, narzut związany z rozpakowywaniem nie jest tego wart w przypadku mniejszego sznurka.
Denker
@ user81655 Zdaję sobie z tego sprawę, ale liczę 103 znaki. Jak doszedłeś do 97?
Denker
Ups, mój błąd, liczyłem ich źle.
user81655
4

C # (CSI) 181 180 179 bajtów

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

W grę wchodzi tylko jedna sztuczka. Najprostszym sposobem na napisanie tego byłoby:

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

za pomocą ciągu zawierającego pierwsze 18 znaków potrzebnego mi tekstu mogę pozbyć się długiego Enumerable.Range. Działa to, ponieważ ciąg implementuje IEnumerable i istnieje wersja Select, która przekazuje element (niepotrzebny) i indeks, który chcemy do funkcji lambda.

obdarty
źródło
1
@WashingtonGuedes Thanks
raggy
1
proszę
podać
1
Czy CSI obsługuje ciała ekspresyjne? Jeśli tak, { return ... }można je zastąpić =>....
mınxomaτ
Obecnie nie na komputerze, więc nie mogę tego przetestować. Czy ostatni pełny ciąg unika się w nim w nawiasie? Czy jest to świetna sztuczka, o której nie wiedziałem? :)
Yytsi
3

JavaScript, 172 157 152 150 148 bajtów

p=>`public static boolean isPowerOfTen(long input) {
  return${[...Array(19)].map((x,i)=>`
  ${i?'||':' '} input == 1${'0'.repeat(i)}L`).join``};
}`

oddalony
źródło
2
W ES7 możesz zapisać 9 bajtów, używając ${10**i}zamiast 1${'0'.repeat(i)}.
Neil
3

C, 158 155 bajtów

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

Wypróbuj online tutaj .

Cole Cameron
źródło
Możesz ogolić bajt, jeśli użyjesz wartości zwracanej przez 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 16.07.16
3

Galaretka, 75 bajtów

(Są to bajty na niestandardowej stronie kodowej Jelly ).

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

Wypróbuj tutaj.

Wyjaśnienie

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
źródło
3

Vimscript, 120 bajtów

Równie dobrze można użyć odpowiedniego narzędzia do pracy.

Zakłada się, że autoindent itp. Nie zostały ustawione. ^[i ^Msą znakami zmiany znaczenia odpowiednio dla znaków ESCi CR.

aMakro powiela bieżącą linię i dodaje 0 do kopii. :normLinia generuje cały boilerplate i indent == 1Llinię, a następnie wykorzystuje ado tworzenia innych.

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

W przypadku, gdy końcowe spacje, które przykładowy wynik zawierał w dwóch wierszach, nie były literówkami, oto 126-bajtowa wersja, która je zawiera.

:let @a='yyp/L^Mi0^['
:norm ipublic static boolean isPowerOfTen(long input) {^M  return ^M  || input == 1L^[18@a$a;^M}   
:3s/||/ /
Promień
źródło
2

Oracle SQL 9.2, 311 bajtów

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
źródło
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: fixed to have exact indentation

ChatterOne
źródło
No need to use parenthesis around the range. In change would be nice to reproduce the exact indentation.
manatwork
Thanks for the parenthesis that I forgot. I've fixed it to have the exact indentation.
ChatterOne
There is no need for the 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 a join based one would still be shorter: pastebin.com/hQ61Adt8
manatwork
Thank you, but I don't think it would be nice if I just copied and pasted your solution, so I'll just leave it as it is as my own best effort. In time, I'll get better at golfing :-)
ChatterOne
2

ES6, 139 bytes

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

I do so love these triangle generation questions.

Neil
źródło
2

Kotlin, 194 193 characters

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

Test it at http://try.kotlinlang.org/

Sean
źródło
Welcome to Programming Puzzles & Code Golf. Nice first answer, but please add a link to an online interpreter or add an example on how to run this program, so others can verify it. However, have a great time here! :)
Denker
2

Ruby, 125 119 bytes

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

Thanks to manatwork for -6 bytes!

Doorknob
źródło
Not much original as most of the solutions are doing this way, but still shorter: pastebin.com/1ZGF0QTs
manatwork
2

jq, 123 characters

(121 characters code + 2 characters command line option.)

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

Sample run:

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

On-line test (Passing -r through URL is not supported – check Raw Output yourself.)

manatwork
źródło
1

Javascript 175 bytes

Let's do this regularly

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

Pretty small. Now, some javascript magic, like no semicolons needed, or no 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
źródło
Can you explain how that magic works? :)
Marv
3
Javascript doesn't care about semicolons, at least until the keywords (for, while, var, etc.) aren't "touching" anything else. Also, if you don't use the var keyword, you get global variables, wich is the worst feature I have ever seen in a programming language thus far.
Bálint
@Bálint. Why this would be the worst feature?
removed
@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}")
Erwan
źródło
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.

user1361991
źródło
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!

Nateowami
źródło
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}"
Paul Picard
źródło
0

CJam, 112 chars

"public static boolean isPowerOfTen(long input) {
  return
    input == 1"19,"0"a19*.*"L
  || input == 1"*"L;
}"
username.ak
źródło
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.

Robert Benson
źródło
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 :)

Liesel
źródło
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")
)
Argenis García
źródło
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).

Konrad Borowski
źródło
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}";
}
Kevin K
źródło
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.

Neil
źródło
Do you need spaces around ==?
Pavel
@Pavel That's not code; it's part of the output.
Dennis