Codegolf — Сгенерируйте Немного Java

  • Автор темы BloodNight
  • Обновлено
  • 22, Oct 2024
  • #1

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

 return 

(Мартин Смит, https://codereview.stackexchange.com/a/117294/61929)

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

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

Уточнения и правки:

  • Удалены 3 конечных пробела после последнего. }
  • Удален один конечный пробел после 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; }
  • Возврат строки вывода из функции/метода в порядке.

#код-гольф #колмогоров-сложность See More

BloodNight


Рег
16 Jan, 2005

Тем
89

Постов
182

Баллов
657
  • 26, Oct 2024
  • #2

PostgreSQL, 158 символов

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 input == 
||answer||

CJam, 52 символа

@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

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

Этап 1

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

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

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

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

Этап 2

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

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

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

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

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

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

{

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

 

Heechee


Рег
03 Mar, 2007

Тем
64

Постов
195

Баллов
575
  • 26, Oct 2024
  • #3

Java, 217 215 220 219 192 байта

Гольф:

^

Негольфед:

10 X** ^19

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

Спасибо!
-2 байта: user902383
-1 байт: Денэм Кут

Изменения:

  • вместо пробелов использовались табуляции
  • пропустил последнюю строку вывода: 18 -> 19
  • удален внутренний цикл
  • изменено с печати на возврат строки
 

Boris6778


Рег
19 Jun, 2006

Тем
77

Постов
203

Баллов
638
  • 26, Oct 2024
  • #4

05AB1E, 99 97 96 94 93 87 байт

Код:

X

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

Использование CP-1252 кодировка.

 

AbeNoSeimei


Рег
26 Apr, 2009

Тем
70

Постов
178

Баллов
538
  • 26, Oct 2024
  • #5

PowerShell, 120 байт

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

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

Третья строка начинается с трех пробелов и заканчивается 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") ) to finish off the last couple bytes. The middle bit inside the script block 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")) создается путем цикла for 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,'')+';}' from 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}"}' к "public static boolean isPowerOfTen(long input) { return input == 1"19,"0"a19*.*"L || input == 1"*"L; }" and each iteration constructing a string that starts with $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}" объединены с соответствующим количеством нулей. Это выдаст массив строк. Мы тогда i!=1 each element of the array with i-1 для достижения новых строк-труб. Эта большая строка — это выходные данные блока сценария, которые автоматически вставляются в середину и выводятся.

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

Пиф, 118 106 103 байта

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

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

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

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

 

Djam


Рег
12 Feb, 2008

Тем
74

Постов
192

Баллов
572
  • 26, Oct 2024
  • #6

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

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

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

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

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

 

Attilla


Рег
27 Sep, 2006

Тем
74

Постов
183

Баллов
573
  • 26, Oct 2024
  • #7

Javascript, 172 157 152 150 148 байт

print("public static boolean isPowerOfTen(long input) {\n return\n ",'\n || '.join("input == %rL"**i for i in range(19))+";\n}") 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)
 

Senyprim


Рег
21 Dec, 2009

Тем
70

Постов
218

Баллов
618
  • 26, Oct 2024
  • #8

С, 158 155 байт

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

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

 

FefeAdmitesit


Рег
18 Jul, 2013

Тем
72

Постов
196

Баллов
586
  • 26, Oct 2024
  • #9

Желе, 75 байт

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

-r

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

Объяснение

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

Вимскрипт, 120 байт

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

Предполагается, что автоотступ и т. д. не установлены. "public static boolean isPowerOfTen(long input) { return \([range(19)|" input == 1\("0"*.//"")L"]|join(" ||")); }" and $><<'public static boolean isPowerOfTen(long input) { return '+(0..19).map{|i|" input == #{10**i}L"}*' ||'+'; }' являются escape-символами для 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}")} and @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" символы соответственно.

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 macro duplicates the current line and adds a 0 to the copy. The document.write(`<pre>${( _=>"0".repeat(19).replace(/./g,` || input == 1$\`L`).replace(` ||`,`public static boolean isPowerOfTen(long input) { return `)+`; }` )()}</pre>`); строка генерирует все шаблоны и :let @a='yyp/L^Mi0^[' :norm ipublic static boolean isPowerOfTen(long input) {^M return ^M || input == 1L^[18@a$a;^M} :3s/||/ / line, then uses :let @a='yyp$i0^[' :norm ipublic static boolean isPowerOfTen(long input) {^M return^M || input == 1L^[18@a$a;^M} :3s/||/ / создавать других.

a

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

indent == 1L ||answer||

ES6, 139 138 байт

:norm

Мне очень нравятся эти вопросы о создании треугольников. Примечание. Фрагмент включает верхний и нижний колонтитулы, но они не учитываются в подсчете байтов.

 

Egor Smirnov


Рег
22 Oct, 2020

Тем
84

Постов
193

Баллов
653
  • 26, Oct 2024
  • #10

Oracle SQL 9.2, 311 байт

a ||answer||

Перл 5 – 130 141

CR

РЕДАКТИРОВАТЬ: исправлено наличие точного отступа.

 

Slidex80


Рег
29 Jun, 2009

Тем
83

Постов
175

Баллов
630
  • 26, Oct 2024
  • #13

jq, 123 символа

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

^[

Пример запуска:

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

Он-лайн тест (Проходя мимо 0r18⁵*;@€⁶j“¢œḤḅg^NrÞḢ⁷ẉ»“⁵®UẆƓḃÐL⁴ṖịṛFþẈ¹9}¶ ƁḋȮ¦sẒẆd€Ḟɼ¿ỌṀP^µ\f@»;;“L;¶}” through URL is not supported – check Raw Output yourself.)

 

Apowcalay64


Рег
25 Oct, 2024

Тем
71

Постов
167

Баллов
562
  • 26, Oct 2024
  • #14

Javascript 175 байт

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

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

Довольно маленький. Теперь немного магии JavaScript, например, не нужны точки с запятой, переменные и т. д.:

f=p=>`public static boolean isPowerOfTen(long input) { return${[...Array(19)].map((x,i)=>` ${i?'||':' '} input == 1${'0'.repeat(i)}L`).join``}; }` document.body.innerHTML = '<pre>' + f() + '</pre>' ||answer||

Python (3.5) 137 136 байт

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

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

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

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

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

Негольфед:

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

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

 

Vahanbri


Рег
28 Oct, 2010

Тем
77

Постов
199

Баллов
614
  • 26, Oct 2024
  • #15

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

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

L`n || will only be 0 (and thus falsey) on the very first round (it's just slightly shorter than -join .

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

 

Данила2008


Рег
03 Jul, 2014

Тем
48

Постов
208

Баллов
468
  • 26, Oct 2024
  • #16

Перл 5, 137 байт

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

input == 1 ||answer||

CJam, 112 символов

18 ||answer||

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

0

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

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

 

Irinabel4


Рег
27 Jan, 2009

Тем
75

Постов
188

Баллов
593
  • 26, Oct 2024
  • #17
%

T-SQL 289, 277, 250, 249 байт Обновлять:

Спасибо @Bridge, я тоже нашел еще несколько мест :) Обновление2: Изменен CTE на подзапрос -27 символов :) Обновление3:

Еще одно пространство улетает в пыль @bridge :)

 

Sundragyht


Рег
07 Feb, 2009

Тем
65

Постов
208

Баллов
533
  • 26, Oct 2024
  • #18

Р, 185 байт

$(...)

играл в гольф

L;`n}" ||answer||

Негольфед

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

“‚Æ£‹ÒŒ€ˆPowerOfTen(“?“¢„î®) { «‡ “?19FN0›i" ||"?}’ î® == ’?N°э'L?N18Qi';,"}"?}"", operator does list cartesian product operation, for example 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}"; } Перл 6 (115 байт) 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}";} is a range operator that counts from 0). Strings can have code blocks with ipublic static boolean isPowerOfTen(long input) { return || input == 1L<esc>qyYpfLi0<esc>q16@yo}<esc>3Gxx дает степени десяти (от 10 в степени от 0 до 19, т.к.

(именно поэтому я избегаю первого экземпляра).

 

Xfq617skestSoky


Рег
27 Sep, 2009

Тем
63

Постов
210

Баллов
565
  • 26, Oct 2024
  • #19

Ява, 210/166

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

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

Консольный вывод (210):

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

Возврат строки (166):

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

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

YA#_("???????????????????????????????????????????????????????????????????????????????????????????????????????"f&bY7#b:c~

Пакетный, 230 208 206 205 байт select'public static boolean isPowerOfTen(long input) { return '||string_agg(' input == 1'||repeat('0',x)||'L',' ||')||'; }'from generate_series(0,18)x and reusing the subroutine for the line with the extra semicolon. Saved 2 3 bytes by removing unnecessary spaces.

 

Trouble


Рег
25 Apr, 2006

Тем
64

Постов
183

Баллов
523
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно