Ваш начальник хочет, чтобы вы написали такой код:
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
- Возвращение строки вывода из функции / метода в порядке
источник
0==Math.log10(input)%1
while(input%10==0) input/=10; return input == 1;
Ответы:
PostgreSQL, 158 символов
источник
Vim 97 нажатий клавиш
Ну, сегодня я в восторге от vim, производящего Java, так почему бы не продолжить тренд!
источник
fL
на$
может спасти вас от нажатия клавишinput == 1L
смещена на один байт ...x
должен быть изменен на,r<sp>
а затем количество нажатий клавиш будет неизменным05AB1E ,
999796949387 байтКод:
Попробуйте онлайн!
Использует кодировку CP-1252 .
источник
CJam, 52 символа
Попробуйте онлайн!
Этап 1
Используя символы Юникода от U + 10000 до U + 10FFFF, мы можем кодировать 20 битов одним символом. CJam использует 16-битные символы внутри, поэтому каждый из них будет закодирован как пара суррогатов , один в диапазоне от U + D800 до U + DBFF, а затем один в диапазоне от U + DC00 до U + DFFF.
Взяв побитовое И каждого суррогата с 1023, мы получаем 10 бит информации, которую он кодирует. Мы можем преобразовать полученный массив из базы 1024 в базу 128 для декодирования произвольной строки символов Unicode вне BMP в строку ASCII.
Код делает следующее:
2 этап
Процесс декодирования сверху дает следующий исходный код ( 98 байт ).
Попробуйте онлайн!
Код делает следующее:
источник
Ява,
217215220219192 байтаGolfed:
Ungolfed:
(первый ответ, уху)
Благодарность!
-2 байта: user902383
-1 байт: Denham Coote
Изменения:
источник
()->{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 байт) Теперь возвращает строку вместо печати, но это короче.for(int i=1;i<19;i++)
вас можно написать,for(int i=1;i++<19;)
что сохраняет байтint i=1,k;
а затем вы можете написатьfor(;i++<19;)
иfor(k=0;k++<i;)
Pyth,
118106103 байтовПопробуйте онлайн!
Все это жесткое кодирование строки действительно поглощает много байтов
, но я ничего не могу с этим поделать.Обновление: сохранено 3 байта с использованием упакованной строки. Спасибо @ user81655 за подсказку!
источник
r
и объединятьn
результаты в этом (98 байт).C # (CSI)
181180179 байтЕсть только один маленький трюк. Прямой способ написать это будет:
используя строку с первыми 18 символами текста, которая мне нужна в любом случае, я могу избавиться от длинного Enumerable.Range. Это работает, потому что string реализует IEnumerable, и существует версия Select, которая передает элемент (не нужен) и индекс, который мы хотим, в функцию lambda.
источник
{ return ... }
можно заменить на=>...
.PowerShell, 120 байт
Первые две строки - это просто строковые литералы, которые выводятся как есть.
Третья строка начинается с трех пробелов и заканчивается тем,
L;`n}"
что завершает последние пару байтов. Средний бит внутри блока сценария$(...)
строится для-зацикливания%
от0
до18
и каждой итерации построения строки , которая начинается сinput == 1
сцепляются с соответствующим числом нулей. Это будет выплевывать массив строк. Затем мы-join
каждый элемент массиваL`n ||
для достижения новых строк-каналов. Эта большая строка является выходом блока скрипта, который автоматически вставляется в середину и выводится.источник
Javascript,
172157152150148 байтПоказать фрагмент кода
источник
${10**i}
вместо1${'0'.repeat(i)}
.C
158155 байтовПопробуйте это онлайн здесь .
источник
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);}
Желе, 75 байт
(Это байты в пользовательской кодовой странице Jelly .)
Попробуй это здесь.
объяснение
источник
Vimscript, 120 байт
Можно также использовать правильный инструмент для работы.
Это предполагает, что autoindent и т. Д. Не были установлены.
^[
и^M
являются escape-символами дляESC
иCR
соответственно символов.a
Макрос дублирует текущую строку и добавляет 0 к копии.:norm
Линия порождает все шаблонную иindent == 1L
линию, а затем используетa
для создания других.В случае, если конечные пробелы в образце вывода в двух строках не были опечатками, вот 126-байтовая версия, которая включает их.
источник
Oracle SQL 9.2, 311 байт
источник
Perl 5 -
130141РЕДАКТИРОВАТЬ: исправлено, чтобы иметь точный отступ
источник
g
флаге для замены. Кроме того, как у вас есть сингл\n
в этой строке, вы можете просто соответствовать его и все после него:$s[$#s]=~s/\n.+/;\n}/
. Ноjoin
основанный будет все еще короче: pastebin.com/hQ61Adt8ES6, 139 байт
Мне очень нравятся эти вопросы о поколении треугольников.
источник
Котлин,
194193 персонажаПроверьте это на http://try.kotlinlang.org/
источник
Рубин,
125119 байтСпасибо manatwork за -6 байт!
источник
JQ, 123 символа
(121 код символа + 2 символа командной строки.)
Образец прогона:
Он-лайн тест (пропуск
-r
через URL не поддерживается - проверьте Raw Output самостоятельно.)источник
JavaScript 175 байтов
Давайте делать это регулярно
Довольно небольшой. Теперь немного магии javascript, например, не нужно использовать точки с запятой, или не нужно использовать var и т. Д .:
источник
Python (3,5)
137136 байтПредыдущая версия
источник
print "public static boolean isPowerOfTen(long input) {\n return\n %s;\n}"%"\n || ".join("input == %r"%10L**i for i in range(19))
print
(без скобок) выигрывает еще одинANSI-SQL, 252 символа
Ungolfed:
Не серьезная попытка, просто тыкать в записи Oracle SQL / T-SQL.
источник
JavaScript (Node.js), 156 байт
В
i-1
первом раунде будет только 0 (и, следовательно, фальсификация) (только немного короче, чемi!=1
.Предложения приветствуются!
источник
Perl 5, 137 байт
Не основано на предыдущем ответе Perl, но оно как-то короче. Я полагаю, что его можно снова сократить, позаботившись о первом «входе» внутри цикла, но я еще ничего не пробовал (на работе atm)
источник
CJam, 112 символов
источник
AWK + оболочка, 157 байт
Вопрос сказал, чтобы посчитать все, что вам нужно будет набрать. Это дает дополнительный бонус, заключающийся в возможности выбирать, сколько строк будет помещено в метод isPowersOfTen, когда босс неизбежно передумает.
источник
echo
awk '…'<<<18
T-SQL
289,277,250, 249 байтОбновление: Спасибо @Bridge, я нашел еще несколько пробелов :)
Обновление 2: изменен CTE на подзапрос -27 символов :) Обновление 3: еще одно место кусает пыль @bridge :)
источник
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 байт
Golfed
Ungolfed
источник
Perl 6 (115 байт)
X
Оператор перечисляет декартову операцию произведения, например,10 X** ^19
дает степени десяти (от 10 до степени от 0 до 19, как^
и оператор диапазона, который считает от 0). Строки могут иметь блоки кода с{
(поэтому я избегаю его первого экземпляра).источник
Ява, 210/166
Оценка зависит от того, соответствует ли возврат входных данных функции определению «выход».
Консольный вывод (210):
Возврат строки (166):
Разборчивая версия:
источник
Пакет,
230208206205 байтовРедактировать: Сохранено 22 байта, избегая повторения
input ==
и повторного использования подпрограммы для строки с дополнительной точкой с запятой. Сохранено23 байта путем удаления ненужных пробелов.источник
==
?