取り消し線44はまだ規則的44です;(


18

前書き

月24日に、2015 @isaacgは golfed 彼Pythの答えを 44〜42バイトから。取り消し線 44(44)は通常の44とよく似ているため、@ Optimizerは次のコメントを作成しました。

ストライクアウト44はまだ通常の44です:(

その後、2015年10月21日に@ Doorknob♦ はRubyの回答を44バイトから40バイト(以降38バイト)までゴルフ@ Optimizerの元のコメントへのリンクとともに、次の部分を回答に追加しました。

取り消し線44はまだ規則的44です;(

これが回答連鎖ミームの始まりでし。そこでは、すべての取り消し線が44(場合によっては4または444)が前のリンクにリンクされていました。

そして、4月8日、2017(これはそうする最初の答えだった場合、私はわからないんだけど、それは私が見つけることができる最古の一つだ)に、@JonathanAllanは golfed 彼のPythonの答えを彼はしかし、使用39に44から<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 2行目にシーケンスから消された数字。
  • 日付が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

チャレンジルール:

  • 入力リストは、正の整数のみを含む最大から最小のソート済みリストであると想定できます。実際には、バグ修正によりバイト数も増加する可能性がありますが、この課題のために、バイト数が減少するように見せかけます。
  • シーケンスから1つの数字のみを想定できます [4, 44, 444, 4444, ...]入力リスト(存在する場合)にはます。
  • 出力形式はSTDOUTに出力されるか、文字列(または、必要に応じて文字配列/リスト/ 2D配列)として返されます。末尾の改行はもちろんオプションです。
  • 出力形式は厳密です。<s>...</s>必須です; &nbsp;...&nbsp;必須です; ", "(コンマとスペース)は必須です。そして\ncrossed out ... is still regular ... ;(、正確に(分離ライン上に)必須です。
  • 入力日付を日付オブジェクトとして使用できます。タイムスタンプ。年、月、日の緩い整数。形式の単一の番号yyyyMMdd。1899年12月31日(428322017年4月8 日)からの整数日; またはその他の妥当な入力形式。日付のifステートメントは、この課題の主要部分ではありません。
  • 入力integer-listは、必要に応じて文字列のリストにすることもできます。
  • 通常、実際のミームの回答で行われるように、<sup>...</sup>タグをcrossed out ... is still regular ... ;(行に追加する必要はありません。
  • input-listに[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

最後のテストケースに日付がありませんか?
ニール

1
@Neil Ah oops ..修正。日付は実際には関係ありませんが、関係なく追加されます。気づいてくれてありがとう。
ケビンクルーッセン

1
誰もこの特定の目的のためにノンブレークスペースを使用していることに気付いていなかったことを確認でき、それが「もはや」テキストを書いた理由です。
ジョナサンアラン

44で使用する前に使用していたことも確認できます-それが最初に使用したときだと思います)
ジョナサンアラン

私たちは何1889-12-31日も入力を受け取ることができるので、それから何日もかかることができ2017-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日になります)以降の整数日として取得された日付です。

オンラインでお試しください!

どうやって?

Ñȧ$“&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バイトカウントでロフルします。コメントを追加しない限り、あなたがそれで始めたのは少し信じられません。; p
ケビンクルーッセン

どうもありがとう。すぐに説明を追加します。
ジョナサンアラン

1
444バージョンコメントなし、圧縮文字列ではなく数字
ジョナサンアラン

...ああ、444バージョンにはバグがあります-ゴルフバージョンが1970年1月1日以降ではなく、1969年12月31日以降の使用日数> _ <(未解決の修正はまだ444)
ジョナサンアラン

4

パイソン2208の 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バイト

rangeから入力配列を取り、range [A:A]から日付を取り[B1]、コンソールに出力するVBEイミディエイトウィンドウ関数。

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の4283207 Apr 2017)と比較するための-1バイト、@ Neilに感謝

-2バイト1,InStrステートメントから削除、ありがとう@ SeaDoggie01


私は推測するFor i=1To~-c代わりにFor i=1To c-1エクセルVBAで可能ではないでしょうか?私が正しく思い出すなら、Bitwise Notではなく、ではなく~、または両方が可能ですか?(私は、私はおそらくここに愚かな何かを言って、エクセルVBAの何もの隣に知っていることに注意してください。P。)
ケビンCruijssen

@KevinCruijssenええ、ビット単位ではないNot ので、いいえ:~
テイラースコット

1
日付形式を日付に戻し、42832(2017-04-07の整数値)と比較することで、より多くのバイトを節約できると思います。
ニール

instrから「1」を削除することで2バイトを節約できると思います(オプション)
seadoggie01

2

Retina 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+inをラップします&nbsp;(1バイトを保存するときに2つのステージを使用します)。

.{22}$

彼らが彼らの仕事をしたので、日付を削除します。

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

スペースがない場合4+は、ミームを追加します。

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

廃止されたバイトカウントをすべて取り消します。


を使用せずに日付形式を使用すると、5バイト節約できます-
ケビンCruijssen

@KevinCruijssen Excelの日付(1899-12-31以降の日数)として要求することで、さらに多くのバイトを節約できました。これでどこまで行けますか?
ニール

うーん。あなたは何を知っている、それも私でいいです。日付のif文がどのようにApril 8th, 2017行われるかはあまり気にしません。これはこの課題の主要な部分ではありません。
ケビンCruijssen

それは428322017年4月8日でしょうか?
ケビンCruijssen

@KevinCruijssen My 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}

これは、の形式で日付として数値と整数のリストを取得するラムダ関数ですYYYYmmdd


テストコードでTIOリンクを追加することは可能でしょうか?そして、整数入力になるようにフォーマットを切り替えると、実際にいくつかのバイトが節約されます。:)
ケビンクルーッセン

@KevinCruijssenリンクを追加;)
ピーターレンケフィ

ありがとう!私から+1。の後にスペースを削除することで2バイトを節約できます?。また、あなたのTIOのために、あなたは、ヘッダー/フッターを使用して、実際の提出のコードとテストコードを分割することができ、このように。:)
ケビンクルーッセン

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リストlと日付で 実行しますd。42832は変更日です。


追加することは可能でしょうか テストコードでTIOリンクか?
ケビンCruijssen

ロシアで@KevinCruijssenそれが禁止されています
ЕвгенийНовиков

ああ、それを知りませんでした。よく、私はHaskellをあまりよく知らない、そうでなければ私はそれを少し自分でテストしたであろう。しかし、コード自体は論理的に思えるので、それでも私からの+1です。
ケビンCruijssen

@KevinCruijssenあなたはコードをTIOにコピーし、リンクを作成して投稿に追加することができます
ЕвгенийНовиков

@KevinCruijssen TIOは、誤って禁止されたが、私はそれについて、プロキシ/コンタクトISPを使用するのが面倒ださ
ЕвгенийНовиковを

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.