ตอนนี้ฉันอยู่ที่ไหน


21

ตอนนี้ฉันอยู่ที่ไหน

รับสตริงdที่มีเฉพาะตัวอักษรNSWEกำหนดพิกัดที่ฉันเดินทาง (จากซ้ายไปขวาใช้ความโลภมาก) และพิกัดสุดท้ายที่ฉันอาศัยอยู่

กฎสำหรับการอ่านพิกัดจากซ้ายไปขวา:

  • หากตัวละครต่อไปคือNหรือS :
    • หากตัวละครหลังจากNหรือSเป็นอื่นNหรือS :
      • ใช้เพียงครั้งแรกหรือNS
      • ผลผลิต[0,1] สำหรับN
      • ผลผลิต[0,-1]สำหรับS
    • ถ้าตัวละครหลังจากที่NหรือSเป็นWหรือE :
      • กินทั้งสองNหรือSและหรือWE
      • เอาท์พุท[1,1]หรือ[-1,1]สำหรับNEและNWตามลำดับ
      • เอาท์พุท[1,-1]หรือ[-1,-1]สำหรับSEและSWตามลำดับ
  • หากตัวละครเป็นEหรือWไม่นำหน้าด้วยSหรือN :
    • กินหรือEW
    • เอาท์พุทสำหรับ[1,0]E
    • เอาท์พุทสำหรับ[-1,0]W

ตัวอย่างการทำงาน

NSWE

[0,1]   (North      N)
[-1,-1] (South-west SW)
[1,0]   (East       E)
[0,0]   (N+SW+E = Didn't actually move)

หมายเหตุสามารถอยู่ในรูปแบบใด ๆ ต่อไปนี้เป็นตัวอย่างอื่น ๆ ของเอาต์พุตที่ถูกต้อง:

[[0,1],[-1,-1],[1,0],[0,0]]


[[[0,1],[-1,-1],[1,0]],[0,0]]


"0,1\n0,-1\n-1,0\n1,0\n0,0"

ฯลฯ ...


ตัวอย่างเพิ่มเติม

SWSENNESWNE

[-1,-1]
[1,-1]
[0,1]
[1,1]
[-1,-1]
[1,1]
[1,0]

NNEESESSWWNW

[0,1]
[1,1]
[1,0]
[1,-1]
[0,-1]
[-1,-1]
[-1,0]
[-1,1]
[0,0]

NENENEE

[1,1]
[1,1]
[1,1]
[1,0]
[4,3]

NEN

[1,1]
[0,1]
[1,2]

EEE

[1,0]
[1,0]
[1,0]
[3,0]

กฎระเบียบ

  • คุณสามารถส่งออกในรูปแบบที่สะดวกที่ไม่ละเมิดช่องโหว่
  • คุณต้องกินอย่างตะกละตะกลาม, NWEไม่เคยเป็นเสมอ N,W,ENW,E
    • นี้นำไปใช้: SW*, SE*, ,NW*NE*
    • คุณบริโภคจากซ้ายไปขวาอย่างตะกละตะกลาม
  • คือการชนะการนับไบต์ต่ำสุด

"กำหนดพิกัดที่ฉันเดินทาง" : ฉันไม่แน่ใจว่ามันจะตรงกับสิ่งที่อธิบายไว้ในภายหลังหรือไม่ ก็มากขึ้นเช่น"ตรวจสอบเวกเตอร์ของการเคลื่อนไหวของฉันทั้งหมด" เฉพาะผลลัพธ์สุดท้ายคือพิกัดจริง
Arnauld

1
กรณีทดสอบที่เดินไป[4, 3]เรื่อย ๆ จะทำให้ง่ายขึ้นเล็กน้อยในการดูว่าเกิดอะไรขึ้นในเอาต์พุตทดสอบ
ลินน์

3
เป็นตัวเลขที่ซับซ้อนในรูปแบบ1, -1j, (-1+1j)ฯลฯ ผลลัพธ์รูปแบบที่ถูกต้อง?
ลินน์

2
จากการไม่มีกรณีนี้ทั้งในกฎและตัวอย่างที่ให้ฉันถือว่าอินพุต-String จะไม่สิ้นสุดใน 'N' หรือ 'S'?
Kevin Cruijssen

1
การบริโภคอย่างตะกละตะกลามแตกต่างจากจริงหรือไม่? เนื่องจากNEเป็นเพียงN+Eไม่ควรมันไม่สำคัญ?
ข้าวสาลีตัวช่วยสร้าง

คำตอบ:


7

Python 2 , 116 ไบต์

import re
a=[(int(s,35)%5-3,('N'in s)-('S'in s))for s in re.findall('[NS][EW]?|.',input())]
print a,map(sum,zip(*a))

ลองออนไลน์!

ด้วยเอาต์พุตเป็น[(3+4j), 1, -1j, …], 91 ไบต์

lambda x:[sum(1j**(ord(c)%8%5)for c in s)for s in[x]+re.findall('[NS][EW]?|.',x)]
import re

ลองออนไลน์!

แลมบ์ดานี้ส่งคืนรายการจำนวนเต็มแบบเกาส์ : อันแรกคือพิกัดสุดท้ายและส่วนอื่น ๆ ทั้งหมดเป็นขั้นตอนที่จำเป็นในการเดินทาง


5

ทูต 80 ไบต์

V#Sum##{Chop[1-ToBase[22260446188,3],2][Sum@Ords=>MatchAll[_,/"[NS][WE]|."]%11]}

ลองออนไลน์!

นี่คือฟังก์ชั่นที่ไม่ระบุชื่อซึ่งรับอาร์กิวเมนต์สตริงหนึ่งรายการ

คำอธิบาย

ภารกิจแรกคือการใช้ระยะการแยกวิเคราะห์ของคำถามนี้ ฉันพบว่าสั้นที่สุดที่จะใช้ Regex ง่าย ๆ ในการแยกวิเคราะห์อินพุต ( _):

MatchAll[_,/"[NS][WE]|."]

สิ่งนี้ตรงกับการเกิดขึ้นของ regex [NS][WE]|.ทั้งหมดที่เห็นในคำตอบอื่น ๆ อีกมากมาย สิ่งนี้ทำให้เกิดทิศทางที่ร้องขออย่างตะกละตะกลาม

ตอนนี้เรากำลังจะใช้ฟังก์ชั่นแฮชกับ direciton แต่ละอัน เราใช้โคเดอพ้อยท์ของแต่ละทิศทางและรวมเข้าไป สิ่งนี้จะให้การแมปต่อไปนี้:

Direction       Ord-sum
E               69
N               78
S               83
W               87
NE              147
SE              152
NW              165
SW              170

เราจะพยายามจับคู่ค่าเหล่านี้กับโดเมนที่เล็กลง โมดูโล่มีประโยชน์สำหรับสิ่งนี้และเราสามารถแสดงให้เห็นว่าโมดูโล่ที่เล็กที่สุดซึ่งส่งผลให้มีค่าที่ไม่ซ้ำกันสำหรับอินพุตทั้งหมดที่กำหนดคือ 11 การเรียงลำดับตามส่วนที่เหลือนี่เป็นตารางต่อไปนี้:

Direction       Ord-sum         % 11
NW              165             0
N               78              1
E               69              3
NE              147             4
SW              170             5
S               83              6
SE              152             9
W               87              10

Sum@Ords=>[...]%11ตอนนี้เรามีการติดต่อการป้อนข้อมูลเช่นการเข้ารหัสโดย ต่อไปเราจะต้องแปลงส่วนที่เหลือเหล่านี้เป็นจุด เราจะพยายามหาค่าการแมปอื่นซึ่งหมายถึงการแทรก "การเติมค่าเบาบาง" เพื่อแฮชที่ไม่สอดคล้องกับทิศทางจะเป็นประโยชน์:

Direction       Hash        Coordinates
NW              0           [-1, 1]
N               1           [0, 1]
--             (2)          [0, 0]
E               3           [1, 0]
NE              4           [1, 1]
SW              5           [-1, -1]
S               6           [0, -1]
--             (7)          [0, 0]
--             (8)          [0, 0]
SE              9           [1, -1]
W               10          [-1, 0]

ขณะนี้เรามีชุดของคะแนนซึ่งสามารถให้รายการที่สามารถทำดัชนีได้โดยแฮช:

[-1, 1] [0, 1] [0, 0] [1, 0] [1, 1] [-1, -1] [0, -1] [0, 0] [0, 0] [1, -1] [-1, 0]

ตอนนี้เราจะบีบอัดสิ่งนี้โดยดูว่ามันประกอบไปด้วย-1s, 0s และ1s เท่านั้น เนื่องจากรายการแสดงถึงคู่เราสามารถทำให้รายการเรียบโดยไม่ทำให้ข้อมูลสูญหาย จากนั้นถ้าเรานำตัวเลขแต่ละตัวมาxคำนวณ1-xเราจะได้รายการต่อไปนี้:

2 0 1 0 1 1 0 1 0 0 2 2 1 2 1 1 1 1 0 2 2 1

เราสามารถแปลงเป็นเลขฐาน 3 ได้:

20101101002212111102213

แปลงเป็นฐาน 10:

20101101002212111102213 ≡ 2226044618810

เพื่อสรุปเราได้จุดที่เรายกเลิกการจับคู่พวกเขาเอาแต่ละองค์ประกอบหักออกจาก1และเปลี่ยนจากฐานให้เรา3 22260446188เราสามารถขยายตัวอย่างเช่น:

  1. แปลงเป็นฐาน 3: ToBase[22260446188,3]
  2. ใช้ตัวเลขแต่ละตัวที่หักออกจากหนึ่ง (การย้อนกลับด้วยตนเอง): 1-ToBase[22260446188,3]
  3. จับคู่รายการอีกครั้ง: Chop[1-ToBase[22260446188,3],2]

สิ่งนี้ทำให้เรามีคู่ดั้งเดิมของเรา จากนั้นเราสามารถทำการจัดทำดัชนีดังกล่าว:

(chopped value)[hashes]

ตั้งแต่ใน Attache การทำดัชนีโดยอาร์เรย์จะส่งคืนองค์ประกอบทั้งหมดที่สอดคล้องกับดัชนีเหล่านั้น (ดังนั้น, [1,2,3,4][ [0,0,-1,1] ] = [1,1,4,2].) ตอนนี้เรามีทิศทางของเส้นทางที่ OP เดิน สิ่งที่เหลือคือการคำนวณผลรวม

ดังนั้นเราจึงจับผลนี้ในแลมบ์ดา{...}และใส่เป็นฟังก์ชั่นครั้งแรกในองค์ประกอบของฟังก์ชั่น ( a##b) V#Sumมีความเป็นอยู่ที่สอง นี่คือทางแยกซึ่งรับอินพุตxขยายเป็น:

V[x, Sum[x]]

Sumเมื่อได้รับอาร์เรย์ 2D จะเกิดขึ้นกับผลรวมของทุกคอลัมน์ในอาร์เรย์ (ซึ่งเป็นผลมาจากการรวมเวกเตอร์) ดังนั้นนี่จะจับคู่ทิศทางกับปลายทางสุดท้ายและเรามีผลลัพธ์สุดท้ายของเรา


4

JavaScript (ES6), 102 ไบต์

ส่งคืนสตริง

s=>s.replace(/[NS][EW]|./g,s=>(D=d=>!!s.match(d),x+=h=D`E`-D`W`,y+=v=D`N`-D`S`,[h,v]+`
`),x=y=0)+[x,y]

ลองออนไลน์!


ฉันชอบการใช้ฟังก์ชั่นเทมเพลต! : D
Conor O'Brien

@ ConorO'Brien ใช่พวกเขาค่อนข้างมีประโยชน์ที่นี่ เวทมนตร์คาถาที่คร่ำครวญทั้งหมดที่ฉันเรียกมาจนถึงตอนนี้มีความยาวอย่างน้อยอีกเล็กน้อย
Arnauld

4

MATL , 45 ไบต์

'NS' 'WE'Z*Z{2MhX{h'eklihfmj'X{YX9\3_2&YAqts

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย (พร้อมตัวอย่าง)

พิจารณาการป้อนข้อมูล'NSWE'เป็นตัวอย่าง

'NS' 'WE'  % Push these two strings
           % STACK: 'NS', 'WE'
Z*         % Cartesian product. Gives a 4×2 char matrix
           % STACK: ['NW'; 'NE'; 'SW'; 'SE']
Z{         % Cell array of rows (strings)
           % STACK: {'NW', 'NE', 'SW', 'SE'}
2M         % Push again the inputs of the second-last function call
           % STACK: {'NW', 'NE', 'SW', 'SE'}, 'NS', 'WE'
h          % Concatenate horizontally
           % STACK: {'NW', 'NE', 'SW', 'SE'}, 'NSWE'
X{         % Cell array of individual elements (chars)
           % STACK: {'NW', 'NE', 'SW', 'SE'}, {'N', 'S', 'W', 'E'}
h          % Concatenate horizontally
           % STACK: {'NW', 'NE', 'SW', 'SE', 'N', 'S', 'W', 'E'}
'eklihfmj' % Push this string
           % STACK: {'NW', 'NE', 'SW', 'SE', 'N', 'S', 'W', 'E'}, 'eklihfmj'
X{         % Cell array of individual elements (chars)
           % STACK: {'NW','NE','SW','SE','N','S','W','E'},{'e','k','l','i','h','f','m','j'}
YX         % Implicit input. Regexp replace: replaces 'NW' by 'e', then 'NE' by 'k', etc.
           % Note that the two-letter combinations are replaced first, which implements
           % the greediness; and the target letters do not appear in the source, which
           % avoids unwanted interactions between replacements
           % STACK: 'hlj'
9\         % Modulo 9 (of codepoints), element-wise
           % STACK: [5, 0, 7]
3_2&YA     % Convert to base 3 with 2 digits. Gives a 2-column matrix
           % STACK: [1, 2; 0, 0; 2, 1]
q          % Subtract 1, element-wise
           % STACK: [0, -1; -1, -1; 1, 0]
tXs        % Duplicate. Sum of each column
           % STACK: [0, -1; -1, -1; 1, 0], [0, 0]
           % Implicit display

4

Java (JDK 10) , 171 ไบต์

s->{var r="";int i=0,l=s.length,c,x=0,y=0,Y,X;for(;i<l;X=c>1||i<l&&(c=~-s[i]/6%4)>1&&++i>0?c*2-5:0,r+=X+","+Y+" ",x+=X,y+=Y)Y=(c=~-s[i++]/6%4)<2?1-c*2:0;return r+x+","+y;}

ลองออนไลน์!

คำอธิบาย

ขอบคุณc=~-s[i]/6%4การทำแผนที่ต่อไปนี้เสร็จสิ้น:

'N' -> ascii: 78 -> -1 = 77 -> /6 = 12 -> %4 = 0
'S' -> ascii: 83 -> -1 = 83 -> /6 = 13 -> %4 = 1
'W' -> ascii: 87 -> -1 = 86 -> /6 = 14 -> %4 = 2
'E' -> ascii: 69 -> -1 = 68 -> /6 = 11 -> %4 = 3
  • NSมีการตรวจสอบด้วยc<2และแมปกับ+1/ -1ใช้1-c*2;
  • EWมีการตรวจสอบด้วยc>1และแมปไป+1/ ใช้-1c*2-5

เครดิต

  • อย่างน้อยที่สุด 9 ไบต์บันทึกขอบคุณที่เควิน Cruijssen

อาคุณโพสต์คำตอบ Java ของคุณในขณะที่ฉันพิมพ์คำอธิบายของฉัน :) เนื่องจากเราทั้งคู่ใช้วิธีที่แตกต่างอย่างสิ้นเชิงฉันจะจากไปก่อน ตัวแปรที่แย่เกินไปที่ใช้ในแลมบ์ดาต้องจบอย่างมีประสิทธิภาพไม่เช่นนั้นคุณอาจส่งคืนสตริงแทนที่จะเป็นรายการเพื่อบันทึกไบต์
Kevin Cruijssen

ขอบคุณมันบันทึกไว้เพียงไม่กี่ไบต์ (4) แต่ดีกว่าไม่มีอะไรเลย)
Olivier Grégoire

@KevinCruijssen ขอบคุณดูเหมือนจะค่อนข้างชัดเจนในตอนแรก แต่ฉันกำลังทำงานในวิธีอื่นซึ่งทำให้จำนวนไบต์ของฉันลดลงกว่า 30 รายการ "การแยกวิเคราะห์" ไม่ใช่การจับคู่ "หนึ่งรายการ
Olivier Grégoire

1
เฮ้อ .. 172 bytes
Kevin Cruijssen

1
@KevinCruijssen ขออภัยการรวมการเปลี่ยนแปลงของคุณ ... ฉันทำงานและฉันลืมรีเฟรชหน้านี้ ... ขอบคุณสำหรับทุกสิ่งที่ต้องทำ ^^ 'จำนวนเครดิตน่าจะต่ำกว่าเครดิตจริงของคุณ ขออภัยด้วยเช่นกัน: s
Olivier Grégoire

3

เรติน่า 0.8.2 , 93 ไบต์

.+
$&¶$&
\G[NS]?[EW]?
$&¶
G`.
W
J
%O`.
+`EJ|NS

m`^((J)?[EJ]*)((S)?[NS]*)
$#2$*-$.1,$#4$*-$.3

ลองออนไลน์! คำอธิบาย:

.+
$&¶$&

ทำสำเนาอินพุต

\G[NS]?[EW]?
$&¶

แบ่งสำเนาแรกขึ้นเป็นทิศทาง

G`.

ลบบรรทัดว่างที่ไม่เกี่ยวข้องที่สร้างโดยกระบวนการข้างต้น

W
J

เปลี่ยนWเข้ามาJเพื่อที่จะเรียงลำดับระหว่างและE N(การเลื่อนEไปมาระหว่างSและWยังใช้งานได้)

%O`.

เรียงแต่ละบรรทัดตามลำดับ

+`EJ|NS

ลบคู่ของทิศทางตรงกันข้าม (นี่จะมีผลเฉพาะกับบรรทัดสุดท้ายของหลักสูตร)

m`^((J)?[EJ]*)((S)?[NS]*)
$#2$*-$.1,$#4$*-$.3

นับจำนวนการเคลื่อนไหวในแนวนอนและแนวตั้งเพิ่มสัญญาณเมื่อจำเป็น

บรรดาผู้ที่ทราบความแตกต่างระหว่างผล Retina 0.8.2 และ Retina 1 จะต้องการที่จะชี้ให้เห็นว่าผมสามารถบันทึก 2 ไบต์ใน Retina 1 เพราะมันใช้แทน* $*ในขณะที่ฉันอยู่ที่นั่นฉันพยายามทำให้กระบวนการแยกง่ายขึ้น แต่ฉันไม่สามารถลดจำนวนไบต์ได้มากขึ้นฉันทำได้เพียงเท่านี้:

L$`$(?<=(.*))|[NS]?[EW]?
$&$1

3

Java 10, 269 265 243 ไบต์

s->{var r="";int x=0,y=0,t,X,Y,a;for(;!s.isEmpty();r+=X+"|"+Y+" ",s=s.substring(++t),x+=X,y+=Y){a=s.charAt(t=0);if(s.matches("[SN][WE].*")){X=s.charAt(1)<70?1:-1;Y=1-a%2*2;t++;}else{X=a<70?1:a>86?-1:0;Y=a>69&a<87?1-a%2*2:0;}}return r+x+"|"+y;}

ไม่ใช่ภาษาที่เหมาะสมสำหรับความท้าทายนี้แน่นอน

ลองออนไลน์

คำอธิบาย:

s->{                  // Method with String as both parameter and return-type
  var r="";           //  Result-String, starting empty
  int x=0,            //  Ending `x`-coordinate, starting at 0
      y=0,            //  Ending `y`-coordinate, starting at 0
      t,X,Y,a;        //  Temp-integers
  for(;!s.isEmpty()   //  Loop as long as the input-String is not empty yet
      ;               //    After every iteration:
       r+=X+"|"+Y+" ",//     Append the current steps to the result-String
       s=s.substring(t),
                      //     Remove the first `t` characters from the input-String
       x+=X,y+=Y){   //      Append the ending `x`,`y` coordinates with the steps
    a=s.charAt(0);   //    Set `a` to the first character of the input-String to save bytes
    t=1;             //    Set `t` to 1
    if(s.matches("[SN][WE].*")){
                     //   Else-if the input-String starts with N/S followed by E/W:
      X=s.charAt(1)<70?1:-1;
                     //    Set `X` to 1 if 'E', -1 if 'W'
      Y=1-a%2*2;     //    Set `Y` to 1 if 'N', -1 if 'S'
      t++;}          //    Increase `t` by 1
    else{            //   Else:
      X=a<70?1:a>86?-1:0;
                     //    Set `X` to 1 if 'E', -1 if 'W', 0 if 'N' or 'S'
      Y=a>69&a<87?1-a%2*2:0;}}
                     //    Set `Y` 1 if 'N', -1 if 'S', 0 if 'E' or 'W'
  return r+x+"|"+y;} //  Append the ending coordinates, and return the result-String

1
Java ตอบรับคะแนน แต่ทำให้ทุกคนได้รับ :)
Magic Octopus Urn

@MagicOctopusUrn True :) และฉันยังสนุกกับการเล่นกอล์ฟใน Java แม้ว่าคุณจะไม่สั้นที่สุด .. เว้นแต่คุณจะตอบคำถามเดียวเท่านั้น (ได้รับคำตอบจาก Java สองคำ .. XD) สำหรับความท้าทายนี้คำตอบ Java ของOlivierGrégoireนั้นสั้นกว่าประมาณ 70 ไบต์ดังนั้น upvotes ส่วนใหญ่ควรไปหาเขา
Kevin Cruijssen



1

Ruby , 75 71 ไบต์

->x{[*x.scan(/[NS][EW]?|./),x].map{|s|s.chars.sum{|c|1i**(c.ord%8%5)}}}

ลองออนไลน์!

-4 ไบต์ขอบคุณ benj2240

ตั้งแต่กลับมาที่หมายเลขลักษณะที่ซับซ้อนจะเป็นรูปแบบการออกยอมรับผมคิดว่ามันจะไม่ได้รับ golfier กว่าเพียงแค่การทำพอร์ตของดีมากคำตอบของลินน์


ดีมาก. คุณสามารถบันทึกไม่กี่ไบต์โดยข้ามด้านในmapผ่านบล็อกโดยตรงไปที่sum: ลองออนไลน์!
benj2240

1

F # (โมโน) 269 ​​ไบต์

let f s=
 let l,h=(string s).Replace("NW","A").Replace("NE","B").Replace("SW","C").Replace("SE","D")|>Seq.map(function 'N'->0,1|'S'->0,-1|'W'-> -1,0|'E'->1,0|'A'-> -1,1|'B'->1,1|'C'-> -1,-1|'D'->1,-1)|>Seq.mapFold(fun(x,y) (s,t)->(s,t),(x+s,y+t))(0,0)
 Seq.append l [h]

ลองออนไลน์!


สวัสดียินดีต้อนรับสู่ PPCG น่าเสียดายที่คุณไม่มีรายการสุดท้ายของผลลัพธ์ของคุณซึ่งควรเป็นตำแหน่งที่คุณสิ้นสุด ดังนั้นสำหรับNSWEคุณกำลังแสดงผล(0,1), (-1,-1), (1,0)แต่การส่งออกที่สี่ควรจะเป็นผลรวมของพิกัดเหล่านั้นดังนั้น(0,0)(เพราะ0+-1+1 = 0และ1+-1+0 = 0)
Kevin Cruijssen

@KevinCruijssen โอเคฉันไม่เข้าใจเลย ทำการปรับปรุง
Henrik Hansen

1
ดูเหมือนว่าจะทำงานได้ดีในขณะนี้ดังนั้น +1 จากฉัน เพลิดเพลินไปกับการพักผ่อนของคุณ! :) และในกรณีที่คุณยังไม่ได้เห็นเคล็ดลับสำหรับการเล่นกอล์ฟใน F #และเคล็ดลับสำหรับการเล่นกอล์ฟใน <ทุกภาษา>อาจเป็นที่น่าสนใจในการอ่าน
Kevin Cruijssen

1

sed, 125

เสรีภาพกับรูปแบบการออกรุ่น:

คะแนนรวม +1 สำหรับ-rพารามิเตอร์ที่จะระงับ

s/(N|S)(E|W)/\L\2,\1 /g
s/N|S/,& /g
s/E|W/&, /g
s/N|E/A/gi
s/S|W/a/gi
p
:
s/(\S*),(\S*) (\S*),(\S*)/\1\3,\2\4/
t
s/Aa|aA//
t

ลองมันออนไลน์

เอาท์พุทเป็นดังนี้:

  • องค์ประกอบพิกัดจะถูกคั่นด้วยเครื่องหมายจุลภาค
  • แต่ละชุดของพิกัดจะถูกคั่นด้วย TAB
  • พิกัดสุดท้ายอยู่ในบรรทัดใหม่
  • ตัวเลขทั้งหมดอยู่ใน un-unary:
    • สตริงของAอักขระแสดงถึงจำนวนเต็ม + velen(string)
    • สตริงของaอักขระแสดงถึงจำนวนเต็ม -ve-len(string)
    • สตริงที่ว่างเปล่าแสดงถึง 0

ตัวอย่างเช่น:

  • , คือ [0,0]
  • ,AA คือ [0,2]
  • aaa, คือ [-3,0]

sed 4.2.2 รวมถึงส่วนขยาย GNU exec , 147

เหมาะสมรูปแบบการออกรุ่น:

คะแนนรวม +1 สำหรับ-rพารามิเตอร์ที่จะระงับ

s/(N|S)(E|W)/\L\2 \1\n/g
s/N|S/0 &\n/g
s/E|W/& 0\n/g
s/N|E/1/gi
s/S|W/-1/gi
p
:
s/(\S+) (\S+)\n(\S+) (\S+)/\1+\3 \2+\4/
t
s/\S+/$[&]/g
s/^/echo /e

เอาต์พุตถูกกำหนดเป็นพิกัดที่คั่นด้วยช่องว่างหนึ่งรายการต่อบรรทัด มีการขึ้นบรรทัดใหม่พิเศษระหว่างชุดสุดท้ายและสุดท้ายของพิกัด - ไม่แน่ใจว่าเป็นปัญหาหรือไม่

ลองออนไลน์!


0

PHP, 153 ไบต์

ให้ regex ทำการแยก; วนซ้ำการแข่งขันพิมพ์และสรุปผลกลาง:

preg_match_all("/[NS][EW]?|E|W/",$argn,$m);foreach($m[0]as$s){$x+=$p=strtr($s[-1],NEWS,1201)-1;$y+=$q=strtr($s[0],NEWS,2110)-1;echo"$p,$q
";}echo"$x,$y";

ทำงานเป็นท่อที่มี-nRหรือลองออนไลน์


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.