Hitung tip

16

Anda dan seorang teman berjalan ke bar. Bartender itu memperlakukan Anda dengan baik, sehingga Anda memutuskan untuk memberi tip padanya. Jadi, Anda mengeluarkan komputer saku tepercaya dan menulis program cepat untuk menghitung tip untuk Anda karena tidak memiliki kalkulator bawaan. Tapi tunggu! Kunci operator Anda rusak! Tugas Anda adalah menghitung tip 20% untuk jumlah input yang diberikan. Input tes akan berupa xx.xx misalnya 20,96. Berikut aturannya:

  • Tidak ada penggunaan berikut ini di operator bentuk matematika: + - * / %(Terima kasih Wally Barat)
  • Tidak menggunakan fungsi atau API bawaan
  • Tidak mengakses jaringan
  • Tidak ada penggunaan evalatau serupa
  • Tidak ada Kalkulator Windows (ya orang sudah menjawabnya sebelumnya)
  • Tidak ada fungsi tip bawaan (Bukan berarti bahasa apa pun akan memilikinya)

Output harus dibulatkan hingga dua tempat desimal.

Skor didasarkan pada panjang dalam byte.

-20% jika program Anda dapat menerima jumlah tip apa pun. Input untuk jumlah akan diberikan dalam bentuk xx misalnya 35 bukan 0,35

Milo
sumber
5
@ mniip: Kiat adalah jumlah uang ekstra aneh yang harus Anda bayar di restoran yang bukan bagian dari harga resmi. Saya tidak tahu apakah mereka melakukan itu di Rusia.
user2357112 mendukung Monica
5
Oh, generasi baru itu ... Saya lebih suka menggunakan kertas dan pena jika saya tidak bisa secara mental membagi angka dengan 5.
VisioN
4
@VisioN Catatan: membagi dengan lima sama dengan membagi dengan 10 lalu mengalikan dengan 2, dan keduanya harus operasi mental yang sangat mudah.
user12205
1
Dapatkah seseorang mengklarifikasi aturan: Apakah menggunakan operasi terlarang diizinkan jika Anda tidak menggunakan operator itu? Apakah penggandaan diperbolehkan jika Anda tidak menggunakan *?
Ypnypn
2
@ TheDoctor apakah ini benar-benar duplikat? Karena itu tidak menambahkan.
Milo

Jawaban:

18

Javascript 81

EDIT : Hasilnya sekarang pembulatan nyata, tidak terpotong.

Jangan gunakan matematika APA SAJA di sini, hanya manipulasi string dan operator bitwise.
Semua +char adalah string concatenation, atau string to float conversion.
Berfungsi untuk input dan output xx.xx dalam format (x) x.xx

s='00'+(prompt().replace('.','')<<1);(+s.replace(/(.*)(...)/,'$1.$2')).toFixed(2)

Trick menjelaskan: 20% dibagi 10 dan dikalikan 2.

  • Buat pembagian dengan 10 dengan menggerakkan titik ke kiri (manipulasi string)
  • Lipat gandakan setiap bagian dengan 2 dengan memindahkan bit ke kiri (operasi bitwise)
Michael M.
sumber
Ketika input 99.99, ini kembali 19.998, jadi itu tidak "dibulatkan ke dua tempat desimal" sesuai OP.
Geobits
2
Umm ini adalah solusi yang panjang, tetapi memiliki 12 upvotes. Apa yang terjadi dengan pemungutan suara kode-golf?
Justin
@ Quincunx Ya Anda benar, ini bukan kontes popularitas!
Mukul Kumar
Karena ini adalah kode-golf, saya mungkin tidak akan menang, tetapi ini tidak berarti bahwa orang tidak dapat menyukai solusi saya ... Seringkali, pemenang kode-golf bukanlah mereka yang paling banyak mendapat dukungan.
Michael M.
@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳, absolutly! Terima kasih telah menunjukkan ini. Diperbaiki sekarang :)
Michael M.
6

J (9 karakter)

Jawaban singkat dalam J:

^.(^.2)^~ 32
Thomas Baruchel
sumber
1
... dan saya tidak berbicara J. Apa katanya?
CousinCocaine
Dikatakan: menghitung 32 dinaikkan ke log daya (2); biasanya, eksponen berada di sebelah kanan^ tetapi di sini ~menunjukkan urutan harus dibalik; (^.2)adalah log (.2), ​​dan inisial ^.yang dieksekusi terakhir adalah logaritma dari semua yang dihitung dpreviously: demikian log (32 ^ log (.2))
Thomas Baruchel
4

Bash murni, 50 43 karakter

Cukup yakin ini akan dikalahkan, tapi ini awal:

a=$[10#${1/.}<<1]
echo ${a%???}.${a: -3:2}

Sesuai komentar:

  • /bukan operator divisi di sini, ini adalah bagian dari perluasan parameter substitusi pola
  • % bukan operator modulo di sini, ini adalah bagian dari ekspansi parameter
  • - bukan operator pengurangan di sini, ini adalah negasi, yang diizinkan sesuai komentar

Keluaran:

$ ./20pct.sh 0,96
.19
$ ./20pct.sh 20,96
4.19
$ ./20pct.sh 1020,96
204.19
$ 
digital Trauma
sumber
Saya pikir saya melihat garis miring di sana.
Milo
@Milo yang /merupakan bagian dari ekspansi parameter bash dan bukan operator divisi. Boleh atau tidak?
Digital Trauma
1
Saya akan mengizinkannya, ini bukan operator matematika dalam kasus ini ...
WallyWest
1
-3 bertindak sebagai negasi bukan pengurangan ... @Milo, Anda harus memperhitungkan negasi dan cara-cara lain agar operator ini dapat digunakan selain dari persamaan matematikanya ... misalnya + dapat digunakan sebagai concatenator dalam JavaScript. .. Bisakah saya memberi saran? Ubah "Tidak ada penggunaan operator berikut: + - * /%" menjadi "Tidak ada penggunaan operator berikut dalam bentuk matematika: + - * /%"
WallyWest
2
@WallyWest Untuk berperan sebagai advokat iblis, negasi di sini masih merupakan operator matematika. Mungkin "Tidak menggunakan operator berikut dalam bentuk matematika non-unary: + - * /%" ;-)
Digital Trauma
4

Python 98 * 0.8 = 78.4

d=`len('X'*int("{}{:>02}".format(*(raw_input()+".0").split('.')))*2)`;print'%s.%s'%(d[:-3],d[-3:])

Python 74 (tanpa bonus)

d=len('X'*int(raw_input().replace('.',''))*2);print'%s.%s'%(d[:-3],d[-3:])

Catatan

  • + digunakan untuk penggabungan string
  • * digunakan untuk membuat salinan string

Tidak disatukan

def tip():
    amount = raw_input()
    #Add an extra decimal point so that we can accept integer
    #amount
    amount += ".0"
    #Split the integer and decimal part
    whole, frac = amount.split('.')
    #Multiply amount by 100 :-)
    amount = "{}{:>02}".format(whole, frac)
    #Create amount copies of a character
    st = 'X'*amount
    #Double it
    st *= 2
    #Calculate the Length
    d = len(st)
    #Display the result as 3 decimal fraction
    print'%s.%s'%(d[:-3],d[-3:])

Catatan

Dalam semangat pertanyaan, saya percaya solusi berikut meskipun mengikuti semua aturan pertanyaan adalah penyalahgunaan

Python 41

print __import__("operator")(input(),0.2)

Akhirnya

Jika Anda bersikeras bahwa simbol matematika dilarang, dia adalah solusi 90 karakter

Python 90 (tanpa simbol matematika)

print' '.join(str(int(raw_input().replace(".",""))<<1)).replace(' ','.',1).replace(' ','')
Abhijit
sumber
1
Seperti yang sudah dikatakan, *dan +KUNCI rusak (apa pun yang Anda gunakan untuk).
Thomas Baruchel
2
@ ברוכאל: No use of the following in mathematical form operators: + - * / % (Thanks Wally West). Dengan kata lain, pertanyaan itu perlu diulang. Dan saya belum menggunakannya dalam bentuk matematika
Abhijit
OK, tetapi dalam kasus itu, downvote dari solusi APL tidak benar-benar adil, karena tidak ada solusi lain yang telah downvoted karena alasan itu.
Thomas Baruchel
Jawaban Anda akan memiliki masalah dengan jumlah uang sangat kecil, misalnya 0.05.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳
Anda dapat menggunakan `input`(termasuk backticks) alih-alih raw_input.
nyuszika7h
4

APL (9 karakter, kode baru dengan 7 karakter, diperbaiki dengan 13 karakter)

Hitung 20% ​​dari jumlah yang diberikan.

{⍟⍵*⍨*.2} 32

Dalam APL *adalah operator eksponensial.

Cobalah online .

Tetapi mengapa menggunakan fungsi untuk itu? Lihat versi baru ini:

⍟(*.2)* 32

Cobalah online .

Tolong, sebelum downvoting, *itu tidak dilarang sebagai KUNCI dan itu tidak berarti multiplikasi di sini.

OK, ini adalah versi pembulatan ke 2 desimal (Dyalog APL):

⎕PP←2⋄⍟(*.2)* 32.01
Thomas Baruchel
sumber
2
Eksponensial masih merupakan operasi matematika, dan *tidak diizinkan dalam bentuk matematika apa pun sesuai aturan tantangan.
Tony Ellis
Eksponensial tidak digunakan di sini dan solusi lain benar-benar menggunakannya, tetapi Anda benar mengenai fakta yang *dilarang sebagai kunci dan bukan sebagai makna matematisnya.
Thomas Baruchel
@ Tony H. Tolong, bisakah Anda menghapus downvote Anda, karena jelas semua komentar di solusi lain tampaknya akhirnya menerima KUNCI tersebut selama mereka tidak digunakan untuk operasi matematika terlarang di daftar awal.
Thomas Baruchel
1
@ ברוכאל Ini pemahaman saya bahwa penggunaan tanda bintang dengan cara apa pun yang berkaitan dengan makna matematika dilarang, yang mencakup eksponensial. Setiap jawaban lain sejauh ini yang menggunakan eksponen adalah dalam bahasa yang menggunakan tanda sisipan ( ^) untuk operator seperti itu, atau panggilan fungsi digunakan. Tidak ada spesifikasi oleh OP yang *dilarang hanya jika digunakan dalam konteks perkalian. Saya menduga akan sangat membantu jika OP memutuskan hal ini, untuk menyelesaikan salah satu dari kita yang salah mengartikan aturan tantangan dan untuk menghilangkan kebingungan.
Tony Ellis
1
Mungkin ×dan ÷diizinkan, itu tidak terdaftar.
marinus
4

R, 30 27 36 34

Diperbarui menjadi 2 angka desimal

Disimpan 2 karakter berkat plannapus

Membuat vektor dari 0 hingga x dan mengambil elemen ke-2.

a=function(x)round(seq(0,x,l=6)[2],2)

Contoh:

> a(20.36)
[1] 4.07

Penjelasan lebih lanjut:

seq(0,x,len=6)

menciptakan vektor dengan panjang 6 dari 0 hingga nilai input x, dengan nilai di antara spasi yang sama.

> seq(0,5,len=6)
[1] 0 1 2 3 4 5

Nilai pertama adalah 0%, 20% kedua, ketiga 40%, dll.

Keretakan
sumber
Tunggu apa ? Tolong beri rincian lebih lanjut tentang cara kerjanya bagi mereka (seperti saya) yang tidak tahu R.
Michael M.
@Michael memperbarui jawaban saya untuk menjelaskan kode
Rift
Solusi Anda tidak melakukan pembulatan.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳
@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ Anda benar (tetapi sebagian besar solusi tidak membulatkan apa pun). 9 karakter tambahan akan melakukan pembulatan "normal". Hanya mengumpulkan akan menjadi lebih sulit ...
Rift
@ Cepat: Saya telah menguji beberapa jawaban (kebanyakan Python, JS dan Perl, karena mudah didapat) dan kebanyakan dari mereka melakukan pembulatan. Namun, tidak satu pun dari mereka yang saya uji yang berhasil.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳
3

dc + sed + pipes (44 karakter)

Jawaban ketiga saya (satu APL, satu J, dan sekarang satu dengan yang lama dan terhormat dc).

dc -e 5o?p|sed -e 's/\(.\)$/.\1/'|dc -e 5i?p

Ini akan meminta input INTEGER dan menghitung 20% ​​dengan cara yang rumit. Input dikonversi ke basis 5 (mudah dilakukan dengan banyak alat lain tetapi tunggu ...); sebuah titik ditambahkan sebelum digit terakhir dengan sed (sayangnya, dc tidak dapat menangani string dengan sangat baik), dan MAKA, dc mengkonversi kembali dari basis 5 pada angka float (tidak semua alat dapat melakukan itu).

Thomas Baruchel
sumber
1
"Input INTEGER" tidak memenuhi spesifikasi. Saya pikir Anda dapat memperbaikinya dengan mengubah ekspresi sed Anda: dc -e 5o?p|sed 's/\(.\)\./.\1/'|dc -e 5i?p. Dengan ini dan menghapus seds -e, ini adalah 42. Tetapi hasilnya masih tidak spesifik (bukan 2 tempat desimal)
Digital Trauma
@DigitalTrauma. Kamu benar. Tetapi solusi ini sebenarnya lebih merupakan bukti konsep dan saya lebih tertarik dengan properti yang tidak biasa dari konversi basis di dc (dan juga di bc). Terima kasih atas komentar dan perbaikan Anda di sed.
Thomas Baruchel
2

Python, 88

Ini bukan tempat yang dekat pendek, tetapi ini menunjukkan bagaimana pembagian mental normal oleh lima harus dilakukan. Ini mengasumsikan bahwa input harus berupa xx.xx

import math
a,b=raw_input().split('.')
print'%.2f'%math.ldexp(float(a[0]+'.'+a[1]+b),1)

Atau untuk input dengan panjang berapa pun, diperlukan penambahan 3 karakter.

import math
a,b=raw_input().split('.')
print'%.2f'%math.ldexp(float(a[:-1]+'.'+a[-1]+b),1)

Penjelasan: Kami mengambil input sebagai string, lalu memindahkan titik desimal satu tempat ke depan (dibagi 10). Kami kemudian melemparkannya ke pelampung, dan menggunakan ldexpfungsi untuk melipatgandakannya dengan 2.

Perhatikan bahwa dalam jawaban ini, +operator rangkaian string, dan %digunakan untuk memformat print.

Jika Anda bersikeras untuk tidak menggunakan salah satu dari karakter ini, berikut adalah solusi 159 karakter:

import math
a,b=raw_input().split('.')
l=[a[0]]
l.append('.')
l.append(a[1])
l.append(b)
c=str(math.ldexp(float(''.join(l)),1))
print ''.join([c[0:2],c[2:4]])
pengguna12205
sumber
Sudah mengatakan untuk banyak jawaban lain, tapi saya benar-benar tidak berpikir itu +dan -diizinkan karena tombol-tombol rusak (apa pun artinya dalam potongan kode Anda).
Thomas Baruchel
@ ברוכאל: Lihat tanggapan saya atas komentar Anda dalam jawaban saya
Abhijit
Digunakan .split('.')dalam jawaban saya, cincang satu char
user80551
2

dc + sed - 45 * 0.8 = 36

(Terinspirasi oleh jawaban oleh ברוכאל )

  • Menangani jumlah tip (bilangan bulat atau float)

Contoh berjalan (input diterima melalui STDIN):

$ dc -e 5o?.0+p|sed 's/\(.\)\./.\1/'|dc -e 5i?p
42
8.400
$ dc -e 5o?.0+p|sed 's/\(.\)\./.\1/'|dc -e 5i?p
20.96
4.1920
devnull
sumber
The .0+ idea is great; I voted up for your solution inspired by mine, but some may tell you are using addition; maybe some workaround? I tried dc -e 9k5o?v2^p but it is 2 characters more.
Thomas Baruchel
@ברוכאל I didn't realize that the + even in this context might qualify as addition.
devnull
@ברוכאל I'll delete this one. Request you to modify your so that it could handle floats and qualify for -20%!
devnull
2

Mathematica, 19

Log[(E^.2)^Input[]]

No use of the mathematical operators of +, -, *, /, or %. Uses properties of logarithms to calculate the answer; when you simplify the expression, you get .2*Input[]

With the bonus (30 * 0.8 = 24):

Log[((E^.01)^Input[])^Input[]]

Input the percentage first, then the amount.

When you simplify the expression, you get Input[]*Input[]*.01.

Thanks to ברוכאל for help with shortening the code.

Justin
sumber
3
Apakah Anda benar-benar yakin itu tidak dapat disederhanakan? Buat saya Log[E^2]atau Log[E^Input[]]bisa ditulis lebih singkat. Bahkan 10^-1dapat ditulis .01(meskipun saya tidak menggunakan Mathematica tapi saya cukup yakin itu bisa). Seluruh ekspresi (E^10^-1)^Log[E^2]sepertinya seperti E^.2, bukan?
Thomas Baruchel
1

TI-89 Basic - 39 * 0.8 = 31.2

Input y:Input x:Disp ln(((e^y)^.01)^x))

Bekerja dengan memasukkan dua angka, kemudian menggunakan properti logaritma untuk menghitung x * y / 100.

Jika saya dapat menerima input dari penempatan dalam variabel global xdan y, maka ini jauh lebih pendek, untuk skor 17 * 0,8 = 13,6 :

ln(((e^y)^.01)^x)

Tanpa bonus ( 12 ):

ln((e^.2)^x)

But if it needs to be wrapped in a function, then this works (38 chars, for 30.4):

:f(x,y):Func:ln(((e^y)^.01)^x):EndFunc
Justin
sumber
Please, see my comments to your other solution (in Mathematica); this code can really be simplified much.
Thomas Baruchel
Input x,y ??? Works in 83/84.
Timtech
@Timtech Tidak berfungsi di 89, tapi mungkin saya bisa melakukan sesuatu seperti Input{x,y}(apakah 83/84 ln?)
Justin
@ Quincunx Ya, lihat jawaban baru saya.
Timtech
žr¹msmžr.n- Port tanpa malu-malu dari kode ini ke 05AB1E.
Magic Gurita Guci
1

PHP 107 * .8 = 85.6

tidak bisa menjalankan kode-golf dengan PHP, tapi setidaknya saya bisa beroperasi dengan string. menerima kedua angka sebagai argumen baris perintah.

<? @$r=strrev;unset($argv[0]);echo$r(substr_replace($r(str_replace('.','',array_product($argv)))),'.',2,0);

harus membalikkannya dua kali karena saya tidak bisa menggunakan -2 :(

Einacio
sumber
1

Python, 81 80 89 karakter

a,b=map(str,raw_input().split('.'));c=str(int(a+b)<<1).zfill(4);print c[:-3]+'.'+c[-3:-1]

Penjelasan

x = raw_input()       # say 20.96
a , b = x.split('.')  # a = 20 , b = 96
c = a + b             # c = '2096'      # string concatenation , multiplying by 100
d = int(c)<<1         # multiply by 2 by bitshift left , c = 4096
e = str(d).zfill(4)   # zfill pads 0's making the string 
                      # atleast 4 chars which is required 
                      # for decimal notation next

#     divide by 1000 (4) + . (4.) + fraction rounded to 2 decimals (4.09)
print        e[:-3]      +   '.'  +              e[-3:-1]

Secara teknis, ini curang karena memotong ke dua desimal daripada membulatkannya tetapi saya bisa berpendapat bahwa itu membulat (Lebih baik untuk Anda, kurang tip).

pengguna80551
sumber
Saya pikir Anda bisa melakukannya [-3:]daripada[-3:-1]
Justin
@ Quincunx Tidak bisa, -1 adalah untuk memotong dua desimal.
user80551
@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ Yap, perbaiki.
user80551
1

JavaScript 251 (pembatasan paksa: no +, -, *,? Atau% dengan cara apa pun)

Meskipun saya tahu ini tidak akan menang, saya pikir saya akan mencoba untuk mendapatkan poin brownies melalui mengambil pendekatan yang sangat ketat dan bahkan tidak berpikir tentang menggunakan operator terbatas dalam bentuk atau bentuk apa pun ... sebagai hasilnya, saya datang dengan keindahan ini ...

A=(x,y)=>{for(;x;)b=x^y,x=(a=x&y)<<1,y=b;return y};D=(x,y,i=x,j=0)=>{for(;i>=y;)i=A(i,A(~y,1)),j=A(j,1);return j};alert(parseFloat((x="00".concat(String(D(prompt().replace(".",""),5)))).substr(0,A(x.length,y=A(~2,1))).concat(".").concat(x.substr(y))))

Saya menggunakan operasi bitwise untuk membuat fungsi Add A, dan kemudian mulai chaining dari sana:

Fungsi pembagian integer Dmenggunakan serangkaian Penambahan Negatif (pengurangan dalam bentuk A(x,A(~y,1)lebih dari satu loop; sisanya adalah manipulasi string dan penggabungan sehingga untuk menghindari menggunakan +operator ...

Nomor harus diberikan dalam bentuk desimal dengan dua tempat desimal agar ini berfungsi ...

WallyWest
sumber
Ah, sekarang akan ... meskipun jika saya harus mematuhi aturan baru, saya harus memperluas itu ... 251 byte sekarang ...
WallyWest
1

Perl, 50 60 byte

$_=<>;s|\.||;$_<<=1;$_="00$_";m|\d{3}$|;printf'%.2f',"$`.$&"

Masukan diharapkan pada STDIN. Itu harus mengandung pemisah desimal dengan dua digit desimal. Outputnya ditulis ke STDOUT.

Pembaruan: Langkah ini $_<<=1menghapus nol terkemuka. Karenanya m|\d{3}$|tidak akan cocok dengan tagihan <1. Oleh karena itu sepuluh byte $_="00$ditambahkan, Sekarang genap0.00 berfungsi.

Contoh:

  • Input:, 20.96output:4.19
  • Input:, 12.34output:2.47

Versi tidak disatukan:

$_=<>;
s|\.||; # multiply by 100
$_ <<= 1; # multiply by 2
$_="00$_";
m|\d{3}$|; # divide by 1000
printf '%.2f'," $`.$&"

Pertama nomornya dibaca dari STDIN. Kemudian titik desimal dihapus, yang dikalikan dengan 100. Kemudian jumlahnya dua kali lipat oleh operator yang menggeser. Kemudian titik desimal dimasukkan kembali dan hasilnya dicetak dan dibulatkan menjadi dua digit desimal.

50 byte, jika tagihan ≥ 1:

Jika x.xxlebih besar atau sama dari 1.00, maka 10 byte dapat dihapus:

$_=<>;s|\.||;$_<<=1;m|\d{3}$|;printf'%.2f',"$`.$&"
Heiko Oberdiek
sumber
@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳: Terima kasih, perbaiki sekarang.
Heiko Oberdiek
1

JavaScript (ES6) (Regex) 142

Regex hebat dan dapat melakukan banyak hal. Ia bahkan bisa mengerjakan matematika!

a=('x'.repeat(prompt().replace('.', ''))+'xxxx').match(/^((x*)\2{99}(x{0,99}))\1{4}x{0,4}$/);c=a[3].length;alert(a[2].length+'.'+(c<10?'0'+c:c))

Versi yang dapat dibaca:

function tip(m) {
    var s = 'x'.repeat(m.replace('.', '')) + 'xxxx';
    var a = s.match(/^((x*)\2{99}(x{0,99}))\1{4}x{0,4}$/);
    var c = a[3].length;
    if (c < 10) c = '0' + c;
    return a[2].length + '.' + c;
}

The tip()mengharapkan fungsi String argumen, bukan Nomor.

Semua contoh *, /, +tidak berhubungan dengan operasi matematika.

  • + adalah rangkaian string dalam semua kasus yang digunakan.
  • * adalah bagian dari sintaks RegExp
  • / adalah pembatas dari literal RegExp

Input harus digunakan .sebagai titik desimal, dan harus ada 2 digit setelah titik desimal.

Cuplikan Stack

<button onclick = "a=('x'.repeat(prompt().replace('.', ''))+'xxxx').match(/^((x*)\2{99}(x{0,99}))\1{4}x{0,4}$/);c=a[3].length;alert(a[2].length+'.'+(c<10?'0'+c:c))">Try it out</button>

n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳
sumber
0

Haskell 32 Chars -20% = 25,6 Chars

t y x=log $(^x)$(**0.01)$ exp y

Menyalahgunakan fakta bahwa eksponen menjadi multiplikasi dalam logaritma.

PyRulez
sumber