Ưu tiên bên phải


12

Nhiệm vụ của bạn là điều tiết giao thông trên một ngã tư. Có 4 con đường đến từ phía bắc, đông, nam và tây.

Đầu vào là một chuỗi đại diện cho lưu lượng sắp tới trên mỗi con đường. Ví dụ, NNNWScho biết có tổng cộng 5 chiếc xe: ba chiếc ở phía bắc, một chiếc ở phía tây và một chiếc ở phía nam. Thứ tự của các nhân vật không có tầm quan trọng ở đây, NNNWStương đương với WNNSN.

Bạn phải đưa ra thứ tự mà ô tô nên đi, sử dụng ưu tiên theo đúng quy tắc: ô tô đến từ phía nam phải để ô tô từ phía đông đi trước, phía đông nhường đường cho phía bắc, phía bắc nhường đường cho phía tây và phía tây nhường đường cho miền Nam.

Ví dụ, với đầu vào NNNWS, xe phía nam nên đi trước, sau đó là xe phía tây, sau đó là 3 xe phía bắc. Do đó, đầu ra nên được SWNNN.

Có một số trường hợp không thể giải quyết, ví dụ NS hoặc NNWSE: sau đó bạn nên xuất chuỗi stuck.

Các trường hợp thử nghiệm

N => N
NW => WN
NWS => SWN
SNW => SWN
SSSSS => SSSSS
ENNNNES => NNNNEES
NS => stuck
NNWSE => stuck

3
Cả hai thứ đó có vẻ khó hơn rất nhiều vì chúng cũng tính đến các hướng đi.
Martin Ender

3
Tôi sẽ khuyên bạn nên sử dụng hành vi không xác định thay vì in stuck.
Erik the Outgolfer

4
@Erik khi xử lý an toàn đường bộ, một hành vi không xác định có thể được chấp nhận :-)
Arnaud


2
Là chuỗi rỗng có thể là đầu vào? Nếu vậy, kết quả nên là gì? Và tại sao NSbị mắc kẹt? Bởi vì cả hai NSSNsẽ là một giải pháp?
TonMedel

Câu trả lời:


2

Perl, 65 byte

Bao gồm +2 cho -lp

Cung cấp đầu vào trên STDIN. Giả sử chuỗi trống không phải là đầu vào hợp lệ

#!/usr/bin/perl -lp
s%.%'+(y/NESW/ESWN/*s/N(.*)W/W$1N/,/N/^/S/)'x4%gere+0or$_=stuck

Nếu bạn không bận tâm đến việc không có dòng mới sau khi stuckbạn có thể bỏ ltùy chọn


2

PHP, 267 byte

sử dụng mới nhà điều hành tàu vũ trụusort -5 Bytes bởi @IsmaelMiguel

<?foreach($f=[E,S,W,N]as$l)$s.=+!($r=strstr)($i=$argv[1],$l);if(in_array($s,[0101,1010,0000]))die(stuck);$x=($p=strpos)($s,"1");$t=$r($j=join($f),$f[$x]).$r($j,$f[$x],1);$a=str_split($i);usort($a,function($x,$y)use($t,$p){return$p($t,$x)<=>$p($t,$y);});echo join($a);

Phá vỡ

# Extended Version without notices
$s="";
foreach($f=["E","S","W","N"] as $l){$s.=+!strstr($i=$argv[1],$l);} #bool concat swap the false true values in string
if(in_array($s,["0101","1010","0000"])){die("stuck");} # NS WE NESW -> stuck = end program
$x=strpos($s,"1"); # find the first false value for an begin for the sort algorithm
$t=strstr($j=join($f),$f[$x]).strstr($j,$f[$x],1); # create the sort pattern
#sort algorithm example sort string = NESW-> N is not in the string
function c($x,$y){
    global $t;
    return strpos($t,$x)<=>strpos($t,$y); # e.g. comparison E<=>W =-1 , W<=>S=1, W<=>W =0
}
$a=str_split($i); # Input in an array
usort($a,"c"); #sort array
echo join($a);# output array as string

1
Thay vì function c($x,$y){global$t,$p;return$p($t,$x)<=>$p($t,$y);}$a=str_split($i);usort($a,c);, bạn có thể sử dụng $a=str_split($i);usort($a,function($x,$y)use($t,$p){return$p($t,$x)<=>$p($t,$y);});và lưu 5 byte. Toán tử tàu vũ trụ thực sự giúp với cách sắp xếp này. Để bạn hiểu những gì tôi đã làm, tôi chuyển chức năng vào usort(), biến nó thành một chức năng ẩn danh. Sau đó, thay vì global(KHÔNG BAO GIỜ sử dụng nó), tôi đã sử dụng function(...)use($t,$p){...}. Các use(...)cú pháp cho phép bạn vượt qua các biến vào cơ thể chức năng ẩn danh (nó chấp nhận recerences quá).
Ismael Miguel

@IsmaelMiguel Cảm ơn bạn đã giải thích tuyệt vời này.
Jörg Hülsermann

Không có gì. Tôi thực sự thích use()bit trên các chức năng ẩn danh. Bạn nên sử dụng và lạm dụng nó.
Ismael Miguel

1

Mẻ, 216 byte

@echo off
set/pt=
set/an=2,e=4,s=8,w=16,r=0
:l
set/ar^|=%t:~0,1%
set t=%t:~1%
if not "%t%"=="" goto l
set/a"o=449778192>>r&3,l=1053417876>>r&3"
if %l%==0 (echo stuck)else set t=NESWNE&call echo %%t:~%o%,%l%%%

Cổng đơn giản của câu trả lời JavaScript của tôi. Đưa đầu vào vào STDIN bằng chữ in hoa hoặc in thường.


1

JavaScript (ES6), 108 107 106 104 byte

s=>(r=t=`NESWNE`,s.replace(/./g,c=>r|=2<<t.search(c)),t.substr(449778192>>r&3,1053417876>>r&3)||`stuck`)

Tích lũy một bitmask trong đó các hướng đã tiếp cận xe ô tô và trích xuất phần thích hợp của chuỗi ưu tiên.


Uncaught SyntaxError: Invalid regular expression: missing /
Cyoce

@Cyoce Rất tiếc. Điều xảy ra là trình duyệt đã bọc mã vào thời điểm đó và tôi nghĩ rằng một dòng mới đã len lỏi vào. Xin lỗi về điều đó.
Neil

không có vấn đề, chỉ cần cho bạn biết.
Cyoce
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.