n=e=$Input;
a=0;
w=While[{m=Modulo[$e];Not[m[1]];}];
w=w[{f=For[4];f=f[@x];f=f[{Print[$e];q=Equal[$x];i=If[{q[1];}];i=i[{k=Times[$e];}];Do[$i];i=If[{q[2];}];i=i[{k=Add[$e];}];Do[$i];i=If[{q[3];}];i=i[{k=Subtract[$e];}];Do[$i];i=If[{q[4];}];i=i[{k=Divide[$e];}];Do[$i];e=k[a=Increment[$a]];}];Do[$f];}];
Do[$w];
Cobalah online!
Sudah saatnya saya menggunakan Rutger lagi. Sayangnya, ini mungkin bukan bahasa terbaik untuk tugas tersebut, karena tidak memiliki bentukeval , memaksa saya untuk menggunakan empat pernyataan if
Bagaimana itu bekerja
Bagaimana Rutger bekerja
Kata pengantar singkat tentang cara kerja bahasa: Semuanya bisa berupa tugas atau fungsi, dan setiap fungsi hanya membutuhkan satu argumen. Untuk operasi yang memerlukan lebih dari satu argumen (mis. Multiplikasi), panggilan pertama mengembalikan fungsi parsial , yang, ketika dipanggil lagi dengan argumen kedua, mengembalikan hasil yang diharapkan. Sebagai contoh:
left = Times[5];
Print[left[6]];
akan mencetak 30: Cobalah online!. Meskipun biasanya ini lebih panjang dari alternatif yang biasa, kadang-kadang dapat menyimpan byte, jika suatu fungsi dipanggil berulang kali dengan satu argumen konstan, dan satu argumen berubah, misalnya saat mencetak tabel waktu.
Aturan satu argumen ini berlaku untuk semua yang bukan konstanta atau variabel, termasuk loop dan kondisional. Namun, loop dan conditional ( For, Each, While, DoWhile, Ifdan IfElse) yang bisa dilakukan , yang berarti bahwa untuk benar-benar menjalankan mereka,Do fungsi harus dipanggil (lihat baris terakhir dalam jawaban). Sekali lagi, ini dapat menyimpan byte ketika berulang kali menjalankan loop yang sama, atau memungkinkan Anda untuk menjalankan kode arbitrer antara definisi dan menjalankan loop.
Akhirnya, ada tiga cara merujuk ke variabel, yang semuanya digunakan dalam program ini. Yang pertama adalah referensi langsung , di mana nama variabel diawali dengan $simbol. Ini mengakses nilai variabel secara langsung dan mengembalikannya. Yang kedua adalah referensi fungsional , yang tidak memiliki karakter awalan. Ini memungkinkan kode untuk membedakan antara fungsi (berpotensi parsial) yang ditugaskan untuk variabel, dan variabel aktual yang mengandung nilai tertentu. Akhirnya, referensi tidak langsung , diawali dengan @simbol, membuat variabel (jika belum ada) dan mengembalikan objek variabel dalam ruang lingkup yang diberikan. Ini memungkinkan Anda untuk membuat variabel loop (misalnya idalam for i in range(...)).
Cara kerja solusi yang sebenarnya
Berikut adalah kode yang tidak dipisahkan:
n = elem = $Input;
var = 0;
while = While[{
mod = Modulo[$elem];
Not[mod[1]];
}];
while = while[{
for = For[4];
for = for[@index];
for = for[{
Print[$elem];
equal = Equal[$index];
if = If[{ equal[1]; }];
if = if[{ func = Times[$elem]; }];
Do[$if];
if = If[{ equal[2];}];
if = if[{ func = Add[$elem];}];
Do[$if];
if = If[{ equal[3];}];
if = if[{ func = Subtract[$elem];}];
Do[$if];
if=If[{ equal[4];}];
if=if[{ func = Divide[$elem];}];
Do[$if];
elem = func[var = Increment[$var]];
}];
Do[$for];
}];
Do[$while];
Cobalah online!
Seperti yang Anda lihat, itu dimulai dengan menetapkan tiga variabel n, edan a, yang mewakili input, elemen perubahan dalam urutan, dan nomor modifikasi untuk masing-masing elemen baru. Kami kemudian membuat loop sementara:
w=While[{m=Modulo[$e];Not[m[1]];}];
{}me % m100 → 1n → 0 , n ≠ 0
Selanjutnya kita sampai pada monstrositas absolut yang terdiri dari tubuh while loop:
w=w[{f=For[4];f=f[@x];f=f[{Print[$e];q=Equal[$x];i=If[{q[1];}];i=i[{k=Times[$e];}];Do[$i];i=If[{q[2];}];i=i[{k=Add[$e];}];Do[$i];i=If[{q[3];}];i=i[{k=Subtract[$e];}];Do[$i];i=If[{q[4];}];i=i[{k=Divide[$e];}];Do[$i];e=k[a=Increment[$a]];}];Do[$f];}];
4x
Print[$e];
q=Equal[$x];
i=If[{q[1];}];i=i[{k=Times[$e] ;}];Do[$i];
i=If[{q[2];}];i=i[{k=Add[$e] ;}];Do[$i];
i=If[{q[3];}];i=i[{k=Subtract[$e] ;}];Do[$i];
i=If[{q[4];}];i=i[{k=Divide[$e] ;}];Do[$i];
e=k[a=Increment[$a]];
Pernyataan pertama mencetak setiap iterasi dari urutan sebelum mengubahnya. Kami kemudian membuat fungsi parsial untuk memeriksa kesetaraan dengan variabel loop x, dan menemukan empat pernyataan if. Setiap cek pernyataan jika xsama dengan 1, 2, 3 atau 4 masing-masing, dan kemudian ditunjuk kuntuk setiap fungsi dalam *, +, -dan /, kemudian membuatnya menjadi fungsi parsial dengan esebagai argumen. Akhirnya, kami menetapkan euntuk kmenjalankan dengan aargumen kedua, dan kenaikan a.