gạch bỏ 44 vẫn là 44 thường xuyên; (


18

Giới thiệu

Vào ngày 24 tháng 3 năm 2015 @isaacg đã đánh golf câu trả lời Pyth của mình từ 44 đến 42 byte. Vì 44 ( 44 ) bị gạch bỏ trông rất giống với 44 thông thường, @Optimizer đã đưa ra nhận xét sau:

tấn công 44 vẫn bình thường 44 :(

Sau đó, vào ngày 21 tháng 10 năm 2015, @ Doorknob ♦ đã đánh golf câu trả lời Ruby của anh ấy từ 44 đến 40 (và sau đó là 38) byte và thêm phần sau vào câu trả lời của anh ấy, với liên kết đến nhận xét ban đầu của @Optimizer :

gạch bỏ 44 vẫn là 44 thường xuyên; (

Đây là sự khởi đầu của một meme chuỗi câu trả lời , trong đó mỗi lần vượt qua 44 (và trong một số trường hợp 4 hoặc 444) liên kết trở lại với trước đó.

Sau đó, vào ngày 08 tháng tư năm 2017 (tôi không chắc chắn nếu điều này là câu trả lời đầu tiên làm như vậy, nhưng đó là sớm nhất mà tôi có thể tìm thấy), @JonathanAllan golfed câu trả lời Python mình từ 44 xuống còn 39. Tuy nhiên Ông đã sử dụng <s>&nbsp;44&nbsp;</s>nên 44 sẽ trông như thế này:  44  , và thêm vào câu trả lời sau đây:

Bỏ qua & nbsp; 44 & nbsp; không còn 44 :)

Và đó về cơ bản là kết thúc (bắt đầu) của meme.

Thử thách

Đối với thử thách này: Đưa ra một danh sách các số nguyên dương và một ngày, xuất ra danh sách dấu phẩy và khoảng cách được phân tách trong đó mọi số trừ số cuối cùng được đặt giữa <s>...</s>các thẻ.

Ngoài ra, nếu có bất kỳ số nào bị gạch bỏ trong chuỗi [4, 44, 444, 4444, ...]( A00278 trên oeis.org ):

  • Nếu ngày trước ngày 8 tháng 4 năm 2017: Cũng xuất văn bản chính xác (tất cả chữ thường và với biểu tượng cảm xúc dấu chấm phẩy) crossed out N is still regular N ;(( Nlà số bị gạch bỏ khỏi chuỗi) trên dòng thứ hai.
  • Nếu ngày là ngày 8 tháng 4 năm 2017 trở đi: Số bị gạch bỏ Nkhỏi chuỗi nên có thêm đầu và cuối &nbsp;. Không cần thêm bất kỳ dòng đầu ra.

Ví dụ:

Đầu vào : list = [50, 48, 44, 41], date = January 1st, 2017
Đầu ra:

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

Đầu vào : list = [500, 475, 444, 301, 248], date = June 2nd, 2018
Đầu ra:

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

Quy tắc thử thách:

  • Bạn có thể giả sử danh sách đầu vào là danh sách được sắp xếp từ lớn nhất đến nhỏ nhất, chỉ chứa các số nguyên dương. Trong thực tế, số byte cũng có thể tăng lên do sửa lỗi, nhưng vì thách thức này, chúng tôi giả vờ rằng nó chỉ đi xuống.
  • Bạn chỉ có thể giả sử một số duy nhất trong chuỗi [4, 44, 444, 4444, ...]có trong danh sách đầu vào (nếu có).
  • Định dạng đầu ra được in thành STDOUT hoặc được trả về dưới dạng chuỗi (hoặc mảng ký tự / danh sách / mảng 2D nếu thích hợp hơn). Một dòng mới theo dõi tất nhiên là tùy chọn.
  • Các định dạng đầu ra là nghiêm ngặt. <s>...</s>là bắt buộc; &nbsp;...&nbsp;là bắt buộc; ", "(dấu phẩy và dấu cách) là bắt buộc; và \ncrossed out ... is still regular ... ;(chính xác là bắt buộc (trên một dòng riêng biệt).
  • Bạn có thể lấy ngày đầu vào làm đối tượng ngày; dấu thời gian; số nguyên lỏng lẻo cho năm, tháng và ngày; một số duy nhất trong định dạng yyyyMMdd; số nguyên kể từ ngày 31 tháng 12 năm 1899 (sẽ là 42832ngày 8 tháng 4 năm 2017); hoặc bất kỳ định dạng đầu vào hợp lý khác. Ngày if-statement không phải là phần chính của thử thách này.
  • Danh sách số nguyên đầu vào cũng có thể là danh sách các chuỗi nếu bạn muốn.
  • Bạn không phải thêm các <sup>...</sup>thẻ vào crossed out ... is still regular ... ;(dòng như thường được thực hiện với các câu trả lời meme thực tế.
  • Bạn có thể giả sử danh sách đầu vào sẽ không bao giờ chứa số byte ngoài [1, 50000]phạm vi (vì vậy bạn sẽ chỉ có năm điều này {4, 44, 444, 4444, 44444}để lo lắng).

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ỳ'.
  • Các quy tắc chuẩn áp dụng cho câu trả lời của bạn, 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ề, các 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.
  • 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:

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

Trường hợp thử nghiệm cuối cùng của bạn là mất ngày?
Neil

1
@Neil Ah oops .. Đã sửa. Ngày không thực sự quan trọng đối với người đó, nhưng thêm một ngày bất kể. Cảm ơn đã chú ý.
Kevin Cruijssen

1
Tôi có thể xác nhận rằng tôi đã không nhận thấy bất kỳ ai sử dụng không gian không phá vỡ cho mục đích cụ thể này và đó là lý do tại sao tôi viết văn bản "không còn".
Jonathan Allan

(Tôi cũng có thể xác nhận rằng tôi đã sử dụng nó trước khi sử dụng với 44 - Tôi tin rằng đó là khi tôi sử dụng chúng lần đầu tiên)
Jonathan Allan

Như chúng ta có thể lấy đầu vào như ngày kể từ đó 1889-12-31, chúng ta cũng có thể mất ngày kể từ khi 2017-04-08?
TFeld

Câu trả lời:


6

Jelly ,  444  , 94 , 93 byte

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

Một chương trình đầy đủ. Các đầu vào là một danh sách các chuỗi và một ngày được lấy là số nguyên kể từ tháng 1 năm 1970 đầu tiên (làm cho 17264 tháng 4 năm 2017)

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

Làm sao?

Ñȧ$“&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
Bạn đã quên xóa đầu vào khỏi một thử thách khác trong TIO của bạn. ;) Câu trả lời tốt đẹp bất kể. Bạn có phiền thêm một lời giải thích? Và rofl với số lượng 444 byte đó. Tôi không tin một chút rằng bạn đã bắt đầu với điều đó, trừ khi bạn thêm ý kiến. ; p
Kevin Cruijssen

Opps, cảm ơn. Tôi sẽ thêm một lời giải thích trong thời gian ngắn.
Jonathan Allan

1
Phiên bản 444 không có bình luận, số thay vì chuỗi nén
Jonathan Allan

... ah phiên bản 444 có lỗi - ngày sử dụng từ 1969-12-31 không phải từ 1970-01-01 vì phiên bản chơi gôn không> _ <(bản sửa lỗi ngây thơ vẫn là 444)
Jonathan Allan

4

Python 2 , 208 204  203 201 197 byte

Lấy đầu vào là một danh sách các chuỗi và một int của 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)

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


3

VBA Excel, 217 byte

Hàm cửa sổ ngay lập tức VBE lấy mảng đầu vào từ phạm vi [A:A]và ngày từ phạm vi [B1]và đầu ra đến bàn điều khiển.

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 &" ;(","");

Ungolfed và bình luận

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 byte để thay đổi định dạng ngày thành YYYYMMDD

-1 byte để so sánh với 42832(int value for 07 Apr 2017), Cảm ơn @Neil

-2 byte để xóa 1,khỏi InStrcâu lệnh, Cảm ơn @ SeaDoggie01


Tôi đoán For i=1To~-cthay vì For i=1To c-1không thể có trong Excel VBA? Nếu tôi nhớ lại chính xác Bitwise không phải là Notthay thế ~, hoặc cả hai đều có thể? (Lưu ý rằng tôi không biết gì về Excel VBA, vì vậy tôi có thể nói điều gì đó ngu ngốc ở đây .; P)
Kevin Cruijssen

@KevinCruijssen Vâng, bitwise không phải Not vậy, nên không ~:(
Taylor Scott

1
Tôi nghĩ rằng bạn có thể lưu nhiều byte hơn bằng cách thay đổi định dạng ngày trở lại và so sánh với 42832(giá trị số nguyên của 2017-04-07).
Neil

Tôi nghĩ rằng bạn có thể tiết kiệm 2 byte bằng cách xóa "1" khỏi các mục (tùy chọn)
seadoggie01

2

Võng mạc 0.8.2 , 130 byte

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

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

Hãy thử trực tuyến! Liên kết bao gồm các trường hợp thử nghiệm. Sử dụng tem ngày Excel (ngày kể từ 1899-12-31 nhưng bao gồm 1900-02-49). 141 byte cho phiên bản lấy ngày ISO:

$
;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>, 

Hãy thử trực tuyến! Liên kết bao gồm các trường hợp thử nghiệm. Giải trình:

$
;2017-04-08

Nối ngày giới hạn vào đầu vào.

O`;.{10}

Sắp xếp các ngày. Nếu ngày đã cho là vào hoặc sau ngày giới hạn thì ngày đầu tiên sẽ là ngày giới hạn.

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

Trong trường hợp đó, bọc 4+trong &nbsp;(sử dụng hai giai đoạn vì nó tiết kiệm một byte).

.{22}$

Xóa ngày tháng khi họ đã hoàn thành công việc của họ.

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

Nếu có một khoảng cách 4+, sau đó nối thêm meme.

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

Loại bỏ tất cả các byte lỗi thời.


Bạn có thể lưu 5 byte bằng cách lấy định dạng ngày mà không cần -.
Kevin Cruijssen

@KevinCruijssen Tôi có thể tiết kiệm nhiều byte hơn bằng cách yêu cầu nó dưới dạng ngày Excel (ngày kể từ 1899-12-31). Tôi có thể đi bao xa với điều này?
Neil

Hmm .. Bạn biết không, điều đó cũng tốt đối với tôi. Làm thế nào để tuyên bố if cho ngày April 8th, 2017được thực hiện Tôi không thực sự quan tâm. Đây không phải là phần chính của thử thách này.
Kevin Cruijssen

Đó sẽ là 42832ngày 8 tháng 4 năm 2017 tôi giả sử?
Kevin Cruijssen

@KevinCruijssen Excel của tôi nói rằng đó là thứ 7.
Neil

1

Ruby, 208 184 180 byte

Kiểm tra TIO

Cảm ơn @KevinCruijssen vì đã tiết kiệm 2 byte!

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

Đây là hàm lambda lấy danh sách các số và số nguyên làm ngày theo định dạng YYYYmmdd.


Có thể thêm liên kết TIO với mã kiểm tra không? Và chuyển đổi định dạng để đầu vào số nguyên thực sự sẽ tiết kiệm được một số byte. :)
Kevin Cruijssen

@KevinCruijssen Đã thêm liên kết;)
Peter Lenkefi

Cảm ơn! +1 từ tôi. Bạn có thể lưu 2 byte bằng cách xóa khoảng trắng sau ?. Ngoài ra, đối với TIO của bạn, bạn có thể phân chia mã gửi thực tế và mã kiểm tra với tiêu đề / chân trang, như thế này . :)
Kevin Cruijssen

1

JavaScript, 194 byte

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

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

Hãy thử trực tuyến! Chạy fvới danh sách lvà ngày d. 42832 là ngày thay đổi.


Có thể thêm liên kết TIO với mã kiểm tra không?
Kevin Cruijssen

@KevinCruijssen ở Nga nó cấm
Евгений Новиков

Ồ, không biết điều đó. Chà, tôi không biết Haskell quá rõ, nếu không tôi sẽ tự mình kiểm tra nó một chút. Nhưng bản thân mã có vẻ hợp lý, vì vậy +1 từ tôi dù sao.
Kevin Cruijssen

@KevinCruijssen bạn có thể sao chép mã để TIO, làm cho liên kết và thêm nó vào gửi
Евгений Новиков

@KevinCruijssen TIO bị cấm do nhầm lẫn, nhưng tôi quá lười biếng để sử dụng proxy ISP / xúc về nó
Евгений Новиков

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.