Menerapkan gunting kertas batu klasik.
Kondisi:
- pengguna akan memasukkan 'r', 'p' atau 's'
- program akan menampilkan 'r', 'p' atau 's' dan hasilnya
- pilihan program ('r', 'p' atau 's') harus pseudo acak ( Saya melihat Anda Howard )
- hasil dapat diwakili dengan karakter yang dapat dicetak, harus selalu ada tiga hasil yang mungkin untuk apa yang pengguna masukkan (pengguna menang, kalah atau seri).
- apa yang terjadi jika pengguna tidak memasukkan apa pun, atau sesuatu yang berbeda yang 'r', 'p' atau 's' seharusnya tidak penting.
Kamu butuh:
- Berikan kode golf.
- Kode yang tidak dipisahkan
- Bagaimana Anda menjalankan program
- Contoh dijalankan
Saya akan memilih jawaban dengan karakter yang lebih sedikit, jika dasi menyajikan jawaban yang paling dipilih akan dipilih.
Golf yang bagus dan semoga sukses selalu menguntungkan Anda.
Saya akan memposting jawaban saya sendiri, di Jawa.
Untuk yang tinggal di gunung di bawah batu:
r = rock
p = kertas
s = gunting
rock: menang dengan gunting, kalah dengan kertas, dasi dengan batu.
kertas: menang untuk bergoyang, kalah dengan gunting, dasi dengan kertas.
gunting: menang di atas kertas, kalah dengan batu, dasi dengan gunting.
Posisi Saat Ini:
- UN: Nama pengguna
- PL: Bahasa Pemrograman
- CC: Hitungan Karakter
- UV: Up vote
╔══════════════════╦════════════╦══════╦════╗ ║ UN ║ PL ║ CC ║ UV ║ ╠══════════════════╬════════════╬══════╬════╣ ║ Howard ║ GolfScript ║ 6 ║ 15 ║ ║ primo ║ Perl ║ 27 ║ 7 ║ ║ TwiNight ║ APL ║ 31 ║ 4 ║ ║ primo ║ Perl ║ 33 ║ 7 ║ ║ marinus ║ APL ║ 36 ║ 5 ║ ║ primo ║ Perl ║ 38 ║ 7 ║ ║ primo ║ Perl ║ 48 ║ 7 ║ ║ manatwork ║ Ruby ║ 54 ║ 13 ║ ║ w0lf ║ GolfScript ║ 62 ║ 4 ║ ║ tmartin ║ K ║ 67 ║ 2 ║ ║ Abhijit ║ Python 3 ║ 74 ║ 5 ║ ║ beary605 ║ Python 3 ║ 76 ║ 4 ║ ║ rlemon ║ javascript ║ 85 ║ 4 ║ ║ ugoren ║ C ║ 86 ║ 3 ║ ║ Egor Skriptunoff ║ LUA ║ 87 ║ 4 ║ ║ Shmiddty ║ javascript ║ 87 ║ 3 ║ ║ Fors ║ Befunge ║ 107 ║ 3 ║ ║ Briguy37 ║ javascript ║ 117 ║ 2 ║ ║ Vi. ║ Clojure ║ 129 ║ 1 ║ ║ Henrik ║ C# ║ 167 ║ 4 ║ ║ dystroy ║ Go ║ 169 ║ 1 ║ ║ Praveen ║ javascript ║ 250 ║ 0 ║ ║ ryan ║ javascript ║ 256 ║ 1 ║ ║ primo ║ ferNANDo ║ 259 ║ 5 ║ ║ anakata ║ Java ║ 259 ║ 1 ║ ║ epoch ║ Java ║ 387 ║ 1 ║ ║ jdstankosky ║ LOLCODE ║ 1397 ║ 15 ║ ╚══════════════════╩════════════╩══════╩════╝
Saya tidak dapat memilih jawaban Howards, karena ini merupakan upaya (berhasil) untuk membengkokkan aturan, tetapi saya mengubahnya, untuk membuatnya lebih eksplisit.
jawaban primo 27 karakter tidak dapat dipilih karena itu bukan pseudo random per se
primo -p jawaban, aku akan pergi dengan "-p akan dihitung sebagai 3 byte: satu untuk -, satu untuk p, dan satu lagi spasi yang diperlukan."
Terima kasih untuk semua yang menjawab, saya harap Anda bersenang-senang!
CATATAN: Saya akan mencoba mengedit ini setiap minggu, untuk menyesuaikan tabel, dan mengubah jawaban yang saya pilih jika seseorang mengalahkan yang saat ini, jadi Jika Anda baru saja sampai di sini, posting jawaban Anda jika Anda mau!
-p
akan dihitung sebagai 3 byte: satu untuk-
, satu untukp
, dan satu lagi ruang kosong yang diperlukan. Namun, banyak kompetisi lain di CG.SE telah menghitung setiap opsi sebagai satu byte. Biasanya tergantung pada penulis pertanyaan untuk memutuskan sistem mana yang akan dihormati.Jawaban:
APL, 31
x←'rps'
Tetapkan string'rps'
kex
(?3)⌷
Pilih bilangan bulat acak 1 ~ 3, pilih indeksx
⍞,
Masukkan input pengguna ke pilihan mesin⎕←
Keluaran string yang dihasilkanx⍳
Konversi ke array numerik oleh indexOf dix
-/
Perbedaan kedua angka tersebut1+|3
Modulus 3 dan ditambah 1'TWL'[...]
pengindeksan dari'TWL'
Mencicipi
Pengguna pilih rock, pilih program kertas: Kalah
sumber
LOLCODE, 1397
Catatan: Saya mengirimkan ini sebelum saya perhatikan persyaratan menang diubah dari popularitas dengan golf tie-break ke golf dengan popularitas tie-break.
Sebenarnya tidak ada sintaks yang ketat, tapi saya yakin ini bisa diterima.
Jika ini berhasil dilaksanakan sebagai
RockPaperScissors.LOL
, inilah beberapa hasil acak yang mungkin:Rock
- Output:I GUESSED SCIZZORS U WONNED
Paper
- Output:I GUESSED PAPER NOWAI TIED
Scissors
- Output:I GUESSED ROCK LOL U LOZED
Tuna
- Output:WHAT U SAYZ? YOU BURNTED MAH TREAT!
sumber
GolfScript
Kode di atas mengimplementasikan fungsionalitas yang diperlukan. Selain itu, memastikan bahwa pemain tidak akan pernah marah karena (dianggap) tidak adil dari strategi komputer.
Versi tidak disatukan
Cara menjalankan program
Input (karakter tunggal 'r', 'p', 's') harus disediakan di STDIN, mungkin diakhiri dengan baris baru.
Contoh dijalankan
Penjelasan kode
Untuk semua yang tidak terbiasa dengan GolfScript saya akan menambahkan penjelasan rinci tentang cara kode ini bekerja. Kode dasarnya ada tiga bagian.
Catatan
Karena ini bukan golf kode tetapi kontes popularitas saya tidak memilih versi terpendek. Mungkin dalam kasus dasi, kode yang lebih pendek akan melumpuhkan solusi saya. Namun demikian, bagi mereka yang tertarik dalam bermain golf, kemungkinan berikut diberikan:
0
sebagai output untuk undian. Dengan demikian, program valid terpendek adalah kode satu karakter0
.sumber
n"d"
, ketika pertanyaan mengatakan bahwa output harus berupa karakter yang dapat dicetak, ia tidak mengatakan apa-apa tentang penggunaan kata-kata penuh.Ruby:
6154 karakterEntah bagaimana menjelaskan:
Seluruh masalah dikurangi untuk menghitung hasil berikut:
Di mana angkanya berarti:
Untuk ini saya menggunakan rumus: machine_choice - human_choice. Ini kadang-kadang menghasilkan nilai negatif, tetapi karena hanya digunakan sebagai indeks dan indeks negatif dihitung mundur, akan memilih elemen array yang benar.
Metode yang digunakan (orang lain yang
Fixnum
jelas):inspect
diikuti oleh baris baru ke output standar program. "max.to_i.abs == 0
, rand mengembalikan nomor floating point pseudo-acak antara 0,0 dan 1,0, termasuk 0,0 dan tidak termasuk 1,0.”Tidak Disatukan:
Contoh dijalankan:
sumber
[(c-o.index($_)+3)%3]
dapat diganti oleh[c.-o.index$_]
untuk 7 byte. Juga, Anda harus menambahkan dua pada skor Anda-nl
setidaknya.c.
tipnya..-
. Operator putus-putus memiliki prioritas jauh lebih rendah daripada rekan-rekan mereka yang tidak bertitik. Misalnya,a/(b+c)
bisa diganti dengana./b+c
.C # (167 karakter)
Pertama saya mencoba bermain golf.
Golf
using System;class P{static void Main(string[] i){var m="rspr";var a=m[Environment.TickCount%3];Console.WriteLine(a+" "+(i[0][0]==a?"T":m.Contains(i[0]+a)?"W":"L"));}}
Tidak bermain golf
Contoh Jalankan Aplikasi ini membutuhkan input char tunggal sebagai argumen 1 ke aplikasi, baik
r
,s
ataup
.Semua hasil yang mungkin
cmd > app.exe r
memberikan outputr T
(rock, tie)cmd > app.exe r
memberikan outputp L
(kertas, hilang)cmd > app.exe r
memberikan hasils W
(gunting, menang)cmd > app.exe p
memberikan outputr W
(rock, win)cmd > app.exe p
memberikan hasilp T
(kertas, dasi)cmd > app.exe p
memberi hasils L
(gunting, hilang)cmd > app.exe s
memberikan outputr L
(batu, hilang)cmd > app.exe s
memberikan hasilp W
(kertas, menang)cmd > app.exe s
memberikan hasils T
(gunting, dasi)sumber
Perl 48 byte
Script mencetak hasil dari perspektif komputer, misalnya jika pemain memilih
r
dan komputer memilihs
, hasilnya adalahLose
.$%
(format nomor halaman) digunakan untuk menyimpan langkah komputer, karena hanya dapat berisi nilai integer, yang menyimpan pemain int.Tidak Disatukan:
Penggunaan sampel:
Script juga dapat dijalankan secara interaktif, dengan mengetik langkah Anda diikuti oleh Enter:
Peregangan Aturan
Perl 35 +3 byte
Membutuhkan
-p
saklar baris perintah (dihitung sebagai 3 byte). Setiap hasilWin
,Lose
danDraw
telah dipetakan keW
,L
,D
. Baris baru antara pilihan komputer dan hasilnya telah dikecualikan.Penggunaan sampel:
Perl 30 +3 byte
Sekali lagi membutuhkan
-p
. Di siniWin
,Lose
danDraw
telah dipetakan ke2
,1
dan0
masing - masing. Ini masih memenuhi persyaratan teknis, karena mereka adalah karakter yang dapat dicetak.Penggunaan sampel:
Perl 24 +3 byte
Membutuhkan
-p
, wld dipetakan ke2
,1
,0
seperti sebelumnya. Masing^T
- masing harus diganti dengan karakter ascii literal 20. Yang ini diakui agak berlebihan;$^T
mengembalikan jumlah detik sejak zaman dari saat skrip dimulai. Semua hasil adalah mungkin, tetapi itu tidak cukup memenuhi syarat sebagai pseudo-acak.Penggunaan sampel:
sumber
APL (
3836)Output 'T', 'W' dan 'L' untuk dasi, menang dan kalah.
Contoh dijalankan:
(Jenis pengguna 'p' untuk kertas. Komputer memilih 'r' (rock), pengguna menang)
Penjelasan:
⌽↑⌽∘'TWL'¨⍳3
: menghasilkan matriks berikut:⍞⍳⍨c←'rps'
: setelc
ke string'rps'
, baca input pengguna dan dapatkan indeks input pengguna dalam string (ini akan menjadi nilai dari 1 hingga 3). Indeks ini digunakan sebagai koordinat Y ke dalam matriks.i←?3
: dapatkan nomor acak dari 1 hingga 3 dan simpan dii
, ini adalah pilihan komputer. Ini digunakan sebagai koordinat X ke dalam matriks.c[i]
: gunakani
sebagai indeks ke dalamc
, menampilkan pilihan komputer sebagai 'r', 'p', atau 's'.sumber
ferNANDo 1184 (259 golf ) byte
Seorang juru bahasa yang ditulis dengan Python dapat ditemukan di bagian bawah halaman yang ditautkan.
ferNANDo adalah bahasa esoterik yang hanya mendukung satu jenis variabel, boolean, dan hanya satu operasi, NAND. Seperti yang Anda bayangkan, ini bisa mengarah pada beberapa logika yang cukup panjang untuk menyelesaikan tugas yang tampaknya sederhana. Ini memiliki dukungan untuk membaca dari stdin (satu byte pada satu waktu), menulis ke stdout (juga satu byte pada suatu waktu), loop bersyarat, dan juga generator boolean acak.
Tidak ada kata kunci apa pun; semuanya adalah variabel. Fungsi pernyataan ditentukan hanya oleh jumlah variabel yang dikandungnya. Juga tidak ada komentar, jadi saya sudah melakukan yang terbaik untuk membuat kode berkomentar sendiri. Empat baris terakhir mungkin agak membingungkan, tapi mungkin akan cukup untuk mengatakan bahwa itu mencetak
Win!
,Lose
atauDraw
tergantung pada hasil.Script dapat dijalankan secara interaktif, dengan mengetik langkah Anda diikuti oleh Enter.
Penggunaan sampel (dengan asumsi Anda telah menamai interpreter
nand.py
):Sunting: Hanya untuk membuktikan bahwa ferNANDo dapat bersaing dengan Java, inilah versi 'golf' dengan kecepatan 259 byte . Logikanya sangat berbeda; ia memeriksa
not win
dannot tie
, yang menyimpan beberapa gerbang NAND (karena dengan begitu saya hanya perlunot
versi gerakan pemain, dan karenanot lose
tidak diperlukan untuk output). Namun, tidak terlalu menarik untuk dibaca.sumber
o_shi- o_shi- o_shi-
Ini komentar diri yang lucu.q
, tetapi ia melakukan hal yang masuk akal dan reroll.Python 3.x: 74 Karakter
Bagaimana itu bekerja
Berdasarkan nasib, itu menentukan apa yang harus pilihannya didasarkan pada formula
Versi Un-golfed
Contoh dijalankan
sumber
Lua, 87
Pemakaian:
Tidak Disatukan:
sumber
GolfScript 62
Solusi GolfScript alternatif, jauh lebih membosankan daripada Howard :).
Program memilih langkah secara acak dan menampilkan hasil dari perspektif pengguna.
Kode
Contoh dijalankan
Tes online
Anda dapat menjalankan program dan bereksperimen dengan input yang berbeda di sini: http://golfscript.apphb.com/?c=OydzJwoKJ3Jzc3BwcicuWzZyYW5kPV0nJys6wqdAKy4uJiwoez8pwqdcJ0xvc2UnJ1dpbid3dpdjpdmn
Namun, perhatikan bahwa parameter (pemindahan pengguna) yang biasanya dilewatkan dalam baris perintah sekarang ditambahkan ke tumpukan dalam kode itu sendiri (tidak ada cara untuk memberikan parameter baris perintah "nyata" dalam alat online ini).
Versi "Tidak Terikat"
Saya tidak tahu apa artinya ungolfed ketika datang ke GolfScript, jadi saya mencoba untuk menambahkan komentar. Semoga itu akan menjelaskan cara kerja kode dan membuatnya sedikit lebih mudah dibaca:
sumber
C,
9286 karakterMencetak pilihan komputer, dan hasil dari sudut pandang pengguna - W = Anda menang, L = Anda kalah, T = dasi.
Rumus sederhana
x-y
, diberikan nilai ASCII dari pilihan, memberikan 0 pada gambar (jelas) dan nilai unik dalam setiap kasus lainnya.sumber
Python 2 (
86848078), Python 3 - 76 karakter0 - seri, 1 - kalah, 2 - menang
Tidak disatukan
Cara menjalankan:
python file_name_here.py
Masalah:
AI Komputer: 35 karakter
sumber
A
, dan Anda dapat menyimpan char lain denganfrom random import*
.from random
, karena saya pikir itu tidak mengubahnya ...Pertama coba tanpa meninjau orang lain.
golf:
10785 byteoutput adalah [npc-choice] [1: win, 2: loss, 3: tie]
ungolfed:
sumber
PowerShell:
144133117111 1119273Kode golf:
Dapat dijalankan langsung dari konsol.
Tidak disatukan, dengan komentar:
Beberapa sampel berjalan di konsol:
sumber
JAVA 259 :(
Kode yang sangat tidak diseragamkan:
Sampel berjalan:
sumber
Befunge: 107 karakter
Agak kikuk. Itu menyusut, pertanyaannya adalah berapa banyak.
sumber
JavaScript (87)
Golf:
Tidak Disatukan:
Anda cukup menempelkan kode di konsol javascript browser Anda untuk menjalankannya.
Jika saya diizinkan mencetak hasilnya sebelum mencetak pilihan komputer (83) :
sumber
K, 67
Mencetak W, L, D untuk menang / kalah / seri.
Tidak Disatukan:
Atau dalam Q, yang lebih mudah dibaca:
Contoh Run:
sumber
Javascript, 117 karakter
Berikut adalah pendekatan berbasis data untuk masalah ini. Ini mungkin dapat dioptimalkan dengan menghasilkan data win / loss / draw alih-alih memetakannya secara manual, tapi ini awal :)
Golf:
Tidak Disatukan:
Akhirnya, inilah biola dengan keduanya.
sumber
Javascript: 256
golf:
ungolfed:
sumber
Clojure:
Versi mini (129 karakter kode):
sumber
JAVA (387) kode golf pertama!
Tidak disatukan
Golf (Jarak / Lekukan)
Bukan kode terpendek, tetapi percobaan pertama saya
sumber
import java.util.*
2)HashMap l
->Map l
3) dilemparkan ke(int)
alih-alih(Integer)
4)new Random().nextInt(3)
5) hapusnew int[][]
6) hapus gips ke(Character)
7) gunakan ints alih-alih karakter.Go (169)
Golf:
Tidak disatukan (seperti yang diformat oleh
go fmt
):Jalankan:
sumber
Pyth , 23
Output dalam bentuk:
Tie: 0 Menang: 1 Kehilangan: 2
Penjelasan:
Jalankan sebagai berikut:
Untuk hanya 4 karakter lagi, kita dapat menggunakan T untuk dasi, W untuk menang dan L untuk kehilangan:
Semuanya sama sampai perbedaan indeks, pada titik mana kita menggunakan perbedaan sebagai indeks ke dalam string
"TWL"
.Catatan: sementara saya mengembangkan bahasa ini setelah tantangan diposting, saya belum melihat tantangan sampai hari ini. Tantangan itu tidak mempengaruhi aspek bahasa apa pun.
sumber
Groovy, 89
Mengambil pilihan pengguna sebagai argumen. Contoh:
sumber
C # & LinqPad 133
golf:
ungolfed:
contoh output (input s): r> L // Komputer memilih rock (r) -> jadi kami kehilangan
sumber
JavaScript (79)
Membenturkan yang lama, tapi ini dia ...
Dengan bonus tambahan bahwa Anda dapat menggunakan batu apa saja yang Anda suka pegnatite, pyroxenite, scoria, sovite, kimberlite, trondjemite, tuf atau lainnya. Satu-satunya batasan adalah Anda tidak dapat menggunakan
p
ataus
;-)Kode golf:
Trik utama yang digunakan adalah:
1. u = ~~{}[prompt()]
Menggunakan objek
{}
dan mengambil nilai dengan input pengguna dariprompt()
. Sejauh ini baik. Maka alih-alih memilikir : 0
kita dapat memaksanya untuk dikonversi0
dengan menggunakan~~
operator NOT. Hal ini sering digunakan untuk nomor lantai, tetapi juga memiliki (keuntungan) tidak kembaliNaN
ketika operator lain akan, seperti misalnya:+{a:1, b:2}['c']
.2. c = new Date%3
Tanggal sering diakali dengan misalnya menggunakan
+new Date
untuk mengubahnya menjadi timestamp secara langsung, kalau tidak orang akan mendapatkan representasi string. Di sini dengan menggunakan mod satu mencapai efek yang sama.3. 'rps'[c]
Akses terindeks pada string yang memberikan pilihan komputer
0 = r
,1 = p
atau2 = s
.4. (u==c ? 2 : !u&c>1 | u&!c | u>1&c )
Kode ungolfed bisa berupa ini:
sumber
Golfscript - 29
Ini adalah jawaban aktual saat ini (melihat Anda
n"Draw"
,: P).Tidak Disatukan:
Anda dapat menjalankannya dengan
ruby golfscript.rb MyCode.txt
, di manaMyCode.txt
kode program.Contoh berjalan (semua dengan input "r", tetapi bekerja dengan segalanya) (dasi adalah 0, menang adalah 2, kerugian adalah 1):
Jika Anda ingin penjelasan tentang versi dan / atau melihat peningkatan potensial, katakan padaku.
sumber
Javascript,
657170Tanpa output pilihan komputer: 65
Hanya untuk menguji solusi itu sudah benar:
Dengan output pilihan komputer: 71
70
dan tesnya:
sumber