Go menghasilkan beberapa Java


14

Bos Anda ingin Anda menulis kode seperti ini:

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, di /codereview//a/117294/61929 )

yang efisien dan sebagainya, tetapi tidak menyenangkan untuk mengetik. Karena Anda ingin meminimalkan jumlah penekanan tombol yang harus Anda lakukan, Anda menulis program atau fungsi yang lebih pendek (atau metode) yang menampilkan fungsi ini untuk Anda (atau mengembalikan string ke keluaran). Dan karena Anda memiliki keyboard unicode full-range kustom Anda sendiri dengan 120.737 tombol yang diperlukan untuk semua unicode 8.0, kami menghitung karakter unicode, bukan penekanan tombol. Atau byte, jika bahasa Anda tidak menggunakan kode sumber unicode.

Setiap input program atau fungsi Anda memperhitungkan nilai Anda, karena Anda jelas harus mengetiknya juga.

Klarifikasi dan suntingan:

  • Menghapus 3 spasi tambahan setelah yang terakhir }
  • Menghapus satu spasi tambahan setelahnya return
  • Mengembalikan serangkaian output dari fungsi / metode tidak masalah

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

7
Anda mengatakan " kami menghitung karakter unicode ," tetapi kemudian Anda langsung mengatakan " Atau byte ." Yang mana?
Gagang Pintu

2
Apa pun yang Anda suka, yaitu yang memberi Anda skor terendah. Menambahkan byte untuk memungkinkan bahasa yang tidak menggunakan sumber teks.
Filip Haglund

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

4
05AB1E menggunakan windows CP1252, yang merupakan byte, bukan unicode. Saya mengincar aturan standar, tetapi saya diberi tahu bahwa saya salah sepanjang waktu.
Filip Haglund

Jawaban:


15

PostgreSQL, 158 karakter

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

Saya belum pernah melihat RDBMS digunakan sebagai jawaban kode golf ... manis! +1
Chris Cirefice

@ChrisCirefice SQL sebenarnya agak umum di situs ini. (Atau setidaknya lebih umum daripada yang mungkin diharapkan.)
Alex A.

@AlexA. Hm, well PCG adalah salah satu situs SE saya yang kurang sering dikunjungi, jadi saya belum pernah melihat jawaban SQL :)
Chris Cirefice

7

Vim 97 penekanan tombol

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

Yah, saya siap hari ini dengan vim memproduksi java, jadi mengapa tidak melanjutkan tren!


mengganti fLdengan $dapat menghemat penekanan tombol
Leaky Nun

Juga, baris ketiga input == 1Ltidak selaras dengan satu byte ...
Leaky Nun

Jadi yang terakhir xharus diubah menjadi r<sp>dan kemudian jumlah penekanan tombol tidak akan berubah
Leaky Nun

7

05AB1E , 99 97 96 94 93 87 byte

Kode:

“‚Æ£‹ÒŒ€ˆPowerOfTen(“?“¢„î®) {
 «‡
   “?19FN0›i"  ||"?}’ î® == ’?N°?'L?N18Qi';,"}"?}"",

Cobalah online!

Menggunakan pengodean CP-1252 .


7

CJam, 52 karakter

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

Cobalah online!

Tahap 1

Menggunakan karakter Unicode U + 10000 hingga U + 10FFFF, kita dapat menyandikan 20 bit dalam satu karakter. CJam menggunakan 16-bit karakter secara internal, sehingga masing-masing akan dikodekan sebagai pasangan pengganti , satu di kisaran dari U + D800 ke U + DBFF, diikuti oleh satu di kisaran dari U + DC00 ke U + DFFF.

Dengan mengambil bitwise DAN masing-masing pengganti dengan 1023, kami memperoleh 10 bit informasi yang dikodekan. Kita dapat mengonversi array yang dihasilkan dari basis 1024 ke basis 128 untuk mendekode string acak karakter Unicode di luar BMP menjadi string ASCII.

Kode melakukan hal berikut:

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.

Tahap 2

Proses pendekodean dari atas menghasilkan kode sumber berikut ( 98 byte ).

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

Cobalah online!

Kode melakukan hal berikut:

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

Anda mungkin mengharapkan situs SE seperti Yudaisme menjadi yang menguji dukungan unicode situs tersebut, tetapi ini gila: D
Filip Haglund

Saya dapat melihat persis dua karakter di antara tanda kutip. Bisakah Anda memposting hexdump?
Pavel

Anda benar-benar dapat melihat dua dari mereka? Saya tidak beruntung ... Mengenkripsi karakter sebagai UTF-8, hexdump akan terlihat seperti ini. tio.run/nexus/bash#AagAV///eHhkIC1nIDH//…
Dennis

6

Java, 217 215 220 219 192 byte

Golf:

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

Tidak Disatukan:

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

(jawaban pertama, wuhu)

Terima kasih!
-2 byte: user902383
-1 byte: Denham Coote

Perubahan:

  • tab yang digunakan, bukan spasi
  • melewatkan baris keluaran terakhir: 18 -> 19
  • dihapus lingkaran dalam
  • diubah dari pencetakan ke string yang kembali

4
batin Anda untuk loop tidak perlu tanda kurung
user902383

Gunakan sintaksis Java 8, juga memperpendek beberapa hal lain: ()->{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) Sekarang mengembalikan string daripada mencetak, tetapi itu lebih pendek.
Addison Crump

1
+1 untuk menulis program Java verbose untuk menghasilkan program Java yang lebih verbose.
Cyoce

alih-alih for(int i=1;i<19;i++)Anda dapat menulis for(int i=1;i++<19;)yang menyimpan byte
Denham Coote

Juga, nyatakan int i=1,k;dan kemudian Anda dapat menulis for(;i++<19;)danfor(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\}

Cobalah online!

Semua hardcoding string ini benar-benar memakan banyak byte , tetapi tidak ada yang bisa saya lakukan .

Pembaruan: Disimpan 3 byte dengan menggunakan string yang dikemas. Terima kasih @ user81655 untuk petunjuknya!


Anda dapat menggunakan string yang dikemas ...
user81655

Saya tidak tahu Pyth dan saya tidak yakin apakah ada cara untuk mengemas string penuh (program pengepakan akan selalu mengubahnya) tetapi mengemas rdan menyatukan nhasilnya dalam hal ini (98 byte).
user81655

@ user81655 Terima kasih, tidak tahu Pyth punya ini. :) Ini masuk akal untuk mengemas string besar pertama tho, biaya overhead yang Anda hasilkan membongkar tidak layak untuk string yang lebih kecil.
Denker

@ user81655 Saya tahu itu, tapi saya hitung 103 karakter. Bagaimana Anda bisa mencapai 97?
Denker

Ups, kesalahan saya, saya salah menghitung.
user81655

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

Hanya ada satu trik kecil yang terlibat. Cara mudah untuk menulis ini adalah:

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

dengan menggunakan string dengan 18 karakter pertama dari teks yang saya butuhkan, saya bisa menghilangkan Enumerable.Range yang panjang. Ini berfungsi karena string mengimplementasikan IEnumerable dan ada versi Select yang memberikan item (tidak diperlukan) dan indeks yang kita inginkan ke fungsi lambda.


1
@WashingtonGuedes Terima kasih
raggy

1
tolong tambahkan beberapa penjelasan
Eumel

1
Apakah CSI mendukung badan ekspresi? Jika demikian, { return ... }dapat diganti dengan =>....
mınxomaτ

Saat ini tidak di komputer jadi saya tidak bisa menguji ini. Apakah string kata demi kata terakhir lolos dari braket di dalamnya? Atau itu trik hebat yang saya tidak tahu? :)
Yytsi

4

PowerShell, 120 byte

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

Dua baris pertama hanyalah string literal, yang merupakan output apa adanya.

Baris ketiga dimulai dengan tiga spasi, dan berakhir dengan L;`n}"untuk menyelesaikan beberapa byte terakhir. Bit tengah di dalam blok skrip $(...)dibangun dengan for-looping %dari 0ke 18dan setiap iterasi membangun string yang dimulai dengan input == 1digabungkan dengan jumlah nol yang sesuai. Ini akan memuntahkan berbagai string. Kami kemudian -joinsetiap elemen array dengan L`n ||untuk mencapai pipa-baris baru. String besar itu adalah output dari blok skrip, yang dimasukkan secara otomatis ke tengah dan output.

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
Di ES7 Anda dapat menyimpan 9 byte dengan menggunakan ${10**i}alih-alih 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}");}

Cobalah online di sini .


Anda dapat mengurangi byte jika menggunakan nilai pengembalian 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

Jelly, 75 byte

(Ini adalah byte dalam codepage khusus Jelly .)

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

Coba di sini.

Penjelasan

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

Mungkin juga menggunakan alat yang tepat untuk pekerjaan itu.

Ini mengasumsikan bahwa autoindent, dll belum disetel. ^[dan masing-masing ^Madalah karakter pelarian ESCdan CRkarakter.

The amakro duplikat baris saat ini dan menambahkan 0 untuk menyalin. The :normgaris menghasilkan semua boilerplate dan indent == 1Lgaris, kemudian menggunakan auntuk membuat yang lain.

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

Jika spasi tambahan hasil sampel pada dua baris bukan salah ketik, inilah versi 126 byte yang menyertakannya.

: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: diperbaiki untuk memiliki indentasi yang tepat


Tidak perlu menggunakan tanda kurung di sekitar rentang. Sebagai gantinya akan menyenangkan untuk mereproduksi lekukan yang tepat.
manatwork

Terima kasih atas tanda kurung yang saya lupa. Saya sudah memperbaikinya untuk memiliki lekukan yang tepat.
ChatterOne

gBendera tidak perlu diganti. Juga Anda memiliki tunggal sebuah \ndalam string itu, Anda hanya dapat mencocokkan dan semuanya setelah itu: $s[$#s]=~s/\n.+/;\n}/. Tapi yang joinberbasis masih akan lebih pendek: pastebin.com/hQ61Adt8
manatwork

Terima kasih, tapi saya rasa tidak akan baik jika saya hanya menyalin dan menempelkan solusi Anda, jadi saya akan membiarkannya karena ini adalah upaya terbaik saya. Pada waktunya, saya akan menjadi lebih baik dalam bermain golf :-)
ChatterOne

2

ES6, 139 byte

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

Saya sangat suka pertanyaan generasi segitiga ini.


2

Kotlin, 194 193 karakter

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

Uji di http://try.kotlinlang.org/


Selamat datang di Programming Puzzles & Code Golf. Jawaban pertama yang bagus, tapi tolong tambahkan tautan ke penerjemah online atau tambahkan contoh tentang cara menjalankan program ini, sehingga orang lain dapat memverifikasinya. Namun, bersenang-senanglah di sini! :)
Denker

2

Ruby, 125 119 byte

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

Berkat manatwork untuk -6 byte!


Tidak banyak yang orisinal karena sebagian besar solusi melakukan hal ini, tetapi masih lebih pendek: pastebin.com/1ZGF0QTs
manatwork

2

jq, 123 karakter

(121 karakter kode + 2 opsi opsi baris perintah.)

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

Contoh dijalankan:

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

Tes online (Melewati -rURL tidak didukung - periksa sendiri Output Raw.)


1

Javascript 175 byte

Mari kita lakukan ini secara teratur

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

Cukup kecil. Sekarang, beberapa sihir javascript, seperti tidak ada titik koma yang diperlukan, atau tidak ada var, dll .:

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)

Bisakah Anda menjelaskan bagaimana sihir itu bekerja? :)
Marv

3
Javascript tidak peduli dengan titik koma, setidaknya sampai kata kunci (untuk, sementara, var, dll.) Tidak "menyentuh" ​​hal lain. Juga, jika Anda tidak menggunakan kata kunci var, Anda mendapatkan variabel global, yang merupakan fitur terburuk yang pernah saya lihat dalam bahasa pemrograman sejauh ini.
Bálint

@ Bálint. Mengapa ini menjadi fitur terburuk ?
dihapus

@WashingtonGuedes Anda tahu, sebagian besar bahasa mengingatkan Anda jika Anda salah menuliskan sesuatu di dalam suatu fungsi. Karena javascript menganggap itu seolah-olah Anda membuat variabel baru, itu tidak akan mengatakan apa-apa tentang itu.
Bálint

Juga, yang sama berlaku untuk = mengembalikan yang benar.
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}")

Versi sebelumnya

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

135 dengan 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

@ooooeeeeep kamu benar, penggunaan% r win 1 byte dan python 2 print(tanpa tanda kurung) menangkan yang lain
Erwan

0

ANSI-SQL, 252 karakter

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

Tidak Disatukan:

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

Bukan upaya serius, hanya menyodok entri Oracle SQL / T-SQL.


Untuk 40 karakter tambahan saya dapat menambahkan "dari dual" dan menjadikannya "Oracle SQL" entri.
user1361991

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

The i-1hanya akan 0 (dan dengan demikian falsey) pada putaran pertama (itu hanya sedikit lebih pendek darii!=1 .

Saran diterima!


0

Perl 5, 137 byte

Tidak didasarkan pada jawaban Perl sebelumnya, tetapi entah bagaimana lebih pendek. Saya percaya ini bisa dipersingkat lagi dengan mengurus "input" pertama di dalam loop, tapi saya belum mencoba apa pun (di tempat kerja 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 karakter

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

0

AWK + shell, 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}"}'

Pertanyaan itu memang mengatakan untuk menghitung semua yang harus Anda ketik. Ini memang memiliki bonus tambahan untuk dapat memilih berapa banyak baris yang akan ditempatkan dalam metode isPowersOfTen ketika bos mau tidak mau berubah pikiran.


Passing di sini-string lebih pendek dari perpipaan dari echo:awk '…'<<<18
manatwork

Saya tahu tentang di sini-file tetapi tidak di sini-string. Terimakasih atas infonya.
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,'')+';}'

Pembaruan: Terima kasih @Bridge, saya menemukan beberapa ruang lagi juga :)

Update2: Mengubah CTE menjadi subquery -27 chars :) Update3: Ruang lain menggigit debu @bridge :)


1
Saya dapat memangkas 7 lebih banyak ruang (282 byte) tanpa mengubah sisa kode: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, '')+';}'
Bridge

1
Sekarang saya melihat ke belakang, saya dapat melihat semua ruang ekstra di komentar asli saya! Saya telah menemukan satu ruang lagi yang dapat Anda singkirkan - yang segera sesudahnyaROW_NUMBER()
Jembatan

0

R, 185 byte

Golf

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

Tidak disatukan

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

Xoperator tidak mencantumkan operasi produk kartesius, misalnya 10 X** ^19memberikan daya sepuluh (dari 10 ke daya 0 hingga 19, seperti ^juga operator rentang yang dihitung dari 0). String dapat memiliki blok kode dengan {(itulah sebabnya saya melarikan diri dari contoh pertama itu).


0

Jawa, 210/166

Skor tergantung pada apakah mengembalikan input dari suatu fungsi memenuhi definisi 'output'.

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

Pengembalian string (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}";}

Versi yang dapat dibaca:

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

Batch, 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

Sunting: Disimpan 22 byte dengan menghindari pengulangan input ==dan menggunakan kembali subrutin untuk baris dengan titik koma tambahan. Disimpan 2 3 byte dengan menghapus spasi yang tidak perlu.


Apakah Anda membutuhkan ruang di sekitar ==?
Pavel

@Pavel Itu bukan kode; itu bagian dari output.
Dennis
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.