Rock, Polyglot, Gunting


68

Tulis sebuah program yang merupakan polyglot dalam tiga bahasa yang memainkan rock-paper-scissors .

Input untuk versi program apa pun selalu merupakan salah satu dari string rockatau paperatau scissors.

Dalam bahasa pertama program harus menampilkan pilihan rock – paper – scissors yang mengalahkan input:

Input     Output
rock      paper
paper     scissors
scissors  rock

Dalam bahasa kedua program harus menampilkan pilihan rock – paper – scissors yang mengikat input:

Input     Output
rock      rock
paper     paper
scissors  scissors

Dalam bahasa ketiga program harus menampilkan pilihan rock-paper-scissors yang hilang dari input:

Input     Output
rock      scissors
paper     rock
scissors  paper

Kode terpendek dalam byte menang. Tiebreaker adalah jawaban dengan suara lebih tinggi.

Input dan / atau output secara opsional dapat memiliki trailing newline tetapi sebaliknya hanya berupa string rock/ paper/ scissors. Anda dapat menggunakan huruf besar ROCK, PAPER, SCISSORSjika diinginkan.

Anda tidak boleh menggunakan versi berbeda dari bahasa yang sama (mis. Python 2 dan 3).


Bisakah bahasa salah untuk keluar?
Kritixi Lithos

2
@KritixiLithos Pergi dengan konsensus meta . "Saya pikir mengakhiri dengan kesalahan atau pengecualian yang tidak tertangkap baik-baik saja di sini, asalkan tidak menghasilkan output yang menyimpang ke STDOUT."
Hobi Calvin

2
Tidak pernah yakin dengan polyglots, bisakah berbagai bahasa mengambil input dengan cara yang berbeda?
Jonathan Allan

3
@ JonathanAllan Tidak apa-apa. Untuk beberapa set bahasa yang hanya memiliki bentuk input tertentu akan diperlukan.
Hobi Calvin

Jawaban:


60

Python, brainfuck dan JavaScript, 103 99 byte Yay di bawah 100 byte!

0,[.5,];p=["rock","scissors","paper"]
1//1;lambda x:p[p.index(x)-1];"""
x=>p[-~p.indexOf(x)%3]//"""

Dalam Python, ini mendefinisikan fungsi yang mengalahkan input, di brainfuck itu hanya program kucing sederhana, dan dalam JavaScript itu hilang. Berikut adalah versi yang memberi nama fungsi f,, dan juga meminta input dalam JavaScript dan Python 3:

0,[.5,];p=["rock","scissors","paper"]
1//1;f=lambda x:p[p.index(x)-1];"""
f=x=>p[-~p.indexOf(x)%3]//"""

1//1;"""
console.log(f(prompt())) // JavaScript
1//1"""; print(f(input())) # Python

Cobalah online (versi lama): Python , brainfuck , JavaScript

Penjelasan:

Dalam Python, """..."""adalah string multiline, yang dapat digunakan sebagai token apa pun. Ketika ditempatkan berdiri sendiri itu tidak melakukan apa-apa sama sekali. Saya menggunakan ini untuk "menyembunyikan" kode JavaScript dari Python. Hal yang sama berlaku untuk (0,[.5,])bit, itu hanya sebuah tuple yang berisi 0dan daftar 5, dan juga 1//1bagian, //dalam Python adalah pembagian integer, tetapi memulai komentar dalam JavaScript. Berikut kode yang dilucuti dari token ini:

p=["rock","scissors","paper"]
lambda x:p[p.index(x)-1]

Baris pertama cukup jelas, itu hanya mendefinisikan daftar pberisi pilihan yang berbeda di batu-kertas-gunting. Baris kedua mendefinisikan fungsi tanpa nama yang mengambil satu argumen x,, dan memberikan kembali pilihan yang mengalahkan x(mis. Elemen sebelumnya p)


Dalam JavaScript, //menunjukkan komentar satu baris. Mirip dengan Python, token tunggal diabaikan, jadi kode yang dilucuti dari token ini adalah:

p=["rock","scissors","paper"]
x=>p[-~p.indexOf(x)%3]

Ini bekerja mirip dengan Python, dengan terlebih dahulu mengatur daftar puntuk berisi pilihan dan kemudian mendefinisikan fungsi anonim yang memberikan pilihan yang hilang. -~xsama seperti x+1tetapi dengan diutamakan lebih tinggi sehingga saya dapat melewati parens.


Di Brainfuck, setiap karakter kecuali +-,.[]<>dihapus, meninggalkan ini:

,[.,][,,]
[.-]
>[-.]

Perintah ,membaca satu byte input, .mencetaknya dan [...]loop sementara nilainya tidak nol. Apa yang dilakukan oleh program ini adalah membaca input dan mencetaknya satu karakter pada satu waktu sampai karakter \0tersebut ditemukan. Karena kita tidak memilikinya dalam kode, kita dapat mengabaikan program lainnya. Akibatnya, ini hanya menggemakan kembali apa pun yang diketik pengguna, mengikat mereka secara efektif.


Sedang mengerjakan solusi yang sangat mirip tetapi Anda mengalahkan saya untuk itu :). Anda harus memperbarui tautan Javascript TIO btw, ini berbeda dari dua lainnya.
DimP

2
x=>p[p.indexOf(x)+1]||"rock"//"""dapat disingkat menjadix=>p[(p.indexOf(x)+1)%3]//"""
Luke

13
+1 Saya belum pernah melihat Brainfuck disembunyikan dengan baik. Biasanya sudah jelas jika polyglot juga mengandung BF. Bukan yang ini!
vsz

Saya pikir Anda dapat memindahkan sedikit program BF untuk menghemat satu atau dua byte:1//1,[.5,];
ETHproduksi

Sebagai soal fakta, saya pikir Anda dapat menggunakan yang ada []di baris kedua untuk menghemat lebih banyak byte:1//1,;lambda x:p[p.index(x,0)+-1];"""
ETHproduksi

40

Python 2, Ruby, Retina, 90 83 byte

-7 byte berkat Value Ink

s=['rock','paper','scissors']
print s[s.index((0and gets or input()))+(0and-2or-1)]

Cobalah secara Online: Python , Ruby , Retina

Menangkan di Ruby, kalah dalam Python, dan ikatan di Retina. Solusi ini memanfaatkan fakta yang 0benar di Ruby tetapi falsey dengan Python. Itu juga menggunakan pengindeksan negatif di Python dan Ruby.


andmemiliki operator lebih diutamakan or, jadi s.index(0and STDIN.gets or input())berfungsi. Juga, getsadalah alias untuk STDIN.getsdi Ruby.
Value Ink

10
+1 untuk tidak hanya mengomentari kode dengan cara yang berbeda!
leo

@ ValueInk Terima kasih! Saya pikir harus ada cara yang lebih ringkas untuk mendapatkan masukan di Ruby, dan ternyata ada
pecandu matematika

21

V, Brain-flak, dan Python 2, 97, 86, 81, 77 , 75 byte

o='rock paper scissors'.split()
lambda s:o[o.index(s)-1]#ddt.C rHd*wywVp

Dua byte disimpan berkat @ nmjcman101!

Ini sangat menyenangkan! Saya sangat suka jawaban ini karena ini adalah ikhtisar keren dari bahasa yang saya sukai: Editor favorit saya, bahasa non-esoterik favorit saya, dan bahasa yang saya tulis. (Secara teknis python 3 lebih baik, tetapi python 2 lebih golfier ¯\_(ツ)_/¯).

Cobalah online! dalam Python (sedikit dimodifikasi sehingga Anda dapat melihat output), yang mencetak apa yang hilang dari input.

Cobalah online! di Brain-Flak, yang mencetak apa yang terkait dengan input.

Cobalah online! dalam V, yang mencetak apa yang mengalahkan input.

Karena V bergantung pada karakter ASCII yang tidak dapat dicetak, berikut adalah hexdump:

00000000: 6f3d 2772 6f63 6b20 7061 7065 7220 7363  o='rock paper sc
00000010: 6973 736f 7273 272e 7370 6c69 7428 290a  issors'.split().
00000020: 6c61 6d62 6461 2073 3a6f 5b6f 2e69 6e64  lambda s:o[o.ind
00000030: 6578 2873 292d 315d 231b 6464 742e 4320  ex(s)-1]#.ddt.C 
00000040: 720e 1b48 642a 7779 7756 70              r..Hd*wywVp

Penjelasan:

Python

Dalam python, ini sangat mudah. Kami mendefinisikan daftar tiga elemen, dan mengembalikan elemen tepat sebelum input. Sejak -1mengembalikan elemen kembali, ini bekerja secara sirkuler, dan itu semua sangat mudah dan mudah. Kemudian, semuanya #adalah komentar.

Brain-Flak

Ini juga sangat mudah di otak-flak. Jika kita harus menang atau kalah, ini mungkin beberapa ratus byte. Tetapi ini sebenarnya bekerja dalam 0 byte. Pada awal program, semua input dimuat ke tumpukan. Pada akhir program, seluruh tumpukan dicetak secara implisit.

Setelah kita menghapus semua karakter yang tidak relevan, kode yang dilihat oleh brain-flak adalah

()[()]

Yang hanya mengevaluasi 1 + -1, tetapi karena nilai ini tidak digunakan sama sekali, itu adalah NOOP.

V

Di sinilah agak aneh. Memberi nama daftar python omungkin tampak sewenang-wenang, tetapi jelas tidak. Di V, obuka baris baru, dan masukkan kami ke mode insert. Kemudian,

='rock paper scissors'.split()
lambda s:o[o.index(s)-1]#

dimasukkan ke dalam buffer. Setelah itu, kode yang relevan adalah:

<esc>ddxxf'C r<C-n><esc>Hd*wywVp

Penjelasan:

<esc>                          " Return to normal mode
     dd                        " Delete this line. Now the cursor is on '='
       t.                      " Move the cursor forward to the "'"
         C                     " Delete everything after the "'", and enter insert mode
           r                   " From insert mode, enter '<space>r'
            <C-n>              " Autocomplete the current word based on what is currently in the buffer
                               " Since only one word starts with 'r', this will insert 'rock'
                 <esc>         " Leave back to normal mode
                      H        " Go to the first line (where the input is)
                       d*      " Delete everything up until the next occurence of the input
                         w     " Move forward one word
                          yw   " Yank the word under the cursor
                            Vp " And paste that word over the current line, delete everything else

@WheatWizard Dalam Python, tidak ada alasan untuk tidak terlalu (kecuali bahwa panjangnya sama). Tapi itu menghancurkan semuanya dalam V.
DJMcMayhem

@WheatWizard Penyebab V adalah bahasa yang sangat aneh, dan ini adalah tugas yang sangat aneh untuk itu. Semuanya sangat bergantung pada tata letak karakter, dan .split()lebih mudah untuk menyingkirkan berbagai kurung dan kutipan yang muncul dalam solusi Anda.
DJMcMayhem

Super minor, tetapi Anda dapat mengambil xxdan menggantinya dengan 2untuk membuat perintah 2f'karena ='akan dihapus d*nanti. EDIT: Anda mungkin bisa membuatnya t.?
nmjcman101

@ nmjcman101 Oooh, manis, ide yang luar biasa. Terima kasih atas tipnya!
DJMcMayhem

16

CJam , Retina , PHP, 92 86 85 byte

ECHO["rock",0,"scissors","paper"][ORD(READLINE())%4];
#];"scissors  paper rock"S/rci=

Harus dijalankan di PHP menggunakan -rflag.

Cobalah di CJam

Cobalah di Retina

Coba di PHP

CJam

Dalam CJam, semua huruf kapital adalah variabel yang telah ditentukan. Pada baris pertama, banyak dari nilai-nilai ini didorong ke stack, bersama dengan beberapa string dan array literal. Beberapa peningkatan, penurunan, dan operasi lainnya dilakukan.

Setelah semua itu, tumpukan dibungkus dalam array ( ]) dan dibuang ( ;), jadi tidak ada yang penting sama sekali. Program CJam utama adalah:

"scissors  paper rock"S/rci=

"scissors  paper rock"        e# Push this string
                      S/      e# Split it on spaces
                        r     e# Read the input
                         c    e# Cast to char (returns the first character in the string)
                          i   e# Cast to int (its codepoint)
                           =  e# Get the index of the split array (CJam has modular arrays)

Retina

Ini hampir terasa seperti selingkuh ...

Retina akan menggantikan setiap kecocokan dari regex ECHO["rock",0,"scissors","paper"][ORD(READLINE())%4];di input dengan #];"scissors paper rock"S/rci=. Apapun regex ini cocok, tentu tidak cocok apa pun di rock, paper, atau scissors, sehingga tidak ada substitusi dibuat. Input yang tidak dimodifikasi kemudian secara implisit dikeluarkan.

PHP

Baris kedua adalah komentar, jadi itu diabaikan.

Baris pertama menggunakan algoritma yang sama dengan bagian CJam, tetapi dengan urutan hasil yang berbeda.


1
Fungsi-fungsi TIL PHP tidak peka huruf besar-kecil.
gcampbell

14

C, C ++, Python; 227 226 216 byte

Menyimpan satu byte berkat @Mat!

#include<stdio.h>/*
f=lambda a:"rock"if a[0]=="r"else"paper"if a[0]=="p"else"scissors"
"""*/
int f(char*b){puts(sizeof'b'-1?*b=='r'?"paper":*b=='s'?"rock":"scissors":*b=='r'?"scissors":*b=='s'?"paper":"rock");}
//"""

Menentukan fungsi fdalam semua bahasa. Menang di C, mengikat Python, kalah dalam C ++. Seperti C ++ selalu / s

Bagian antara /*dan */adalah blok komentar di C dan C ++ sementara itu adalah fungsi lambda deklarasi di Python. Itu pada dasarnya membandingkan karakter pertama dari argumen fungsi dan mengembalikan langkah yang dimulai dengan huruf itu.

Bagian antara """s adalah string multiline dalam Python sementara itu adalah deklarasi fungsi di C dan C ++. sizeof'b'-1mencari tahu apakah bahasa saat ini adalah C dari C ++. Ini memiliki nilai kebenaran jika ukurannya selain 1, nilai palsu sebaliknya. Dalam C karakter literal adalah tipe panjang 4-byte sementara di C ++ mereka adalah tipe byte tunggal. Kemudian setelah bahasanya diketahui, ia hanya melihat huruf pertama dari input dan output yang sesuai.

C

Cobalah online!

C ++

Cobalah online!

Python

Cobalah online!


4
"Bagian di antara" "adalah s blok komentar dengan Python" Ini sebenarnya adalah string multiline.
ivzem

10

C ++, R, C; 252 240 226 220 209 byte

#define b/*
M=function()cat(readline())
#*/
#import<stdio.h>
#define M()main(){int i=0;char t[9];char*u;char*s[]={"rock","paper","scissors"};scanf("%s",t);for(;*t-*s[i++];);puts(s[(i+=sizeof('a')==1)%3]);}
M()

Menggunakan perbedaan antara C dan C ++ bahwa ukuran literal karakter adalah 4 byte dalam C dan 1 byte dalam C ++.

C ++:

Cobalah online!

R:

Hasil:

> #define b/*
> M=function()cat(readline())
> #*/
> #import<stdio.h>
> #define M()main(){int i=0;char t[9];char*u;char*s[]={"rock","paper","scissors"};scanf("%s",t);for(;*t-*s[i++];);puts(s[(i+=sizeof('a')==1)%3]);}
> M()
rock
rock

C:

Cobalah online!


8

Gawk, Retina, Perl; 68 byte

{eval"\$_=uc<>"}{$_=/[Sk]/?"paper":/[Pc]/?"rock":"scissors"}{print}

(dengan baris baru di akhir)

Gawk (pemenang)

Beberapa sampah demi Perl, lalu ubah konten baris ( $_, yang sama dengan $0karena variabel _tidak terdefinisi) tergantung pada apakah itu berisi a katau a c, lalu cetak hasilnya. Abaikan peringatan tentang urutan pelarian, saya bermaksud melakukan itu.

{a_string_that_is_ignored}
{$_ = /[Sk]/ ? "paper" : /[Pc]/ ? "rock" : "scissors"}
{print}

Retina (dasi)

Trik yang sama seperti Basic Sunset dan lainnya: ganti kecocokan dari beberapa regexp konyol di baris pertama dengan konten baris kedua, jadi teruskan inputnya.

Perl (pecundang)

Baca satu baris dan ubah menjadi huruf besar, lalu pilih kata berdasarkan huruf yang dikandungnya, dan cetak hasilnya. Langkah pertama dan terakhir dibungkus menggunakan evaluntuk menyembunyikannya dari awk.

$_ = uc <>;
$_ = /[Sk]/ ? "paper" : /[Pc]/ ? "rock" : "scissors";
print $_

Melongo, Retina, perl -p; 57 byte

Saya memasukkan ini sebagai bonus karena saklar baris perintah perl -pseharusnya menjadi bagian dari program dengan aturan yang biasa di situs ini, yang akan membuatnya bukan polyglot.

{eval"\$_=uc"}$_=/[Sk]/?"paper":/[Pc]/?"rock":"scissors"

Lagi dengan baris baru terakhir untuk Retina . Kali ini, dengan perl -puntuk mencetak output secara otomatis, biaya overhead perl berkurang secara signifikan. Saya dapat membiarkan tugas $_memicu cetakan tersirat dalam awk .


Bisakah Anda menambahkan tautan TIO (atau kompiler daring serupa untuk menguji) untuk masing-masing?
Kevin Cruijssen

@KevinCruijssen ditambahkan. Output pada TIO untuk perl -pkosong, itu harus bug di TIO.
Gilles 'SO- berhenti menjadi jahat'

7

> <>, Retina, Python 2: 144 127 123 byte

1 byte disimpan berkat @Loovjo dengan menghapus spasi

4 byte disimpan berkat @ mbomb007 dengan menggunakan inputsebagai gantinyaraw_input

#v"PAPER"v?%4-2{"SCISSORS"v?%2:i
#>ooooo; >oooooooo<"ROCK"~<
a="KRS".index(input()[-1])
print["SCISSORS","ROCK","PAPER"][a]

Diposting di TNB sebagai tantangan , saya memutuskan untuk mencoba kombinasi bahasa ini.

> <>

Cobalah online!

IP mulai bergerak ke kanan.

#                      Reflect the IP so that it now moves left and it wraps around the grid
i:                     Take one character as input and duplicate it

Karakter yang mungkin akan dimasukkan ke dalam input adalah PRS(karena program hanya mengambil karakter pertama). Nilai ASCII mereka adalah 80, 81dan 82.

2%                     Take the modulo 2 of the character. Yields 0, 1, 0 for P, R, S respectively
?v                     If this value is non-zero (ie the input was ROCK), go down, otherwise skip this instruction

Jika inputnya rock, maka inilah yang akan terjadi:

<                      Start moving to the left
~                      Pop the top most value on the stack (which is the original value of R and not the duplicate)
"KCOR"                 Push these characters onto the stack
<                      Move left
oooo                   Output "ROCK" as characters (in turn these characters are popped)
o                      Pop the top value on the stack and output it; but since the stack is empty, the program errors out and exits promptly.

Jika tidak, jika inputnya adalah SCISSORSatau PAPER, inilah yang akan dijumpai oleh IP:

"SROSSICS"             Push these characters onto the stack
{                      Shift the stack, so the the original value of the first char of the input would come to the top
2-4%                   Subtract 2 and take modulo 4 of the ASCII-value (yields 2, 0 for P, S respectively)
?v                     If it is non-zero, go down, otherwise skip this instruction

Jika inputnya adalah PAPER, maka:

>ooooooooo             Output all characters on the stack (ie "SCISSORS")
<                      Start moving left
o                      Pop a value on the stack and output it; since the stack is empty, this gives an error and the program exits.

Kalau tidak (jika inputnya SCISSORS):

"REPAP"                Push these characters onto the stack
v>ooooo;               Output them and exit the program (without any errors).

Retina

Cobalah online!

Dalam hal ini, Retina menganggap setiap pasangan dari dua garis sebagai pasangan yang cocok dan pengganti. Misalnya, ia mencoba mengganti apa pun yang cocok dengan baris pertama dengan baris kedua, tetapi karena baris pertama tidak pernah cocok, itu tidak pernah menggantikannya dengan apa pun, sehingga menjaga input.

Python 2

Cobalah online!

Program Python membutuhkan input untuk diletakkan di antara "s.

Dua baris pertama adalah komentar dalam Python.

a="KRS".index(input()[-1])             # Get the index of the last character of the input in "KRS"
print["SCISSORS","ROCK","PAPER"][a]    # Print the ath index of that array

Saya tidak berpikir ruang setelah printdi baris terakhir diperlukan.
Loovjo

Anda bisa menggunakan input()bukan raw_input().
mbomb007

@Loovjo Terima kasih atas tipnya :)
Kritixi Lithos

@ mbomb007 Itu sepertinya tidak berhasil
Kritixi Lithos

@KritixiLithos berfungsi jika bagian python mengambil input dengan tanda kutip
undergroundmonorail

0

Ruby, Clojure, Common Lisp - 251 bytes

(print(eval '(if()({(quote SCISSORS)(quote PAPER)(quote PAPER)(quote ROCK)(quote ROCK)(quote SCISSORS)}(read))(eval(quote(nth(position(read)(quote("SCISSORS""PAPER""ROCK")):test(quote string-equal))(quote(ROCK SCISSORS PAPER))))))))
;'['"'+gets+'"']))

Versi yang lebih mudah dibaca dengan spasi putih:

(print(eval '(if() ; distinguish between CLojure and Common Lisp
    ({(quote SCISSORS)(quote PAPER)(quote PAPER)
       (quote ROCK)(quote ROCK)(quote SCISSORS)}(read)) ; use hash-map as a function
    (eval(quote(nth ; find index of the input arg in the list
       (position(read)(quote("SCISSORS""PAPER""ROCK")):test(quote string-equal))  
    (quote(ROCK SCISSORS PAPER))))))))
 ;'['"'+gets+'"'])) ; ruby indexation

Clojure selalu menang, Ruby selalu imbang, Common Lisp selalu kalah.

Untuk Ruby, semua yang ada di dalam 'adalah string. Itu membentang di dua baris. Kemudian ia menggunakan []operator dengan argumen string yang mengembalikan string itu sendiri jika ada dalam string. Hasilnya dicetak, Ruby hanya mencerminkan input.

Baris kedua adalah komentar untuk Clojure dan Common Lisp. Banyak evaldan quoteharus digunakan karena Clojure perlu memastikan bahwa semua simbol valid. Akan lebih baik untuk menggunakan kembali kode lebih tetapi nthfungsi bahkan memiliki tanda tangan yang berbeda dalam bahasa ini. Pada dasarnya untuk Clojure if()mengevaluasi ke true dan pergi ke cabang pertama ketika peta hash dari varian yang mungkin disebut dengan argumen dibaca dari stdin. Lisp umum pergi ke cabang kedua, ia menemukan posisi argumen dari stdin dalam daftar dan mengembalikan item yang sesuai dari daftar yang dihasilkan.

Saya kira bagian Common Lisp dapat golf lebih banyak.

Lihat online: Ruby , Common Lisp , Clojure


0

Scala, Javascript dan Ook, 167 byte

s=>{var a="paper,scissors,rock".split(",")/*/**/a[-1]="rock"
return a[a.indexOf(s)-1];`*/a((a.indexOf(s)+1)%3)//`//Ook. Ook. Ook! Ook? Ook. Ook! Ook! Ook. Ook? Ook!
}

Coba di Scala Coba di Javascript Coba versi brainfuck dari Ook

Scala - menang

s=>{                                                      //define an anonymous function
  var a="paper,scissors,rock".split(",")                  //generate the array
  /* /* */ a[-1]="rock"                                   //scala supports nested comments,
  return a[a.indexOf(s)-1];`                              //so this comment...
  */                                                      //...ends here
  a((a.indexOf(s)+1)%3)                                   //return the winning string
  //`//Ook. Ook. Ook! Ook? Ook. Ook! Ook! Ook. Ook? Ook!  //another comment
}

Javascript - kehilangan

s=>{                                                   //define an anonymous function
  var a="paper,scissors,rock".split(",")               //generate the array
  /*/**/                                               //a comment
  a[-1]="rock"                                         //put "rock" at index -1
  return a[a.indexOf(s)-1];                            //return the string that loses
  `*/a((a.indexOf(s)+1)%3)//`                          //a string
  //Ook. Ook. Ook! Ook? Ook. Ook! Ook! Ook. Ook? Ook!  //a comment
}

Ook! - ikatan

Bagian Ook adalah program kucing brainfuck sederhana yang ,[.,]ditranslasikan ke Ook.

s=>{var a="paper,scissors,rock".split(",")/*/**/a[-1]="rock"   //random stuff
return a[a.indexOf(s)-1];`*/a((a.indexOf(s)+1)%3)//`//         //more random stuff
Ook. Ook. Ook! Ook? Ook. Ook! Ook! Ook. Ook? Ook!              //the program
}                                                              //random stuff

Jika Anda menggunakan a[(a.indexOf(s)+2)%3]maka Anda tidak perlu mengatur a[-1]="rock". Juga, tidak bisakah Anda memasukkan kode Ook ke dalam string JavaScript juga?
Neil
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.