划掉44仍然是常规44;(


18

介绍

2015年3月24日,@ isaacg将他的Pyth答案从44字节压缩到42字节。由于划掉的44(44)看起来很像常规的44,@ Optimizer发表了以下评论:

打出44仍然是正常44 :(

之后,在2015年10月21日,@ Doorknob♦他的Ruby答案从44字节压缩为40字节(之后为38字节),并将以下部分添加到他的答案中,并带有指向@Optimizer的原始注释的链接

划掉44仍然是常规44;(

这是答案链模因的开始,其中每个划掉的44个(有时是4个或444个)都链接回前一个模因

然后在2017年4月8日(我不确定这是否是这样做的第一个答案,但这是我能找到的最早的答案),@ JonathanAllan将他的Python答案从44提升到39。但是他使用<s>&nbsp;44&nbsp;</s>了44看起来像这样: 44 ,并在他的答案中添加了以下内容:

划掉&nbsp; 44&nbsp; 不再是44 :)

这基本上就是模因的(开头)结尾。

挑战

关于此挑战:给定一个正整数列表和一个日期,将列表以逗号和空格分隔,其中除最后一个数字外的每个数字都放置在<s>...</s>标记之间。

此外,如果有任何被划掉的数字在序列中[4, 44, 444, 4444, ...]oeis.org上的A00278):

  • 如果日期在2017年4月8日之前:则在第二行上输出准确的文本crossed out N is still regular N ;((所有小写​​字母,并带有分号图释),文本(N是序列中的划线数字)。
  • 如果日期是2017年4月8日或更晚:N序列中的划线编号应&nbsp;添加前导和尾随。无需任何其他输出行。

例子:

输入:list = [50, 48, 44, 41]date = January 1st, 2017
输出:

<s>50</s>, <s>48</s>, <s>44</s>, 41
crossed out 44 is still regular 44 ;(

输入:list = [500, 475, 444, 301, 248]date = June 2nd, 2018
输出:

<s>500</s>, <s>475</s>, <s>&nbsp;444&nbsp;</s>, <s>301</s>, 248

挑战规则:

  • 您可以假设输入列表是从最大到最小的排序列表,仅包含正整数。实际上,由于错误修复,字节数也可以增加,但是为了解决这一难题,我们假装它只会减少。
  • 您可以假设[4, 44, 444, 4444, ...]输入列表中仅存在序列中的单个数字(如果有)。
  • 输出格式可以打印到STDOUT,也可以作为字符串返回(或者最好是字符数组/列表/ 2D数组)。尾随换行符当然是可选的。
  • 输出格式是严格的。<s>...</s>是强制性的; &nbsp;...&nbsp;是强制性的; ", "(逗号和空格)是强制性的;并且\ncrossed out ... is still regular ... ;(完全是强制性的(在单独的行上)。
  • 您可以将输入日期作为日期对象。时间戳;年,月,日的整数;格式单一的数字yyyyMMdd; 自1899年12月31日以来的整数天(该日期42832为2017年4月8日);或任何其他合理的输入格式。日期if语句不是此挑战的主要部分。
  • 如果需要,输入整数列表也可以是字符串列表。
  • 您不必像实际的模因答案那样通常将<sup>...</sup>标签添加到crossed out ... is still regular ... ;(行中。
  • 您可以假设输入列表永远不会包含超出[1, 50000]范围的字节数(因此,您只需要{4, 44, 444, 4444, 44444}担心这五个)。

通用规则:

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

测试用例:

Input: [50, 48, 44, 41] and January 1st, 2017 
Output:
<s>50</s>, <s>48</s>, <s>44</s>, 41
crossed out 44 is still regular 44 ;(

Input: [500, 475, 444, 301, 248] and  June 2nd, 2018
Output:
<s>500</s>, <s>475</s>, <s>&nbsp;444&nbsp;</s>, <s>301</s>, 248

Input: [8, 6, 4] and December 5th, 2017
Output:
<s>8</s>, <s>6</s>, 4

Input: [8, 6, 4, 3, 2] and September 15th, 2015
Output:
<s>8</s>, <s>6</s>, <s>4</s>, <s>3</s>, 2
crossed out 4 is still regular 4 ;(

Input: [119, 99, 84, 82, 74, 60, 51, 44, 36, 34] and February 29th, 2016
Output:
<s>119</s>, <s>99</s>, <s>84</s>, <s>82</s>, <s>74</s>, <s>60</s>, <s>51</s>, <s>44</s>, <s>36</s>, 34
crossed out 44 is still regular 44 ;(

Input: [404, 123, 44] and March 4th, 2016
Output:
<s>404</s>, <s>123</s>, 44

Input: [4, 3] and April 8th, 2017
Output:
<s>&nbsp;4&nbsp;</s>, 3

Input: [44] and October 22nd, 2017
Output:
44

Input: [50000, 44444, 1500] and August 1st, 2018
Output:
<s>50000</s>, <s>&nbsp;44444&nbsp;</s>, 1500

Input: 50, 38, 23 and September 8th, 2001
Output:
<s>50</s>, <s>38</s>, 23

您的最后一个测试用例缺少日期?
尼尔

1
@Neil Ah oops ..已修复。日期对于那一项并不重要,但是无论如何都添加了日期。感谢您的关注。
凯文·克鲁伊森

1
我可以确认我没有注意到有人为此目的使用了不间断空格,这就是为什么我写了“不再”的文字。
乔纳森·艾伦,

(我也可以确认在44之前使用过它 -我相信那是我第一次使用它们)
Jonathan Allan

因为我们可以将输入作为几天1889-12-31,所以我们也可以从几天开始2017-04-08吗?
TF

Answers:


6

果冻 444 94,93个字节

Ñȧ$“&nbsp;”,¤j$€io.ɗ¦@Ṗj@€“<s>“</s>”oj⁾, 
⁴>⁽A€
“¢⁻$gẆẠ⁷Ṭ]ḳṁṛż?=çỊI×V»Ỵjṭ⁷ẋǬȧẠƲ
ṖḟÐḟ”4Ḣµñ³,Ç

完整的程序。输入是字符串列表和自1970年1月1日以来的整数天的日期(使17264年4月成为第八天)

在线尝试!

怎么样?

Ñȧ$“&nbsp;”,¤j$€io.ɗ¦@Ṗj@€“<s>“</s>”oj⁾,  - Link 1: L = list of characters ("4...4") OR integer (0),
                                          -         R = list of lists of characters (the strings provided to the program)
  $                                       - last 2 links as a monad:
Ñ                                         -   call next Link (2) as a monad
                                          -   ...gets: is date input to program greater than 2017-04-07?
 ȧ                                        -   AND (if so gets the value of L, else 0), say X
                    ¦@                    - sparse application (with swa@pped @rguments)...
                      Ṗ                   - ...with right argument = popped R (without it's rightmost entry)
                   ɗ                      - ...to: last 3 links as a dyad
                i                         -          first index of X in popped R (0 if no found, so 0->0)
                  .                       -          literal 0.5
                 o                        -          OR (change any 0 to 0.5)
                                          -        ...i.e. index of "4...4" if L was one or 0.5, an invalid index
              $€                          - ...do: for €ach... last 2 links as a monad:
            ¤                             -          nilad followed by link(s) as a nilad:
   “&nbsp;”                               -            literal list of characters = "&nbsp;"
           ,                              -            pair (with itself) = ["&nbsp;", "&nbsp;"]
             j                            -            join (with the item) e.g.: "&nbsp;444&nbsp;" or ["&nbsp;", 0, "&nbsp;"]
                          “<s>“</s>”      - literal list of lists of characters = ["<s>", "</s>"]
                       j@€                - for €ach... join (with swa@pped @rguments)
                                    o     - OR with R (vectorises, so adds the popped entry back onto the right-side)
                                      ⁾,  - literal list of characters = ", "
                                     j    - join

⁴>⁽A€ - Link 2: greater than 2017-04-07?
⁴     - program's 4th argument (2nd input)
  ⁽A€ - literal 17263 (days(2017-04-07 - 1970-01-01))
 >    - greater than?

“¢⁻$gẆẠ⁷Ṭ]ḳṁṛż?=çỊI×V»Ỵjṭ⁷ẋǬȧẠƲ - Link 3: L = list of characters ("4...4") OR integer (0)
“¢⁻$gẆẠ⁷Ṭ]ḳṁṛż?=çỊI×V»           - compressed list of characters = "crossed out \n is still regular \n ;("
                     Ỵ           - split at newlines = ["crossed out ", " is still regular ", " ;("]
                      j          - join with L
                        ⁷        - literal newline character
                       ṭ         - tack (add to the front)
                              Ʋ  - last 4 links as a monad:
                          Ç      -   call last Link (2) as a monad
                           ¬     -   NOT
                             Ạ   -   All (1 if L is "4...4", 0 if L is 0)
                            ȧ    -   AND
                         ẋ       - repeat (i.e. get the list of characters to print or an empty list)

ṖḟÐḟ”4Ḣµñ³,Ç - Main Link: list of strings, integer (days since 1970-01-01)
Ṗ            - pop (list of strings without it's rightmost entry)
  Ðḟ         - filter discard if:
 ḟ           -   filter discard any which are in...
    ”4       -   ...literal character '4'
      Ḣ      - head (yields 0 if list is now empty)
       µ     - new monadic chain, call that X
         ³   - program's 3rd argument (1st input) - call that Y)
        ñ    - call next Link (1) as a dyad (i.e. f1(X, Y))
           Ç - call last Link (3) as a monad (ie. f3(X))
          ,  - pair
             - implicit (smashing) print

1
您忘记了从TIO中的另一个挑战中删除输入。;)好的答案无论如何。您介意添加解释吗?而rofl就是444字节的数量。我不相信您从此开始,除非您添加了评论。; p
Kevin Cruijssen

抱歉,谢谢。稍后我将添加说明。
乔纳森·艾伦

1
444版本没有注释,数字而不是压缩字符串
Jonathan Allan '18

...啊444版本有个错误-自1969年12月31日开始使用,而不是从1970年1月1日开始使用,因为高尔夫版本的使用时间> _ <(天真修复仍然是444)
乔纳森·艾伦

4

Python 2中208个 204  203 201 197字节

将输入作为字符串列表,以及一个int yyyymmDD

def f(l,d):
 A=a=d>20170407;r=[]
 for n in l[:-1]:x=set(n)=={'4'};S='&nbsp;'*x*a;r+=['<s>'+S+n+S+'</s>'];A=x*n or A
 print', '.join(r+l[-1:])+'\ncrossed out %s is still regular %s ;('%(A,A)*(a*A<A)

在线尝试!


3

Excel VBA,217个字节

VBE立即窗口功能,可从range获取输入数组,从range获取[A:A]日期[B1]并将其输出到控制台。

c=[Count(A:A)]:d=[B1]>42832:For i=1To c-1:n=Cells(i,1):l=InStr(44444,n):s=IIf(d*l,"&nbsp;",""):v=IIf((d=0)*l,n,v):?"<s>"s;""&n;s"</s>, ";:Next:?""&Cells(i,1):?IIf(v,"crossed out "&v &" is still regular "&v &" ;(","");

取消评论

c=[Count(A:A)]                  ''  Get numer of elements
d=[B1]>42832                    ''  Check if date is after 7 Apr 2017,
For i=1To c-1                   ''  Iterate over index
n=Cells(i,1)                    ''  Get array val at index
l=InStr(44444,n)                ''  Check if val is all 4s
s=IIf(d*l,"&nbsp;","")          ''  If after 7 Aug 2017, and All 4s, let `s` be "&nbsp;"
v=IIf((d=0)*l,n,v)              ''  If all 4s, and not after date, let v hold n, else hold v
?"<s>"s;""&n;s"</s>, ";         ''  Print striked vales, with "&nbsp;", if applicable
Next                            ''  Loop
?""&Cells(i,1)                  ''  Print last value in array
                                ''  (below) Print meme, if needed
?IIf(v,"crossed out "&v &" is still regular "&v &" ;(","");

-2字节,用于将日期格式更改为 YYYYMMDD

-1个字节,用于与42832(的int值07 Apr 2017)进行比较,谢谢@Neil

-2个字节,用于1,InStr语句中删除,谢谢@ SeaDoggie01


我猜想For i=1To~-c不是For i=1To c-1在Excel VBA中吗?如果我没记错的话,按位不是Not不是~,或者两者都有可能吗?(请注意,我
几乎不了解

@KevinCruijssen是的,按位不是Not ,所以不~:(
泰勒·斯科特

1
我认为您可以通过将日期格式更改为最新日期并与之比较42832(2017-04-07的整数值)来节省更多字节。
尼尔,

我认为您可以通过从instr中删除“ 1”来节省2个字节(它是可选的)
seadoggie01

2

视网膜0.8.2,130字节

$
;42833
O`;.{5}
\b(4+),(?=.*;42833;)
&$1&,
&
&nbsp;
.{12}$

\b(4+),.*
$&¶crossed out $1 is still regular $1 ;(
(.+?),
<s>$1</s>, 

在线尝试!链接包括测试用例。使用Excel日期戳(自1899-12-31以来的天,但包括1900-02-49)。带有ISO日期的版本为141字节:

$
;2017-04-08
O`;.{10}
\b(4+),(?=.*;2017-04-08;)
&$1&,
&
&nbsp;
.{22}$

\b(4+),.*
$&¶crossed out $1 is still regular $1 ;(
(.+?),
<s>$1</s>, 

在线尝试!链接包括测试用例。说明:

$
;2017-04-08

将截止日期附加到输入中。

O`;.{10}

排序日期。如果给定日期为截止日期或之后,则第一个日期为截止日期。

\b(4+),(?=.*;2017-04-08;)
&$1&,
&
&nbsp;

在这种情况下,请包装4+&nbsp;(使用两个阶段,因为它节省了一个字节)。

.{22}$

完成工作后删除日期。

\b(4+),.*
$&¶crossed out $1 is still regular $1 ;(

如果存在无间距4+,则附加模因。

(.+?),
<s>$1</s>, 

删除所有过时的字​​节数。


您可以采用不带的日期格式来节省5个字节-
凯文·克鲁伊森

@KevinCruijssen我可以通过将其作为Excel日期(自1899-12-31以来的天数)进行查询来节省更多的字节。我可以走多远?
尼尔,

嗯..你知道吗,我也很好。April 8th, 2017我不太在乎日期的if语句如何完成。这不是挑战的主要部分。
凯文·克鲁伊森

42832我假设那是2017年4月8日?
凯文·克鲁伊森

@KevinCruijssen我的Excel表示这是7号。
尼尔,

1

红宝石,208个 184 180字节

TIO测试

感谢@KevinCruijssen保存2个字节!

->n,d{*h,t=n;i=20170408>d;f=?\n;h.map{|u|o=u.digits|[]==[4];f=o&&i ?f+"crossed out #{u} is still regular #{u} ;(":f;o&&!i ?"<s>&nbsp;#{u}&nbsp;</s>":"<s>#{u}</s>"}*", "+", #{t}"+f}

这是一个lambda函数,采用数字列表和一个整数作为日期格式YYYYmmdd


是否可以添加带有测试代码的TIO链接?并切换格式,使其为整数输入,确实可以节省一些字节。:)
Kevin Cruijssen

@KevinCruijssen添加了链接;)
Peter Lenkefi

谢谢!向我+1。通过删除空格,可以节省2个字节?。另外,对于您的TIO,您可以使用标题/页脚拆分实际的提交代码和测试代码,如下所示。:)
Kevin Cruijssen

1

JavaScript,194个字节

(a,d,l=a.pop(),n=a.find(x=>/^4+$/.exec(x)),s=a.map(n=>`<s>${n}</s>, `).join``+l)=>d<1491609600?n?s+`
crossed out ${n} is still regular ${n} ;(`:s:s.replace(/>(4+)</g,(_,m)=>`>&nbsp;${m}&nbsp;<`)


1

Haskell,227个字节

i[]=1>0;i('4':s)=i s;i(_:_)=0>1
f l d=m l++c where a=head$filter i l;t d|d<42832=("","\ncrossed out "++a++" is still regular "++a++" ;(")|1>0=("&nbsp;","");(b,c)=t d;w n|i n=b++n++b|1>0=n;m[n]=n;m(x:s)="<s>"++w x++"</s>, "++m s

在线尝试!f用list l和date 运行d。42832是更改日期。


是否可以添加带有测试代码的TIO链接
凯文·克鲁伊森

在俄罗斯@KevinCruijssen它的禁止
ЕвгенийНовиков

哦,不知道。好吧,我不太了解Haskell,否则我会自己测试一下。但是代码本身看来是合乎逻辑的,因此我还是+1。
凯文·克鲁伊森

@KevinCruijssen你可以代码复制到TIO,制作链接,并将其添加到发布
ЕвгенийНовиков

@KevinCruijssen TIO被错误禁止,但我懒得使用代理/ ISP联系一下吧
ЕвгенийНовиков

1

JavaScript(Node.js),173字节

a=>d=>a.map(x=>--i<1?x:`<s>${(b=/^4+$/.exec(x)?(c=x,d)<14915808e5?n=[]:"&nbsp;":"")+x+b}</s>`,n="",c=0,i=a.length).join`, `+(n&&`
crossed out ${c} is still regular ${c} ;(`)

在线尝试!

使用咖喱语法 f(array)(js_timestamp)

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.