dicoret 44 masih teratur 44; (

18

pengantar

Pada 24 Maret 2015 @isaacg golfed jawabannya Pyth nya 44-42 byte. Karena tanda silang 44 ( 44 ) sangat mirip dengan 44 biasa, @Optimizer membuat komentar berikut:

dicoret 44 masih normal 44 :(

Setelah itu, pada tanggal 21 Oktober 2015, @ Doorknob ♦ mengirim jawaban Rubynya dari 44 menjadi 40 (dan kemudian 38) byte dan menambahkan bagian berikut ke jawabannya, dengan tautan ke komentar asli @Optimizer :

dicoret 44 masih teratur 44; (

Ini adalah awal dari meme rantai jawaban , di mana setiap tanda dicoret 44 (dan dalam beberapa kesempatan 4 atau 444) dihubungkan kembali ke yang sebelumnya.

Kemudian pada tanggal 8 April 2017 (saya tidak yakin apakah ini adalah jawaban pertama untuk melakukannya, tetapi ini adalah jawaban yang paling awal yang bisa saya temukan), @Jonathan Allan mengayunkan jawaban Python-nya dari 44 menjadi 39. Namun ia menggunakan <s>&nbsp;44&nbsp;</s>sehingga 44 akan terlihat seperti ini:  44  , dan menambahkan yang berikut ke jawabannya:

Dicoret & nbsp; 44 & nbsp; tidak lagi 44 :)

Dan itu pada dasarnya adalah (awal dari) akhir meme.

Tantangan

Adapun tantangan ini: Diberikan daftar bilangan bulat positif dan tanggal, hasilkan daftar koma dan spasi dipisahkan di mana setiap angka kecuali untuk yang terakhir ditempatkan di antara <s>...</s>tag.

Selain itu, jika ada nomor yang dicoret di urutan [4, 44, 444, 4444, ...]( A00278 pada oeis.org ):

  • Jika tanggal sebelum 8 April 2017: Keluarkan juga teks yang tepat (semua huruf kecil dan dengan titik koma) crossed out N is still regular N ;(( Nmenjadi nomor yang dicoret dari urutan) pada baris kedua.
  • Jika tanggalnya adalah 8 April 2017 atau lebih baru: Nomor yang dicoret Ndari urutan harus memiliki garis depan dan belakang yang &nbsp;ditambahkan. Tidak perlu untuk jalur output tambahan.

Contoh:

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

Aturan tantangan:

  • Anda dapat menganggap daftar input adalah daftar yang diurutkan dari yang terbesar hingga yang terkecil, hanya berisi bilangan bulat positif. Pada kenyataannya, byte-count juga bisa naik karena perbaikan bug, tetapi untuk tantangan ini kami berpura-pura bahwa itu hanya turun.
  • Anda dapat mengasumsikan hanya satu nomor dari urutan [4, 44, 444, 4444, ...]yang ada dalam daftar input (jika ada).
  • Format output dicetak ke STDOUT, atau dikembalikan sebagai string (atau array karakter / daftar / 2D-array jika itu lebih disukai). Newline tambahan tentu saja opsional.
  • Format outputnya ketat. <s>...</s>wajib; &nbsp;...&nbsp;wajib; ", "(koma dan spasi) wajib; dan \ncrossed out ... is still regular ... ;(sebenarnya wajib (pada jalur yang terpisah).
  • Anda dapat mengambil tanggal input sebagai objek tanggal; cap waktu; bilangan bulat longgar untuk tahun, bulan, dan hari; satu nomor dalam format yyyyMMdd; hari bilangan bulat sejak 31 Desember 1899 (yang akan berlaku 42832untuk 8 April 2017); atau format input wajar lainnya. Tanggal jika-pernyataan bukanlah bagian utama dari tantangan ini.
  • Input integer-list juga bisa menjadi daftar string jika Anda mau.
  • Anda tidak perlu menambahkan <sup>...</sup>tag ke crossed out ... is still regular ... ;(baris seperti yang biasanya dilakukan dengan jawaban meme yang sebenarnya.
  • Anda dapat berasumsi bahwa input-list tidak akan pernah mengandung byte-counts di luar [1, 50000]rentang (jadi Anda hanya perlu {4, 44, 444, 4444, 44444}khawatirkan kelima ini ).

Aturan umum:

  • Ini adalah , jadi jawaban tersingkat dalam byte menang.
    Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'.
  • Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program lengkap. Panggilanmu.
  • Celah default tidak diperbolehkan.
  • Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
  • Juga, menambahkan penjelasan untuk jawaban Anda sangat dianjurkan.

Kasus uji:

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
sumber
Kasing uji terakhir Anda tidak ada tanggalnya?
Neil
1
@Neil Ah oops .. Diperbaiki. Tanggal tidak terlalu penting untuk yang itu, tetapi menambahkan tanggal berapa pun. Terima kasih telah memperhatikan.
Kevin Cruijssen
1
Saya dapat mengkonfirmasikan bahwa saya tidak melihat ada orang yang menggunakan ruang tanpa putus untuk tujuan khusus ini dan itulah sebabnya saya menulis teks "tidak lagi".
Jonathan Allan
(Saya juga dapat mengonfirmasi bahwa saya telah menggunakannya sebelum menggunakannya dengan 44 - Saya percaya itulah saat saya pertama kali menggunakannya)
Jonathan Allan
Karena kita dapat mengambil input sebagai hari sejak itu 1889-12-31, bisakah kita juga mengambil hari sejak itu 2017-04-08?
TFeld

Jawaban:

6

Jelly ,  444  , 94 , 93 byte

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

Program lengkap. Input adalah daftar string dan tanggal yang diambil sebagai bilangan bulat sejak Januari 1970 pertama (menjadikan 17264 April kedelapan 2017)

Cobalah online!

Bagaimana?

Ñȧ$“&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
sumber
1
Anda lupa menghapus input dari tantangan lain di TIO Anda. ;) Jawaban yang bagus bagaimanapun. Maukah Anda menambahkan penjelasan? Dan rofl pada saat itu menghitung 444-byte. Saya tidak percaya sedikit pun bahwa Anda memulai dengan itu, kecuali jika Anda menambahkan komentar. ; p
Kevin Cruijssen
Opps, terima kasih. Saya akan menambahkan penjelasan segera.
Jonathan Allan
1
444 versi tidak ada komentar, angka daripada string terkompresi
Jonathan Allan
... ah versi 444 memiliki bug - menggunakan hari sejak 1969-12-31 tidak sejak 1970-01-01 seperti versi golf> _ <(perbaikan naif masih 444)
Jonathan Allan
4

Python 2 , 208 204  203 201 197 byte

Mengambil input sebagai daftar string, dan 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)

Cobalah online!

TFeld
sumber
3

Excel VBA, 217 byte

Fungsi jendela langsung VBE yang mengambil array input dari jangkauan [A:A], dan tanggal dari rentang [B1]dan keluaran ke konsol.

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

Tidak Disatukan dan Dikomentari

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 untuk mengubah format tanggal menjadi YYYYMMDD

-1 byte untuk membandingkan 42832(nilai int 07 Apr 2017), Terima kasih @Neil

-2 byte untuk menghapus 1,dari InStrpernyataan, Terima kasih @ SeaDoggie01

Taylor Scott
sumber
Saya kira For i=1To~-cbukannya For i=1To c-1tidak mungkin di Excel VBA? Jika saya ingat dengan benar, Bitwise bukankah Notbukan ~, atau keduanya mungkin? (Perhatikan bahwa saya tidak tahu apa-apa tentang Excel VBA, jadi saya mungkin mengatakan sesuatu yang bodoh di sini
;;
@KevinCruijssen Ya, bitwise tidak Not , jadi tidak ~:(
Taylor Scott
1
Saya pikir Anda dapat menyimpan lebih banyak byte dengan mengubah format tanggal kembali ke tanggal dan membandingkan 42832(nilai integer 2017-04-07).
Neil
Saya pikir Anda dapat menyimpan 2 byte dengan menghapus "1," dari instr (ini opsional)
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>, 

Cobalah online! Tautan termasuk kasus uji. Menggunakan perangko tanggal Excel (hari sejak 1899-12-31 tetapi termasuk 1900-02-49). 141 byte untuk versi yang menggunakan tanggal 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>, 

Cobalah online! Tautan termasuk kasus uji. Penjelasan:

$
;2017-04-08

Tambahkan tanggal batas ke input.

O`;.{10}

Sortir tanggalnya. Jika tanggal yang diberikan adalah pada atau setelah tanggal cut-off maka tanggal pertama akan menjadi tanggal cut-off.

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

Dalam hal ini, bungkus 4+dalam &nbsp;(menggunakan dua tahap karena menghemat satu byte).

.{22}$

Hapus tanggal saat mereka melakukan pekerjaan mereka.

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

Jika ada spasi 4+, lalu tambahkan meme.

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

Hapus semua jumlah byte yang usang.

Neil
sumber
Anda dapat menyimpan 5 byte dengan mengambil format tanggal tanpa -.
Kevin Cruijssen
@KevinCruijssen Saya bisa menyimpan lebih banyak byte dengan memintanya sebagai tanggal Excel (hari sejak 1899-12-31). Seberapa jauh saya bisa melakukannya?
Neil
Hmm .. Anda tahu, itu juga tidak masalah bagi saya. Bagaimana pernyataan if untuk tanggal April 8th, 2017itu dilakukan, saya tidak begitu peduli. Ini bukan bagian utama dari tantangan ini.
Kevin Cruijssen
Itu 42832untuk 8 April 2017 saya anggap?
Kevin Cruijssen
@KevinCruijssen My Excel mengatakan itu yang ke-7.
Neil
1

Ruby, 208 184 180 byte

Tes TIO

Terima kasih atas @KevinCruijssen karena telah menghemat 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}

Ini adalah fungsi lambda yang mengambil daftar angka dan bilangan bulat sebagai tanggal dalam format YYYYmmdd.

Peter Lenkefi
sumber
Apakah mungkin untuk menambahkan tautan TIO dengan kode uji? Dan beralih format sehingga input integer memang akan menghemat beberapa byte. :)
Kevin Cruijssen
@KevinCruijssen Link yang ditambahkan;)
Peter Lenkefi
Terima kasih! +1 dari saya. Anda dapat menyimpan 2 byte dengan menghapus spasi setelah ?. Juga, untuk TIO Anda, Anda dapat membagi kode pengiriman dan kode pengujian Anda yang sebenarnya dengan header / footer, seperti ini . :)
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;<`)

Darrylyeo
sumber
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

Cobalah online! Jalankan fdengan daftar ldan tanggal d. 42832 adalah tanggal perubahan.

Евгений Новиков
sumber
Apakah mungkin untuk menambahkan tautan TIO dengan kode uji?
Kevin Cruijssen
@KevinCruijssen di Rusia dilarang
Евгений Новиков
Oh, tidak tahu itu. Yah, aku tidak terlalu mengenal Haskell, kalau tidak aku akan mengujinya sendiri sedikit. Tetapi kode itu sendiri tampaknya logis, jadi +1 dari saya tetap.
Kevin Cruijssen
@KevinCruijssen Anda dapat menyalin kode ke TIO, membuat tautan, dan menambahkannya ke posting
Евгений Новиков
@KevinCruijssen TIO dilarang karena kesalahan, tapi saya terlalu malas untuk menggunakan proxy / hubungi ISP tentang hal itu
Евгений Новиков
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} ;(`)

Cobalah online!

Menggunakan sintaks kari f(array)(js_timestamp)

Shieru Asakoto
sumber