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
sumber
0==Math.log10(input)%1
while(input%10==0) input/=10; return input == 1;
Jawaban:
PostgreSQL, 158 karakter
sumber
Vim 97 penekanan tombol
Yah, saya siap hari ini dengan vim memproduksi java, jadi mengapa tidak melanjutkan tren!
sumber
fL
dengan$
dapat menghemat penekanan tombolinput == 1L
tidak selaras dengan satu byte ...x
harus diubah menjadir<sp>
dan kemudian jumlah penekanan tombol tidak akan berubah05AB1E ,
999796949387 byteKode:
Cobalah online!
Menggunakan pengodean CP-1252 .
sumber
CJam, 52 karakter
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:
Tahap 2
Proses pendekodean dari atas menghasilkan kode sumber berikut ( 98 byte ).
Cobalah online!
Kode melakukan hal berikut:
sumber
Java,
217215220219192 byteGolf:
Tidak Disatukan:
(jawaban pertama, wuhu)
Terima kasih!
-2 byte: user902383
-1 byte: Denham Coote
Perubahan:
sumber
()->{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.for(int i=1;i<19;i++)
Anda dapat menulisfor(int i=1;i++<19;)
yang menyimpan byteint i=1,k;
dan kemudian Anda dapat menulisfor(;i++<19;)
danfor(k=0;k++<i;)
Pyth,
118106103 byteCobalah 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!
sumber
r
dan menyatukann
hasilnya dalam hal ini (98 byte).C # (CSI)
181180179 byteHanya ada satu trik kecil yang terlibat. Cara mudah untuk menulis ini adalah:
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.
sumber
{ return ... }
dapat diganti dengan=>...
.PowerShell, 120 byte
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%
dari0
ke18
dan setiap iterasi membangun string yang dimulai denganinput == 1
digabungkan dengan jumlah nol yang sesuai. Ini akan memuntahkan berbagai string. Kami kemudian-join
setiap elemen array denganL`n ||
untuk mencapai pipa-baris baru. String besar itu adalah output dari blok skrip, yang dimasukkan secara otomatis ke tengah dan output.sumber
Javascript,
172157152150148 byteTampilkan cuplikan kode
sumber
${10**i}
alih-alih1${'0'.repeat(i)}
.C,
158155 byteCobalah online di sini .
sumber
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);}
Jelly, 75 byte
(Ini adalah byte dalam codepage khusus Jelly .)
Coba di sini.
Penjelasan
sumber
Vimscript, 120 byte
Mungkin juga menggunakan alat yang tepat untuk pekerjaan itu.
Ini mengasumsikan bahwa autoindent, dll belum disetel.
^[
dan masing-masing^M
adalah karakter pelarianESC
danCR
karakter.The
a
makro duplikat baris saat ini dan menambahkan 0 untuk menyalin. The:norm
garis menghasilkan semua boilerplate danindent == 1L
garis, kemudian menggunakana
untuk membuat yang lain.Jika spasi tambahan hasil sampel pada dua baris bukan salah ketik, inilah versi 126 byte yang menyertakannya.
sumber
Oracle SQL 9.2, 311 byte
sumber
Perl 5 -
130141EDIT: diperbaiki untuk memiliki indentasi yang tepat
sumber
g
Bendera tidak perlu diganti. Juga Anda memiliki tunggal sebuah\n
dalam string itu, Anda hanya dapat mencocokkan dan semuanya setelah itu:$s[$#s]=~s/\n.+/;\n}/
. Tapi yangjoin
berbasis masih akan lebih pendek: pastebin.com/hQ61Adt8ES6, 139 byte
Saya sangat suka pertanyaan generasi segitiga ini.
sumber
Kotlin,
194193 karakterUji di http://try.kotlinlang.org/
sumber
Ruby,
125119 byteBerkat manatwork untuk -6 byte!
sumber
jq, 123 karakter
(121 karakter kode + 2 opsi opsi baris perintah.)
Contoh dijalankan:
Tes online (Melewati
-r
URL tidak didukung - periksa sendiri Output Raw.)sumber
Javascript 175 byte
Mari kita lakukan ini secara teratur
Cukup kecil. Sekarang, beberapa sihir javascript, seperti tidak ada titik koma yang diperlukan, atau tidak ada var, dll .:
sumber
Python (3.5)
137136 byteVersi sebelumnya
sumber
print "public static boolean isPowerOfTen(long input) {\n return\n %s;\n}"%"\n || ".join("input == %r"%10L**i for i in range(19))
print
(tanpa tanda kurung) menangkan yang lainANSI-SQL, 252 karakter
Tidak Disatukan:
Bukan upaya serius, hanya menyodok entri Oracle SQL / T-SQL.
sumber
JavaScript (Node.js), 156 byte
The
i-1
hanya akan 0 (dan dengan demikian falsey) pada putaran pertama (itu hanya sedikit lebih pendek darii!=1
.Saran diterima!
sumber
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)
sumber
CJam, 112 karakter
sumber
AWK + shell, 157 byte
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.
sumber
echo
:awk '…'<<<18
T-SQL
289,277,250, 249 bytePembaruan: Terima kasih @Bridge, saya menemukan beberapa ruang lagi juga :)
Update2: Mengubah CTE menjadi subquery -27 chars :) Update3: Ruang lain menggigit debu @bridge :)
sumber
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 byte
Golf
Tidak disatukan
sumber
Perl 6 (115 byte)
X
operator tidak mencantumkan operasi produk kartesius, misalnya10 X** ^19
memberikan 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).sumber
Jawa, 210/166
Skor tergantung pada apakah mengembalikan input dari suatu fungsi memenuhi definisi 'output'.
Output konsol (210):
Pengembalian string (166):
Versi yang dapat dibaca:
sumber
Batch,
230208206205 byteSunting: Disimpan 22 byte dengan menghindari pengulangan
input ==
dan menggunakan kembali subrutin untuk baris dengan titik koma tambahan. Disimpan23 byte dengan menghapus spasi yang tidak perlu.sumber
==
?