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.
Wmemulai 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 Obukan 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 xsebagai nilai saat ini, tetapi sesudahnya xakan 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 Oyang sangat sederhana. Ketika satu argumennya adalah bilangan bulatO mengembalikan nilai dari 0 menjadi kurang dari integer itu secara acak.
Sekarang Anda mungkin telah memperhatikan Otidak memiliki argumen. Di sini penerjemah Pyth dengan baik mengisi duga, yang di sini adalah variabel Q. Qmemiliki arti khusus dalam Pyth: setiap kali ada dalam suatu program, program Pyth dimulai dengan menugaskan Qinput dari program. Karena ini adalah variabel pertama yang terjadi dalam ~argumen Qjuga 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
Omengembalikan 3, ~mengembalikan 5,\n mengembalikan dan mencetak 5 yang benar
- Q = 3
Omengembalikan 0, ~mengembalikan 3, \nmengembalikan dan mencetak 3 yang benar
- Q = 0
Omengembalikan sesuatu yang tidak relevan, ~mengembalikan 0, \nmengembalikan dan mencetak 0 yang salah
- Q = sesuatu yang tidak relevan
- Mengakhiri