riscado 44 ainda é regular 44;

18

Introdução

Em 24 de março, 2015 @isaacg golfed sua resposta Pyth de 44 para 42 bytes. Como um 44 ( 44 ) riscado se parece muito com um 44 normal, o @Optimizer fez o seguinte comentário:

riscado 44 ainda é normal 44 :(

Depois disso, em 21 de outubro de 2015, o @ Doorknob golfou sua resposta Ruby de 44 para 40 (e depois 38) bytes e adicionou a seguinte parte à sua resposta, com um link para o comentário original do @Optimizer :

riscado 44 ainda é regular 44;

Este foi o começo de um meme de cadeia de respostas , em que todos riscavam 44 (e, em algumas ocasiões, 4 ou 444) estavam ligados ao anterior.

Então, em 8 de abril de 2017 (não tenho certeza se essa foi a primeira resposta a ser feita, mas é a mais antiga que pude encontrar), @ JonathanAllan jogou sua resposta em Python de 44 a 39. No entanto, ele usou <s>&nbsp;44&nbsp;</s>as 44 tenha esta aparência:  44  e acrescentou o seguinte à sua resposta:

Riscado & nbsp; 44 & nbsp; já não é 44 :)

E esse foi basicamente o (começo do) fim do meme.

Desafio

Quanto a este desafio: Dada uma lista de números inteiros positivos e uma data, produza a lista separada por vírgula e espaço, onde cada número, exceto o último, é colocado entre as <s>...</s>tags.

Além disso, se algum dos números riscados estiver na sequência [4, 44, 444, 4444, ...]( A00278 em oeis.org ):

  • Se a data for anterior a 8 de abril de 2017: também forneça o texto exato (em letras minúsculas e com emoticons de ponto e vírgula) crossed out N is still regular N ;(( Nsendo o número riscado da sequência) em uma segunda linha.
  • Se a data for 8 de abril de 2017 ou posterior: o número riscado Nda sequência deve ter o início e o final &nbsp;adicionados. Não há necessidade de linhas adicionais de saída.

Exemplos:

Entrada: list = [50, 48, 44, 41], date = January 1st, 2017
saída:

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

Entrada: list = [500, 475, 444, 301, 248], date = June 2nd, 2018
saída:

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

Regras do desafio:

  • Você pode assumir que a lista de entrada é uma lista classificada do maior para o menor, contendo apenas números inteiros positivos. Na realidade, uma contagem de bytes também pode aumentar devido a correções de bugs, mas, para o bem desse desafio, fingimos que ele só diminui.
  • Você pode assumir que apenas um número da sequência [4, 44, 444, 4444, ...]esteja presente na lista de entrada (se houver).
  • O formato de saída é impresso em STDOUT ou retornado como uma sequência de caracteres (ou matriz de caracteres / lista / matriz 2D, se preferível). Uma nova linha à direita é obviamente opcional.
  • O formato de saída é rigoroso. <s>...</s>é mandatório; &nbsp;...&nbsp;é mandatório; ", "(vírgula e espaço) é obrigatório; e \ncrossed out ... is still regular ... ;(exatamente é obrigatório (em uma linha separada).
  • Você pode considerar a data de entrada como objetos de data; timestamps; solte números inteiros por ano, mês e dia; um único número no formato yyyyMMdd; dias inteiros desde 31 de dezembro de 1899 (que seria 42832em 8 de abril de 2017); ou qualquer outro formato de entrada razoável. A declaração if de data não é a parte principal desse desafio.
  • A lista inteira de entrada também pode ser uma lista de cadeias, se você desejar.
  • Você não precisa adicionar as <sup>...</sup>tags à crossed out ... is still regular ... ;(linha, como geralmente é feito com as respostas reais dos memes.
  • Você pode assumir que a lista de entrada nunca conterá contagens de bytes fora do [1, 50000]intervalo (portanto, você terá apenas esses cinco {4, 44, 444, 4444, 44444}com que se preocupar).

Regras gerais:

  • Isso é , então a resposta mais curta em bytes vence.
    Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação.
  • As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
  • As brechas padrão são proibidas.
  • Se possível, adicione um link com um teste para o seu código.
  • Além disso, é altamente recomendável adicionar uma explicação para sua resposta.

Casos de teste:

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
fonte
Seu último caso de teste está faltando a data?
Neil
1
@ Neil Ah oops .. Corrigido. A data realmente não importa para essa, mas adicionou uma independentemente. Obrigado por perceber.
Kevin Cruijssen 08/08/19
1
Posso confirmar que não havia notado que alguém usava o espaço sem interrupção para esse fim específico e foi por isso que escrevi o texto "não mais".
Jonathan Allan
(Eu posso também confirmar que eu tinha usado antes de usá-lo com 44 - Eu acredito que é quando eu os utilizados pela primeira vez)
Jonathan Allan
Como podemos receber contribuições como dias desde então 1889-12-31, também podemos levar dias desde então 2017-04-08?
TFeld 8/08/19

Respostas:

6

Gelatina ,  444  , 94 , 93 bytes

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

Um programa completo. As entradas são uma lista de seqüências de caracteres e uma data tirada como dias inteiros desde janeiro do primeiro de 1970 (tornando 17264 o oitavo de abril de 2017)

Experimente online!

Quão?

Ñȧ$“&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
fonte
1
Você esqueceu de remover a entrada de outro desafio no seu TIO. ;) Resposta agradável, independentemente. Você se importaria de adicionar uma explicação? E rofl nessa contagem de 444 bytes. Não acredito nem um pouco que você começou com isso, a menos que tenha adicionado comentários. ; p
Kevin Cruijssen 12/08
Opps, obrigado. Vou adicionar uma explicação em breve.
Jonathan Allan
1
444 versão sem comentários, os números em vez de cordas comprimidas
Jonathan Allan
... ah a versão 444 tem um bug - seus dias usando desde 1969/12/31 não desde 1970-01-01 como a versão golfed faz> _ <(correção ingênuo ainda é 444)
Jonathan Allan
4

Python 2 , 208 204203  201 201 bytes

Recebe entrada como uma lista de strings e um int de 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)

Experimente online!

TFeld
fonte
3

Excel VBA, 217 bytes

Função de janela imediata do VBE que leva a matriz de entrada do intervalo [A:A]e data do intervalo [B1]e saídas para o console.

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

Sem Golfe e Comentado

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 para alterar o formato da data para YYYYMMDD

-1 byte para comparar com 42832(valor int 07 Apr 2017), Obrigado @Neil

-2 bytes para remover 1,da InStrinstrução, Obrigado @ SeaDoggie01

Taylor Scott
fonte
Eu acho que em For i=1To~-cvez de For i=1To c-1não é possível no Excel VBA? Se bem me lembro, o Bitwise não é, em Notvez de ~, ou ambos são possíveis? (Note que eu sei quase nada do Excel VBA, então eu provavelmente estou dizendo algo estúpido aqui; p.)
Kevin Cruijssen
@KevinCruijssen Sim, bit a bit não é Not , de modo nenhum ~:(
Taylor Scott
1
Eu acho que você pode salvar mais bytes alterando o formato da data novamente e comparando com 42832(o valor inteiro de 2017-04-07).
Neil
Eu acho que você pode salvar 2 bytes, removendo o "1", a partir do instr (é opcional)
seadoggie01
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>, 

Experimente online! O link inclui casos de teste. Usa carimbos de data do Excel (dias desde 1899-12-31, mas incluindo 1900-02-49). 141 bytes para uma versão com datas 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>, 

Experimente online! O link inclui casos de teste. Explicação:

$
;2017-04-08

Anexe a data de corte à entrada.

O`;.{10}

Classifique as datas. Se a data especificada for na ou após a data limite, a primeira data será a data limite.

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

Nesse caso, envolva o 4+in &nbsp;(usando dois estágios para salvar um byte).

.{22}$

Exclua as datas como eles fizeram seu trabalho.

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

Se houver um espaço 4+, anexe o meme.

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

Risque todas as contagens de bytes obsoletas.

Neil
fonte
Você pode salvar 5 bytes usando o formato de data sem -.
Kevin Cruijssen 08/08/19
@KevinCruijssen Eu poderia economizar ainda mais bytes solicitando-o como uma data do Excel (dias desde 1899-12-31). Até onde posso ir com isso?
Neil
Hmm .. Você sabe o que, isso também é bom para mim. Como a declaração if da data April 8th, 2017é feita, eu realmente não me importo. Não é a parte principal deste desafio.
Kevin Cruijssen 08/08/19
Isso seria 42832para 8 de abril de 2017, presumo?
Kevin Cruijssen 08/08/19
@KevinCruijssen Meu Excel diz que é o 7º.
Neil
1

Ruby, 208 184 180 bytes

Teste TIO

Obrigado por @KevinCruijssen por economizar 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}

É uma função lambda que recebe uma lista de números e um número inteiro como uma data no formato de YYYYmmdd.

Peter Lenkefi
fonte
Seria possível adicionar um link TIO com código de teste? E alternar formatos para que seja uma entrada inteira economizaria alguns bytes. :)
Kevin Cruijssen
@KevinCruijssen Link adicionado;)
Peter Lenkefi
Obrigado! +1 de mim. Você pode salvar 2 bytes removendo os espaços após o ?. Além disso, para o seu TIO, você pode dividir o código de envio e o código de teste reais com o cabeçalho / rodapé, assim . :)
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
fonte
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

Experimente online! Execute fcom lista le data d. 42832 é a data da mudança.

Евгений Новиков
fonte
Seria possível adicionar um link TIO com código de teste?
Kevin Cruijssen
@KevinCruijssen na Rússia foi banido
Евгений Новиков
Oh, não sabia disso. Bem, eu não conheço Haskell muito bem, caso contrário eu teria testado um pouco. Mas o código em si parece lógico, portanto, +1 de mim, no entanto.
Kevin Cruijssen
@KevinCruijssen você pode copiar o código para o TIO, criar um link e adicioná-lo à postagem
--вгений Новиков
@KevinCruijssen TIO é proibido por engano, mas eu sou muito preguiçoso para usar o proxy ISP / contacto sobre isso
Евгений Новиков
1

JavaScript (Node.js) , 173 bytes

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

Experimente online!

Usando sintaxe curry f(array)(js_timestamp)

Shieru Asakoto
fonte