Pertanyaan ini terinspirasi oleh HNQ ini .
Tentang seri ini
Pertanyaan ini sekarang merupakan bagian dari seri tentang metode RUPS. Posting pertama dalam seri ini adalah tentang menghitung AGM
. Anda dapat memperlakukan ini seperti tantangan golf kode lainnya, dan menjawabnya tanpa khawatir tentang seri sama sekali. Namun, ada papan peringkat di semua tantangan.
Apa Arti Aritmatika-Geometris
The Arithmetic-Mean Geometrik dari dua angka didefinisikan sebagai jumlah yang berulang kali mengambil sarana aritmatika dan geometri konvergen ke. Tugas Anda adalah menemukan nomor ini setelah beberapa kali n
pengulangan.
Klarifikasi
- Anda mengambil tiga angka,
a, b, n
dalam format apa pun yang masuk akal.
- Untuk
n
iterasi, ambil aritmatika dan rata-rata geometri dari a
dan b
dan atur ke a
dan b
.
- Untuk dua angka
a
dan b
, mean aritmatika didefinisikan sebagai(a + b) / 2
.
- Mean geometrik didefinisikan sebagai
√(a * b)
.
a
dan b
harus saling mendekati.
- Kemudian, output keduanya
a
danb
.
- Anda tidak perlu khawatir tentang kesalahan mengambang dan semacamnya.
- Ini adalah kode-golf sehingga kode terpendek dalam byte menang!
Uji Kasus
[0, [24, 6]] -> [24, 6]
[1, [24, 6]] -> [15.0, 12.0]
[2, [24, 6]] -> [13.5, 13.416407864998739]
[5, [24, 6]] -> [13.458171481725616, 13.458171481725616]
[10, [100, 50]] -> [72.83955155234534, 72.83955155234534]
The next one is 1/Gauss's Constant:
[10, [1, 1.41421356237]] -> [1.198140234734168, 1.1981402347341683]
Papan peringkat
Dicuri dari seri Martin.
Cuplikan berikut akan menghasilkan papan peringkat di semua tantangan seri.
Untuk memastikan jawaban Anda muncul, mulailah setiap jawaban dengan tajuk utama, menggunakan templat Penurunan harga berikut:
# Language Name, N bytes
di mana N adalah ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
# Ruby, <s>104</s> <s>101</s> 96 bytes
/* Configuration */
var QUESTION_IDs = [66068]; // Obtain this from the url
// It will be like http://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!.FjwQBrX2KXuFkv6p2lChi_RjzM19";
/* App */
var answers = [], page = 1, currentQ = -1;
function answersUrl(index) {
return "http://api.stackexchange.com/2.2/questions/" + QUESTION_IDs.join(";") + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER;
}
function getAnswers() {
$.ajax({
url: answersUrl(page++),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
answers.push.apply(answers, data.items);
if (data.has_more) getAnswers();
else process();
}
});
}
getAnswers();
var SIZE_REG = /\d+(?=[^\d&]*(?:<(?:s>((?!>).)*<\/s>|((?!>).)+>)[^\d&]*)*$)/;
var NUMBER_REG = /\d+/;
var LANGUAGE_REG = /^#*\s*([^\n,]+)(?=,)/;//
function shouldHaveHeading(a) {
var pass = false;
var lines = a.body_markdown.split("\n");
try {
pass |= /^#/.test(a.body_markdown);
pass |= ["-", "="]
.indexOf(lines[1][0]) > -1;
pass &= LANGUAGE_REG.test(a.body_markdown);
} catch (ex) {}
return pass;
}
function shouldHaveScore(a) {
var pass = false;
try {
pass |= SIZE_REG.test(a.body_markdown.split("\n")[0]);
} catch (ex) {}
if (!pass) console.log(a);
return pass;
}
function getAuthorName(a) {
return a.owner.display_name;
}
function getAuthorId(a) {
return a.owner.user_id;
}
function process() {
answers = answers.filter(shouldHaveScore)
.filter(shouldHaveHeading);
answers.sort(function (a, b) {
var aB = +(a.body_markdown.split("\n")[0].match(SIZE_REG) || [Infinity])[0],
bB = +(b.body_markdown.split("\n")[0].match(SIZE_REG) || [Infinity])[0];
return aB - bB
});
var users = {};
answers.forEach(function (a) {
var headline = a.body_markdown.split("\n")[0];
var question = QUESTION_IDs.indexOf(a.question_id);
var size = parseInt((headline.match(SIZE_REG)||[0])[0]);
var language = headline.match(LANGUAGE_REG)[1];
var user = getAuthorName(a);
var userId = getAuthorId(a);
if (!users[userId]) users[userId] = {name: user, nAnswer: 0, answers: []};
if (!users[userId].answers[question]) {
users[userId].answers[question] = {size: Infinity};
users[userId].nAnswer++;
}
if (users[userId].answers[question].size > size) {
users[userId].answers[question] = {size: size, link: a.share_link}
}
});
var sortedUsers = [];
for (var userId in users)
if (users.hasOwnProperty(userId)) {
var user = users[userId];
user.score = 0;
user.completedAll = true;
for (var i = 0; i < QUESTION_IDs.length; ++i) {
if (user.answers[i])
user.score += user.answers[i].size;
else
user.completedAll = false;
}
sortedUsers.push(user);
}
sortedUsers.sort(function (a, b) {
if (a.nAnswer > b.nAnswer) return -1;
if (b.nAnswer > a.nAnswer) return 1;
return a.score - b.score;
});
var place = 1;
for (var i = 0; i < sortedUsers.length; ++i) {
var user = sortedUsers[i];
var row = '<tr><td>'+ place++ +'.</td><td>'+user.name+'</td>';
for (var j = 0; j < QUESTION_IDs.length; ++j) {
var answer = user.answers[j];
if (answer)
row += '<td><a href="'+answer.link+'">'+answer.size+'</a></td>';
else
row += '<td class="missing"></td>';
}
row += '<td></td>';
if (user.completedAll)
row += '<td class="total">'+user.score+'</td>';
else
row += '<td class="total missing">'+user.score+'</td>';
row += '</tr>';
$("#users").append(row);
}
}
body { text-align: left !important}
#leaderboard {
width: 500px;
}
#answer-list {
padding: 10px;
width: 290px;
float: left;
}
#language-list {
padding: 10px;
width: 290px;
float: left;
}
table thead {
font-weight: bold;
}
table td {
padding: 5px;
}
td.total {
font-weight: bold;
text-align: right;
}
td.missing {
background: #bbbbbb;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b">
<div id="leaderboard">
<h2>Leaderboard</h2>
<p>
Missing scores are shown as grey cells. A grey total indicates that the user has not participated in all challenges and is not eligible for the overall victory yet.
</p>
<table class="_user-list">
<thead>
<tr><td></td><td>User</td>
<td><a href="http://codegolf.stackexchange.com/q/66068">#1</a></td>
<td></td><td>Total</td>
</tr>
</thead>
<tbody id="users">
</tbody>
</table>
</div>
<table style="display: none">
<tbody id="answer-template">
<tr><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr>
</tbody>
</table>
<table style="display: none">
<tbody id="language-template">
<tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr>
</tbody>
</table>
a
ataub
" —Yah, yang mana? Keduanya, atau salah satunya?Jawaban:
CJam, 16 byte
Mengambil input pada stack sebagai
a b n
tempata
danb
ganda. Demo onlinesumber
Dyalog APL ,
222115 byteMengambil ( a , b ) sebagai argumen yang benar, dan meminta n :
(
+.×
produk titik 0,5 dan argumen yang tepat,
diikuti oleh×.*⍨
"dot power" dari argumen yang tepat dan 0,5 *)⍣⎕
diterapkan waktu numerik-cepat.* "dot power" sama seperti dot produk, tetapi menggunakan multiplikasi dan power bukannya plus dan multiplikasi, sebagai berikut:
n
A ×.*⍨ B
adalah ∏ B i A = ∏ B 1 A B 2 Ai = 1
-3 byte terima kasih kepada ngn.
Versi lama:
Dibawa
n
sebagai argumen kiri dana b
sebagai argumen kanan.⊢⍵
Di RightArg(
... hitung)⍣⍺
kembali LeftArg kali(+/÷≢)
jumlah dibagi dengan penghitungan,
diikuti oleh.5*⍨×/
akar kuadrat dari produk.Semua kasus uji:
sumber
f⍣⍺⊢⍵
atau sejenisnya idiom yang Anda gunakan secara profesional?Of⍣core⊢TREE
di miserver.dyalog.com (klik "D" besar dan gulir ke baris [266]).TI-BASIC, 22 byte
Melakukan persis apa yang dikatakan algoritma. Mengambil N dari prompt, dan A dan B melaluinya
Ans
sebagai daftar dua elemen.Jika N adalah 0,
For(
loop dilewati seluruhnya.sumber
JavaScript ES7,
4843 byte-5 Terima kasih untuk Downgoat!
Fungsi rekursif yang sangat sederhana.
sumber
(a*b)**.5
lebih pendek dariMath.sqrt(a*b)
. contohMATLAB / Oktaf,
6965 bytesumber
b=(a*b).^5
secara langsung karena Anda tidak menggunakanb
kembali dalam iterasi dan menyimpan 4 byte.Jelly, tidak bersaing
9 byte Jawaban ini tidak bersaing, karena menggunakan fitur yang mengeposkan tantangan.
Cobalah online!
Bagaimana itu bekerja
sumber
Serius, 11 byte
Hex Dump:
Cobalah online
Penjelasan:
sumber
C ++,
108102100 byteTerima kasih kepada @RetoKoradi dan @AlexA karena telah menyelamatkan saya 6 byte.
Ini tidak kompetitif, karena C ++ bukan bahasa golf yang baik. Melakukan ini untuk bersenang-senang :)
Ini adalah fungsi rekursi sederhana, sangat mirip dengan jawaban JS.
sumber
float
bukannyadouble
lebih pendek.#include
garis.f(float*s)
yang mengambil pointer ke 3 mengapung berada dalam "format yang masuk akal". Tidak yakin apakah itu benar-benar membuatnya lebih pendek.K5, 15 byte
Sangat harfiah:
Beraksi:
Sayangnya, ini tidak berfungsi di oK karena penerjemah itu saat ini tidak mendukung proyeksi (currying) kata keterangan. Bekerja di k5 nyata.
Dalam oK, saat ini perlu untuk membungkus definisi dalam lambda:
sumber
J,
1813 bytePemakaian:
sumber
Japt , 24 byte
25 33Disimpan 9
7byte, terima kasih kepada @ETHproductionsMengambil keuntungan dari penghancuran ES6.
Cobalah online
Penjelasan && Tidak Terkumpul
sumber
Uo
menghasilkan rentang angka dari 0 hingga U, jadiUo m@[V,W]=[V+W /2,(V*W q]
seharusnya berfungsi. (Belum diuji)U
selain 1, menghasilkan setiap loop saat berjalan. Inilah salah satu yang bekerja dengan baik:Uo £[VW]=[V+W /2(V*W q]};[VW]
r
tampaknya berfungsi jugaMatlab, 54 byte
Contoh:
sumber
Pyth, 12
Test Suite
Penjelasan
sumber
@
dan.O
, tetapi saya bahkan tidak tahu tujuan baru dariE
.Minkolang v0.14, 23 byte
Coba di sini !
sumber
Pyth, 15 byte
sumber
Python 3,
6555 byteBerkat mathmandan untuk menunjukkan versi yang lebih pendek menggunakan
lambda
operatorVersi asli saya:
Untuk kecewa saya, fungsi rekursif (ala JavaScript dan C ++ jawaban) lebih pendek daripada sederhana untuk loop.
sumber
lambda
danif/else
operator ternary :f=lambda a,b,n:f((a+b)/2,(a*b)**.5,n-1)if n else(a,b)
R, 66 byte
Pemakaian:
sumber
Mathematica,
3130 byteDisimpan satu byte berkat Martin Büttner.
Pemakaian:
sumber
Lua, 62 byte
Menggunakan argumen baris perintah dari
...
untuk ditugaskann
,a
danb
, trik bagus yang saya pelajari tentang Lua baru-baru ini.sumber
Haskell, 40 byte
Fungsi anonim. Contoh penggunaan:
Fungsi lambda
(\(a,b)->((a+b)/2,sqrt$a*b))
mengambil aritmatika dan rata-rata geometrik pada tupel. Ini diulang mulai dengan input pertama (tuple), dan kemudian(!!)
indeks input kedua untuk menentukan jumlah iterasi.sumber
Perl, 60 byte
NB: Per postingan meta ini , saya yakin skor saya sudah benar. Kode aktual (antara tanda kutip tunggal) adalah 58 karakter, kemudian saya menambahkan +2 untuk
a
danp
menandai karena itulah perbedaan dari doa terpendek,perl -e'...'
Keluhan yang tidak jelas
Saya punya perasaan mengomel ini, saya kehilangan perbaikan yang jelas. Saya tahu, "selamat datang di kode golf", tapi maksud saya lebih dari biasanya saya percaya ada peluang mudah untuk mempersingkat ini.
Awalnya, saya telah mengacaukan penggunaan
$\
sebagai istilah kedua dengan beberapa keberhasilan, tetapi pendekatan di atas akhirnya menjadi 2 byte lebih pendek, bahkan denganap
bendera tambahan yang diperlukan. Demikian pula, menghindari yang eksplisit$_
penugasan akan menyenangkan, tetapi pengulangan mempersulitnya.The
shift@F
mengganggu saya, juga; jika saya tidak melakukannya dengan cara itu (atau menggunakannya@F=(0,...,...)
sebagai gantinya, yang tidak menyimpan byte), ada kesalahan off-by-one dengan@F
tugas tersebut.Contoh
Keluaran
sumber
Julia, 49 byte
Algoritma iteratif yang cukup langsung. Menggunakan
√
simbol dan multiple return menghemat beberapa byte, tetapi sintaks for loop membutuhkan beberapa byte.sumber
Haskell, 47 Bytes
sumber
Julia, 42 byte
Ini adalah fungsi rekursif
f
yang menerima tiga angka dan mengembalikan tuple.Tidak Disatukan:
sumber
LabVIEW, 21 LabVIEW Primitif
Primitif dihitung sesuai meta post ini .
cukup teguh untuk tidak banyak menjelaskan.
sumber
Python 2,
626162 bytesumber
CJam, 16 byte
Ini adalah fungsi anonim. Input adalah daftar dengan dua nilai (sebagai ganda), diikuti oleh jumlah iterasi. Cobalah online dengan kode I / O untuk pengujian.
Saya biasanya tidak memposting ini karena @PeterTaylor memposting jawaban CJam yang sama panjang sebelum saya melihat pertanyaan. Tapi karena ini diiklankan sebagai awal dari sebuah seri, saya ingin tetap membuka opsi saya jika seri ini menarik.
Meskipun panjangnya sama dengan jawaban Peter, kodenya tidak. Saya memilih format input yang berbeda dengan mengambil dua nilai dalam daftar, di mana Peter menggunakan nilai yang terpisah. Jadi sementara tidak banyak dengan format input, kode terlihat sangat berbeda.
sumber
Perl 6 ,
5347 bytepemakaian:
Jika saya mengubah input dari
a,b,n
menjadi(a,b),n
saya dapat menyimpan beberapa byte.pemakaian:
Sungguh saya akan menukar
... *
dengan... -> (\a,\b) { a =~= b }
, maka tidak perlu untuk$^n
parameter.(jangan gunakan
==
sebagai gantinya=~=
, atau mungkin tidak berhenti)sumber
Prolog, 80 byte
Kode:
Contoh:
Cobalah online di sini
sumber
Java,
1039684 byteVerifikasi semua testcases.
Versi lama (96 byte):
Versi lama (103 byte):
sumber