Backstory
Temui teman saya Jimmy:
/o\
Jimmy adalah karakter kecil yang suka berdiri di atas platform. Inilah Jimmy yang berdiri dengan aman di atas platform:
/o\
-------------
Sekarang, Jimmy memiliki rasa keseimbangan yang baik, sehingga ia dapat berdiri dengan aman dengan satu kaki terlepas dari platform, seperti:
/o\
-------------------
Meskipun jika dia berdiri dengan dua atau lebih bagian tubuh dari platform, dia akan jatuh. Keduanya adalah contoh di mana Jimmy akan jatuh:
/o\ /o\
---------- ----------------------
Tantangan
Tantangan Anda adalah menulis program untuk menentukan, diberi string dengan platform dan posisi Jimmy, jika Jimmy bisa berdiri di atas platform tanpa jatuh.
Input: Dua baris yang menunjukkan posisi Jimmy dan posisi platform di bawahnya. Ini bisa dari dua input terpisah, satu input, atau berbagai macam jenis.
- Anda dapat mengambil input melalui formulir apa pun yang masuk akal, termasuk fungsi dan input standar. Gunakan hanya hard-coding jika bahasa Anda tidak mendukung metode input lainnya.
Output: Nilai boolean benar dan salah, atau bilangan bulat 1 atau 0 masing-masing mewakili benar / salah.
- Nilai boolean didasarkan pada apakah Jimmy dapat tetap di platform atau tidak - benar jika Jimmy dapat tetap di platform, atau salah jika ia akan jatuh.
Ukuran platform sewenang-wenang dan dapat diubah sesuka hati. Program Anda harus menjelaskan hal itu.
Platform tidak boleh panjang nol, dan platform harus lengkap (tidak ada lubang di platform).
Ingatlah bahwa Jimmy jatuh ketika dua bagian tubuhnya menggantung dari peron. Bagian tubuh adalah salah satu karakter ASCII dari tubuhnya.
Membuntuti spasi putih di akhir platform tidak diperlukan, tetapi program Anda harus menjelaskan kedua situasi, di mana ada spasi putih setelah platform dan di mana tidak ada.
Berhati-hatilah dengan celah standar yang dilarang.
Uji kasus
/o\ ✔️ TRUE
-------------
/o\ ✔️ TRUE
----------
/o\ ❌ FALSE
------------------
/o\ ❌ FALSE
-------
/o\ ❌ FALSE
-
Mencetak gol
Ini adalah kode-golf , sehingga jumlah byte terendah menang.
Papan peringkat
Anda dapat melihat leaderboard untuk posting ini dengan memperluas widget / snippet di bawah ini. Agar posting Anda dimasukkan dalam peringkat, Anda perlu tajuk ( # header text
) dengan info berikut:
Nama bahasa (akhiri dengan tanda koma
,
atau tanda hubung-
), diikuti oleh ...Jumlah byte, sebagai angka terakhir yang muncul di header Anda.
Misalnya, JavaScript (ES6), 72 bytes
valid, tetapi Fortran, 143 bytes (8-bit)
tidak valid karena jumlah byte bukan nomor terakhir di header (jawaban Anda akan dikenali sebagai 8 byte - jangan memanfaatkan ini).
<!-- Run the snippet to see the leaderboard. Report any bugs to @xMikee1 on Github --> <iframe src="https://xmikee1.github.io/ppcg-leaderboard/?id=187586" width="100%" height="100%" style="border:none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe><style>html,body{margin:0;padding:0;height:100%;overflow:hidden}</style>
Jawaban:
Jelly , 6 byte
Cobalah online!
Penjelasan:
sumber
S
menjumlahkan kolom alih-alih baris? : S Jika saya melihat wiki dengan benar, kode tidak:n⁶
memeriksa setiap karakter yang tidak sama dengan spasi (yaitu['/o\\', ' -'] -> [[1,1,1],[0,1]]
);S
menjumlahkan daftar (tetapi karena alasan tertentu ini menjumlahkan kolom alih-alih baris .. jadi[[1,1,1],[0,1]] -> [1,2,1]
);ċ2
hitung jumlah 2s;Ẓ
periksa apakah ini prima (jadi 2 atau 3), setelah hasilnya adalah output secara implisit. Tapi saya akan berharap[[1,1,1],[0,1]]
untuk menyimpulkan ke[3,1]
..S
setara dengan0;+/Ɗ
, yaitu, kurangi dengan penambahan (yang di-vektorisasi) dengan nilai awal0
.§
melakukan apa yang Anda harapkanS
.JavaScript (ES6), 38 byte
Mengambil input sebagai0 atau 1 .
(a)(b)
. MengembalikanCobalah online!
Bagaimana?
Kami mencari posisi bagian tengah
"o"
tubuh Jimmy di senar pertama dan menguji apakah ada garis putus-putus di senar kedua di posisi yang sama.Satu-satunya kasus di mana Jimmy tidak aman dalam situasi ini adalah dengan platform dasbor tunggal:
Jadi kami juga memastikan bahwa platform memiliki lebar minimal2 :
JavaScript (ES6), 36 byte
Versi alternatif jika kita berasumsi bahwa selalu ada tanda hubung atau spasi di bawah Jimmy (yaitu input berbentuk persegi panjang).
Cobalah online!
Mengambil keuntungan dari kenyataan bahwa paksaan ke nilai numerik adalah0 untuk spasi dan NaN untuk tanda hubung.
sumber
"/o\\\n__"
Excel,
674544 byteTempatkan Jimmy
A1
, di atas platformA2
.2 kondisi diperiksa:
o
) ada di platform?-
?sumber
<>
menjadi>
Python 3,
8843 byteInput diberikan dalam bentuk daftar yang berisi dua string: string pertama adalah baris pertama; string kedua adalah baris kedua.
Cobalah online!
Versi lain, mengikat untuk 43 byte (saya belum bisa mendapatkannya lebih pendek dari 43):
Cobalah online!
Turun sebesar 42 byte berkat tip dari Jo King.
Versi lama:
-2 byte terima kasih kepada Sriotchilism O'Zaic.
Ini bekerja dengan mengambil dua input terpisah, lalu memasangkan huruf yang sesuai. Ini menghitung jumlah pasangan di mana tidak ada karakter yang merupakan spasi, lalu mengembalikan True jika angka itu lebih besar dari 1.
sumber
Perl 6 , 18 byte
Cobalah online!
Mengambil dua parameter dan mengembalikan boolean apakah Jimmy akan tetap di platform. Ini bekerja dengan XORing dua baris bersama dan memeriksa apakah salah satu bagian dari Jimmy masih di platform.
Penjelasan:
sumber
Python 2 ,
4237 byteCobalah online!
5 byte thx ke negatif tujuh
sumber
"--"in [...]
untuk -5 byteHaskell , 34 byte
Cobalah online!
Saya mendapatkannya dengan menggabungkan teknik di bawah ini dengan jawaban haskell lainnya .
Haskell , 45 byte
Cobalah online!
Ini menghitung jumlah bagian tubuh (karakter non-spasi) yang ada di atas platform dan kemudian memeriksa lebih besar dari 1. Alasan mengapa kita menghitung bagian tubuh pada platform daripada bagian tubuh yang tidak aktif adalah yang
zipWith
akan memotong garis atas menjadi panjang bagian bawah dan dengan demikian dapat memotong bagian tubuh Jimmy. Ini mencegah kita dari harus melakukan sesuatu seperticycle" "
membuat daftar.sumber
MathGolf ,
614 byteCobalah online!
8 byte harus ditambahkan ke akun untuk kasus tepi yang disajikan oleh Nick Kennedy.
Memeriksa apakah
"-o-"
merupakan substring dari string zip dari kedua garis, dan string zip di mana baris input pertama memiliki karakter pertama dihapus. Mengambil input sebagai dua string terpisah, dengan satu-satunya perubahan adalah bahwa karakter adalah input/o\\
, sejak\\
merupakan cara yang benar untuk memasukkan backslash dalam string di MathGolf.Penjelasan
sumber
05AB1E (lawas) ,
987 byte-1 byte terima kasih kepada @ Mr.Xcoder dengan pendekatan
ðм2ù
.Masukan sebagai daftar dua string.
Hanya berfungsi di versi lawas 05AB1E, karena
ζ
dapat mengubah urutan string serta daftar karakter 2D, sedangkanζ
dalam versi 05AB1E baru hanya bekerja dengan daftar karakter 2D.Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
bytes
ke halaman kode sehingga Anda tahu itu tidak dikodekan dalam UTF-8 tetapi menggunakan pengkodean kustom sebagai gantinya. ;) Jika Anda mau, saya dapat mengedit jawaban saya untuk meletakkan pengkodean di bawah judul, tetapi jujur kode leaderboard harus dapat menanganinya imho.https://github.com/Adriandmen/05AB1E/wiki/Codepage?7
untuk menjadikan 7 angka terakhir tanpa membatalkan URL?Rubi , 28 byte
Cobalah online!
sumber
APL Dyalog Diperpanjang,
11108 byteCobalah online!
Penjelasan:
-2 Terima kasih kepada Adám.
sumber
2≤1⊥∧⌿⍤<
Excel, 36 byte
Jimmy
A1
, pada platform diA2
.Menemukan posisi Jimmy, dan mengambil 3 byte platform dan memangkas ruang. Jika panjang platform yang dihasilkan cukup panjang, Jimmy berdiri.
sumber
EXCEL,
9471 byte.VBA (Excel), 87 byteA1
= Jimmy,A2
= platform-23 byte. @Wernisch terima kasih.
?[(FIND("-",A2)-FIND("/",A1)<2)*(FIND("\",A1)-LEN(A2)<2)]*(len(replace([A2]," ",""))>1)
sumber
trim
bukanlen(replace
?/// ,
85 9387 byteCobalah online!
Output adalah 1 jika Jimmy aman. Kalau tidak menghasilkan apa-apa. (Unary 1 dan 0.) Karena tidak ada cara lain untuk mengambil input di ///, itu perlu kode-keras:
Sebagai contoh:
( Coba online!)
Perhatikan spasi setelah
<INPUT HERE>
.Penjelasan:
CATATAN! Kode penjelasan tidak dapat dijalankan karena komentar. Komentar terlampir dalam kurung kurawal. Juga, kode asli menggunakan golf tempat
//
diganti~
. Kode ini dihilangkan dari penjelasan.///
trik golf standar .sumber
R , 35 byte
Cobalah online!
Berdasarkan jawaban Jelly yang sangat baik dari @ EriktheOutgolfer, jadi harap unduh yang itu juga!
Input adalah matriks karakter 2-d.
sumber
Haskell, 59 byte
Cobalah online!
Fungsi ini disebut seperti:
f "/o\\ " " -- "
Cara kerjanya
f "/o\\" " -"
:b++cycle" "
- Menambahkan jumlah spasi tak terbatas setelahb
untuk memastikan bahwa Jimmy selalu di atas a-
atau(
" -"
→" - ..."
zip a$b++cycle" "
- Ritsleting dua senar secara bersamaan ([('/',' '), ('o','-'), ('\\',' ')]
)(p,q)<-zip a$b++cycle
- Untuk setiap pasangan dalam daftar zip[1|(p,q)<-zip a$b++cycle" ",elem p"/o\\",q==' ']
- Menghasilkan daftar1
s, yang panjangnya adalah jumlah pasangan yang memenuhi syarat:elem p"/o\\"
- Karakter di string atas adalah salah satu bagian tubuh Jimmy. (Puas dengan ketiga pasangan dalam contoh ini)q==' '
- Karakter di string bawah adalah spasi. (Puas oleh('/', ' ')
dan('\\', ' ')
)Jadi, pasangan harus menjadi salah satu di mana salah satu bagian tubuh Jimmy berada di atas ruang.
Karena dalam contoh ini, dua pasangan memenuhi kedua kondisi, daftarnya adalah
[1,1]
sum[1|(p,q)<-zip a$b++cycle" ",elem p"/o\\",q==' ']
- Ambil jumlah dari mereka1
(yaitu panjang daftar), yang dalam contoh ini adalah2
.sum[1|(p,q)<-zip a$b++cycle" ",elem p"/o\\",q==' ']<2
- Periksa apakah jumlah bagian tubuh di atas spasi kurang dari 2. Dalam contoh ini, tidak, jadi Jimmy akan jatuh. :(sumber
C (gcc) , 73 byte
Cobalah online!
sumber
index()
alih-alihstrchr()
Kotlin, 60 byte
Penjelasan:
sumber
/// , 57 byte
Cobalah online!
Tambahkan input ke akhir program untuk dijalankan. Mengembalikan string kosong jika Jimmy jatuh dari platform, serangkaian tanda seru sebaliknya.
/|/\/\//
diganti|
dengan//
, yang membuat kode menjadi lebih pendek dan lebih mudah dibaca (|
digunakan untuk membatasi setiap penggantian)/\/o\\/J| J/J*/
menggantikan Jimmy denganJ
untuk singkatnya dan mengubah ruang di sebelah kiri dia*
ke di sebelah kanannya/* /| -/ | //
membatalkan*
dan dengan ruang di sebelah kiri platform. Jika ada dua ruang atau lebih yang tersisa, Jimmy jatuh ke kiri, dan platform dihapus. Bagian ini juga menghilangkan spasi putih di sebelah kanan platform./*-/|--/!/
membatalkan*
dan dengan panjang platform. Jika setidaknya ada dua-
kiri, Jimmy tidak jatuh ke kanan, sehingga mereka diganti dengan a!
./-/|*/|J//
menghapus setiap karakter yang tersisa yang tidak!
sumber
Japt , 8 byte
Cobalah
sumber
Retina 0.8.2 , 16 byte
Cobalah online! Tautan termasuk test suite. Penjelasan:
Meskipun masih ada spasi di baris pertama, dan kedua baris masih memiliki lebih dari satu karakter, hapus spasi dan karakter pertama dari baris berikutnya. Catatan: Ini mengasumsikan bahwa tidak ada spasi tambahan setelah Jimmy. Diperlukan +1 byte jika spasi tambahan harus diizinkan.
Pastikan setidaknya ada dua platform di bawah Jimmy.
sumber
Perl 5
-pl
, 42 byteCobalah online!
sumber
Ruby 2.5.3, 44 byte
Input diambil sebagai dua array. Jelas bukan pendekatan yang paling ramah golf (lihat jawaban GB), tapi saya suka alasan untuk menggunakan
zip
fungsi ini.sumber
PowerShell ,
63..5553 byte-1 byte berkat mazzy
Cobalah online!
Mengambil input sebagai dua baris.
Belum dibuka:
sumber
C # (Visual C # Interactive Compiler) ,
444039 byte-4 byte terima kasih kepada Jo King
Cobalah online!
sumber
Python 3.7 ,
7156 BytesVersi yang sangat sederhana dan terpendek yang dapat saya pikirkan untuk menggunakan pendekatan ini. Input
s
adalah daftar dua string, yang pertama untuk baris-Jimmy, yang kedua untuk platform. Rangkai karakter-karakter yang berada di atas satu sama lain dan kemudian periksa apakah-
ada di bawah bagian Jimmy setidaknya dalam dua contoh.EDIT: Dikurangi oleh beberapa Bytes berkat Blue!
sumber
s
harus ada dua daftar, satu untuk jimmy dan satu untuk platform?). Juga, ada beberapa tempat Anda dapat menyimpan byte: alih-alih menjumlahkan daftar, Anda dapat menjumlahkan iterator mentah (menghapus tanda kurung); alih-alih memeriksa>=2
, periksa>1
; Anda dapat menjumlahkanTrue
danFalse
menyukai 1 dan 0, tidak perlu untuk if-else. Akhirnya, sebelum memposting jawaban baru dalam bahasa yang sama, Anda harus melihat yang sebelumnya untuk melihat apakah Anda dapat meningkatkan.Chevron,
8487 byteIni adalah bahasa yang cukup baru dari kreasi saya sendiri - juru bahasa prototipe, dokumentasi, dan program contoh dapat ditemukan di https://github.com/superloach/chevron .
Penjelasan:
>^__>^j
- ambil jimmy sebagai input TXT^i<<0
- inisialisasi indeks ke 0^i<<^i+1
- indeks kenaikan^h<^i>^j
- dapatkan karakter jimmy di indeks->+2??^h=/
- melompat keluar dari lingkaran di kaki kiri Jimmy->-3
- kembali ke awal lingkaran>^__>^p
- ambil platform sebagai input TXT^q<^i|2>^p
- potong 3 karakter di bawah jimmy->+2??^q<--
- jika 2 garis putus-putus di bawah jimmy, lompat ke exit yang sebenarnya><0
- pintu keluar palsu><1
- pintu keluar yang benarsumber
C (gcc), 103 byte
Cobalah online!
Akan jauh lebih pendek ( 75 byte ), jika bisa diasumsikan ada spasi spasi setelah platform.
sumber
Japt
-¡
, 9 byte-1 byte jika input dapat dibalik.
Cobalah online
sumber
V , 18 byte
Cobalah online!
Keluarkan spasi putih hanya jika jimmy jatuh dari platform. Keluarkan sesuatu yang bukan spasi jika jimmy tetap di platform.
sumber