Oke, jadi kemarin adalah hari Natal ke-2 dan orangtuaku (grand) dan aku punya permainan "sjoelen", seperti yang disebut di Belanda. Programmer batin muncul dalam diri saya, tetapi tepat ketika saya memiliki jawabannya, saya kehilangan jawabannya. Saya ingin Anda membuatnya kembali.
Aturan:
Anda memiliki papan kayu, sjoelbak , dengan 4 kotak, masing-masing dengan nomor mereka sendiri. Ketika schijf ( Objek keping-suka) masuk ke dalam salah satu kotak Anda mendapatkan poin di atas kotak itu.
Ketika ada schijf di semua 4 kotak, Anda tidak mendapatkan 10 tetapi Anda mendapatkan 20 poin.
Contoh:
Dari kiri ke kanan: 3 5 4 3
Setiap kotak memiliki setidaknya 3 schijven (Plural of schijf ) sehingga 20 * 3 = 60 poin.
Nilai yang dihasilkan: 0 2 1 0
0 * 2 + 2 * 3 + 1 * 4 + 0 * 1 = 10 poin.
Yang membuat total 60 + 10 = 70 poin.
Input:
Jumlah skema dari kiri ke kanan, yaitu "4 5 4 5", [4,5,4,5], "4 \ n5 \ n4 \ n5", apa pun yang Anda suka.
Output:
Jumlah poin, yaitu 84, sebagai output, variabel, return atau di atas tumpukan, apa pun yang Anda suka.
Seperti dalam setiap dan setiap kode golf, Anda tidak dapat menggunakan skrip eksternal dan kode dengan byte paling sedikit menang.
PS: Seperti yang sudah Saudara ketahui, saya orang Belanda. Jangan ragu untuk mengedit kemungkinan kesalahan tata bahasa.
sumber
Jawaban:
CJam,
23 2120 byteSaya mungkin bisa bermain golf beberapa byte dari ini.
Inputnya seperti
Output adalah skor
Bagaimana itu bekerja
Algoritma
[1 2 3 4]
.1 + 2 + 3 + 4 = 10
, saya cukup menambahkan schijven umum minimum untuk masing-masing untuk mendapatkan efek10
skor bonus .1
masing masing, lalu saya gandakan yang kedua dengan2
dan menambahkannya ke yang pertama. Dalam iterasi berikutnya, saya mendapatkan jumlah dan skor3
saat ini. Dan seterusnya.Cobalah online di sini
sumber
Piet, 240 (30 * 8) codels, 138 berisi kode aktual
Ukuran codel 10, untuk visibilitas yang lebih baik
Contoh uji:
Tampilan aliran:
Menggunakan steno saya sendiri untuk penanganan yang lebih mudah dan tampilan yang ringkas. Ini menunjukkan aliran program umum, bukan lokasi yang tepat dari codels.
Penjelasan lengkap:
Simpan gambar dan coba di penerjemah online Piet ini:
PietDev, penerjemah online Piet
sumber
APL (Dyalog Classic) ,
161312 byte-3 terima kasih kepada @ Adám
Cobalah online!
⌽+⌊/
membalikkan (arg) + min (arg)1⌽
putar 1 ke kiri+\
jumlah parsial+/
jumlahsumber
Mathematica,
38322320 byte(Dengan bantuan dari desir )
Gunakan dengan menempelkan input ke akhir:
Alternatif (36 byte):
sumber
Tr[(# + Min@#) {2, 3, 4, 1}] &
20*Min@#
, Anda bisa menghilangkannya dengan mengganti minus dengan plus, karena dengan mudah2+3+4+1==10
.R,
4140 karakterPemakaian:
Dalam contoh terakhir,
a
adalah vektor3 5 4 3
,a-b
yaitu0 2 1 0
, yang kita gandakan dengan vektor2 3 4 1
sehingga memberi0 6 4 0
yang kita tambahkan dengan5*b
memberi15 21 19 15
(5*b
didaur ulang untuk setiap anggota vektor ditambahkan, maka secara efektif menambahkan4*5*b
), yang akhirnya kita jumlahkan, dengan demikian memberi70
.sumber
b=min(a<-scan());sum(5*b+(a-b)*c(2:4,1))
JavaScript (ES6),
9347 bytePemakaian:
s(1, 2, 3, 4)
Cara kerjanya: fungsi mencari angka terkecil dalam argumen, dan mengalikannya dengan
10
(bukan dengan20
) dan menambahkan sisa skor. Tidak perlu mengalikan20
dan mengurangi bagian dari skor untuk melanjutkan perhitungan.Terima kasih kepada edc65 untuk berbagi peningkatan!
Tidak golf:
sumber
S=(a,b,c,d)=>10*Math.min(a,b,c,d)+a*2+b*3+c*4+d
Pyth , 15
Input harus diberikan koma yang dipisahkan pada STDIN, mis
Ini menggunakan trik yang sama dengan yang digunakan banyak solusi lain, yaitu menambahkan minimum pada setiap elemen untuk memperhitungkan bonus. Minimum ada
hSQ
di kode di atas. Untuk menghitung mengalikan dengan 2, 3, 4, dan 1, saya memetakan d pada daftar [0,1,2,3], dan mengalikan elemen (dl) input dengan d + 1. Jadi, elemen -1 dikalikan dengan 1, nol dengan 2, yang pertama dengan 3 dan yang kedua dengan 4. Lalu aku menjumlahkan.sumber
J,
2322 karakterContoh:
Coba di sini.
(23 fungsi panjang definisi eksplisit:
v=:3 :'+/+/\.3|.y+<./y'
)sumber
+/2 3 4 1*(+<./)
?2 3 4 1+/ .×]+<./
?Burung unta v0.1.0 ,
4841 karakter (terlalu panjang)Ini sama persis dengan versi lama di bawah ini, kecuali bahwa alih-alih menggunakan
@
untuk memutar seluruh tumpukan,)\+
(bukan kanan) digunakan sebagai gantinya.Versi lama:
Saya sebenarnya telah menemukan dua bug dalam bahasa saya yang baru diimplementasikan, dijelaskan dalam uraian di bawah ini. (Bahasa saat ini sangat, sangat mirip dengan Golfscript, jadi jika Anda tahu Golfscript seharusnya cukup mudah dibaca.
Mengharapkan input sebagai larik pada STDIN, karena saya gagang pintu dan lupa menerapkan I / O di v0.1.0.
Menyelesaikan masalah aktual di Burung Unta itu bagus, karena itu menunjukkan kepada saya berapa banyak hal yang perlu saya tambahkan ke bahasa: D
sumber
Python 2, 43 byte
Terinspirasi oleh jawaban @ user2487951.
sumber
Jagl Alpha 1,2 - 20 byte
Input dalam format stdin
(3 4 5 6)
, output dibiarkan di tumpukan:Menunggu respons dari poster asli tentang format output. Karena input ditentukan sebagai "apa pun yang Anda suka" , saya akan menganggap bahwa input saya dapat berupa array di bagian atas tumpukan.Sekarang ambil input pada stdin.Penjelasan:
sumber
Haskell, 40
alih-alih menghapus nomor minimum dari yang lain dan menambahkan tambahan
20
, ini menambahkan tambahan10
untuk jumlah minimum.sumber
..4*c+d..
Matlab, 27
Butuh waktu beberapa saat untuk memahami bahwa ini adalah permainan pemain tunggal. Dengan bantuan fungsi anonim
yang dipanggil dengan vektor baris
sumber
f=
2 byte lebih sedikit. Fungsi itu disimpan dalamans
variabel sebagai gantinya.[2:4,1]
akan memangkas 2 byte jika inputnya adalah vektor kolom.Java, 84 byte
Saya punya ide ini bisa bermain golf lebih jauh, tapi ini dia untuk sekarang.
Panggilan dengan
A(new int[]{3,5,4,3})
, output dikembalikan sebagai int (KarenaSystem.out.println()
akan menggandakan byte)Tidak disatukan
sumber
GolfScript, 22 byte
Membaca input dari stdin, dalam format
[3 5 4 3]
. Menulis output ke stdout. (Jika mengambil input sebagai array pada stack diperbolehkan, pimpinan~
dapat dihilangkan dengan total 21 byte.)Ini menggunakan strategi yang agak berbeda dari solusi CJam / Pyth / etc.: Saya pertama kali membangun sebuah array dengan 2 salinan dari nilai input pertama, 3 dari yang kedua, 4 dari yang ketiga dan satu dari yang keempat. Lalu saya mengurutkan array ini, mengeluarkan elemen terkecil, kalikan dengan 11 dan jumlah dengan elemen lainnya.
sumber
Python 2, 51
Tidak terinspirasi, tetapi singkat:
Lebih pythonic:
sumber
Julia,
4835 karakterfunction p(m);sum([2 3 4 1].*m)+10minimum(m);end
dalam bentuk penugasan ringkas:
Contoh:
sumber
Javascript, 97 byte
sumber
Javascript, ES6, 57
Saya ingin melihat bagaimana rekursi akan berubah, dan sementara itu jelas bukan jawaban yang terpendek, saya merasa sepertinya itu baik-baik saja.
a*b*c*d
: Dibutuhkan nilai input dan menemukan produk dari semuanya, dan mengevaluasi itu sebagai ekspresi Boolean untuk pernyataan inline if. Ini akan mengembalikan false jika satu atau lebih nilai adalah 0, dan berlaku untuk nilai lainnya.20+f(--a,--b,--c,--d)
: Jika mengembalikan true, fungsi mengembalikan 20 (untuk set schijven ) ditambah panggilan rekursif dari fungsi untuk semua nilai minus satu (Untuk menghapus set schijven itu ). Dengan cara ini akan berulang secara berulang sampai setidaknya satu kotak kosong.a*2+b*3+c*4+d
Setelah setidaknya satu kotak kosong, bagian lain dari inline jika pernyataan akan berjalan. Itu hanya mengembalikan poin untuk yang tersisa schijven yang di dalam kotak.Jadi pada akhirnya semua set 20 poin schijven , dan titik-titik yang diberikan diringkas dan dikembalikan dari fungsi, menghasilkan jawabannya.
sumber
Haskell 42 karakter
sumber
f l@[a,b,c,d]=10*minimum l+2*a+3*b+4*c+d
- menghemat 2 karakterHPPPL (Bahasa Pemrograman Utama HP),
5857 byte* Antara 10 dan menit tidak diperlukan, jadi saya menghapusnya.
HPPPL adalah bahasa pemrograman untuk kalkulator grafik warna HP Prime / CAS.
Contoh berjalan:
Jika tidak harus berupa program, maka itu dapat diwujudkan dalam
4039 byte satu-liner:sumber
Staq, 72 karakter
Contoh dijalankan:
Staq memiliki dua tumpukan, satu aktif, satu pasif. The
|
perintah switch stack aktif untuk pasif dan sebaliknya.Segala sesuatu antara kurung kurawal menentukan suatu fungsi, huruf pertama setelah kurung buka adalah nama fungsi, sisanya sampai kurung kurawal adalah fungsi itu sendiri. Fungsi-fungsi utama, fungsi rekursi dan bersarang dimungkinkan.
{aii}
akan mendefinisikan fungsi a yang akan menambah bagian atas tumpukan dua kali. Setiap instance berikuta
dalam kode akan diganti olehii
.Komentar di dalam prorams Staq :
&
menambahkan nol di atas tumpukan,[
menginstruksikan pointer untuk melompat ke yang sesuai]
jika bagian atas tumpukan adalah nol,x
menghapus nilai teratas pada tumpukan. Jadi, komentar dapat ditulis ke dalam kode dalam bentuk&[here is a comment]x
Penjelasan (juga dapat dieksekusi):
https://esolangs.org/wiki/Staq
Program ini menggunakan satu tumpukan (awalnya aktif) untuk menghitung 2a + 3b + 4c + d, dan tumpukan kedua (awalnya pasif) untuk menghitung 10 kali minimum dari nilai input. Kemudian kedua hasil disimpulkan dan ditampilkan.
sumber
PowerShell untuk Windows ,
4847 byte-1 byte berkat mazzy
Cobalah online!
sumber
Powershell for Windows
kapan kita menggunakansort
alias? lihat meta