Latar Belakang
Saya memiliki tangga yang bersandar di dinding, dan robot yang dikendalikan dari jarak jauh yang dapat memanjatnya. Saya dapat mengirim tiga perintah berbeda ke robot:
UP
: robot mengambil satu langkah ke atas. Jika itu pada langkah tertinggi, itu tersandung, jatuh dan meledak.DOWN
: robot mengambil satu langkah ke bawah. Jika itu pada langkah terendah, tidak ada yang terjadi.RESET
: robot kembali ke langkah terendah.
Saya juga dapat mengirim serangkaian perintah, dan robot akan menjalankannya satu per satu. Tugas Anda adalah memprediksi pergerakannya.
Memasukkan
Input Anda adalah bilangan bulat positif N
, mewakili jumlah langkah di tangga, dan string non-kosong C
lebih UDR
, yang mewakili perintah saya telah dikirim ke robot. Anda bisa berasumsi itu N < 1000
. Robot diinisialisasi pada langkah terendah tangga.
Keluaran
Dijamin bahwa pada suatu titik, robot akan memanjat langkah tertinggi dan meledak. Output Anda adalah jumlah perintah yang dieksekusi sebelum ini terjadi.
Contoh
Pertimbangkan input N = 4
dan C = "UDDUURUUUUUUUDDDD"
Robot, dilambangkan dengan @
, bergerak di sepanjang tangga 4 langkah sebagai berikut:
|-| |-| |-| |-| |-| |-| |-| |-| |-| |@| |-||
|-| |-| |-| |-| |-| |@| |-| |-| |@| |-| |-||
|-| |@| |-| |-| |@| |-| |-| |@| |-| |-| |-|v
|@| U |-| D |@| D |@| U |-| U |-| R |@| U |-| U |-| U |-| U |-|# Boom!
Perintah yang tersisa tidak dieksekusi, karena robot telah meledak. Ledakan terjadi setelah 10 perintah, jadi output yang benar adalah 10
.
Aturan dan penilaian
Anda dapat menulis program atau fungsi lengkap. Hitungan byte terendah menang, dan celah standar tidak diizinkan.
Uji kasus
1 U -> 1
1 DDRUDUU -> 4
4 UDDUUUUURUUUUDDDD -> 7
4 UDDUURUUUUUUUDDDD -> 10
6 UUUUUDRUDDDDRDUUUUUUDRUUUUUUUDR -> 20
10 UUUUUURUUUUUUURUUUUUUUURUUUUUUUUUUUUUU -> 34
6 UUUDUUUUDDDDDDDDDDDDDDRRRRRRRRRRRUUUUUU -> 8
6 UUUDUUUDURUDDDUUUUUDDRUUUUDDUUUUURRUUDDUUUUUUUU -> 32
20 UUDDUDUUUDDUUDUDUUUDUDDUUUUUDUDUUDUUUUUUDUUDUDUDUUUUUDUUUDUDUUUUUUDUDUDUDUDUUUUUUUUUDUDUUDUDUUUUU -> 56
354 UUDDUUDUDUUDDUDUUUUDDDUDUUDUDUDUDDUUUUDUDUUDUDUUUDUDUDUUDUUUDUUUUUDUUDUDUUDUDUUUUUDUDUUDUDUDUDDUUUUUUUDUDUDUDUUUUUDUDUDUDUDUDUDUDUUDUUUUUURUUUDUUUUDDUUDUDUDURURURUDUDUUUUDUUUUUUDUDUDUDUDUUUUUUDUDUUUUUUUDUUUDUUDUDUDUUDUDUDUUUUUUUUUUDUUUDUDUUDUUDUUUDUUUUUUUUUUUUUDUUDUUDUDUDUUUDUDUUUUUUUDUUUDUUUDUUDUUDDUUUUUUUUDUDUDUDUDUUUUDUDUUUUUUUUDDUUDDUUDUUDUUDUDUDUDUUUUUUUUUDUUDUUDUUUDUUDUUUUUUUUUUUDUDUDUDUUUUUUUUUUUUDUUUDUUDUDDUUDUDUDUUUUUUUUUUUUDUDUDUUDUUUDUUUUUUUDUUUUUUUUUDUDUDUDUDUUUUUUDUDUDUUDUDUDUDUUUUUUUUUUUUUUUDUDUDUDDDUUUDDDDDUUUUUUUUUUUUUUDDUDUUDUUDUDUUUUUUDUDUDUDUDUUUUDUUUUDUDUDUUUDUUDDUUUUUUUUUUUUUUUUUUDUUDUUDUUUDUDUUUUUUUUUUUDUUUDUUUUDUDUDUUUUUUUUUDUUUDUUUDUUDUUUUUUUUUUUUDDUDUDUDUUUUUUUUUUUUUUUDUUUDUUUUDUUDUUDUUUUUUUUUUUDUDUUDUUUDUUUUUUDUDUDUUDUUUUUUUUUUUUDUUUDUUDUDUDUUUUDUDUDUDUDUUUUUUUUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUUU -> 872
Jawaban:
CJam,
262522 byteFormat input adalah instruksi pada baris pertama dan tinggi tangga pada baris kedua.
Uji di sini.
Penjelasan
sumber
C,
8371 + 4 = 75 byteTerima kasih @Josh karena telah menunjukkan gaya K&S kepada saya , yang memungkinkan 8 byte !!
Menjelaskan:
Contoh panggilan:
Tes langsung pada ideone
sumber
z
dana
tidak diatur ulang.JavaScript (ES6),
5453 bytePenjelasan
Menggunakan fungsi rekursif secara internal.
sumber
Perl, 47 + 2 = 49 byte
Membutuhkan
-p
bendera,-i$N
untuk ketinggian yang terakhir dan daftar gerakan yang dipisahkan baris baru:Bagaimana itu bekerja:
Dibatasi:
sumber
JavaScript (SpiderMonkey 30+),
6564 byteBagaimana itu bekerja
Kami pertama-tama mengatur variabel
i
ke 0. Ini akan melacak berapa banyak langkah yang telah didaki robot. Kemudian untuk setiap karakterc
dalam string input, kami menjalankan logika berikut:i
lebih besar atau sama dengann
, jangan lakukan apa pun.c
adalah"D"
:i
0, biarkan seperti apa adanya.c
adalah"U"
, kenaikani
sebesar 1.i
ke 0.Dengan memotong jika
i>=n
, kami menghindari menambahkan item lagi ke array setelah robot mencapai puncak. Jadi, kita bisa mengembalikan panjang array yang dihasilkan.sumber
Haskell, 65 byte
Contoh penggunaan:
f 4 "UDDUURUUUUUUUDDDD"
->10
.%
menyesuaikan posisi saat ini di tangga,scanl
membuat daftar semua posisi,fst.span(<n)
mengambil bagian sebelum ledakan danlength
menghitung langkah-langkahnya.sumber
JavaScript (ES6), 65 byte
sumber
0,i=0
dapat diubah menjadii=0
MATL ,
3734 byteCobalah online!
Penjelasan
Posisi berbasis 0. Setiap posisi baru didorong ke tumpukan menjaga posisi yang lebih lama. Jadi ukuran tumpukan mewakili jumlah gerakan hingga sekarang, ditambah 1.
Loop digunakan untuk memproses setiap perintah. Lingkaran
keluar ketika posisi mencapai ketinggian tanggamemproses semua perintah, bahkan setelah ledakan (ide diambil dari jawaban Martin ). Hasil akhir diberikan oleh indeks posisi pertama yang sama dengan tinggi tangga.sumber
Python 2,
6362 byteSebagai contoh,
f(4, 'UDDUURUUUUUUUDDDD')
adalah10
.xnor menemukan ekspresi yang lebih pendek:
2%~h
sangat keren :)sumber
%4
. Jika saya tidak salah, Anda dapat menyimpan karakter dengan melakukan-[2%~h,~h,0][ord(s[0])%4]
.PowerShell,
8679 byteSedikit perataan ulang saya Kapan Santa memasuki ruang bawah tanah? menjawab.
Mengambil input
$a
dan$b
, secara eksplisit melakukan casting$b
sebagai char-array. Kami kemudian mengulang|%{...}
semua$b
. Setiap iterasi, kami menambah penghitung kami$d
.Lalu,
if
pernyataan untuk memeriksa apakah kita telah mencapai puncak-ge$a
. Jika demikian, kami mengeluarkan$d
danexit
. Theif
pernyataan dibangun dari pseudo-ternary dibuat dengan menetapkan$c
minus sama dengan hasil dari beberapa indeks ke dalam array.Kami memiliki trik bahwa nilai-nilai ASCII dari
D
,R
, danU
sesuai dengan0
,2
, dan1
ketika diambil modulo-4, sehingga$_%4
berfungsi sebagai indeks pertama kami. Jika ituR
, yang diset$c
sama dengan$c-$c
, melakukan reset. JikaU
, itu artinya kita harus naik, jadi$c-(-1)
hasilnya. Kalau tidak, itu adalahD
, jadi kita perlu memeriksa apakah kita sudah di bagian bawah (itu adalah!$c
- di PowerShell, "tidak-nol" adalah "benar" atau1
) dan disetel$c
sama$c-0
atau$c-1
masing - masing.Sunting - Disimpan 7 byte dengan menggunakan penetapan minus sama dengan bukan penetapan langsung
sumber
Perl 5, 61 byte
Termasuk dua byte untuk
-F -i
. (-M5.01
gratis)Input bilangan bulat (mis. 10) adalah sebagai
perl -M5.01 -F -i10 robot.pl
; input dari perintah ladder adalah sebagai STDIN.sumber
-anF
sebelum akan mencetak apa pun untuk saya. tetapi tampaknya diaktifkan secara implisit hanya dengan-F
5.20.3. dapatkah Anda memverifikasi ini?-F
cukup untuk saya (5,20 atau 5,22 atau lebih). Iirc perlrun perldoc saat ini mengatakan itu menyiratkan-a
dan-a
menyiratkan-n
.-i
? Saya dapat melihat Anda menghitungnya sebagai 1 tetapi saya kira itu seharusnya dihitung sebagai 3? :-)-i
dan tanpaperl -i10 -pe';'
vsperl -pe';'
3 karakter lebih banyak dan kemudian jumlah input - yang saya kira kita tidak harus menghitung. Tapi saya mungkin salah hanya tentang hal ini pagi ini :-)Vitsy, 44 byte
Mungkin ada beberapa pengurangan - saya akan memikirkan beberapa hal lagi jika saya bisa.
Penjelasan (sedang berlangsung):
Cobalah secara Online! (kasus uji besar)
sumber
PHP, 88 byte
Ini menghasilkan beberapa (3 + 2n di mana n adalah jumlah perintah dijalankan) pemberitahuan tetapi itu tidak masalah untuk bermain golf, kan?
ungolfed:
sumber
Python, 121 byte
sumber
## Python, <N> bytes
untuk menunjukkan skor Anda kepada orang lain.0 if x==0 else x-1
denganx and x-1
JavaScript,
131106 Bytes-Saya tahu ini tidak akan memenangkan kompetisi Code Golf, tetapi ini adalah solusi yang menyenangkan dan bodoh untuk diterapkan:
Saya agak bertolak belakang dengan rute "fungsional" dengan membuat solusi imperatif yang dihasilkan secara dinamis, setiap instance dari instruksi diganti dengan kenaikan atau penurunan, dan kenaikan tandingan.
Terima kasih kepada Cycoce karena telah menyelamatkan saya 29 byte!
sumber
l=>s=>Function('i=c=0;'+s.replace(/./g,x=>`c++;i${{R:"=0",U:`++;if(i>=${l})return c`,D:"--"}[x]};`))()
Python 3, 90
Disimpan 6 byte berkat DSM.
Cukup sederhana sekarang.
Kasus uji:
sumber
PHP, 129 byte
Bukan menang, tapi menyenangkan untuk dibuat. PHP tampaknya tidak menyukai bagian-bagian kosong di operator ternary (itu melempar Kesalahan Sintaks), jadi saya harus meletakkan di
0
sana.Versi tidak disatukan:
sumber
PHP, 113 byte
Versi lebih kecil dari https://codegolf.stackexchange.com/a/74575/13216
Tidak Disatukan:
sumber
Pyth, 19 byte
Cobalah online: Demonstrasi atau Test Suite
Penjelasan:
sumber
Java, 250 byte
sumber
# <language_name>, XX bytes
. Anda juga dapat mengurangi masing-masing nama variabel menjadi satu karakter dan menghapus spasi putih tambahan, dengan cara ini jumlah byte Anda akan berkurang (yang merupakan tujuan di sini) ... Ah, dan selamat datang di PPCG!int steps=1; int count=0;
Anda dapat menggunakanint s=1,c=0;
- lihat saya mengubah nama variabel - dan sebagainya). Anda masih bisa menunjukkan Anda ungolfed versi di bawah golfed versi dengan penjelasan (cara ini mudah bagi seseorang bantuan Anda bermain golf lebih byte).C, 91 byte
Tidak ada peringatan dengan
gcc -Wall
. Rekursi dan ekspresi yang dipisahkan koma.r.c
berisi fungsi kosong:Berkomentar,
Sebagai referensi,
roboladder.c
pembungkus,Makefile
untuk pengujian,sumber
Mathematica,
114120 byteFungsi anonim, yang mengambil dua argumen (C, N). Hati-hati menggunakan ini, karena tidak menutup aliran yang terbuka. Juga memberikan semua variabelnya secara global.
Diedit untuk menggantikan
d=#-1&
dengand=#~Max~1-1&
, sehingga robie tidak menggali.sumber
Mathematica, 112 Bytes
sumber
Clojure,
9284 byteHitungan
n
ke nol, bukan noln
, bisa memanfaatkantake-while pos?
.Asli:
Argumen Maps 2
U
ke+
,D
ke ,-
dan lainnya kenil
. Fungsi reduksi berjalan(operand position 1)
dengan non-nulloperand
dan0
sebaliknya. Mengambil nilai sampai kita lebih tinggi dari argumen input pertama dan menghitung berapa banyak yang kita punya.sumber
Mathematica, 67 byte
Fungsi dua argumen yang tidak disebutkan namanya, bilangan bulat positif dan daftar karakter, yang mengembalikan bilangan bulat positif.
While
Implementasi yang lebih mudah daripada entri Mathematica lainnya, yang berhasil menghasilkan panjang yang lebih kompetitif.sumber