Сгенерируйте 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

Я никогда не видел, чтобы СУБД использовалась в качестве кода для игры в гольф ... мило! +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 за подсказку!


Вы можете использовать упакованные строки ...
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;
}

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"

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


Не нужно использовать круглые скобки вокруг диапазона. В замен было бы неплохо воспроизвести точный отступ.
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

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 самостоятельно.)


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.


Для 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 .

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


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

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 Это не код; это часть вывода.
Деннис
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.