穿越时空


10

介绍:

一般来说,我们通常说四个维度:三维空间的xyz; 和一个时间维度。对于这一挑战的缘故然而,我们就会将时间维度分为三个还有:pastpresent,和future

输入:

两个输入列表。一种包含整数x,y,z坐标,另一种包含整数年。

输出:

您自己选择的四个不同且恒定的输出之一。一个表示输出space; 一个表示输出time; 一个表示输出both space and time; 一个指示输出neither space nor time

如果所有三个维度的整数元组之差都不为0,我们将指示我们进入了所有三个维度。
如果过去至少有一年,未来至少有一年,以及至少有一年等于当前年(所以现在),我们将指示我们进入了所有三个时间维度。

例:

输入:
坐标列表:[{5,7,2}, {5,3,8}, {-6,3,8}, {5,7,2}]
年列表:[2039, 2019, 2018, 2039, 2222]

输出:
恒定为space

为什么?
x坐标[5,5,-6,5]。由于它们并不完全相同,因此我们遍历了x空间维度。
y坐标[7,3,3,7]。由于它们并不完全相同,因此我们也讨论了y空间维度。
z坐标[2,8,8,2]。由于它们并不完全相同,因此我们也讨论了z空间维度。
本年度是2018。在此之前没有几年,因此我们没有访问past时间维度。年列表中
有一个2018礼物,因此我们确实访问了present时间维度。()
以上有多个年份,因此我们也访问了时间维度。2018[2039, 2019, 2039, 2222]future

由于我们已经访问了所有三个space维度,但是仅访问了三个维度中的两个time,因此输出将仅为(的常数)space

挑战规则:

  • 您可以为四种可能的状态使用任何四个不同且恒定的输出。
  • 输入可以采用任何合理的格式。坐标列表可以是元组,大小为3的内部列表/数组,字符串,对象等。年份列表可以是日期对象的列表,而不是整数,如果它对您的字节数有利的话。
  • 您可以假设x,y,z坐标为整数,因此无需处理浮点小数。但是x,,y和/或z坐标中的任何一个都可以为负值。
  • 您不能将输入列表预先订购。输入列表应按照测试用例中显示的顺序。
  • 您可以假设所有年份值都在该范围内[0,9999];并且您可以假设所有坐标都在范围内[-9999,9999]
  • 如果您的语言没有检索当前年份的任何方式,但是您仍然想应对这一挑战,则可以将其作为附加输入并将答案标记为(非竞争)

通用规则:

  • 这是,因此最短答案以字节为单位。
    不要让代码高尔夫球语言阻止您使用非代码高尔夫球语言发布答案。尝试针对“任何”编程语言提出尽可能简短的答案。
  • 标准规则适用于具有默认I / O规则的答案,因此您可以使用STDIN / STDOUT,具有正确参数的函数/方法以及返回类型的完整程序。您的来电。
  • 默认漏洞是禁止的。
  • 如果可能的话,请添加一个带有测试代码的链接(即TIO)。
  • 另外,强烈建议为您的答案添加说明。

测试用例:

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

我们需要处理多少年的时间?
毛茸茸的

@Shaggy我将其添加到挑战说明中。[0,9999]很好([-9999,9999]坐标也很好。)
Kevin Cruijssen

ang,这是我的主意之一!
毛茸茸的

@Shaggy出于好奇,您希望达到什么范围?
凯文·克鲁伊森

3
我们可以把当年作为输入吗?(某些语言无法获得本年度的信息,例如BF,其他语言只能通过评估另一种语言的代码来实现(例如,果冻;其他语言,也许很多,也会找到该高尔夫球手)
乔纳森·艾伦

Answers:


2

05AB1E,15个字节

输出是一个列表[space, time],其中1名代表x0代表no x

ø€Ë_Psžg.SÙg3Q)

在线尝试!

说明

    ø                 # 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

我显然是+1。与我准备的16个字节相同,除了我使用-.±代替.S(因此+1字节..)和(对)代替)
Kevin Cruijssen

@KevinCruijssen:我真的很想另一种方式Ùg3Q,感觉就像是最大的字节窃贼,但我不确定是否有可能:/
Emigna

我怀疑可以在较短的时间内完成。我可以想到一些4字节的替代方案,并且一直在尝试执行ê某些操作以及一些按位运算或增量等操作,但是我找不到任何3字节的替代方案。
凯文·克鲁伊森

6

Python 2中111个 109字节

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

在线尝试!


为什么在排序之前将T设为集合?
黑猫头鹰Kai

4
@BlackOwlKai否则,[1:-1]删除的两个条目可能不会在过去/将来
Poon Levi

6

Perl 6的47 46个字节

-1字节感谢nwellnhof

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

在线尝试!

匿名代码块,它包含两个列表并返回一个布尔值元组,第一个元素是您是否按时旅行,第二个元素是您是否不按时旅行。

说明

{                                            }  # 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个字节

将输入作为空间尺寸的2D整数数组,并输入年份的1D整数数组。输出2空间而已,1时间只,3两者并0为两者都不是。

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

尝试一下

                           :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个字节

我100%肯定这不是最好的方法,但仍在寻找更短的方法来实现: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

在线尝试!


嗯,我认为您在链接中提供的测试用例上失败了吗?(转置,获取唯一的项,然后转回,所以您可能要这样做Uy e_â ʦ1Ã
ETHproductions'Nov

见状目前止,你似乎已经张贴之前,我的(我的手机上,从而不能正确地告诉)。如果是这样,请让我知道您是否想要我的相似之处,我将其删除。
毛茸茸的

@ETHproductions,它似乎确实起作用。我也第一次尝试使用âe方法,然后y一时兴起,看它是否可行。
毛茸茸的

@Shaggy好吧,我会被吓到,它确实起作用了……但是为什么在这种情况下它不移回呢?
ETHproductions

1
@Shaggy哦,亲爱的,检查是否将其q转位的代码会检查映射的转置数组中的每个位,typeof q instanceof Array……是什么方便的错误:P猜猜我现在无法发布1.4.6才能修复它……
ETHproductions

2

的JavaScript(ES6),104个 100字节

(space)(time)1个230

24%的代码用于弄清楚我们是哪一年... \ 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)

在线尝试!

已评论

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()

失败console.log(f([[5,4,2], [3,4,0], [1,4,2], [9,4,4]])([2020])) // neither
l4m2

@ l4m2嗯。固定为1个字节。我想不出一个99字节的解决方案。
Arnauld

1

[R 106,105个字节

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))

在线尝试!

输入:

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

输出等于的整数值:

 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

批次,353个字节

@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

注意:由于逗号是批处理中的参数分隔符,因此要输入空格坐标,您需要先引号,例如

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

外植体:

@echo off

关闭不需要的输出。

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

设置两个位掩码并提取当前年份。(在YYYY-MM-DD语言环境中,使用%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

如果是一年,则根据是否访问了相关的时间维度来更新时间位掩码。


1

Java 10,154个字节

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;}

返回1空间2对于时间3对于这两种0对于既不在这里在线尝试。

取消高尔夫:

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
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.