Xuyên qua không gian và thời gian


10

Giới thiệu:

Nói chung chúng ta thường nói về bốn khía cạnh: ba chiều không gian cho x, yz; và một chiều thời gian. Vì lợi ích của thách thức này tuy nhiên, chúng tôi sẽ chia chiều thời gian thành ba cũng như: past, present, và future.

Đầu vào:

Hai danh sách đầu vào. Một chứa x,y,ztọa độ nguyên và một chứa số nguyên năm.

Đầu ra:

Một trong bốn đầu ra khác biệt và liên tục của sự lựa chọn của riêng bạn. Một để chỉ đầu ra space; một để chỉ đầu ra time; một để chỉ đầu ra both space and time; và một để chỉ ra đầu ra neither space nor time.

Chúng tôi sẽ chỉ ra rằng chúng tôi đã đi đến cả ba chiều không gian nếu sự khác biệt của các số nguyên không phải là 0 cho cả ba chiều.
Chúng tôi sẽ cho biết chúng tôi đã đi đến cả ba chiều thời gian nếu có ít nhất một năm trong quá khứ, ít nhất một năm trong tương lai và ít nhất một năm bằng với năm hiện tại (như vậy trong hiện tại).

Thí dụ:

Đầu vào:
Tọa độ-danh sách: Danh sách [{5,7,2}, {5,3,8}, {-6,3,8}, {5,7,2}]
năm:[2039, 2019, 2018, 2039, 2222]

Đầu ra:
Hằng số chospace

Tại sao?
Các xtọa độ là [5,5,-6,5]. Vì chúng không giống nhau, chúng tôi đã đi qua xchiều không gian.
Các ytọa độ là [7,3,3,7]. Vì chúng không giống nhau, chúng tôi cũng đã đi qua ychiều không gian.
Các ztọa độ là [2,8,8,2]. Vì chúng không giống nhau, chúng tôi cũng đã đi qua zchiều không gian.
Năm hiện tại là 2018. Không có năm trước, vì vậy chúng tôi đã không truy cập vào pastchiều thời gian.
Có một 2018món quà trong danh sách năm, vì vậy chúng tôi đã truy cập vào presentchiều thời gian.
Có nhiều năm ở trên 2018( [2039, 2019, 2039, 2222]), vì vậy chúng tôi cũng đã truy cập vào futurechiều thời gian.

Vì chúng tôi đã truy cập cả ba spacechiều, nhưng chỉ hai trong ba timechiều, đầu ra sẽ chỉ là (hằng số cho) space.

Quy tắc thử thách:

  • Bạn có thể sử dụng bất kỳ bốn đầu ra riêng biệt và không đổi cho bốn trạng thái có thể.
  • Đầu vào có thể ở bất kỳ định dạng hợp lý. Danh sách tọa độ có thể là bộ dữ liệu, danh sách / mảng bên trong có kích thước 3, chuỗi, đối tượng, v.v. Danh sách năm có thể là danh sách các đối tượng ngày thay vì số nguyên nếu điều đó có lợi cho số đếm byte của bạn.
  • Bạn có thể giả sử x,y,ztọa độ sẽ là số nguyên, do đó không cần xử lý số thập phân dấu phẩy động. Bất kỳ x, yvà / hoặc ztọa độ có thể được giá trị tiêu cực, mặc dù.
  • Bạn không thể lấy danh sách đầu vào được đặt hàng trước. Danh sách đầu vào phải theo thứ tự được hiển thị trong các trường hợp thử nghiệm.
  • Bạn có thể giả sử tất cả các giá trị năm sẽ nằm trong phạm vi [0,9999]; và bạn có thể giả sử tất cả các tọa độ nằm trong phạm vi [-9999,9999].
  • Nếu ngôn ngữ của bạn không có cách nào để lấy lại năm hiện tại, nhưng bạn vẫn muốn thực hiện thử thách này, bạn có thể lấy đó làm đầu vào bổ sung và đánh dấu câu trả lời của bạn là (không cạnh tranh) .

Quy tắc chung:

  • Đây là , vì vậy câu trả lời ngắn nhất bằng byte thắng.
    Đừng để ngôn ngữ mã-golf ngăn cản bạn đăng câu trả lời với các ngôn ngữ không mã hóa. Cố gắng đưa ra một câu trả lời càng ngắn càng tốt cho ngôn ngữ lập trình 'bất kỳ'.
  • Quy tắc chuẩn áp dụng cho câu trả lời của bạn với quy tắc I / O mặc định , vì vậy bạn được phép sử dụng STDIN / STDOUT, các hàm / phương thức với các tham số thích hợp và kiểu trả về, chương trình đầy đủ. Cuộc gọi của bạn.
  • Lỗ hổng mặc định bị cấm.
  • Nếu có thể, vui lòng thêm một liên kết với một bài kiểm tra cho mã của bạn (ví dụ TIO ).
  • Ngoài ra, thêm một lời giải thích cho câu trả lời của bạn rất được khuyến khích.

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

Coordinates-input: [{5,7,2}, {5,3,8}, {-6,3,8}, {5,7,2}]
Years-input:       [2039, 2019, 2018, 2039, 2222]
Output:            space

Coordinates-input: [{0,0,0}, {-4,-4,0}, {-4,2,0}]
Years-input:       [2016, 2019, 2018, 2000]
Output:            time

Coordinates-input: [{-2,-2,-2}, {-3,-3,-3}]
Years-input:       [2020, 1991, 2014, 2018]
Output:            both

Coordinates-input: [{5,4,2}, {3,4,0}, {1,4,2}, {9,4,4}]
Years-input:       [2020, 1991, 2014, 2017, 2019, 1850]
Output:            neither

Chúng ta cần bao nhiêu năm để có thể xử lý?
Xù xì

@Shaggy Tôi sẽ thêm nó vào mô tả thử thách. [0,9999]cũng tốt (và [-9999,9999]đối với tọa độ cũng tốt.
Kevin Cruijssen

Dang, có một trong những ý tưởng của tôi!
Xù xì

@Shaggy Vì tò mò, bạn đã hy vọng vào phạm vi nào?
Kevin Cruijssen

3
Chúng ta có thể lấy năm hiện tại làm đầu vào không? (Một số ngôn ngữ không thể có được năm hiện tại egBF, một số ngôn ngữ khác chỉ có thể làm như vậy bằng cách đánh giá mã bằng ngôn ngữ khác - ví dụ: Jelly; những ngôn ngữ khác, có thể nhiều người cũng sẽ tìm thấy người chơi gôn này)
Jonathan Allan

Câu trả lời:


2

05AB1E , 15 byte

Đầu ra là danh sách [space, time]trong đó 1 là viết tắt x0 là viết tắt củano x

ø€Ë_Psžg.SÙg3Q)

Hãy thử trực tuyến!

Giải trình

    ø                 # zip space coordinates
     €Ë               # for each axis, check that all values are equal
       _              # logical negation
        P             # product (1 for space, 0 for no space)
         s            # put the time list on top of the stack
          žg.S        # compare each with the current year
              Ù       # remove duplicates
               g3Q    # check if the length is 3
                  )   # wrap the space and time values in a list

Rõ ràng +1 từ tôi. Giống như 16 -ter mà tôi đã chuẩn bị, ngoại trừ việc tôi đã sử dụng -.±thay vì .S(do đó là byte 1 ..) và (cặp) thay vì)
Kevin Cruijssen

@KevinCruijssen: Tôi thực sự muốn một cách khác để làm Ùg3Q, cảm giác giống như kẻ trộm byte lớn nhất, nhưng tôi không chắc là có thể: /
Emigna

Tôi nghi ngờ nó có thể được thực hiện ngắn hơn tbh. Tôi có thể nghĩ ra một vài lựa chọn thay thế 4 byte và đang cố gắng thực hiện một êsố thao tác và một số thao tác bitwise hoặc một cái gì đó, nhưng tôi không thể tìm thấy bất kỳ lựa chọn thay thế 3 byte nào.
Kevin Cruijssen

6

Python 2 , 111 109 byte

lambda S,T:(min(map(len,map(set,zip(*S))))>1,date.today().year in sorted(set(T))[1:-1])
from datetime import*

Hãy thử trực tuyến!


Tại sao bạn làm cho T một bộ trước khi sắp xếp?
Black Owl Kai

4
@BlackOwlKai Nếu không, hai mục bị xóa bởi [1: -1] có thể không nằm trong quá khứ / tương lai
Poon Levi

6

Perl 6 , 47 46 byte

-1 byte nhờ nwellnhof

{Set(@^b X<=>Date.today.year)>2,max [Z==] @^a}

Hãy thử trực tuyến!

Khối mã ẩn danh có hai danh sách và trả về một bộ booleans, với yếu tố đầu tiên là bạn có du hành đúng lúc hay không, và thứ hai là bạn có du hành trong không gian hay không.

Giải trình

{                                            }  # Anonymous code block
     @^b X         # Map each element of the year list to:
          <=>      # Whether it is smaller, equal or larger than
             Date.today.year  # The current year
 Set(                       )    # Get the unique values
                             >2  # Is the length larger than 2?
                               ,
                                    [Z  ] @^a   # Reduce by zipping the lists together
                                max       # And return if any of them are
                                      ==  # All equal

3

Japt, 22 byte

Lấy đầu vào dưới dạng một mảng số nguyên 2D cho kích thước không gian và mảng số nguyên 1D trong nhiều năm. Đầu ra chỉ 2cho không gian, chỉ 1cho thời gian, 3cho cả hai và 0không.

yâ mÊeÉ Ñ+!Jõ kVmgKi¹Ê

Thử nó

                           :Implicit input of 2D-array U=space and array V=time
y                          :Transpose U
 â                         :Deduplicate columns
   m                       :Map
    Ê                      :  Lengths
     e                     :All truthy (not 0) when
      É                    :  1 is subtracted
        Ñ                  :Multiply by 2
           J               :-1
            õ              :Range [-1,1]
              k            :Remove all the elements present in
               Vm          :  Map V
                 g         :    Signs of difference with
                  Ki       :    The current year
                    ¹      :End removal
                     Ê     :Length
         +!                :Negate and add first result

2

Japt , 25 byte

Tôi chắc chắn 100% đây không phải là cách tiếp cận tốt nhất, vẫn đang tìm kiếm một số cách ngắn hơn để làm điều này: c

Trả về một tuple của booleans. Thứ nhất là nếu bạn du hành trong không gian và lần thứ hai nếu bạn du hành đúng lúc

[Uyâ e_ʦ1ÃV®-Ki)gÃâ Ê¥3]

[Uyâ e_ʦ1ÃV®-Ki)gÃâ Ê¥3]   Full Program, U = Space, V = Time
                            -- U = [[-2,-2,-2], [-3,-3,-3]]
                            -- V = [2020, 1991, 2014, 2018]
[                       ]   Return array containing....
 Uyâ                        Transpose Space coords 
                            -- U = [[-2,-3], [-2,-3], [-2,-3]]
                            and map Z   
      _ʦ1                  Z length greater than 1?
                            -- U = [true, true, true]
     e                      return true if all Z are true   
                            -- U = true
          V®                Map each time
            -Ki)            Subtract current year   
                            -- V = [2,-27,-4,0]
                gà         get sign (-1,0,1)
                            -- V = [1,-1,-1,0]
                   â        unique elements
                            -- V = [1,-1,0]
                     ʥ3    return true if length == 3
                            -- V = true

Hãy thử trực tuyến!


Uhm, tôi nghĩ điều này không thành công trên testcase bạn đã cung cấp trong liên kết? ( chuyển đổi, lấy các vật phẩm độc đáo và chuyển đổi trở lại , vì vậy có thể bạn sẽ muốn thực hiện Uy e_â ʦ1Ãthay thế)
ETHproductions

Chỉ nhìn thấy điều này bây giờ, có vẻ như bạn có thể đã đăng nó trước tôi (trên điện thoại của tôi vì vậy không thể nói chính xác). Nếu vậy, hãy cho tôi biết nếu bạn muốn tôi đưa ra những điểm tương đồng và tôi sẽ xóa nó.
Shaggy

@ETHproductions, nó dường như làm việc. Tôi cũng đã âsử dụng ephương pháp này trong lần thử đầu tiên, trước khi chuyển nó sang yý thích để xem nó có hiệu quả không.
Shaggy

@Shaggy Vâng, tôi sẽ chết lặng, nó thực sự hoạt động ... nhưng tại sao nó không chuyển đổi trở lại trong trường hợp này?
Sản xuất ETH

1
@Shaggy Trời ơi, mã kiểm tra xem có nên kiểm tra lại nó hay không nếu mỗi qtrong mảng chuyển đổi được ánh xạ, typeof q instanceof Array... thật là một lỗi tiện lợi: P Đoán tôi không thể sửa nó ngay bây giờ cho đến khi phát hành 1.4.6 ...
Sản phẩm điện tử

2

JavaScript (ES6), 104 100 byte

(space)(time)1230

24% mã được sử dụng để tìm ra năm nào chúng ta ... \ o /

s=>t=>2*s[0].every((x,i)=>s.some(b=>x-b[i]))|t.some(y=>(s|=(y/=(new Date).getFullYear())>1?4:y+1)>6)

Hãy thử trực tuyến!

Đã bình luận

s => t =>              // s[] = space array; t[] = time array
  2 *                  // the space flag will be doubled
  s[0].every((x, i) => // for each coordinate x at position i in the first entry of s[]:
    s.some(b =>        //   for each entry b in s[]:
      x - b[i]         //     if we've found b such that b[i] != x, the coordinate is valid
    )                  //   end of some()
  )                    // end of every()
  |                    // bitwise OR with the time flag
  t.some(y =>          // for each year y in t[]:
    (s |=              //   update the bitmask s (initially an array, coerced to 0)
      ( y /=           //     divide y
        (new Date)     //     by the current year (this is safe as long as no time-travel
        .getFullYear() //     machine is available to run this it at year 0)
      ) > 1 ?          //   if the result is greater than 1:
        4              //     do s |= 4 (future)
      :                //   else:
        y + 1          //     do s |= y + 1; y + 1 = 2 if both years were equal (present)
                       //     otherwise: y + 1 is in [1, 2), which is rounded to 1 (past)
    ) > 6              //   set the time flag if s = 7
  )                    // end of some()

Thất bại vàoconsole.log(f([[5,4,2], [3,4,0], [1,4,2], [9,4,4]])([2020])) // neither
l4m2

@ l4m2 Hmm. Đã sửa với giá 1 byte. Tôi không thể nghĩ ra giải pháp 99 byte trên đỉnh đầu.
Arnauld

1

R , 106 , 105 byte

function(s,t)all((x<-apply(s,1,range))[1,]-x[2,])-2*all((-1:1)%in%sign(as.POSIXlt(Sys.Date())$ye+1900-t))

Hãy thử trực tuyến!

Đầu vào :

s : matrix of space coordinates (3 x N)
t : vector time years 

Xuất ra một giá trị số nguyên bằng:

 1 : if traveled through space only
-2 : if traveled through time only
-1 : if traveled through space and time
 0 : if traveled neither through space nor time

1

Mẻ, 353 byte

@echo off
set/as=t=0,y=%date:~-4%
for %%a in (%*) do call:c %~1 %%~a
if %s%==7 (if %t%==7 (echo both)else echo space)else if %t%==7 (echo time)else echo neither
exit/b
:c
if "%6"=="" goto g
if %1 neq %4 set/as^|=1
if %2 neq %5 set/as^|=2
if %3 neq %6 set/as^|=4
exit/b
:g
if %4 lss %y% (set/at^|=1)else if %4==%y% (set/at^|=2)else set/at^|=4

Lưu ý: Vì dấu phẩy là dấu phân cách đối số trong Batch, để nhập tọa độ không gian bạn cần trích dẫn, vd

spacetime "5,7,2" "5,3,8" "-6,3,8" "5,7,2" 2000 2002

Giải thích:

@echo off

Tắt đầu ra không mong muốn.

set/as=t=0,y=%date:~-4%

Thiết lập hai bitmasks và cũng trích xuất năm hiện tại. (Trong các địa phương YYYY-MM-DD sử dụng %date:~,4%cho cùng một số byte.)

for %%a in (%*) do call:c %~1 %%~a

Lặp lại tất cả các đối số. Các ~nguyên nhân tọa độ giá trị được chia thành các tham số riêng biệt.

if %s%==7 (if %t%==7 (echo both)else echo space)else if %t%==7 (echo time)else echo neither
exit/b

Kiểm tra xem bitmasks có được thiết lập đầy đủ hay không và đưa ra kết quả phù hợp.

:c
if "%6"=="" goto g

Xem liệu đây là một cặp tọa độ hay tọa độ và một năm.

if %1 neq %4 set/as^|=1
if %2 neq %5 set/as^|=2
if %3 neq %6 set/as^|=4
exit/b

Nếu đó là tọa độ thì cập nhật bitmask không gian tùy theo kích thước không gian có liên quan đã được truy cập hay chưa.

:g
if %4 lss %y% (set/at^|=1)else if %4==%y% (set/at^|=2)else set/at^|=4

Nếu đó là một năm thì hãy cập nhật bitmask thời gian tùy theo kích thước thời gian có liên quan có được truy cập hay không.


1

Java 10, 154 byte

s->t->{int y=java.time.Year.now().getValue(),c=0,d=1,i=3;for(;i-->0;d*=c,c=0)for(var l:s)c=l[i]!=s[0][i]?1:c;for(int a:t)c|=a>y?4:a<y?1:2;return c/7*2+d;}

Trả về 1cho không gian , 2cho thời gian , 3cho cả hai , 0cho cả hai . Hãy thử trực tuyến tại đây .

Ung dung:

s -> t -> { // lambda taking two parameters in currying syntax
            // s is int[][], t is int[]; return type is int

    int y = java.time.Year.now().getValue(), // the current year
        c = 0, // auxiliary variable used for determining both space and time
        d = 1, // initally, assume we have moved in all three space dimensions
        i = 3; // for iterating over the three space dimensions

    for(; i -- > 0; d *= c, c = 0) // check all coordinates for each dimension, if we have not moved in one of them, d will be 0
        for(var l : s) // check the whole list:
            c = l[i] != s[0][i] ? 1 : c; // if one coordinate differs from the first, we have moved

    for(int a : t) // look at all the years; c is 0 again after the last loop
        c |= a > y ? 4 : a < y ? 1 : 2; // compare to the current year, setting a different bit respectively for past, present and future

    return c / 7 // if we have been to past, the present and the future ...
           * 2   // ... return 2 ...
           + d;  // ... combined with the space result, otherwise return just the space result
}
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.