durchgestrichen 44 ist immer noch regulär 44; (

18

Einführung

Am 24. März 2015 hat @isaacg seine Pyth-Antwort von 44 auf 42 Byte golfen . Da eine durchgestrichene 44 ( 44 ) einer regulären 44 sehr ähnlich sieht, machte @Optimizer folgenden Kommentar:

durchgestrichen 44 ist noch normal 44 :(

Danach, am 21. Oktober 2015, hat @ Doorknob ♦ seine Ruby-Antwort von 44 auf 40 (und später 38) Bytes golfen und seiner Antwort den folgenden Teil hinzugefügt, mit einem Link zu diesem ursprünglichen Kommentar von @Optimizer :

durchgestrichen 44 ist immer noch regulär 44; (

Dies war der Beginn eines Antwortverkettungs-Memes , bei dem jedes durchgestrichene 44 (und in einigen Fällen 4 oder 444) mit dem vorherigen verknüpft war.

Dann, am 8. April 2017 (ich bin mir nicht sicher, ob dies die erste Antwort war, aber es ist die früheste, die ich finden konnte), spielte JonathanAllan seine Python-Antwort von 44 auf 39 ab. Er benutzte <s>&nbsp;44&nbsp;</s>dies jedoch sieh so aus:  44  , und fügte Folgendes zu seiner Antwort hinzu:

Durchgestrichen & nbsp; 44 & nbsp; ist nicht mehr 44 :)

Und das war im Grunde das (Anfangs-) Ende des Memes.

Herausforderung

Zu dieser Herausforderung: Geben Sie bei einer Liste mit positiven ganzen Zahlen und einem Datum die durch Kommas und Leerzeichen getrennte Liste aus, wobei jede Zahl mit Ausnahme der letzten zwischen <s>...</s>Tags steht.

Befindet sich eine der durchgestrichenen Nummern in der Sequenz [4, 44, 444, 4444, ...]( A00278 auf oeis.org ):

  • Wenn das Datum vor dem 8. April 2017 liegt: Geben Sie auch den genauen Text crossed out N is still regular N ;(( Nin Kleinbuchstaben und mit Semikolon-Emoticon) ( die durchgestrichene Zahl aus der Sequenz) in einer zweiten Zeile aus.
  • Wenn das Datum der 8. April 2017 oder später ist: Die durchgestrichene Nummer Naus der Sequenz sollte mit dem Vor- und Nachkomma &nbsp;versehen sein. Keine zusätzlichen Ausgabezeilen erforderlich.

Beispiele:

Input: list = [50, 48, 44, 41], date = January 1st, 2017
Output:

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

Input: list = [500, 475, 444, 301, 248], date = June 2nd, 2018
Output:

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

Herausforderungsregeln:

  • Sie können davon ausgehen, dass die Eingabeliste eine sortierte Liste vom größten bis zum kleinsten Wert ist und nur positive ganze Zahlen enthält. In der Realität kann die Anzahl der Bytes auch aufgrund von Fehlerkorrekturen ansteigen, aber um dieser Herausforderung willen tun wir so, als würde sie nur sinken.
  • Sie können davon ausgehen, dass nur eine einzelne Nummer aus der Sequenz [4, 44, 444, 4444, ...]in der Eingabeliste vorhanden ist (falls vorhanden).
  • Das Ausgabeformat wird entweder auf STDOUT gedruckt oder als String zurückgegeben (oder als Zeichen-Array / Liste / 2D-Array, wenn dies vorzuziehen ist). Ein abschließender Zeilenumbruch ist natürlich optional.
  • Das Ausgabeformat ist streng. <s>...</s>ist obligatorisch; &nbsp;...&nbsp;ist obligatorisch; ", "(Komma und Leerzeichen) ist obligatorisch; und \ncrossed out ... is still regular ... ;(genau ist obligatorisch (in einer getrennten Zeile).
  • Sie können das Eingabedatum als Datumsobjekt nehmen; Zeitstempel; lose ganze Zahlen für Jahr, Monat und Tag; eine einzelne Zahl im Format yyyyMMdd; ganze Tage seit dem 31. Dezember 1899 (dies wäre der 428328. April 2017); oder ein anderes vernünftiges Eingabeformat. Das Datum if-Anweisung ist nicht der Hauptteil dieser Herausforderung.
  • Die Eingabe-Ganzzahl-Liste kann auch eine Liste von Zeichenfolgen sein, wenn Sie möchten.
  • Sie müssen die <sup>...</sup>Tags nicht crossed out ... is still regular ... ;(wie bei den eigentlichen Meme-Antworten üblich in die Zeile einfügen.
  • Sie können davon ausgehen, dass die Eingabeliste niemals Byteanzahlen außerhalb des [1, 50000]Bereichs enthält (Sie müssen sich also nur um diese fünf {4, 44, 444, 4444, 44444}kümmern).

Allgemeine Regeln:

  • Das ist , also gewinnt die kürzeste Antwort in Bytes.
    Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden.
  • Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden. Ihr Anruf.
  • Standardlücken sind verboten.
  • Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
  • Außerdem wird dringend empfohlen, eine Erklärung für Ihre Antwort hinzuzufügen.

Testfälle:

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
Kevin Cruijssen
quelle
Ihr letzter Testfall hat kein Datum mehr?
Neil
1
@ Neil Ah oops .. Behoben. Datum spielt für dieses Datum keine Rolle, aber es wurde trotzdem hinzugefügt. Danke fürs bemerken.
Kevin Cruijssen
1
Ich kann bestätigen, dass ich nicht bemerkt habe, dass jemand den nicht unterbrechenden Raum für diesen speziellen Zweck verwendet, und deshalb habe ich den Text "nicht mehr" geschrieben.
Jonathan Allan
(Ich kann auch bestätigen, dass ich es vor der Verwendung mit 44 verwendet hatte - ich glaube, das ist, als ich sie zum ersten Mal verwendet habe)
Jonathan Allan
Da wir Eingaben als Tage seither nehmen können 1889-12-31, können wir auch Tage seither nehmen 2017-04-08?
TFeld

Antworten:

6

Jelly ,  444  , 94 , 93 Bytes

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

Ein volles Programm. Die Eingaben sind eine Liste von Zeichenfolgen und ein Datum, das als ganzzahlige Tage seit dem 1. Januar 1970 verwendet wurde (17264 der 8. April 2017).

Probieren Sie es online!

Wie?

Ñȧ$“&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
Jonathan Allan
quelle
1
Sie haben vergessen, die Eingabe von einer anderen Herausforderung in Ihrem TIO zu entfernen. ;) Trotzdem nette Antwort. Würde es Ihnen etwas ausmachen, eine Erklärung hinzuzufügen? Und rofl bei dieser 444-Byte-Zählung. Ich glaube nicht, dass Sie damit angefangen haben, es sei denn, Sie haben Kommentare hinzugefügt. ; p
Kevin Cruijssen
Opps, danke. Ich werde gleich eine Erklärung hinzufügen.
Jonathan Allan
1
444 version keine Kommentare, Zahlen statt komprimierte Zeichenfolgen
Jonathan Allan
... ah, die 444-Version hat einen Fehler - sie verwendet Tage seit dem 31.12.1969 nicht seit dem 01.01.1970 wie die Golfversion> _ <(naive Korrektur ist immer noch 444)
Jonathan Allan
4

Python 2 , 208 204  203 201 197 Bytes

Nimmt Eingaben als Liste von Zeichenfolgen und als Int von 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)

Probieren Sie es online!

TFeld
quelle
3

Excel VBA, 217 Bytes

VBE-Direktfensterfunktion, die das Eingabearray aus dem Bereich [A:A]und das Datum aus dem Bereich [B1]und den Ausgaben an die Konsole entnimmt .

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 und Kommentiert

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 Bytes zum Ändern des Datumsformats auf YYYYMMDD

-1 Byte für den Vergleich mit 42832(int Wert für 07 Apr 2017), Danke @Neil

-2 Bytes zum Entfernen 1,aus der InStrAnweisung, Danke @ SeaDoggie01

Taylor Scott
quelle
Ich vermute, For i=1To~-cstatt For i=1To c-1in Excel VBA nicht möglich? Wenn ich mich richtig erinnere ist Bitwise nicht Notstatt ~, oder sind beides möglich? (Beachten Sie, dass ich so gut wie nichts über Excel VBA weiß, also sage ich hier wahrscheinlich etwas Dummes.; P)
Kevin Cruijssen
@ KevinCruijssen Ja, bitweise nicht Not , also nein ~:(
Taylor Scott
1
Ich denke, Sie können mehr Bytes sparen, indem Sie das Datumsformat zurück auf Datum ändern und mit 42832(dem ganzzahligen Wert von 2017-04-07) vergleichen.
Neil
Ich denke, Sie können 2 Bytes sparen, indem Sie die "1" von den Instr (es ist optional)
entfernen
2

Retina 0.8.2 , 130 Bytes

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

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

Probieren Sie es online! Link enthält Testfälle. Verwendet Excel-Datumsstempel (Tage seit 1899-12-31, jedoch einschließlich 1900-02-49). 141 Byte für eine Version mit ISO-Daten:

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

Probieren Sie es online! Link enthält Testfälle. Erläuterung:

$
;2017-04-08

Hängen Sie den Stichtag an den Eingang an.

O`;.{10}

Sortieren Sie die Daten. Wenn das angegebene Datum am oder nach dem Stichtag liegt, ist das erste Datum das Stichtag.

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

Schließen Sie 4+in diesem Fall den Eingang um &nbsp;(in zwei Schritten, da ein Byte gespeichert wird).

.{22}$

Löschen Sie die Daten, wenn sie ihre Arbeit erledigt haben.

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

Wenn ein Leerzeichen vorhanden ist 4+, fügen Sie das Mem hinzu.

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

Alle veralteten Byte-Zählungen streichen.

Neil
quelle
Sie können 5 Bytes sparen, indem Sie das Datumsformat ohne übernehmen -.
Kevin Cruijssen
@ KevinCruijssen Ich konnte noch mehr Bytes sparen, indem ich nach einem Excel-Datum fragte (Tage seit dem 31.12.1899). Wie weit kann ich damit gehen?
Neil
Hmm .. Weißt du was, das geht mir auch gut. Wie die if-Anweisung für das Datum gemacht April 8th, 2017wird, ist mir eigentlich egal. Es ist nicht der Hauptteil dieser Herausforderung.
Kevin Cruijssen
Das wäre 42832für den 8. April 2017, nehme ich an?
Kevin Cruijssen
@ KevinCruijssen Mein Excel sagt, das ist der 7..
Neil
1

Ruby, 208 184 180 Bytes

TIO-Test

Vielen Dank für @ KevinCruijssen für das Speichern von 2 Bytes!

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

Es ist eine Lambda-Funktion, die eine Liste von Zahlen und eine Ganzzahl als Datum im Format von annimmt YYYYmmdd.

Peter Lenkefi
quelle
Wäre es möglich, einen TIO-Link mit Testcode hinzuzufügen ? Wenn Sie die Formate so ändern, dass es sich um eine Ganzzahleingabe handelt, werden in der Tat einige Bytes gespart. :)
Kevin Cruijssen
@KevinCruijssen Link hinzugefügt;)
Peter Lenkefi
Vielen Dank! +1 von mir. Sie können 2 Bytes sparen, indem Sie die Leerzeichen nach dem entfernen ?. Außerdem können Sie für Ihren TIO Ihren tatsächlichen Übermittlungscode und Testcode mit der Kopf- / Fußzeile wie folgt aufteilen . :)
Kevin Cruijssen
1

JavaScript, 194 Bytes

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

darrylyeo
quelle
1

Haskell , 227 Bytes

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

Probieren Sie es online! Führen Sie fmit der Liste lund das Datum d. 42832 ist das Änderungsdatum.

Евгений Новиков
quelle
Wäre es möglich, einen TIO-Link mit Testcode hinzuzufügen ?
Kevin Cruijssen
@ KevinCruijssen in Russland ist es verboten
Евгений Новиков
Oh, das wusste ich nicht. Nun, ich kenne Haskell nicht so gut, sonst hätte ich es selbst ein bisschen getestet. Aber der Code selbst scheint logisch, also +1 von mir trotzdem.
Kevin Cruijssen
@KevinCruijssen Sie können Code zu TIO kopieren, einen Link erstellen und zum Beitrag hinzufügen
Евгений Новиков
@ KevinCruijssen TIO ist aus Versehen gesperrt, aber ich bin zu faul, einen Proxy zu verwenden / den ISP zu kontaktieren
Евгений Новиков
1

JavaScript (Node.js) , 173 Byte

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} ;(`)

Probieren Sie es online!

Verwenden der Curry-Syntax f(array)(js_timestamp)

Shieru Asakoto
quelle