Beberapa dari Anda mungkin terbiasa dengan cara sepeda motor bergeser. Tetapi bagi mereka yang tidak, Sepertinya ini
6
5
4
3
2
N
1
Sekarang saya ingin tahu gigi apa yang saya pakai setelah melakukan beberapa shift naik dan turun. Program harus bekerja dari netral.
Masukan sampel:
V^^
Output sampel:
2
Seperti yang Anda lihat, saya turun satu kali dari N ke 1 dan naik dua kali ke gigi 2.
Ini adalah kode golf. Jawaban terpendek dalam byte menang.
Catatan: Input dapat berupa 2 karakter. Dapat berupa U dan D untuk naik dan turun atau apa pun yang Anda inginkan harus berupa string . Anda tidak dapat bergeser melampaui gigi 1 atau 6. Jika Anda berada di 6 dan naik lagi itu akan tinggal di 6. Semoga berhasil!
Jawaban:
JavaScript (ES6),
49484746 byteMengharapkan:
1
untuk turun7
untuk naikDiformat dan dikomentari
Roda gigi dipetakan sebagai berikut:
Yang memungkinkan kami untuk dengan mudah memeriksa validitas gigi saat ini dengan:
Demo
Tampilkan cuplikan kode
sumber
05AB1E ,
2220 byteCobalah online!
Penjelasan
sumber
MATL,
322823 byte5 byte disimpan berkat @Luis
Solusi ini digunakan
'2'
untuk naik dan'0'
turun.Cobalah di MATL Online
Penjelasan
sumber
V ,
20, 15 byteCobalah online!
Input adalah serangkaian karakter
h
(atas) danl
(bawah).Terima kasih kepada @nmjcman karena telah menghemat 5 byte dan mengajari saya tentang fitur vim yang tidak pernah saya ketahui!
Jika kita bisa berasumsi bahwa input tidak pernah keluar dari batas, itu hanya akan menjadi 9 byte:
Tapi sayangnya itu tidak diperbolehkan.
Penjelasan:
sumber
n
, bukan1
.Java 7,
106105103 bytePenjelasan:
Kode uji:
Coba di sini.
Keluaran:
sumber
Haskell,
595351 BytesGunakan
0
untuk turun dan2
naik. Contoh penggunaan:Terima kasih kepada @xnor karena melepas 6 byte! Juga, ternyata saya tidak perlu nama fungsi atau tanda kurung jadi itu 2 byte lagi.
sumber
read[c]-2
.g=
.g=
karena lebih jelasJavaScript (ES6),
4858 bytePemakaian
Tetapkan ke suatu fungsi, lalu panggil. Input adalah string yang berisi
1
untuk upshift, dan0
untuk downshift.sumber
f("001")
yang harus mengembalikan N (gigi turun ke 1, gigi turun tinggal di 1, gigi hingga N)PHP 7.1, 71 byte
bergeser
$g
dari -1 ke 5, menggunakan offset string negatif untuk gigi pertama.Jalankan dengan
-nr
, berikan string penggeser sebagai argumen baris perintah.sumber
Jelly ,
1714 bytePenggunaan
6
untuk naik dan0
turun.Cobalah online!
Bagaimana itu bekerja
sumber
Ruby, 58 byte
Input yang diharapkan adalah 'v' untuk downshift dan '^' untuk upshift
sumber
Memproses JS (dimodifikasi) 121 byte
Tidak disatukan
Cobalah online!
Saya pergi dengan PJs karena saya tahu betul. Satu-satunya masalah adalah versi yang saya gunakan diketik dengan sangat ketat. Saya tidak bisa meninggalkan tanda kurung dan banyak trik lainnya. Sederhana saja. Input harus masuk ke variabel
a
dan butuh huruf kecilu d
. Program loop sampai menyentuh ujung string dan setiap iterasi itu memeriksa untuk melihat apakah itu au atau d. Jika ya dan tidak akan mencoba dan "menggeser" masa lalu di mana Anda bisa, itu bergeser. Pada akhirnya saya mencetak hasilnya!sumber
The input should go into the variable a
Menggunakan input kode keras bukan metode input standar, lihat di sini .void f(String[] a){...}
Itu hampir tidak 100 byte.k, 25 byte
Dibutuhkan input sebagai string, dan digunakan
[
untuk downshift, dan]
untuk upshift, karena mereka berlokasi.Contoh:
sumber
GNU sed ,
8987 +1 (r flag) = 88 byteKarena sed tidak memiliki tipe integer atau operasi aritmatika, solusinya didapat dengan menggunakan ekspresi reguler saja.
Ia bekerja dengan menggeser pointer
x
berdasarkan pada masing-masing shift input, kiri (untukU
p) atau kanan (untukD
sendiri), sepanjang pita non-pembungkus yang hanya berisi sel-sel65432N1
. Jawaban di akhir adalah nilai di sel sebelah kiri pointer.Contoh jalankan: atau Coba online!
Penjelasan:
sumber
GNU sed ,
7673 byteTermasuk +1 untuk
-r
Keluaran dalam unary kecuali netral, yang masih
N
(lihat konsensus ini ).Cobalah online!
Ini pada dasarnya menghitung naik dan turun di unary kemudian mengkonversi 1 ke N dan 0 ke 1.
sumber
1
sebagai nilai awal, sebagaiN
, dan tidak ada1
.s/$/1/;:;/1{6}/!s/^U(.*)/\11/;s/^D(.*)1/\1/;t;s/U|D//;t;s/^1$/N/;s/^$/1/
Rebol,
9693 byteTidak Disatukan:
Contoh penggunaan (dalam konsol Rebol):
sumber
> <> , 35 byte
Sepotong kode antusias yang mendorong Anda untuk mengemudi di atas batas kecepatan.
Menerima setiap dua input yang kode kodenya 3 adalah 0 dan 2, misalnya 0dan 2.
Untuk lebih mencurigakan, saya merekomendasikan penggunaan <dan >.
Penjelasan:
Anda bisa mencobanya di sini !
sumber
SpecBAS - 102
Memindahkan indeks string tergantung pada input dan mencetak karakter yang relevan.
sumber
Pyth, 32 byte
Menggunakan ruang dan baris baru untuk turun dan naik.
Penjelasan
Hampir pasti ada cara yang lebih baik untuk melakukan peningkatan dan output.
sumber
CJam ,
2422 byteGunakan
(
untuk turun dan)
naik.Cobalah online!
Penjelasan
sumber
Batch, 144 byte
Mengambil input pada STDIN, gunakan
0
untuk pergi ke gigi yang lebih rendah dan6
untuk pergi ke gigi yang lebih tinggi. Angka-angka ini dipilih untuk memudahkan mengabaikan gigi saat ini. Akhirnya jika roda gigi dicetak1
makaN
jika0
tidak dikonversi menjadi1
dan roda gigi dicetak.sumber
Javascript ES6 nonstrict,
136120 karakter136 karakter untuk
V^
120 karakter untuk
-+
sumber
Retina , 65 byte
Penggunaan
u
dand
untuk naik turun.Cobalah online!
Penjelasan
Program ini bekerja dengan menjaga
1N23456
urutan instruksi. Ini melacak gigi saat ini dengan memiliki ruang di belakangnya. Kemudian dibutuhkan satu instruksi pada satu waktu sampai tidak ada lagi.Mulailah dengan meletakkan
1 N23456
sebelum input. Ruang sebelumnyaN
menunjukkan bahwa ituN
adalah gigi saat ini.Ini adalah dua tahap penggantian, dikelompokkan bersama, dan dijalankan hingga berhenti mengubah string:
Yang pertama menangani menggeser gigi ke atas. Ini akan mencari sejumlah roda gigi setelah ruang, diikuti oleh
6
, kemudian diikuti olehu
(u
menunjukkan instruksi untuk perpindahan gigi ke atas). Jika ada karakter sebelum 6, itu menukar ruang dengan karakter segera setelah itu, menghapusu
, dan meninggalkan sisa string. Karena6
itu wajib dalam pertandingan, itu hanya akan menukar ruang dengan karakter apa pun sebelum6
. Itu tidak akan pernah bertukar dengan6
.Tahap kedua menangani perpindahan gigi ke bawah, dan bekerja dengan cara yang sama. Itu terlihat opsional untuk karakter sebelum ruang, kemudian beberapa gigi lain setelah berakhir
6
, diikuti olehd
. Ini menukar ruang dengan karakter di depannya, menghapusd
, dan membiarkan sisanya tetap utuh. Jika spasi di awal string, tidak ada kecocokan untuk karakter sebelum spasi, jadi tidak ada swap terjadi.Setelah penggantian di atas tidak dapat dilakukan lagi, semua perpindahan gigi telah selesai. Garis dibersihkan dari segala sesuatu kecuali roda gigi segera setelah ruang. Ini adalah gigi terakhir.
sumber
Powershell,
1128785 byte$i=1;switch([char[]]$args[0]){'^'{if(5-gt$i){$i++}}'v'{if(1-le$i){$i--}}}'1N2345'[$i]
ungolfed
menghemat 25 byte dengan membaca tips codegolf PowerShell
disimpan 2 byte dengan membalik operator gt / le
sumber
Perl 6, 144 byte
Bekerja sebagaimana mestinya, saya percaya. Perbaikan dipersilahkan. Pertama kali menggunakan Perl untuk apa pun, tetapi saya menyukai pemikiran bahasanya, jadi saya harus mencoba.
sumber
Clojure, 74 byte
Lipat pada string shift, mempertahankan indeks sebagai akumulator. Setiap iterasi meningkatkan atau menurunkan indeks, kemudian menjepitnya ke kisaran 0-6. Akhirnya, sebuah string yang menahan persneling diindeks dan dikembalikan.
Mengembalikan karakter Clojure yang mewakili gir saat ini. Gear 1 dikembalikan sebagai
\1
, dan gear 'N' dikembalikan sebagai\N
.Penjelasan pra-golf. Ikuti angkanya, karena tidak membaca dari atas ke bawah dengan baik
sumber
Python 3,
6763 byteSolusi yang sangat mudah.
-4 byte terima kasih kepada @ovs!
sumber