Tạo một số Java


14

Sếp của bạn muốn bạn viết mã như thế này:

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, tại /codereview//a/117294/61929 )

đó là hiệu quả và như vậy, nhưng không phải là thú vị để gõ. Vì bạn muốn giảm thiểu số lần nhấn phím bạn phải thực hiện, bạn viết một chương trình hoặc hàm (hoặc phương thức) ngắn hơn để xuất hàm này cho bạn (hoặc trả về một chuỗi cho đầu ra). Và vì bạn có bàn phím unicode toàn dải tùy chỉnh rất riêng của mình với tất cả 120.737 phím cần thiết cho tất cả các unicode 8.0, chúng tôi đếm các ký tự unicode, thay vì nhấn phím. Hoặc byte, nếu ngôn ngữ của bạn không sử dụng mã nguồn unicode.

Bất kỳ đầu vào chương trình hoặc chức năng của bạn đều được tính vào điểm số của bạn, vì rõ ràng bạn cũng phải nhập nó vào.

Làm rõ và chỉnh sửa:

  • Đã xóa 3 dấu cách sau lần cuối }
  • Đã xóa một dấu cách đơn sau return
  • Trả về một chuỗi đầu ra từ một hàm / phương thức là ok

12
0==Math.log10(input)%1
SuperJedi224

7
Bạn nói " chúng tôi đếm các ký tự unicode ", nhưng sau đó bạn ngay lập tức nói " Hoặc byte ". Đó là cái nào
Doorknob

2
Bất cứ điều gì bạn thích, tức là người cho bạn điểm thấp nhất. Đã thêm byte để cho phép các ngôn ngữ không sử dụng nguồn văn bản.
Filip Haglund

1
while(input%10==0) input/=10; return input == 1;
PSkocik

4
05AB1E sử dụng windows CP1252, là byte, không phải unicode. Tôi đang nhắm đến các quy tắc tiêu chuẩn, nhưng tôi được nói rằng tôi luôn luôn sai.
Filip Haglund

Câu trả lời:


15

PostgreSQL, 158 ký tự

select'public static boolean isPowerOfTen(long input) {
  return
   '||string_agg(' input == 1'||repeat('0',x)||'L','
  ||')||';
}'from generate_series(0,18)x

Tôi chưa bao giờ thấy một RDBMS được sử dụng như một câu trả lời golf mã ... ngọt ngào! +1
Chris Cirefice 4/2/2016

@ChrisCirefice SQL thực sự hơi phổ biến trên trang web này. (Hoặc ít nhất là phổ biến hơn người ta có thể mong đợi.)
Alex A.

@AlexA. Hừm, PCG là một trong những trang SE ít được sử dụng của tôi, vì vậy tôi chưa bao giờ thấy câu trả lời SQL :)
Chris Cirefice 4/2/2016

7

Tổ hợp phím Vim 97

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

Chà, hôm nay tôi đang bắt đầu với vim sản xuất java, vậy tại sao không tiếp tục xu hướng!


thay thế fLbằng $có thể giúp bạn tiết kiệm tổ hợp phím
Leaky Nun

Ngoài ra, dòng thứ ba input == 1Lbị sai lệch bởi một byte ...
Leaky Nun

Vì vậy, lần cuối cùng xnên được thay đổi thành r<sp>và sau đó số lần nhấn phím sẽ không thay đổi
Leaky Nun


7

CJam, 52 ký tự

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

Hãy thử trực tuyến!

Giai đoạn 1

Sử dụng các ký tự Unicode U + 10000 đến U + 10FFFF, chúng ta có thể mã hóa 20 bit trong một ký tự. CJam sử dụng các ký tự 16 bit bên trong, do đó, mỗi ký tự sẽ được mã hóa thành một cặp thay thế , một trong phạm vi từ U + D800 đến U + DBFF, tiếp theo là một trong phạm vi từ U + DC00 đến U + DFFF.

Bằng cách lấy bit AND của mỗi thay thế bằng 1023, chúng ta thu được 10 bit thông tin mà nó mã hóa. Chúng ta có thể chuyển đổi mảng kết quả từ cơ sở 1024 sang cơ sở 128 để giải mã một chuỗi ký tự Unicode tùy ý bên ngoài BMP thành chuỗi ASCII.

Mã này làm như sau:

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.

Giai đoạn 2

Quá trình giải mã từ trên mang lại mã nguồn sau ( 98 byte ).

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

Hãy thử trực tuyến!

Mã này làm như sau:

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

Bạn có thể mong đợi một trang SE như Do Thái giáo là những trang đang thử nghiệm sự hỗ trợ unicode của trang này, nhưng điều này thật điên rồ: D
Filip Haglund

Tôi có thể thấy chính xác hai trong số các ký tự giữa các dấu ngoặc kép. Bạn có thể đăng một hexdump?
Pavel

Bạn thực sự có thể nhìn thấy hai trong số họ? Tôi không có may mắn như vậy ... Mã hóa các ký tự như UTF-8, hexdump sẽ trông như thế này. tio.run/nexus/bash#AagAV///eHhkIC1nIDH// Đổi
Dennis

6

Java, 217 215 220 219 192 byte

Chơi gôn

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

Ung dung:

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

(câu trả lời đầu tiên, wuhu)

Cảm ơn!
-2 byte: user902383
-1 byte: Denham Coote

Thay đổi:

  • sử dụng các tab thay vì dấu cách
  • bỏ lỡ dòng đầu ra cuối cùng: 18 -> 19
  • loại bỏ vòng lặp bên trong
  • thay đổi từ in sang chuỗi trả về

4
vòng lặp bên trong của bạn không cần dấu ngoặc
user902383

Sử dụng cú pháp Java 8, cũng rút ngắn một số nội dung khác: ()->{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 byte) Bây giờ trả về chuỗi thay vì in, nhưng đó là ngắn hơn.
Addison Crump

1
+1 để viết chương trình Java dài dòng để tạo chương trình Java dài dòng hơn.
Cyoce

thay vì for(int i=1;i<19;i++)bạn có thể viết for(int i=1;i++<19;)để tiết kiệm một byte
Denham Coote

Ngoài ra, khai báo int i=1,k;và sau đó bạn có thể viết for(;i++<19;)for(k=0;k++<i;)
Denham Coote

4

Pyth, 118 106 103 byte

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

Hãy thử trực tuyến!

Tất cả mã hóa chuỗi này thực sự ăn rất nhiều byte , nhưng tôi không thể làm gì về nó .

Cập nhật: Đã lưu 3 byte bằng cách sử dụng chuỗi đóng gói. Cảm ơn @ user81655 cho gợi ý!


Bạn có thể sử dụng các chuỗi được đóng gói ...
user81655

Tôi không biết Pyth và tôi không chắc có cách nào để đóng gói chuỗi đầy đủ không (chương trình đóng gói sẽ luôn thay đổi nó) nhưng đóng gói rvà ghép các nkết quả trong điều này (98 byte).
dùng81655

@ user81655 Cảm ơn, không biết Pyth đã có cái này. :) Chỉ có ý nghĩa khi đóng gói chuỗi lớn tho đầu tiên, chi phí bạn tạo ra giải nén biểu mẫu không xứng đáng với chuỗi nhỏ hơn.
Denker

@ user81655 Tôi biết điều đó, nhưng tôi đếm được 103 ký tự. Làm thế nào bạn có được đến 97?
Denker

Rất tiếc, lỗi của tôi, tôi đã đếm sai.
dùng81655

4

C # (CSI) 181 180 179 byte

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

Chỉ có một mẹo nhỏ liên quan. Cách thẳng về phía trước để viết này sẽ là:

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

bằng cách sử dụng chuỗi có 18 ký tự đầu tiên của văn bản mà tôi cần bằng mọi cách tôi có thể thoát khỏi Enumerable.Range dài. Điều này hoạt động vì chuỗi thực hiện IEnumerable và có một phiên bản Chọn để trao vật phẩm (không cần thiết) và chỉ mục mà chúng ta muốn cho hàm lambda.


1
@WashingtonGuedes Cảm ơn
rách rưới

1
xin vui lòng thêm một số lời giải thích
Eumel

1
CSI có hỗ trợ các cơ quan biểu hiện không? Nếu vậy, { return ... }có thể được thay thế bằng =>....
mınxomaτ

Hiện tại không có trên máy tính nên tôi không thể kiểm tra điều này. Chuỗi nguyên văn cuối cùng có thoát khỏi dấu ngoặc bên trong nó không? Hay đó là một mẹo hay mà tôi không biết? :)
Yytsi

4

PowerShell, 120 byte

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

Hai dòng đầu tiên chỉ đơn giản là chuỗi ký tự, là đầu ra nguyên trạng.

Dòng thứ ba bắt đầu bằng ba khoảng trắng và kết thúc bằng L;`n}"để kết thúc vài byte cuối cùng. Bit giữa bên trong khối tập lệnh $(...)được xây dựng bằng cách lặp %từ và 0đến 18mỗi lần lặp xây dựng một chuỗi bắt đầu bằng input == 1nối với số 0 tương ứng. Điều này sẽ nhổ ra một chuỗi các chuỗi. Chúng tôi sau đó -jointừng phần tử của mảng với L`n ||để đạt được các đường ống mới. Chuỗi lớn đó là đầu ra của khối tập lệnh, được chèn tự động vào giữa và đầu ra.

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 byte

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


2
Trong ES7, bạn có thể lưu 9 byte bằng cách sử dụng ${10**i}thay vì 1${'0'.repeat(i)}.
Neil

3

C, 158 155 byte

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

Hãy thử trực tuyến tại đây .


Bạn có thể tắt một byte nếu bạn sử dụng giá trị trả về của 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/2016

3

Thạch, 75 byte

(Đây là các byte trong bảng mã tùy chỉnh của Jelly .)

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

Hãy thử nó ở đây.

Giải trình

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 byte

Cũng có thể sử dụng các công cụ phù hợp cho công việc.

Điều này giả định rằng autoindent, vv chưa được thiết lập. ^[^Mlà nhân vật thoát cho ESCCR ký tự tương ứng.

Các avĩ mô bản sao dòng hiện tại và bổ sung thêm một 0 để sao chép. Các :normdòng tạo ra tất cả các soạn sẵn và các indent == 1Ldòng, sau đó sử dụng ađể tạo ra những người khác.

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

Trong trường hợp khoảng trắng theo sau, đầu ra mẫu có hai lỗi chính tả, đây là phiên bản 126 byte bao gồm chúng.

: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 byte

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"

EDIT: cố định để thụt chính xác


Không cần sử dụng dấu ngoặc đơn trong phạm vi. Thay đổi sẽ là tốt đẹp để tái tạo thụt chính xác.
manatwork

Cảm ơn các dấu ngoặc đơn mà tôi quên. Tôi đã sửa nó để có vết lõm chính xác.
ChatterOne

Không cần gcờ cho sự thay thế. Ngoài ra, khi bạn có một \nchuỗi trong chuỗi đó, bạn có thể chỉ cần khớp nó và mọi thứ sau chuỗi : $s[$#s]=~s/\n.+/;\n}/. Nhưng một cái joindựa trên vẫn sẽ ngắn hơn: pastebin.com/hQ61Adt8
manatwork

Cảm ơn bạn, nhưng tôi không nghĩ nó sẽ tốt nếu tôi chỉ sao chép và dán giải pháp của bạn, vì vậy tôi sẽ chỉ để nó như là nỗ lực tốt nhất của riêng tôi. Trong thời gian, tôi sẽ chơi golf tốt hơn :-)
ChatterOne

2

ES6, 139 byte

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

Tôi rất thích những câu hỏi thế hệ tam giác.


2

Kotlin, 194 193 ký tự

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

Kiểm tra nó tại http://try.kotlinlang.org/


Chào mừng bạn đến với Câu đố lập trình & Code Golf. Câu trả lời đầu tiên rất hay, nhưng vui lòng thêm một liên kết đến một thông dịch viên trực tuyến hoặc thêm một ví dụ về cách chạy chương trình này, để những người khác có thể xác minh nó. Tuy nhiên, có một thời gian tuyệt vời ở đây! :)
Denker


2

jq, 123 ký tự

(Mã 121 ký tự + tùy chọn dòng lệnh 2 ký tự.)

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

Chạy mẫu:

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

Kiểm tra trực tuyến (Chuyển -rqua URL không được hỗ trợ - hãy tự kiểm tra Đầu ra thô.)


1

Javascript 175 byte

Hãy làm điều này thường xuyên

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

Khá nhỏ. Bây giờ, một số phép thuật javascript, như không cần dấu chấm phẩy, hoặc không có var, v.v.:

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ạn có thể giải thích làm thế nào ma thuật hoạt động? :)
Marv

3
Javascript không quan tâm đến dấu chấm phẩy, ít nhất là cho đến khi các từ khóa (for, while, var, v.v.) không "chạm" vào bất cứ thứ gì khác. Ngoài ra, nếu bạn không sử dụng từ khóa var, bạn sẽ nhận được các biến toàn cục, đó là tính năng tồi tệ nhất tôi từng thấy trong một ngôn ngữ lập trình cho đến nay.
Bálint

@ Bálint. Tại sao đây sẽ là tính năng tồi tệ nhất ?
đã xóa

@WashingtonGuedes Bạn biết đấy, hầu hết các ngôn ngữ đều nhắc nhở bạn nếu bạn hiểu sai điều gì đó bên trong một chức năng. Bởi vì javascript lấy điều đó như thể bạn đã tạo một biến hoàn toàn mới, nên nó sẽ không nói gì về điều đó.
Bálint

Ngoài ra, cùng một áp dụng cho = trả về một sự thật.
Bálint

1

Python (3.5) 137 136 byte

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

Phiên bản trước

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

135 với 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 bạn nói đúng, việc sử dụng% r win 1 byte và python 2 print(không có dấu ngoặc đơn) sẽ giành được một cái khác
Erwan

0

ANSI-SQL, 252 ký tự

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

Ung dung:

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

Không phải là một nỗ lực nghiêm túc, chỉ chọc vào các mục Oracle SQL / T-SQL.


Đối với 40 ký tự bổ sung, tôi có thể thêm "từ kép" và biến nó thành mục nhập "Oracle SQL".
dùng1361991

0

JavaScript (Node.js), 156 byte

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-1chí chỉ là 0 (và do đó là falsey) ngay từ vòng đầu tiên (nó chỉ ngắn hơn một chút so vớii!=1 .

Đề nghị chào mừng!


0

Perl 5, 137 byte

Không dựa trên câu trả lời Perl trước đó, nhưng nó bằng cách nào đó ngắn hơn. Tôi tin rằng nó có thể được rút ngắn lại một lần nữa bằng cách quan tâm đến "đầu vào" đầu tiên bên trong vòng lặp, nhưng tôi chưa thử bất cứ điều gì (tại atm 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 ký tự

"public static boolean isPowerOfTen(long input) {
  return
    input == 1"19,"0"a19*.*"L
  || input == 1"*"L;
}"

0

Vỏ AWK +, 157 byte

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

Câu hỏi đã nói để đếm tất cả mọi thứ bạn sẽ phải gõ. Điều này có thêm phần thưởng khi có thể chọn số lượng dòng sẽ được đặt trong phương thức isPowersOfTen khi ông chủ chắc chắn thay đổi ý định.


Vượt qua một chuỗi ở đây ngắn hơn đường ống từ echo:awk '…'<<<18
manatwork 4/2/2016

Tôi biết về tập tin ở đây nhưng không phải ở đây - chuỗi. Cảm ơn bạn về thông tin.
Robert Benson

0

T-SQL 289 , 277 , 250 , 249 byte

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

Cập nhật: Cảm ơn @Bridge, tôi cũng tìm thấy một vài khoảng trống nữa :)

Update2: Đã thay đổi CTE thành truy vấn con -27 chars :) Update3: Một không gian khác cắn bụi @bridge :)


1
Tôi đã có thể cắt bớt 7 khoảng trống (282 byte) mà không thay đổi phần còn lại của mã: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, '')+';}'
Cầu

1
Bây giờ tôi nhìn lại tôi có thể thấy tất cả các khoảng trắng thừa trong nhận xét ban đầu của mình! Tôi đã tìm thấy thêm một không gian mà bạn có thể thoát khỏi - ngay sau đóROW_NUMBER()
Cầu

0

R, 185 byte

Chơi gôn

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

Ung dung

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

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

Xtoán tử liệt kê hoạt động của sản phẩm cartesian, ví dụ, 10 X** ^19cho phép lũy thừa mười (từ 10 đến lũy thừa từ 0 đến 19, như ^là một toán tử phạm vi được tính từ 0). Các chuỗi có thể có các khối mã với {(đó là lý do tại sao tôi thoát khỏi phiên bản đầu tiên của nó).


0

Java, 210/1661

Điểm số phụ thuộc vào việc trả về đầu vào từ một hàm có đáp ứng định nghĩa của 'đầu ra' hay không.

Bảng điều khiển đầu ra (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}");}}

Trả về chuỗi (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}";}

Phiên bản dễ đọc:

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

Hàng loạt, 230 208 206 205 byte

@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

Chỉnh sửa: Đã lưu 22 byte bằng cách tránh lặp lại input ==và sử dụng lại chương trình con cho dòng có thêm dấu chấm phẩy. Đã lưu 2 3 byte bằng cách loại bỏ các khoảng trống không cần thiết.


Bạn có cần không gian xung quanh ==?
Pavel

@Pavel Đó không phải là mã; nó là một phần của đầu ra.
Dennis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.