Output Pi tanpa matematika [ditutup]

56

Dalam sesedikit mungkin byte, tugas Anda adalah menulis sebuah program yang menghasilkan:

3.14

Dalam perayaan hari Pi yang terlambat tentu saja! :)

Aturan

Anda tetap bisa melakukannya, tetapi ada beberapa batasan.

  • Anda tidak boleh menggunakan operasi aritmatika di mana pun dalam program Anda. Ini termasuk +, -, *, /, %, ^(eksponensial), dll ... ini juga termasuk incrementing (biasanya ++), decrementing ( --), operasi bitwise , dan dibangun dalam fungsi yang dapat digunakan sebagai pengganti seperti sum(), prod(), mod(), double(), pow(), sqrt(), inc(),, dec()dll ... (kebijaksanaan penulis)
  • Digit 3,, 1dan 4mungkin tidak muncul di mana pun dalam kode Anda.
  • Anda mungkin tidak menggunakan ditentukan sebelumnya variabel / konstanta yang bahasa Anda mungkin memiliki sebagai pengganti 3, 1dan 4. (Kebijaksanaan penulis)
  • Anda juga mungkin tidak menggunakan fungsi trigonometri seperti sin(), cos(), tan(), arcsin(), arccos(), arctan(), sinh(), cosh(), tanh(), dll ... (kebijaksanaan Penulis)
  • Anda tidak boleh menggunakan nilai Pi (atau 3.14) bawaan atau yang sudah ditentukan sebelumnya . Tidak ada permintaan web .
  • Program Anda tidak dapat meminta input apa pun (selain menjalankannya).
  • 3.14adalah satu - satunya hal yang dapat Anda hasilkan, itu tidak dapat menjadi bagian dari keluaran yang lebih panjang / lebih besar ..

Pemenang

Jawaban dengan jumlah byte paling sedikit pada tanggal 18 April menang. Semoga berhasil!

Menantikan jawaban cerdas dari pikiran pintar! Malbolge siapa pun? : P

kukac67
sumber
3
Anda mungkin ingin mengklarifikasi bahwa itu ^adalah operator eksponensial, bukan operator XOR bitwise.
ace_HongKongIndependence
2
Apakah operator bitwise diizinkan?
ProgramFOX
1
@ProgramFOX Nah, mereka dapat digunakan sebagai pengganti untuk operasi normal, jadi, tidak. Tidak diizinkan Saya akan mengedit posting.
kukac67
1
Permintaan web diizinkan?
desir
7
@swish: Saya tidak akan menggunakan permintaan web, karena itu termasuk dalam daftar "celah" Standar yang tidak lagi lucu
ProgramFOX

Jawaban:

25

CJam - 8 6

S`,'.E

CJam adalah bahasa baru yang saya kembangkan, mirip dengan GolfScript - http://sf.net/p/cjam .
Berikut penjelasannya:

Sadalah variabel yang diinisialisasi ke spasi ("")
`menghasilkan representasi string dari nilai terakhir - yang persis " "(3 karakter)
,menghitung panjang string (3)
'.adalah karakter titik
Eadalah variabel yang diinisialisasi ke 14; 3, 1 dan 4 tidak diperbolehkan tetapi tidak mengatakan apa-apa tentang 14 :)

Penghargaan untuk gagang pintu untuk ide backtick

aditsu
sumber
1
@Brilliand saya akan menerima penggunaan E.
kukac67
6
@ kukac67 Walaupun saya belum membuat rilis resmi (datang hari ini), saya sudah membuat kode CJam saat ini tersedia via hg. Jika Anda mendapatkan kode CJam pada 1 hari sebelum Anda memposting pertanyaan, itu akan menjalankan program saya dengan benar (jadi saya belum membuat perubahan untuk menyelesaikan masalah ini). Tapi aku tidak akan keberatan kok.
aditsu
33
saatnya mengembangkan HQ9 + π ...
Nzall
2
@AnonymousPi Semua orang bebas memilih jawaban yang mereka pilih. Mungkin mereka lebih terkesan dengan jawaban lain, bahkan jika jawaban mereka tidak sesingkat itu.
aditsu
2
Mengapa Anda memiliki variabel yang diinisialisasi ke 14?
user2357112
113

PHP - 22 byte

<?=date('n.j',8899e5);

Hari Pi di tahun 1998 benar-benar keren!

Lubang hitam
sumber
13
@ kukac67: n.jadalah formatnya, dan 8899e5merupakan stempel waktu Unix tanggal 14 Maret 1998.
ProgramFOX
7
Itu sangat pintar.
Amal Murali
7
Anda dapat menyimpan 7 karakter dengan menghapus ,8899e5. Itu akan benar setahun sekali.
Damir Kasipovic
1
@Timo Anda benar, tetapi ini berisi digit ilegal "3";).
Blackhole
18
@ Blackhole 20 byte: <?=date('w.W',78e5);1 April 1970 adalah hari Rabu di minggu 14.
Primo
92

C, 39

Mengasumsikan mesin ini adalah little-endian dan menggunakan standar titik-mengambang IEEE.

main(){printf("%.2f",*(float*)"P@I@");}

Fakta yang menyenangkan adalah bahwa "P@I@"sebenarnya tidak terkait dengan PItetapi setara dengan 0x40494050yang merupakan representasi dari3.144550323486328

http://ideone.com/uXVEtl

Michael M.
sumber
3
Itu luar biasa.
wchargin
1
Kode Anda mengasumsikan tipe-punning pada mesin little-endian.
Nayuki
@NayukiMinase, ya Anda benar, ada baiknya menunjukkannya. Dan itu juga mengasumsikan penggunaan standar IEEE floating-point.
Michael M.
Dan itu berisi perilaku yang tidak terdefinisi (deklarasi implisit fungsi variadic)
rubenvb
5
Kode ini sebenarnya mengasumsikan bahwa mesin itu adalah mesin Michael :-).
Konrad Borowski
50

dc , 11 9 byte

zE[.]znPp
  • z Dorong kedalaman tumpukan saat ini (0) ke tumpukan
  • ETekan E 16 (== 14 10 )
  • [.] Dorong senar "."
  • z Dorong kedalaman tumpukan saat ini (3) ke tumpukan
  • n Pop 3 dan cetak sebagai nomor
  • PPop "." dan cetak sebagai char
  • p Pop 14 dan cetak sebagai nomor dengan baris baru

Keluaran:

$ dc <<< zE[.]znPp
3.14
$ 
Trauma Digital
sumber
Jadi "gunakan basis input" adalah operator? Agak berbau seperti operasi aritmatika, tetapi mungkin masih berlaku.
Brilliand
@Brilliand Tidak ada yang saya lihat dalam pertanyaan yang melarang konversi basis. Bahkan OP tampaknya mendorong konversi basis dalam komentar di sini codegolf.stackexchange.com/a/25681/11259
Digital Trauma
Saya setuju bahwa itu valid; Saya hanya berpikir bahwa ketika konversi basis adalah operator dan bukan bagian dari sintaks angka, itu mengaburkan garis antara data inline dan operasi aritmatika.
Brilliand
Saya pikir ini harus 15 byte?
Pengguna Terdaftar
9
@AdityaPatil Kenapa? dcadalah bahasa dan juru bahasa, sama seperti semua bahasa lain di sini. dc -e hanyalah doa dari penerjemah itu. Saya bisa dengan mudah menyimpan program 9-byte dalam file dan jalankan dc pi.dc. Jika byte ini perlu dihitung, maka hal yang sama harus berlaku untuk semua bahasa lain. misalnya termasuk python dalam semua entri python atau ruby golfscript.rb dalam semua entri skrip golf. Saya percaya konvensi yang disepakati di sini bukan untuk memasukkan ini, kecuali opsi khusus perlu disahkan.
Digital Trauma
42

JavaScript ( ES5 ) 20 byte

Variasi dari solusi JS m.buettner.

(x='.'+0xE).length+x

Sunting: JavaScript ( ES5 ) 18 byte

Variasi dari ide ComFreek untuk menggunakan fungsi decode base64.

atob('Mw')+'.'+0xE

Sunting: Javascript ( ES5 ) 16 byte

Jika +operator unary diizinkan untuk melemparkan string ke nomor, itu dapat dikurangi menjadi:

+atob('MDMuMTQ')
nderscore
sumber
WOW! Itu sangat pintar!
kukac67
9
@NateEldredge Ini adalah rangkaian string, bukan aritmatika.
mulai
Apakah penggunaan +diterima di sini?
phuclv
1
Saya menemukan solusi Javascript menjadi yang paling elegan dan saya akan memposting milik saya sampai saya perhatikan ada '4' di dalamnya: atob ('My4xNA =='), lol.
rdev5
1
@ Dennis kau benar, masih ada di sana. Itu bahkan ada jika saya menyalin + menempelkan hasilnya dari konsol. Saya tidak senang dengan itu jadi saya akan kembali ke solusi 16 byte.
nderscore
39

Haskell, 41 byte

Kapan hari pi di Australia?

p=(\(a:n:y:t:i:m:e:_)->[m,a,t,e])['.'..]

Diedit untuk menambahkan: seperti jawaban Haskell lainnya, yang menghasilkan string, demikian juga dengan kutipan. Anda bisa mendapat skor 33, dan benar-benar mematuhi aturan, tapi itu kurang menyenangkan:

p=putStr$map([','..]!!)[7,2,5,8]
bazzargh
sumber
Haha, wow. Ini bagus!
Ry-
Bisakah Anda jelaskan mengapa ini berhasil?
yhager
5
Saya sangat suka yang ini, +1. Tapi saya pikir secara teknis ".." meminta operator kenaikan, yang dilarang. (Sebenarnya upvoting juga meminta operasi kenaikan, jadi harus dilarang juga ;-)
Marc van Leeuwen
Saya benar-benar berpikir tentang itu - saya punya jawaban yang bahkan lebih pendek: p=[2.9,2.92..]!!([0,6..]!!2)... dan yang ini ..terlihat salah. Tapi Haskell sangat diketik, dan kenaikan dalam jawaban yang saya berikan adalah Chartidak Numdan tidak berhitung - hal yang sebenarnya dilarang. Saya perlu fromEnumuntuk mengubah karakter kembali ke angka untuk menggunakannya dengan cara itu. Bagaimanapun, hati nurani saya jelas :)
bazzargh
6
@hubager: ['.' ..] adalah urutan char "./0123456 ..." (dll). (a: n: y: t: i: m: e: _) adalah pencocokan pola yang mengeluarkan 7 karakter pertama, [m, a, t, e] mengurutkan ulang 4 dari mereka menjadi "3.14". Mengetahui bahwa ini adalah apa yang ingin Anda lakukan, itu masalah mencari kamus untuk menemukan kata-kata dengan struktur yang tepat. Yang saya lakukan ... misalnya pasangan lain adalah "jas paling jelek". Maka Anda datang dengan lelucon :)
bazzargh
32

Kode Morse, 33 Bytes

morse -d ...-- .-.-.- .---- ....-

Secara teknis, informasi hanya membutuhkan 21 byte.

Ken A
sumber
11
Kita pasti membutuhkan lebih banyak solusi golf dalam kode morse di sini ...
berhenti mengubah counterclockwis
26
Secara teknis, saya akan mengatakan 21 bit , bukan byte
Michael M.
14
@Michael karena kode Morse dapat berupa titik, tanda hubung, atau spasi, tidakkah memerlukan lebih dari 1 bit untuk menyimpan 1 operasi?
smcg
5
@smcg ButSpacesAreForWeakPeopleWhoCan'tReadThingsLikeThis
Cole Johnson
8
Sebanyak yang saya suka kode morse (dan karenanya solusi ini) - tetapi bukankah itu melanggar aturan 3: "Anda tidak boleh menggunakan variabel / konstanta yang telah ditentukan sebelumnya yang mungkin dimiliki bahasa Anda sebagai pengganti 3, 1, dan 4." atau bahkan aturan 2: "Angka 3, 1, dan 4 mungkin tidak muncul di mana pun dalam kode Anda."?
kratenko
27

J - 15 11 10 char

Membuatnya lebih pendek, menggunakan yang fantastis i:.

6{i:6.28j8

Dijelaskan:

  • 6.28j8 - Bilangan kompleks 6.28 + 8i.
  • i:- Ini adalah dimana keajaiban terjadi. i:pada bilangan kompleks A + Bi, B ≠ 0 mengambil B + 1 titik yang berjarak sama dari interval [-A, A].
  • 6{ - Ambil elemen pada indeks 6, yang kebetulan adalah 3,14.

Sebelumnya, kami memiliki omong kosong berikut:

|.'.'2}":22b8d5

Dijelaskan oleh ledakan:

         22b8d5  NB. 8d5 in base 22 = 4163
       ":        NB. convert to string
  '.'2}          NB. change character at index 2 to '.'
|.               NB. reverse to make '3.14'
algoritme hiu
sumber
Alih-alih |.'.'2}":22b8d5, Anda dapat menyimpan 2 karakter dengan memilih nomor yang tidak memerlukan pembalikan:'.'1}":16bbc6
rationalis
3
@wicwisdom Angka 3, 1, dan 4 dilarang. Saya harus menggunakan angka dalam formulir 41X3karena saya hanya diperbolehkan untuk memodifikasi karakter di indeks 0 dan 2.
algoritme
20

Baris perintah Linux, 35 byte

Yang ini sama sekali tidak menang, tapi ini untuk bersenang-senang:

ping -w2 67502862|grep -oP '.\..\d'

Output (setelah 2 detik):

$ ping -w2 67502862|grep -oP '.\..\d'
3.14
$
Trauma Digital
sumber
Kutipan dari pertanyaan: "Tidak ada permintaan web."
Gagang Pintu
9
@Doorknob ICMP echo request! = Permintaan web. Apapun, ping ke 4.6.3.14, dari mana saya tidak mendapat balasan, jadi itu tidak seperti saya mendapatkan informasi yang berguna kembali dari internet
Digital Trauma
10
@ Doorknob Tetapi jika ini masih mengganggu Anda, kami bisa melakukan ini :;ping -t${#?} -qc2 67502862|grep -oP '.\..\d'. Ini menetapkan TTL ke 1, sehingga gema ICMP keluar dijatuhkan oleh router Anda sebelum pernah mendekati internet
Digital Trauma
1
Anda dapat menyimpan 9 detik dengan menggunakan ping -w2 67502862. (Ninja edit karena sebelum saya menasihati w1, hampir melanggar aturan.)
lolesque
@ Terima kasih banyak. Tidak meningkatkan skor golf ;-)
Digital Trauma
16

GolfScript, 18 13 12

'.'.`,\.,n`,

Versi lama:

'...','.'.,'....',

Ini sangat artistik, hanya 3 karakter unik! ;)

Bagaimana itu bekerja:

# cmd   # stack
'...',  # 3
'.'.    # 3 '.' '.'
,       # 3 '.' 1
'....', # 3 '.' 1 4

Berikut penjelasan dari versi 12-char (jauh lebih menarik, IMO):

'.' # '.'
.`, # '.' 3
\.  # 3 '.' '.'
,   # 3 '.' 1
n`, # 3 '.' 1 4

Ia bekerja karena n`,ini 4, sejak n`yaitu '"\n"'. Logika yang sama untuk '.'`,. Ini juga swap daripada membuat string baru untuk menyimpan char (terima kasih @algorithmshark).

Versi alternatif:

'pi ','.'.,'day!',

atau

'Hi ','.'.,'PPCG',

Atau apa pun dalam string itu, sungguh. : P

Gagang pintu
sumber
Hanya 3 karakter berbeda, keren :)
aditsu
Apakah '.'.`,\.,n`,berhasil menyelamatkan char? Menggunakan kembali '.'dengan menduplikasi dan menukar.
algorithmshark
@algorithmshark Yap, terima kasih!
Gagang Pintu
Ini sangat pintar! +1
VisioN
ini memang terlihat seperti versi kode morse
pwned
14

Jawaban OP.

Mathematica, 21 20 18

Ini terasa murah ...

Range[2,5,.06][[20]]

atau

Range[2,5,.02][[58]]

Menemukan cara membuatnya 18:

Range[-.86,5][[5]]

Haskell, 49 48 12

(48 termasuk karakter baris baru)

p=[-6..]
r=concat$show(p!!9):".":(show$p!!20):[]

Jalankan dengan memanggil rfungsi.

Dengan menggunakan metode seperti pada Mathematica di atas, Anda dapat mengetik ini ke GHCi:

[-2.86..]!!6

Jawa, 87 86

class P{public static void main(String[]a){System.out.print("tri".length()+"."+0xe);}}

Scala, 27

Diterjemahkan dari Jawa seperti yang disarankan oleh Score_Under . (Saya tidak begitu tahu Scala)

print("tri".length+"."+0xe)
kukac67
sumber
Oh, 0xeitu pintar. Apakah Anda keberatan jika saya meningkatkan jawaban JS saya dengan itu? ;)
Martin Ender
Kebanyakan java dapat langsung dikonversi ke scala, yang biasanya lebih pendek jika Anda benar-benar ingin menghemat byte - jika Anda menggunakannya sebagai skrip, keseluruhannya hanya: print ("tri" .length + "." + 0xe)
Score_Under
Ya saya memikirkan hal yang sama, yang lebih pendek di Julia [-.86:5][5]untuk 11, tetapi pikir itu tidak masuk hitungan karena rentang hanya matematika.
gggg
12

Bash, 50

Pesan bantuan / kesalahan bukan sumber daya eksternal, itu adalah output perintah!

Jika ada yang melanggar aturan, ini dia. Ia menggunakan kebetulan bahwa pesan bantuan diberikan STDERRoleh perintah yang tepat

ping6

panjangnya 314 karakter (setidaknya pada Ubuntu 13.10 dengan iputils-121221). EDIT: Saya menghargai ini jauh lebih portabel daripada yang saya harapkan ...

m=`ping6|&wc -c`
false
o=$?
echo ${m:0:o}.${m:o:2}

Baris pertama membutuhkan panjang karakter pesan bantuan dan menyimpannya dalam variabel.

Seperti pada jawaban saya yang lain, beberapa baris berikutnya mendapatkan angka 1 dengan mengambil status keluar dari false(tidak terlalu portabel tapi ini !), Lalu gunakan nilai itu untuk memasukkan titik desimal di baris terakhir

Keluaran: 3.14


sumber
Anda tuan jenius
Yosua
1
Eh, "2.81" di Ubuntu 12.04 (iputils-101006). +1 semuanya sama ;-)
Digital Trauma
@DigitalTrauma menurut info ping6saya punya iputils-121221
juga periksa chmodjawaban saya -menggunakan untuk pertanyaan ini di codegolf.stackexchange.com/a/25724/16402
2
lebih pendek:ping6|&wc -c|sed 's/./&./'
malkaroee
11

Bash + TeX 28 byte

Jika Anda telah menginstal TeX:

tex -v|head -c8|cut -d\  -f2

Nomor versi TeX secara asimtotik mendekati pi ketika perangkat lunak membaik. Jadi, seiring berjalannya waktu, Anda dapat menggunakan implementasi (tidak sesuai) ini untuk mencetak lebih banyak digit!

tex -v|cut -d\  -f2 | head -n1

Ini dicetak 3.1415926 kembali pada tahun 2011; per Januari 2014, itu akan mencetak 3.14159265.

nneonneo
sumber
Saya suka yang ini!
gniourf_gniourf
Anda dapat menggunakannya tex -v|grep -oP '.\..\d'untuk menyimpan 4 byte. (Regex dicuri dari jawaban DigitalTrauma .) Omong-omong, +1 karena saya hanya memikirkan jawaban yang sama.
ace_HongKongIndependence
10

JavaScript, 20 byte

'...'.length+'.'+0xe

Gunakan di konsol, sehingga hasilnya langsung dicetak. Kalau tidak, alert(...)akan menambah 7 karakter lainnya.

Sama seperti jawaban saya yang lain, saya hanya memperhatikan bahwa JS jauh lebih pendek.

Gagasan menggunakan 0xeuntuk 14 diambil dari pengajuan OP dengan izin baik dari OP.

Martin Ender
sumber
1
Tidak apa-apa, Anda bisa menggunakannya :)
kukac67
1
Alternatif solusi 20 byte:(x='.'+0xE).length+x
nderscore
@ncorecore itu ide yang cukup rapi. Jika Anda memposting itu sebagai jawaban lain, Anda akan mendapatkan upovote saya;)
Martin Ender
10

Tanggal GNU, 17 byte

date -d2/5 +%u.%y

Yang ini hanya dijamin bekerja tahun ini, tapi saya tidak melihat batasan dalam aturan tentang ini ;-)

Ini +hanya menunjukkan awal dari penentu format untuk datedan bukan merupakan tambahan aritmatika. Sama dengan -, menunjukkan tanggal input.

Keluaran:

$ date -d2/5 +%u.%y
3.14
$
Trauma Digital
sumber
only guaranteed to work this yearTidak apa-apa .. :)
kukac67
10

Bash, 17 byte

tr 0 .<<<$[62#MC]

Dash, 41 byte

perl -pechomp,s/./$./<<$


..










.
Dennis
sumber
Bash akan mengeluh keras tentang penanda akhir yang hilang sementara Dash tidak, jadi solusi Bash tanpa pesan kesalahan akan membutuhkan dua byte tambahan.
Dennis
+1 juga. Saya kira @TheDoctor lupa mengklik tombol upvote?
Digital Trauma
@DigitalTrauma oops ... diperbaiki
TheDoctor
7

Bash 23 22

seq 2 .02 5|sed -n 58p

Shell (tanpa ekspansi sejarah) 20

seq 2 .02 5|sed 58!d
pengguna80551
sumber
seq 2 .06 5|sed -n 20pjuga berfungsi seperti yang diberikan dalam jawaban OP's Mathematica.
user80551
sed 58!dsedikit lebih pendek.
Dennis
@ Dennis Weird, pengganti gnome-terminal !ddengan dpkg ...yang merupakan perintah terakhir yang saya jalankan yang dimulai dengan d. Berfungsi dengan baik kshtetapi zshmengatakan zsh: event not found: ditu pasti mendapatkan sesuatu yang diganti.
user80551
Itu karena ekspansi sejarah Bash . Ini dinonaktifkan secara default untuk skrip, jadi jika Anda menyimpan perintah yang sama pi.shdan mengeksekusi bash pi.sh, itu akan berfungsi dengan baik.
Dennis
6

Python, 39 atau 28 47 atau 34

(Terima kasih Score_Under karena sudah banyak bermain golf)

print"%s.%s%c"%(len('aaa'),len('a'),52)

+ di sini adalah operator rangkaian string, bukan tambahan.

Menyalin 0xetrik dari OP, inilah 28 karakter dengan bantuan dari @psal

print('%X.%s'%(675,0xE))[2:]

Versi lama:

print str(len('aaa'))+'.'+str(len('a'))+chr(52)

print str(len('aaa'))+'.'+str(0xe)

print"%s.%s"%(len('aaa'),0xe)
ace_HongKongIndependence
sumber
Yang kedua dapat dipersingkat dengan menghapus spasi setelah cetak dan menggunakan format "% s" bukan str (). cf print"%s.%s"%(len('aaa'),0xe)pada 29 byte. Anda dapat melakukan hal yang sama dengan yang pertama juga: print"%s.%s%c"%(len('aaa'),len('a'),52)pada 39 byte.
Score_Di Bawah
@Score_Di bawah Oh, saya pikir menggunakan %smasih membutuhkan str. Terima kasih atas tipnya :)
ace_HongKongIndependence
1
solusi 29 byte lainnya:print('%s,%s'%(0xE9,0xE))[2:]
onionpsy
1
... dan dalam 28 byte:print('%X.%s'%(675,0xE))[2:]
onionpsy
5

GolfScript, 8 byte

'??.'(\(

Program ini berisi karakter ASCII yang tidak dapat dicetak, sehingga tidak dapat ditempelkan langsung di sini. Sebagai gantinya, tanda tanya dalam kode di atas harus diganti dengan byte 03dan 0Edalam heksadesimal.

Untuk kenyamanan, inilah dump hex dari program yang sebenarnya. Pengguna Unix / Linux dapat menjalankan hex dump ini xxd -runtuk merekonstruksi program:

0000000: 2703 0e2e 2728 5c28                      '...'(\(

Penjelasan:

  • Lima byte pertama dari program membentuk string literal yang dikutip tunggal, mengkodekan tiga karakter dengan kode ASCII 3, 14 dan 46 (= periode ASCII).

  • (memotong karakter pertama dari string dan mendorong kode ASCII (3) pada stack. \menukar dua item teratas pada stack, menarik string kembali ke atas, dan yang kedua (memotong karakter lain dari string, sekali lagi mendorong kode ASCII (14) pada stack.

Oleh karena itu, pada akhir program, tumpukan (tidak termasuk string input kosong) terlihat seperti ini:

3 "." 14

Pada akhir program, perilaku default interpreter GolfScript adalah untuk mengencangkan dan mencetak semua yang ada di stack, menghasilkan output yang diinginkan.

Ilmari Karonen
sumber
1
Jepret! Saya memiliki ide yang persis sama , hanya terlambat 12 jam. Saya kira saya harus membaca halaman 2 sebelum memposting ... Oh well, memutar kembali, +1 untuk Anda.
Dennis
5

bash - 39

Kita semua tahu bahwa beberapa digit pertama Pi dapat dihitung dari pernyataan berikut:

Bolehkah saya memiliki satu wadah besar kopi

Kami hanya membutuhkan 2 tempat desimal, kan?

m=May
i=I
h=have
echo ${#m}.${#i}${#h}
devnull
sumber
4

Mathematica - 78

DateList["March"<>ToString@FromDigits@"E"]~DateString~{"MonthShort",".","Day"}
desir
sumber
Dalam semangat Hari Pi! : D
kukac67
4

Perl, 15 20 byte

print 05706=~s/0/./r
print 0xbc6=~s/0/./r
massa
sumber
Bukankah PI__ adalah konstanta yang berhubungan dengan Pi?
Llamageddon
Itu tidak konstan. Ada dua string yang menjadi XOR-ed.
nderscore
Operator bitwise tidak diizinkan.
kukac67
Oh, tidak. Nah, inilah solusi hipotetis saya. Yang mengatakan, jika operator bitwise tidak diizinkan, apakah ada banyak hal yang harus dilakukan selain menghitung panjang string?
Llamageddon
Ada beberapa jawaban yang menggunakan angka di pangkalan yang berbeda.
kukac67
4

tr + Bash, 17 byte

tr a-j 0-9<<<d.be

The -karakter di sini tidak operator pengurangan aritmatika. Mereka menunjukkan kisaran.

Keluaran:

$ tr a-j 0-9<<<d.be
3.14
$
Trauma Digital
sumber
Pintar, meskipun terjemahan karakter aritmatika benar-benar tersembunyi.
Pierre Arlaud
@ ArlaudPierre Benar, meskipun saya berpendapat bahwa hampir semua solusi di sini menyembunyikan aritmatika dengan satu atau lain cara. Jika Anda melihat instruksi mesin yang sebenarnya dieksekusi untuk semua jawaban ini, saya akan berpikir semua memiliki beberapa instruksi aritmatik atau bitwise, yang dilarang untuk digunakan secara eksplisit oleh pertanyaan.
Digital Trauma
@ArlaudPierre Pertanyaan ini membutuhkan string "3.14" untuk menjadi output. Terlepas dari bahasa, di suatu tempat di bawah tenda, ini akan berubah menjadi write()panggilan atau serupa. Tentunya akan ada beberapa aritmatika di bawah selimut untuk memastikan jumlah byte yang benar ditulis, jika tidak ada tempat lain. Saya pikir inti dari pertanyaan adalah untuk menyembunyikan perhitungan aritmatika / bitwise yang diperlukan.
Digital Trauma
4

BASH, 57

Ini lebih panjang daripada kebanyakan jawaban, tetapi tidak ada yang buruk dalam mencoba.

f=`echo aaaaaaaaaaaaa|wc -c`;e=`echo aa|wc -c`;echo $e.$f

memberi

3.14
Pengguna Terdaftar
sumber
3
Maaf untuk golf ulang jawaban semua orang: P, Dalam nada yang sama seperti ini saya temukan:c=wc\ -c;echo `$c<<<..`.`$c<<<''``$c<<<...`
Score_Under
4

C, 36

main(){printf("%d\b.%o\b",' ','`');}
pengguna19057
sumber
1
Jika kita mengombinasikannya dengan jawaban saya, kita dapat menghemat 2 byte untuk mendapatkan skor 34 :main(){printf("%d\b.%d",' ',0xe);}
vsz
3

JavaScript - 23 byte

atob('Mw')+atob('LjE0')

Terima kasih kepada nderscore (lihat komentarnya)!

ComFreek
sumber
Bagus: DI bahkan tidak tahu tentang ini
kukac67
Ini berisi 4;)
nderscore
@nderscore Ah! Kamu benar! Apakah akan btoa()berhasil 3.14?
kukac67
@ kukac67 Set karakter base64 tidak mengandung periode :(
nderscore
3
23 byte "legal" versi: atob('Mw')+atob('LjE0')dan 14 byte "ilegal" versi:atob("My4xNA")
nderscore
3

C #

 ((int)'ĺ').ToString("#\\.##");

ĺ adalah karakter 314, bukan variabel atau konstanta yang ditentukan sebelumnya. .ToString memformat output menjadi digit, titik, dan kemudian 2 digit lagi.

Grax32
sumber
Bagus, tetapi saat ini tidak menghasilkan, dan itu tidak dapat dikompilasi.
Rudi Kershaw
Console.Write ((int) 'ĺ'). ToString ("# \\. ##"));
Grax32
3

GolfScript, 13 10

{xy}.*'.'\

Terima kasih kepada Ilmari Karonen untuk versi yang ditingkatkan!

xdan ymerupakan karakter yang tidak dapat dicetak (lihat http://www.asciitable.com/ untuk info lebih lanjut), masing ETX- masing dan SO, yang diterjemahkan menjadi 3 dan 14.

Apa yang dilakukan kode ini harus cukup jelas.

Catatan: Aturan berikut

You may not use any predefined variables/constants that your language may have as a replacement for 3, 1, and 4. (Author's discretion)

tidak rusak, karena karakter ASCII bukan variabel, atau konstanta.

Vereos
sumber
The digits 3, 1, and 4 may not appear anywhere in your code.,Your program cannot require input of any kind (besides running it).
user80551
Digit tidak muncul di mana pun. Tidak ada input.
Vereos
Dan kode terakhir Anda adalah ...?
user80551
{}.*.{}.*, dan di dalam tanda kurung ada 2 karakter yang tidak dapat dicetak, masing-masing ( asciitable.com ) ETXdanSO
Vereos
2
Anda dapat mempersingkat ini menjadi {xy}.*'.'\ (10 karakter). Milik saya masih lebih pendek. ;-) Tapi +1 untuk mengajari saya tentang { }.*(dan { }.%), saya harus mengingat trik itu.
Ilmari Karonen
3

Baru di situs ini dan belum bisa menulis komentar, jadi saya akan mempostingnya di sini. Hanya ingin tahu tentang solusi Javascript ini:

'...'.length+'.'+0xe

dan aturan ini:

3.14 adalah satu-satunya hal yang dapat Anda hasilkan, itu tidak dapat menjadi bagian dari keluaran yang lebih panjang / lebih besar ..

Jika saya menjalankan kode ini di konsol browser saya, saya mendapatkan:

"3.14"

atau menggunakan Node di baris perintah:

'3.14'

tetapi jika saya menjalankan kode ini:

parseFloat('...'.length+'.'+0xe)

Saya mendapat:

3.14

Menggunakan Node.js untuk menjalankan file .js, saya dapat menulis:

console.log('...'.length+'.'+0xe)

dan dapatkan:

3.14
Robert Munn
sumber
1
Tidak pernah ada batasan pada tipe apa nilai yang dihasilkan dapat. Jadi, string atau angka tidak masalah. Kutipan di sekitar string tidak dianggap sebagai bagian dari output.
nderscore
Selamat datang di CodeGolf dan Programming Puzzles @RobertMunn! Jawaban ini valid karena mematuhi semua aturan ... Ingatlah bahwa consolecenderung membungkus string dalam tanda kutip ketika menampilkannya ... Anda telah menggunakan +tetapi tidak secara hitung, itu digunakan sebagai konkatator, jadi itu valid ... Juga Anda bisa membuat ini lebih kecil menggunakan alertdaripada console.log... Tetapi sebaliknya, upaya besar. Kami harap Anda menyukainya di sini ...
WallyWest
Cukup bagus! Anda harus mempertimbangkan untuk menambahkan nama bahasa dan jumlah byte (misalnya Javascript, 20)
Vereos
1
Terima kasih Ace, saya baru belajar aturannya di sini. Saya tidak bisa meninggalkan komentar jadi saya memposting secara terpisah, saya kira ini lebih merupakan klarifikasi pada aturan jenis posting, yang dijelaskan oleh nderscore dan WallyWest untuk saya. Saya menghargai kesabaran semua orang dengan seorang newb.
Robert Munn
2

Mathematica, 56 byte

(l=ToString@StringLength@#&)@"..."<>"."<>l@"."<>l@"...."

Tidak banyak bicara. Saya menghasilkan digit sebagai panjang string dan menyatukannya.

Martin Ender
sumber