barrato 44 è ancora regolare 44;


18

introduzione

Il 24 marzo 2015 @isaacg ha giocato a golf la sua risposta Pyth da 44 a 42 byte. Poiché un 44 ( 44 ) barrato assomiglia molto a un normale 44, @Optimizer ha fatto il seguente commento:

eliminato 44 è ancora normale 44 :(

Dopodiché, il 21 ottobre 2015, @ Doorknob ♦ ha golfato la sua risposta di Ruby da 44 a 40 (e successivamente 38) byte e ha aggiunto la parte seguente alla sua risposta, con un collegamento a quel commento originale di @Optimizer :

barrato 44 è ancora regolare 44;

Questo è stato l'inizio di un meme incatenato alla risposta , in cui ognuno ha barrato 44 (e in alcune occasioni 4 o 444) collegati al precedente.

Quindi l'8 aprile 2017 (non sono sicuro che questa sia stata la prima risposta a farlo, ma è la prima che ho potuto trovare), @JonathanAllan ha giocato a golf con la sua risposta Python dal 44 al 39. Ha comunque usato <s>&nbsp;44&nbsp;</s>così 44 assomigliare a questo:  44  e ha aggiunto quanto segue alla sua risposta:

Barrato & nbsp; 44 & nbsp; non ha più 44 anni :)

E quella era sostanzialmente la (inizio della) fine del meme.

Sfida

Per quanto riguarda questa sfida: dato un elenco di numeri interi positivi e una data, genera l'elenco separato da virgola e spazio dove ogni numero tranne l'ultimo è posto tra i <s>...</s>tag.

Inoltre, se uno dei numeri barrati è nella sequenza [4, 44, 444, 4444, ...]( A00278 su oeis.org ):

  • Se la data è precedente all'8 aprile 2017: genera anche il testo esatto (tutto minuscolo e con punto e virgola) crossed out N is still regular N ;((che Nè il numero barrato dalla sequenza) su una seconda riga.
  • Se la data è l'8 aprile 2017 o successiva: il numero barrato Ndalla sequenza dovrebbe essere &nbsp;aggiunto all'inizio e alla fine . Non sono necessarie ulteriori linee di output.

Esempi:

Ingresso: list = [50, 48, 44, 41], date = January 1st, 2017
Uscita:

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

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

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

Regole della sfida:

  • Si può presumere che l'elenco di input sia un elenco ordinato dal più grande al più piccolo, contenente solo numeri interi positivi. In realtà un conteggio di byte può anche aumentare a causa di correzioni di bug, ma per il bene di questa sfida facciamo finta che non funzioni.
  • Puoi presumere che un solo numero dalla sequenza [4, 44, 444, 4444, ...]sia presente nella lista di input (se presente).
  • Il formato di output viene stampato su STDOUT o restituito come stringa (o array di caratteri / elenco / array 2D se preferibile). Una nuova riga finale è ovviamente facoltativa.
  • Il formato di output è rigoroso. <s>...</s>è obbligatorio; &nbsp;...&nbsp;è obbligatorio; ", "(virgola e spazio) è obbligatorio; ed \ncrossed out ... is still regular ... ;(è assolutamente obbligatorio (su una linea separata).
  • Puoi prendere la data di input come data-oggetti; timestamp; numeri interi sciolti per anno, mese e giorno; un singolo numero nel formato yyyyMMdd; giorni interi dal 31 dicembre 1899 (che sarebbe 42832l'8 aprile 2017); o qualsiasi altro formato di input ragionevole. La data if-statement non è la parte principale di questa sfida.
  • L'elenco intero di input può anche essere un elenco di stringhe, se lo si desidera.
  • Non è necessario aggiungere i <sup>...</sup>tag alla crossed out ... is still regular ... ;(riga come di solito si fa con le risposte effettive del meme.
  • Puoi presumere che l'elenco di input non conterrà mai conteggi di byte al di fuori [1, 50000]dell'intervallo (quindi avrai solo questi cinque {4, 44, 444, 4444, 44444}di cui preoccuparti).

Regole generali:

  • Questo è , quindi vince la risposta più breve in byte.
    Non lasciare che le lingue di code-golf ti scoraggino dal pubblicare risposte con lingue non codegolfing. Prova a trovare una risposta il più breve possibile per "qualsiasi" linguaggio di programmazione.
  • Per la tua risposta valgono regole standard , quindi puoi usare STDIN / STDOUT, funzioni / metodo con i parametri corretti e tipo di ritorno, programmi completi. La tua chiamata.
  • Sono vietate le scappatoie predefinite .
  • Se possibile, aggiungi un link con un test per il tuo codice.
  • Inoltre, si consiglia vivamente di aggiungere una spiegazione per la risposta.

Casi test:

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

Nel tuo ultimo caso di prova manca la data?
Neil,

1
@Neil Ah oops .. Risolto. La data non conta davvero per quella, ma ne aggiunge una a prescindere. Grazie per averlo notato.
Kevin Cruijssen,

1
Posso confermare di non aver notato nessuno usare lo spazio non-break per questo scopo specifico ed è per questo che ho scritto il testo "non più".
Jonathan Allan,

(Posso anche confermare di averlo usato prima di usarlo con 44 - Credo che sia quando li ho usati per la prima volta)
Jonathan Allan

Dal momento che possiamo prendere input come giorni da allora 1889-12-31, possiamo anche prendere giorni da allora 2017-04-08?
TFeld

Risposte:


6

Gelatina ,  444  , 94 , 93 byte

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

Un programma completo. Gli input sono un elenco di stringhe e una data presa come giorni interi dal primo gennaio 1970 (rendendo 17264 aprile l'ottavo 2017)

Provalo online!

Come?

Ñȧ$“&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
Hai dimenticato di rimuovere l'input da un'altra sfida nel tuo TIO. ;) Bella risposta a prescindere. Ti dispiacerebbe aggiungere una spiegazione? E rofl a quel conteggio di 444 byte. Non ci credo un po 'che tu abbia iniziato con quello, a meno che tu non abbia aggiunto commenti. ; p
Kevin Cruijssen,

Opps, grazie. Aggiungerò una spiegazione a breve.
Jonathan Allan,

1
Versione 444 senza commenti, numeri anziché stringhe compresse
Jonathan Allan,

... ah la versione 444 ha un bug - usa giorni dal 1969-12-31 non dal 1970-01-01 come fa la versione golfata> _ <(la correzione ingenua è ancora 444)
Jonathan Allan

4

Python 2 , 208 204  203 201 197 byte

Prende l'input come un elenco di stringhe e un int di 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)

Provalo online!


3

Excel VBA, 217 byte

VBE funzione finestra immediata che porta array di input dall'intervallo [A:A]e data dall'intervallo [B1]e output alla 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 &" ;(","");

Ungolfed e commentato

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 byte per cambiare il formato della data in YYYYMMDD

-1 byte per il confronto con 42832(valore int per 07 Apr 2017), grazie @Neil

-2 byte per la rimozione 1,dalla InStrdichiarazione, grazie @ SeaDoggie01


Immagino For i=1To~-cinvece che For i=1To c-1non sia possibile in Excel VBA? Se ricordo bene Bitwise non è Notinvece di ~, o sono entrambi possibili? (Nota che non conosco
quasi

@KevinCruijssen Sì, bit a bit no Not , quindi no ~:(
Taylor Scott

1
Penso che puoi salvare più byte modificando il formato della data e confrontandolo con 42832(il valore intero del 2017-04-07).
Neil,

Penso che puoi salvare 2 byte rimuovendo "1" dall'istr (è facoltativo)
seadoggie01

2

Retina 0.8.2 , 130 byte

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

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

Provalo online! Il link include casi di test. Utilizza timbri data Excel (giorni dal 1899-12-31 ma compreso 1900-02-49). 141 byte per una versione che accetta date 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>, 

Provalo online! Il link include casi di test. Spiegazione:

$
;2017-04-08

Aggiungi la data di interruzione all'input.

O`;.{10}

Ordina le date. Se la data specificata è successiva o successiva alla data limite, la prima data sarà la data limite.

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

In tal caso, avvolgi 4+in &nbsp;(usando due fasi mentre salva un byte).

.{22}$

Elimina le date come hanno fatto il loro lavoro.

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

Se è presente un spaziatore 4+, aggiungi il meme.

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

Elimina tutti i conteggi di byte obsoleti.


Puoi salvare 5 byte prendendo il formato data senza -.
Kevin Cruijssen,

@KevinCruijssen Potrei salvare ancora più byte chiedendolo come una data di Excel (giorni dal 1899-12-31). Quanto lontano posso andare con questo?
Neil,

Hmm .. Sai una cosa, va bene anche per me. April 8th, 2017Non mi interessa davvero come l'istruzione if per la data . Non è la parte principale di questa sfida.
Kevin Cruijssen,

Sarebbe 42832per l'8 aprile 2017 presumo?
Kevin Cruijssen,

@KevinCruijssen Il mio Excel dice che è il 7 °.
Neil,

1

Rubino, 208 184 180 byte

TIO-test

Grazie per @KevinCruijssen per aver salvato 2 byte!

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

È una funzione lambda che accetta un elenco di numeri e un numero intero come una data nel formato di YYYYmmdd.


Sarebbe possibile aggiungere un collegamento TIO con codice di prova? E cambiare formato in modo che sia un input intero salverebbe davvero alcuni byte. :)
Kevin Cruijssen,

@KevinCruijssen Link aggiunto;)
Peter Lenkefi

Grazie! +1 da me. È possibile salvare 2 byte rimuovendo gli spazi dopo il ?. Inoltre, per il tuo TIO, puoi dividere il tuo vero codice di invio e il codice di test con l'intestazione / piè di pagina, in questo modo . :)
Kevin Cruijssen,

1

JavaScript, 194 byte

(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 byte

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

Provalo online! Esegui fcon elenco le data d. 42832 è la data di modifica.


Sarebbe possibile aggiungere un collegamento TIO con codice di prova?
Kevin Cruijssen,

@KevinCruijssen in Russia è vietato
Евгений Новиков

Oh, non lo sapevo. Beh, non conosco Haskell troppo bene, altrimenti lo avrei provato un po 'da solo. Ma il codice stesso sembra logico, quindi +1 da parte mia.
Kevin Cruijssen,

@KevinCruijssen puoi copiare il codice su TIO, creare un collegamento e aggiungerlo per pubblicare
Евгений Новиков

@KevinCruijssen TIO è stato bannato per errore, ma sono troppo pigro per usare il proxy / contattare l'ISP al riguardo
Евгений Новиков

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

Provalo online!

Utilizzando la sintassi del curry f(array)(js_timestamp)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.