Сгенерируйте Java

14

Ваш начальник хочет, чтобы вы написали такой код:

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

(Мартин Смит, по адресу /codereview//a/117294/61929 )

что эффективно и так, но не так весело печатать. Поскольку вы хотите минимизировать количество нажатий клавиш, вы пишете более короткую программу или функцию (или метод), которая выводит эту функцию для вас (или возвращает строку для вывода). А так как у вас есть собственная настраиваемая полнофункциональная клавиатура с юникодом со всеми 120 737 клавишами, необходимыми для всего Unicode 8.0, мы учитываем символы юникода вместо нажатия клавиш. Или байты, если ваш язык не использует исходный код Unicode.

Любые входные данные вашей программы или функции учитываются при подсчете баллов, поскольку вам, очевидно, также необходимо ввести их.

Разъяснения и правки:

  • Удалены 3 пробела после последнего }
  • Удален один пробел после return
  • Возвращение строки вывода из функции / метода в порядке
Филип Хаглунд
источник
12
0==Math.log10(input)%1
SuperJedi224
7
Вы говорите « мы считаем символы юникода », но затем вы немедленно говорите « Или байты ». Который из них?
Дверная ручка
2
Что бы вы ни предпочли, то есть тот, который дает вам самый низкий балл. Добавлены байты для языков, которые не используют текстовый источник.
Филип Хаглунд
1
while(input%10==0) input/=10; return input == 1;
PSkocik
4
05AB1E использует окна CP1252, которые являются байтами, а не юникодом. Я стремлюсь к стандартным правилам, но мне все время говорят, что я ошибаюсь.
Филип Хаглунд

Ответы:

15

PostgreSQL, 158 символов

select'public static boolean isPowerOfTen(long input) {
  return
   '||string_agg(' input == 1'||repeat('0',x)||'L','
  ||')||';
}'from generate_series(0,18)x
manatwork
источник
Я никогда не видел, чтобы СУБД использовалась в качестве кода для игры в гольф ... мило! +1
Крис Сирфице
@ChrisCirefice SQL на самом деле несколько распространен на этом сайте. (Или, по крайней мере, чаще, чем можно было бы ожидать.)
Алекс А.
@AlexA. Хм, хорошо, PCG - один из моих менее посещаемых сайтов SE, поэтому я никогда не видел ответа на SQL :)
Chris Cirefice
7

Vim 97 нажатий клавиш

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

Ну, сегодня я в восторге от vim, производящего Java, так почему бы не продолжить тренд!

Джеймс
источник
замена fLна $может спасти вас от нажатия клавиш
Leaky Nun
Кроме того, третья строка input == 1Lсмещена на один байт ...
Leaky Nun
Таким образом, последний xдолжен быть изменен на, r<sp>а затем количество нажатий клавиш будет неизменным
Leaky Nun
7

CJam, 52 символа

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

Попробуйте онлайн!

Этап 1

Используя символы Юникода от U + 10000 до U + 10FFFF, мы можем кодировать 20 битов одним символом. CJam использует 16-битные символы внутри, поэтому каждый из них будет закодирован как пара суррогатов , один в диапазоне от U + D800 до U + DBFF, а затем один в диапазоне от U + DC00 до U + DFFF.

Взяв побитовое И каждого суррогата с 1023, мы получаем 10 бит информации, которую он кодирует. Мы можем преобразовать полученный массив из базы 1024 в базу 128 для декодирования произвольной строки символов Unicode вне BMP в строку ASCII.

Код делает следующее:

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.

2 этап

Процесс декодирования сверху дает следующий исходный код ( 98 байт ).

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

Попробуйте онлайн!

Код делает следующее:

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;
}"
Деннис
источник
Вы можете ожидать, что сайт SE, такой как иудаизм, будет стресс-тестированием поддержки юникода сайта, но это безумие: D
Филип Хаглунд
Я могу видеть ровно два символа между кавычками. Можете ли вы опубликовать hexdump?
Павел
Вы действительно можете увидеть два из них? У меня нет такой удачи ... Кодируя символы как UTF-8, hexdump будет выглядеть так. tio.run/nexus/bash#AagAV///eHhkIC1nIDH//…
Деннис
6

Ява, 217 215 220 219 192 байта

Golfed:

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

(первый ответ, уху)

Благодарность!
-2 байта: user902383
-1 байт: Denham Coote

Изменения:

  • использовались вкладки вместо пробелов
  • пропустил последнюю строку вывода: 18 -> 19
  • убран внутренний цикл
  • изменено с печати на возвращаемую строку
Филип Хаглунд
источник
4
Ваш внутренний цикл for не нуждается в скобках
user902383
Используйте синтаксис Java 8, также укороченный некоторые другие вещи: ()->{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 байт) Теперь возвращает строку вместо печати, но это короче.
Эддисон Крамп
1
+1 за написание подробной Java-программы для создания еще более подробной Java-программы.
Cyoce
вместо for(int i=1;i<19;i++)вас можно написать, for(int i=1;i++<19;)что сохраняет байт
Denham Coote
Кроме того, объявите, int i=1,k;а затем вы можете написать for(;i++<19;)иfor(k=0;k++<i;)
Денхам Кут
4

Pyth, 118 106 103 байтов

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

Попробуйте онлайн!

Все это жесткое кодирование строки действительно поглощает много байтов , но я ничего не могу с этим поделать .

Обновление: сохранено 3 байта с использованием упакованной строки. Спасибо @ user81655 за подсказку!

Denker
источник
Вы можете использовать упакованные строки ...
user81655
Я не знаю Pyth, и я не уверен, есть ли способ упаковать полную строку (программа упаковки всегда будет ее изменять), но упаковывать rи объединять nрезультаты в этом (98 байт).
user81655
@ user81655 Спасибо, не знал, что у Пита есть это. :) Упаковывать первую большую строку имеет смысл только в том случае, если издержки, которые вы создаете при распаковке, не стоят того, чтобы она была меньше.
Денкер
@ user81655 Я знаю об этом, но я считаю 103 символа. Как ты добрался до 97?
Денкер
Ой, моя ошибка, я считал их неправильно.
user81655
4

C # (CSI) 181 180 179 байт

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

Есть только один маленький трюк. Прямой способ написать это будет:

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

используя строку с первыми 18 символами текста, которая мне нужна в любом случае, я могу избавиться от длинного Enumerable.Range. Это работает, потому что string реализует IEnumerable, и существует версия Select, которая передает элемент (не нужен) и индекс, который мы хотим, в функцию lambda.

зазубренный
источник
1
@WashingtonGuedes Спасибо
грязный
1
добавьте немного объяснений, пожалуйста
Eumel
1
CSI поддерживает выражения тела? Если это так, то { return ... }можно заменить на =>....
mınxomaτ
В настоящее время не на компьютере, поэтому я не могу проверить это. Последняя стенографическая строка выходит за скобки внутри нее? Или это отличный трюк, о котором я не знал? :)
Yytsi
4

PowerShell, 120 байт

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

Первые две строки - это просто строковые литералы, которые выводятся как есть.

Третья строка начинается с трех пробелов и заканчивается тем, L;`n}"что завершает последние пару байтов. Средний бит внутри блока сценария $(...)строится для-зацикливания %от 0до 18и каждой итерации построения строки , которая начинается с input == 1сцепляются с соответствующим числом нулей. Это будет выплевывать массив строк. Затем мы -joinкаждый элемент массива L`n ||для достижения новых строк-каналов. Эта большая строка является выходом блока скрипта, который автоматически вставляется в середину и выводится.

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
источник
3

Javascript, 172 157 152 150 148 байт

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

удален
источник
2
В ES7 вы можете сохранить 9 байтов, используя ${10**i}вместо 1${'0'.repeat(i)}.
Нил
3

C 158 155 байтов

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

Попробуйте это онлайн здесь .

Коул Камерон
источник
Вы можете сбрить байт, если используете возвращаемое значение 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

Желе, 75 байт

(Это байты в пользовательской кодовой странице Jelly .)

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

Попробуй это здесь.

объяснение

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 байт

Можно также использовать правильный инструмент для работы.

Это предполагает, что autoindent и т. Д. Не были установлены. ^[и ^Mявляются escape-символами для ESCи CRсоответственно символов.

aМакрос дублирует текущую строку и добавляет 0 к копии. :normЛиния порождает все шаблонную и indent == 1Lлинию, а затем использует aдля создания других.

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

В случае, если конечные пробелы в образце вывода в двух строках не были опечатками, вот 126-байтовая версия, которая включает их.

: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 байт

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"

РЕДАКТИРОВАТЬ: исправлено, чтобы иметь точный отступ

ChatterOne
источник
Не нужно использовать круглые скобки вокруг диапазона. В замен было бы неплохо воспроизвести точный отступ.
manatwork
Спасибо за скобки, которые я забыл. Я исправил это, чтобы иметь точный отступ.
ChatterOne
Нет необходимости в gфлаге для замены. Кроме того, как у вас есть сингл \nв этой строке, вы можете просто соответствовать его и все после него: $s[$#s]=~s/\n.+/;\n}/. Но joinоснованный будет все еще короче: pastebin.com/hQ61Adt8
manatwork
Спасибо, но я не думаю, что было бы хорошо, если бы я просто скопировал и вставил ваше решение, так что я просто оставлю его как есть в моих собственных усилиях.
Со
2

ES6, 139 байт

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

Мне очень нравятся эти вопросы о поколении треугольников.

Нил
источник
2

Котлин, 194 193 персонажа

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

Проверьте это на http://try.kotlinlang.org/

Шон
источник
Добро пожаловать в Программирование Пазлов и Код Гольф. Хороший первый ответ, но, пожалуйста, добавьте ссылку на онлайн-переводчика или добавьте пример того, как запустить эту программу, чтобы другие могли это проверить. Тем не менее, прекрасно провести время здесь! :)
Денкер
2

Рубин, 125 119 байт

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

Спасибо manatwork за -6 байт!

Дверная ручка
источник
Не так оригинально, как большинство решений, но все же короче: pastebin.com/1ZGF0QTs
manatwork
2

JQ, 123 символа

(121 код символа + 2 символа командной строки.)

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

Образец прогона:

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

Он-лайн тест (пропуск -rчерез URL не поддерживается - проверьте Raw Output самостоятельно.)

manatwork
источник
1

JavaScript 175 байтов

Давайте делать это регулярно

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

Довольно небольшой. Теперь немного магии javascript, например, не нужно использовать точки с запятой, или не нужно использовать var и т. Д .:

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)
Балинт
источник
Можете ли вы объяснить, как работает эта магия ? :)
Марв
3
Javascript не заботится о точках с запятой, по крайней мере до тех пор, пока ключевые слова (for, while, var и т. Д.) Больше не «касаются» ничего. Кроме того, если вы не используете ключевое слово var, вы получаете глобальные переменные, что является худшей функцией, которую я когда-либо видел в языке программирования.
Балинт
@ Bálint. Почему это будет худшей чертой ?
удалено
@WashingtonGuedes Знаете, большинство языков напоминают вам, если вы что-то неправильно набрали в функции. Поскольку javascript воспринимает это так, как будто вы создали совершенно новую переменную, он ничего не скажет об этом.
Балинт
Также то же самое относится к = возвращению истины.
Bálint
1

Python (3,5) 137 136 байт

print("public static boolean isPowerOfTen(long input) {\n  return\n   ",'\n  || '.join("input == %rL"%10**i for i in range(19))+";\n}")

Предыдущая версия

print("public static boolean isPowerOfTen(long input) {\n  return\n   ",'\n  || '.join("input == 1"+"0"*i+"L"for i in range(19))+";\n}")
Эрвана
источник
135 с 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 вы правы, использование% r выигрывает 1 байт, а python 2 print(без скобок) выигрывает еще один
Erwan
0

ANSI-SQL, 252 символа

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

Не серьезная попытка, просто тыкать в записи Oracle SQL / T-SQL.

user1361991
источник
Для 40 дополнительных символов я могу добавить «from dual» и сделать его «Oracle SQL» записью.
user1361991
0

JavaScript (Node.js), 156 байт

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

В i-1первом раунде будет только 0 (и, следовательно, фальсификация) (только немного короче, чемi!=1 .

Предложения приветствуются!

Nateowami
источник
0

Perl 5, 137 байт

Не основано на предыдущем ответе Perl, но оно как-то короче. Я полагаю, что его можно снова сократить, позаботившись о первом «входе» внутри цикла, но я еще ничего не пробовал (на работе 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 символов

"public static boolean isPowerOfTen(long input) {
  return
    input == 1"19,"0"a19*.*"L
  || input == 1"*"L;
}"
username.ak
источник
0

AWK + оболочка, 157 байт

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

Вопрос сказал, чтобы посчитать все, что вам нужно будет набрать. Это дает дополнительный бонус, заключающийся в возможности выбирать, сколько строк будет помещено в метод isPowersOfTen, когда босс неизбежно передумает.

Роберт Бенсон
источник
Передача строки здесь короче, чем по echoawk '…'<<<18
трубам
Я знал о здесь-файле, но не здесь-строки. Спасибо за информацию.
Роберт Бенсон
0

T-SQL 289 , 277 , 250 , 249 байт

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,'')+';}'

Обновление: Спасибо @Bridge, я нашел еще несколько пробелов :)

Обновление 2: изменен CTE на подзапрос -27 символов :) Обновление 3: еще одно место кусает пыль @bridge :)

Лизель
источник
1
Мне удалось обрезать еще 7 пробелов (282 байта), не меняя остальную часть кода: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, '')+';}'
Мост
1
Теперь я оглядываюсь назад и вижу все лишние пробелы в своем оригинальном комментарии! Я нашел еще одно место, от которого можно избавиться - тот, что сразу послеROW_NUMBER()
Бридж
0

R 185 байт

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 байт)

say "public static boolean isPowerOfTen(long input) \{
  return
   {join "L
  ||",(" input == "X~(10 X**^19))}L;
}"

XОператор перечисляет декартову операцию произведения, например, 10 X** ^19дает степени десяти (от 10 до степени от 0 до 19, как ^и оператор диапазона, который считает от 0). Строки могут иметь блоки кода с {(поэтому я избегаю его первого экземпляра).

Конрад Боровски
источник
0

Ява, 210/166

Оценка зависит от того, соответствует ли возврат входных данных функции определению «выход».

Консольный вывод (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}");}}

Возврат строки (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}";}

Разборчивая версия:

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

Пакет, 230 208 206 205 байтов

@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

Редактировать: Сохранено 22 байта, избегая повторения input ==и повторного использования подпрограммы для строки с дополнительной точкой с запятой. Сохранено 2 3 байта путем удаления ненужных пробелов.

Нил
источник
Вам нужны места вокруг ==?
Павел
@Pavel Это не код; это часть вывода.
Деннис