przekreślone 44 jest nadal regularne 44; (

18

Wprowadzenie

24 marca 2015 r. @Isaacg grał w golfa swoją odpowiedź w języku Pyth od 44 do 42 bajtów. Ponieważ przekreślony 44 ( 44 ) wygląda bardzo podobnie do zwykłego 44, @Optimizer dodał następujący komentarz:

skreślony 44 jest nadal normalny 44 :(

Następnie, 21 października 2015 r., @ Doorknob ♦ grał w golfa swoją odpowiedź Rubiego od 44 do 40 (a później 38) bajtów i dodał do odpowiedzi następującą część, wraz z linkiem do tego oryginalnego komentarza @Optimizer :

przekreślone 44 jest nadal regularne 44; (

To był początek memu łączącego odpowiedzi , w którym każdy z nich przekreślił 44 (a czasem 4 lub 444) powiązane z poprzednim.

Następnie, 8 kwietnia 2017 r. (Nie jestem pewien, czy to była pierwsza odpowiedź, ale jest to pierwsza, jaką mogłem znaleźć), @JathanathanAllan grał w golfa swoją odpowiedź w Pythonie od 44 do 39. Jednak użył <s>&nbsp;44&nbsp;</s>tak, by 44 wyglądają tak:  44  i dodał do swojej odpowiedzi:

Przekreślony & nbsp; 44 & nbsp; nie ma już 44 :)

I to był w zasadzie (początek) końca memu.

Wyzwanie

Jeśli chodzi o to wyzwanie: biorąc pod uwagę listę dodatnich liczb całkowitych i datę, wypisz listę przecinek i spację oddzielone, gdzie każda liczba oprócz ostatniej jest umieszczona między <s>...</s>znacznikami.

Ponadto, jeśli którakolwiek z przekreślonych liczb jest w sekwencji [4, 44, 444, 4444, ...]( A00278 na oeis.org ):

  • Jeśli data przypada przed 8 kwietnia 2017 r .: W drugim wierszu wypisz również dokładny (wszystkie małe litery i emotikony ze średnikiem) crossed out N is still regular N ;(( Nbędący przekreśloną liczbą z sekwencji).
  • Jeśli data jest 8 kwietnia 2017 r. Lub później: do przekreślonej liczby Nz sekwencji należy &nbsp;dodać wiodącą i końcową liczbę . Nie potrzeba żadnych dodatkowych linii wyników.

Przykłady:

Wejście: list = [50, 48, 44, 41], date = January 1st, 2017
Wyjście:

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

Wejście: list = [500, 475, 444, 301, 248], date = June 2nd, 2018
Wyjście:

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

Zasady konkursu:

  • Możesz założyć, że lista wejściowa jest posortowaną listą od największej do najmniejszej, zawierającą tylko dodatnie liczby całkowite. W rzeczywistości liczba bajtów może również wzrosnąć z powodu poprawek błędów, ale ze względu na to wyzwanie udajemy, że spada.
  • Możesz założyć tylko jeden numer z sekwencji [4, 44, 444, 4444, ...] jest obecna na liście wprowadzania (jeśli istnieje).
  • Format wyjściowy jest drukowany do STDOUT lub zwracany jako ciąg znaków (lub tablica znaków / lista / tablica 2D, jeśli jest to preferowane). Końcowy znak nowej linii jest oczywiście opcjonalny.
  • Format wyjściowy jest ścisły. <s>...</s>jest obowiązkowe; &nbsp;...&nbsp;jest obowiązkowe; ", "(przecinek i spacja) jest obowiązkowe; i \ncrossed out ... is still regular ... ;(dokładnie jest to obowiązkowe (w oddzielnej linii).
  • Możesz wziąć datę wejścia jako obiekty daty; znaczniki czasu; luźne liczby całkowite dla roku, miesiąca i dnia; pojedynczy numer w formacie yyyyMMdd; dni całkowite od 31 grudnia 1899 r. (czyli 428328 kwietnia 2017 r.); lub inny rozsądny format wejściowy. Oświadczenie if-date nie jest główną częścią tego wyzwania.
  • Wejściowa lista liczb całkowitych może również być listą ciągów, jeśli chcesz.
  • Nie musisz dodawać <sup>...</sup>tagów do crossed out ... is still regular ... ;(linii, jak to zwykle robi się z rzeczywistymi odpowiedziami memów.
  • Możesz założyć, że lista wejściowa nigdy nie będzie zawierała liczby bajtów poza [1, 50000]zakresem (więc będziesz musiał {4, 44, 444, 4444, 44444}martwić się tylko tymi pięcioma ).

Główne zasady:

  • To jest , więc wygrywa najkrótsza odpowiedź w bajtach.
    Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania.
  • Do odpowiedzi mają zastosowanie standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i zwracanymi typami, pełnych programów. Twoja decyzja.
  • Domyślne luki są zabronione.
  • Jeśli to możliwe, dodaj link z testem swojego kodu.
  • Zalecane jest również dodanie wyjaśnienia do odpowiedzi.

Przypadki testowe:

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
źródło
Ostatni przypadek testowy nie ma daty?
Neil,
1
@Neil Ah oops .. Naprawiono. Data tak naprawdę nie ma znaczenia dla tego, ale dodała jedną niezależnie. Dzięki za zauważenie.
Kevin Cruijssen
1
Mogę potwierdzić, że nie zauważyłem, aby ktokolwiek używał przestrzeni niełamliwej do tego konkretnego celu i dlatego napisałem tekst „już nie”.
Jonathan Allan,
(Mogę również potwierdzić, że użyłem go przed użyciem z 44 - myślę, że wtedy po raz pierwszy ich użyłem)
Jonathan Allan
Ponieważ możemy przyjmować dane za kilka dni 1889-12-31, to czy możemy również brać te dni od tego czasu 2017-04-08?
TFeld

Odpowiedzi:

6

Galaretka ,  444  , 94 , 93 bajtów

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

Pełny program. Dane wejściowe to lista ciągów znaków i data przyjęta jako liczba całkowita od pierwszego stycznia 1970 roku (co oznacza, że ​​17264 kwietnia jest ósmym 2017)

Wypróbuj online!

W jaki sposób?

Ñȧ$“&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
źródło
1
Zapomniałeś usunąć wkład z innego wyzwania w swoim TIO. ;) Niezła odpowiedź niezależnie. Czy mógłbyś dodać wyjaśnienie? I rofl przy tej liczbie 444 bajtów. Nie wierzę w to, że zacząłeś od tego, chyba że dodałeś komentarze. ; p
Kevin Cruijssen
Dzięki, dziękuję. Wkrótce dodam wyjaśnienie.
Jonathan Allan,
1
Wersja 444 bez komentarzy, liczb zamiast skompresowanych ciągów
Jonathan Allan,
... ah wersja 444 ma błąd - używa dni od 1969-12-31, a nie od 1970-01-01, jak w wersji golfowej> _ <(naiwna poprawka to wciąż 444)
Jonathan Allan
4

Python 2 , 208 204  203 201 197 bajtów

Pobiera dane wejściowe jako listę ciągów i liczbę całkowitą 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)

Wypróbuj online!

TFeld
źródło
3

Excel VBA, 217 bajtów

Funkcja bezpośredniego okna VBE, która pobiera tablicę wejściową z zakresu [A:A] i datę z zakresu [B1]i danych wyjściowych do konsoli.

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

Niegolfowany i komentowany

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 bajty na zmianę formatu daty na YYYYMMDD

-1 bajt za porównanie z 42832(wartość int dla 07 Apr 2017), Dzięki @Neil

-2 bajty do usunięcia 1,z InStrinstrukcji Thanks @ SeaDoggie01

Taylor Scott
źródło
Chyba For i=1To~-czamiast tego For i=1To c-1nie jest możliwe w Excel VBA? Jeśli dobrze pamiętam, Bitwise nie jest Notzamiast ~lub czy oba są możliwe? (Zauważ, że
prawie
@KevinCruijssen Tak, bitwise not is Not , więc nie ~:(
Taylor Scott
1
Myślę, że możesz zaoszczędzić więcej bajtów, zmieniając format daty z powrotem na datę i porównując 42832(wartość całkowita z dnia 2017-04-07).
Neil,
Myślę, że możesz zaoszczędzić 2 bajty, usuwając „1” z instr (jest opcjonalne)
seadoggie01
2

Retina 0.8.2 , 130 bajtów

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

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

Wypróbuj online! Link zawiera przypadki testowe. Wykorzystuje datowniki Excela (dni od 1899-12-31, ale włącznie z 1900-02-49). 141 bajtów dla wersji, która pobiera daty 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>, 

Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:

$
;2017-04-08

Dołącz datę graniczną do danych wejściowych.

O`;.{10}

Sortuj daty. Jeśli podana data przypada na datę graniczną lub później, data pierwsza będzie datą graniczną.

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

W tym przypadku, owinąć 4+w &nbsp;(stosując dwa etapy, ponieważ oszczędza bajt).

.{22}$

Usuń daty, kiedy wykonali swoją pracę.

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

Jeśli nie ma odstępu 4+, dodaj mema.

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

Skreśl wszystkie przestarzałe liczby bajtów.

Neil
źródło
Możesz zapisać 5 bajtów , przyjmując format daty bez -.
Kevin Cruijssen
@KevinCruijssen Mógłbym zaoszczędzić jeszcze więcej bajtów, prosząc o podanie daty Excela (dni od 1899-12-31). Jak daleko mogę z tym pójść?
Neil,
Hmm .. Wiesz co, to też w porządku dla mnie. Jak April 8th, 2017to się dzieje z instrukcją if dla tej daty , nie obchodzi mnie to. To nie jest główna część tego wyzwania.
Kevin Cruijssen
To by było 42832na 8 kwietnia 2017 r., Zakładam?
Kevin Cruijssen
@KevinCruijssen Mój program Excel mówi, że to 7 miejsce.
Neil,
1

Rubinowy, 208 184 180 bajtów

Test TIO

Dzięki za @KevinCruijssen za uratowanie 2 bajtów!

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

Jest to funkcja lambda, która przyjmuje listę liczb i liczbę całkowitą jako datę w formacie YYYYmmdd.

Peter Lenkefi
źródło
Czy można dodać link TIO z kodem testowym? I przełączanie formatów, aby było to wejście całkowite, rzeczywiście zaoszczędziłoby trochę bajtów. :)
Kevin Cruijssen
@KevinCruijssen Dodano link;)
Peter Lenkefi
Dzięki! +1 ode mnie Możesz zapisać 2 bajty, usuwając spacje po ?. Ponadto w przypadku TIO możesz podzielić swój rzeczywisty kod przesłania i kod testowy za pomocą nagłówka / stopki, w ten sposób . :)
Kevin Cruijssen
1

JavaScript, 194 bajty

(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
źródło
1

Haskell , 227 bajtów

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

Wypróbuj online! Uruchom fz listą li datą d. 42832 to zmieniająca się data.

Евгений Новиков
źródło
Czy można dodać link TIO z kodem testowym?
Kevin Cruijssen
@KevinCruijssen w Rosji jest zbanowany
Евгений Новиков
Och, nie wiedziałem o tym. Cóż, nie znam zbyt dobrze Haskella, inaczej sam bym go trochę przetestował. Ale sam kod wydaje się logiczny, więc mimo to +1 ode mnie.
Kevin Cruijssen
@KevinCruijssen możesz skopiować kod do TIO, utworzyć link i dodać go do wpisu
Евгений Новиков
@KevinCruijssen TIO został przez pomyłkę zbanowany, ale jestem zbyt leniwy, aby skorzystać z proxy / skontaktować się z dostawcą usług internetowych w tym zakresie
Евгений Новиков
1

JavaScript (Node.js) , 173 bajtów

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

Wypróbuj online!

Korzystanie ze składni curry f(array)(js_timestamp)

Shieru Asakoto
źródło