44를 넘어 서면 여전히 규칙적이다 .44; (


18

소개

3 월 24 일, 2015 @isaacg는 golfed 그의 Pyth 응답 (44) 42 바이트에서합니다. 44 ( 44 )가 일반 44와 비슷해 보이기 때문에 @Optimizer 는 다음과 같이 말했습니다 .

파업 44는 여전히 정상입니다 44 :(

그 후, 2015 년 10 월 21 일에 @ Doorknob 는 루비 응답 을 44에서 40 (및 그 이후 38) 바이트까지 골퍼하고 @Optimizer의 원래 주석에 대한 링크와 함께 다음 부분을 그의 답변에 추가했습니다 .

44를 넘어 서면 여전히 규칙적이다 .44; (

이것은 응답 체인 meme 의 시작이었습니다 . 이곳에서 모두 44 (및 경우에 따라 4 또는 444)가 이전과 다시 연결되었습니다.

그리고 4 월 8, 2017 (이 그렇게 할 수있는 첫 번째 대답했다 경우 잘 모르겠어요,하지만 내가 찾을 수있는 최초의 하나)에 @JonathanAllan는 golfed 자신의 파이썬 대답을 그는 그러나 사용 39에 44에서 <s>&nbsp;44&nbsp;</s>44 것 때문에 이처럼 보입니다 :  44  , 그의 대답에 다음을 추가했습니다.

제외됨 & nbsp; 44 & nbsp; 더 이상 44가 아닙니다 :)

그리고 그것은 기본적으로 meme의 (시작) 끝이었습니다.

도전

이 문제는 양의 정수와 날짜가 주어지면 마지막 쉼표를 제외한 모든 숫자가 <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 일 이후의 정수일 ( 428322017 년 4 월 8 일); 또는 다른 합리적인 입력 형식. 날짜 진술은이 도전의 주요 부분이 아닙니다.
  • 원하는 경우 입력 정수 목록은 문자열 목록 일 수도 있습니다.
  • 일반적으로 실제 meme 답변으로 수행되는 것처럼 <sup>...</sup>태그를 crossed out ... is still regular ... ;(줄 에 추가하지 않아도됩니다 .
  • 입력 목록에 [1, 50000]범위를 벗어난 바이트 수는 절대 포함되지 않는다고 가정 할 수 있습니다 (따라서 {4, 44, 444, 4444, 44444}걱정할 것은이 5 개만 있습니다 ).

일반 규칙:

  • 이것은 이므로 바이트 단위의 최단 답변이 이깁니다.
    코드 골프 언어가 코드 골프 언어 이외의 언어로 답변을 게시하지 못하게하십시오. '모든'프로그래밍 언어에 대한 가능한 한 짧은 대답을 생각해보십시오.
  • 표준 규칙이 답변에 적용 되므로 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

마지막 테스트 케이스에 날짜가 없습니까?
Neil

1
@Neil Ah 죄송합니다 .. 수정되었습니다. 날짜는 그 날짜에 중요하지 않지만 관계없이 날짜를 추가했습니다. 알아 주셔서 감사합니다.
Kevin Cruijssen

1
나는 누군가가이 특정 목적을 위해 비 공백 공간을 사용하는 것을 보지 못했음을 확인할 수 있었고 이것이 "더 이상"텍스트를 쓴 이유입니다.
Jonathan Allan

(또한 44로 사용하기 전에 사용했음을 확인할 수 있습니다. – 처음 사용했을
Jonathan Allan

이후 날짜로 입력 할 수 있으므로 이후로 며칠이 걸릴 1889-12-312017-04-08있습니까?
TFeld

답변:


6

젤리 ,  444  , 94 , 93 바이트

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

전체 프로그램. 입력은 문자열 목록과 1970 년 1 월 1 일 이후 정수일로 취한 날짜입니다 (2017 년 4 월 17264 년 8 월).

온라인으로 사용해보십시오!

어떻게?

Ñȧ$“&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의 다른 챌린지에서 입력을 제거하는 것을 잊었습니다. ;) 좋은 대답. 설명을 추가 하시겠습니까? 그리고 그 444 바이트 수로 rofl. 당신이 의견을 추가하지 않는 한, 당신이 그것으로 시작한 것이 조금 믿지 않습니다. ; p
Kevin Cruijssen 오전

죄송합니다. 곧 설명을 추가하겠습니다.
Jonathan Allan

1
444 버전 압축 된 문자열보다는 댓글 없음, 숫자
조나단 앨런

... ah 444 버전에는 버그가 있습니다. 1969-12-31 이후 1970-01-01 이후로 사용 된 날짜는 골프 버전이> _ <(순진한 수정은 여전히 ​​444)입니다.
Jonathan Allan

4

파이썬 (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에서 입력 배열을 가져 [A:A]오고 range 및 date에서 [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 &" ;(","");

Ungolfed 및 댓글 달기

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 감사

명령문 1,에서 제거하기위한 -2 바이트 InStr, 감사합니다 @ SeaDoggie01


Excel VBA에서 For i=1To~-c대신에 For i=1To c-1불가능한 것 같아요 ? 내가 올바르게 기억한다면 Bitwise가 Not아닌 대신 ~또는 둘 다 가능합니까? (내가 Excel VBA의 옆에 아무것도 없다는 것을 알고 있으므로 어리석은 말을 할 것입니다.; p)
Kevin Cruijssen

@KevinCruijssen 예, 비트 단위는 Not 아니므로 아니오 ~:(
Taylor Scott

1
날짜 형식을 다시 날짜로 변경하고 42832(2017-04-07의 정수 값) 과 비교하여 더 많은 바이트를 절약 할 수 있다고 생각합니다 .
Neil

나는 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+meme를 추가하십시오.

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

쓸모없는 바이트 수를 모두 제거하십시오.


없이 날짜 형식을 사용하여 5 바이트절약 할 수 있습니다 -.
Kevin Cruijssen

@KevinCruijssen 나는 Excel 날짜 (1899-12-31 이후 날짜)로 요청하여 더 많은 바이트를 절약 할 수 있습니다. 이것으로 얼마나 멀리 갈 수 있습니까?
Neil

흠 .. 나도 괜찮아. 날짜에 대한 if 문이 어떻게 수행되는지 April 8th, 2017나는 정말로 신경 쓰지 않습니다. 이 도전의 주요 부분은 아닙니다.
Kevin Cruijssen

즉 것 42832내가 가정 4 월 8, 2017에 대해?
Kevin Cruijssen

@KevinCruijssen My Excel에 따르면 7 번째입니다.
Neil

1

루비 208 184 180 바이트

TIO 테스트

2 바이트를 절약 한 @KevinCruijssen에 감사드립니다!

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

숫자 형식과 정수를 날짜 형식의로 사용하는 람다 함수입니다 YYYYmmdd.


테스트 코드 로 TIO 링크 를 추가 할 수 있습니까? 그리고 정수 입력이므로 형식을 전환하면 실제로 바이트를 절약 할 수 있습니다. :)
Kevin Cruijssen

@KevinCruijssen 추가 링크;)
Peter Lenkefi

감사! 나에게서 +1 뒤에 공백을 제거하여 2 바이트를 절약 할 수 있습니다 ?. 또한, 귀하의 TIO를 들어, 머리글 / 바닥 글과 실제 제출 코드와 테스트 코드를 분할 할 수 있습니다 이런 식으로 . :)
Kevin Cruijssen

1

자바 스크립트, 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

하스켈 , 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

온라인으로 사용해보십시오! flist l및 date로 실행하십시오 d. 변경 날짜는 42832입니다.


테스트 코드 로 TIO 링크 를 추가 할 수 있습니까?
Kevin Cruijssen

@KevinCruijssen 러시아에서 금지
Евгений Новиков

아, 몰랐어 글쎄, 나는 Haskell을 잘 모른다. 그렇지 않으면 나는 그것을 직접 테스트했을 것이다. 그러나 코드 자체는 논리적으로 보이므로 그럼에도 불구하고 +1입니다.
Kevin Cruijssen

@KevinCruijssen 당신은 코드를 TIO에 복사하고, 링크를 만들고 포스트에 추가 할 수 있습니다
Евгений Новиков

@KevinCruijssen TIO는 실수로 금지되었지만 프록시 / 연락처 ISP를 사용하기에는 너무 게으르다
Евгений Новиков

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.