Pyth , 4 byte
W
~O
Cobalah online!
Ini pada dasarnya mengimplementasikan algoritma:
Input Q ←R e p e a t1.2.3.t e m p ← QQ ← unif { 0 , Q - 1 }Print(temp)Untiltemp=0
To translate the Pyth into the algorithm, we can mostly just examine what each character means. Since Pyth is written in prefix notation (i.e. * + 1 2 3
is (1 + 2) * 3
) we can start from the left and fill in the arguments as we go.
W
memulai loop sementara tradisional. Pernyataan pertama setelah itu adalah kondisi loop dan pernyataan kedua setelah itu adalah loop body. Jika pernyataan kedua kosong itu menjadi no-op . Ini sementara bekerja persis seperti Python sementara, sehingga akan mengevaluasi bilangan bulat bukan nol sebagai Benar dan nol sebagai salah.
Pernyataan pertama setelah beberapa saat dimulai dengan karakter baris baru. Ini sesuai dengan fungsi "cetak dan kembali dengan baris baru" Pyth. Ini membutuhkan satu argumen, yang kemudian dicetak dan juga dikembalikan tanpa dimodifikasi. Ini memungkinkan kami untuk mencetak langkah-langkah perantara sambil juga melakukan operasi yang diperlukan.
Argumen yang diteruskan ke fungsi cetak ini dimulai dengan ~
yang agak spesial. Jika karakter segera setelah ~
variabel, dibutuhkan dua argumen, jika tidak maka diperlukan satu. Karena O
bukan variabel ~
akan mengkonsumsi hanya satu argumen. ~
fungsi sedikit seperti +=
tidak dalam banyak bahasa konvensional, meskipun operator terdekat akan menjadi operator pasca-kenaikan ++
dari C
. Anda mungkin tahu itu x++
akan seperti menggunakan x
sebagai nilai saat ini, tetapi sesudahnya x
akan seperti itu x+1
. ~
adalah ide yang sama, tetapi digeneralisasi untuk apa pun hasil dari argumen pertama. Bagaimana cara memilih variabel yang akan ditugaskan akan dibahas nanti.
Argumennya ~
adalah O
yang sangat sederhana. Ketika satu argumennya adalah bilangan bulatO
mengembalikan nilai dari 0 menjadi kurang dari integer itu secara acak.
Sekarang Anda mungkin telah memperhatikan O
tidak memiliki argumen. Di sini penerjemah Pyth dengan baik mengisi duga, yang di sini adalah variabel Q
. Q
memiliki arti khusus dalam Pyth: setiap kali ada dalam suatu program, program Pyth dimulai dengan menugaskan Q
input dari program. Karena ini adalah variabel pertama yang terjadi dalam ~
argumen Q
juga sekarang variabel yang ~
akan memberikan nilai.
Ringkas program "dapat dibaca" kami mungkin terlihat seperti:
while print_and_return( assign_variable( Q, unif(0, Q-1) ) ):
pass
Dan satu sampel "run-through" mungkin terlihat seperti:
- Q = 5
O
mengembalikan 3, ~
mengembalikan 5,\n
mengembalikan dan mencetak 5 yang benar
- Q = 3
O
mengembalikan 0, ~
mengembalikan 3, \n
mengembalikan dan mencetak 3 yang benar
- Q = 0
O
mengembalikan sesuatu yang tidak relevan, ~
mengembalikan 0, \n
mengembalikan dan mencetak 0 yang salah
- Q = sesuatu yang tidak relevan
- Mengakhiri