çarpı işareti 44 hala düzenli 44; (


18

Giriş

24 Mart 2015'te @isaacg Pyth cevabını 44 ila 42 bayt arasında golf oynadı . Üzerinde çarpı işareti bulunan 44 ( 44 ) normal bir 44'e çok benzediğinden, @Optimizer şu yorumu yaptı:

Çarpılmış 44 hala normal 44 :(

Bundan sonra, 21 Ekim 2015 tarihinde, Doorknob ♦ @ golfed onun Yakut cevabı 44 ila 40 (ve daha sonra 38) bayt ve bu orijinal yorumun bir bağlantı ile, onun cevap şunu ekledim için @Optimizer :

çarpı işareti 44 hala düzenli 44; (

Bu, her birinin 44'ü (ve bazı durumlarda 4 veya 444'ü) bir öncekiyle bağladığı bir cevap zinciri memesinin başlangıcıydı .

Sonra 8 Nisan, 2017 (bu bunu yapan ilk cevap olsaydı ben emin değilim, ama bulabildiğim en erken biri) üzerinde, @JonathanAllan golfed onun Python cevabı O ancak kullanılan 39'a kadar 44 ila <s>&nbsp;44&nbsp;</s>44 olur böylece şuna benzer:  44  ve cevabına aşağıdakileri ekledi:

Kesildi & nbsp; 44 & nbsp; artık 44 değil :)

Ve bu aslında memenin (başlangıcı) sonu idi.

Meydan okuma

Bu soruna gelince: Pozitif tamsayıların ve tarihlerin bir listesi verildiğinde, sonuncusu hariç her sayının <s>...</s>etiketler arasına yerleştirildiği virgül ve boşluk ayrılmış listesinin çıktısını alın .

Ayrıca, çarpı işaretli sayılardan herhangi biri sırayla [4, 44, 444, 4444, ...]( oeis.org'da A00278 ):

  • Tarih 8 Nisan 2017'den önce ise: Tam (tüm küçük harf ve noktalı virgül ifadesi ile) metni crossed out N is still regular N ;(( Ndiziden çarpı işareti olan sayı) ikinci bir satıra da gönderin.
  • Tarih 8 Nisan 2017 veya üstü ise: Dizideki çarpı işaretli sayıya Nöndeki ve sondaki satır &nbsp;eklenmelidir. Ek çıkış hatlarına gerek yoktur.

Örnekler:

Girdi: list = [50, 48, 44, 41], date = January 1st, 2017
Çıktı:

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

Girdi: list = [500, 475, 444, 301, 248], date = June 2nd, 2018
Çıktı:

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

Zorluk kuralları:

  • Girdi listesinin, yalnızca pozitif tamsayılar içeren en büyükten en küçüğe doğru sıralanmış bir liste olduğunu varsayabilirsiniz. Gerçekte, hata düzeltmeleri nedeniyle bir bayt sayımı da artabilir, ancak bu zorluk uğruna sadece azaldığını iddia ederiz.
  • [4, 44, 444, 4444, ...]Giriş listesinde (varsa) diziden yalnızca tek bir sayı olduğunu varsayabilirsiniz .
  • Çıktı biçimi STDOUT'a yazdırılır veya bir dize (veya tercih edilirse karakter dizisi / list / 2D dizisi) olarak döndürülür. Sondaki satırsonu elbette isteğe bağlıdır.
  • Çıktı formatı katıdır. <s>...</s>zorunludur; &nbsp;...&nbsp;zorunludur; ", "(virgül ve boşluk) zorunludur; ve \ncrossed out ... is still regular ... ;(tam olarak zorunludur (ayrı bir satırda).
  • Giriş tarihini tarih nesneleri olarak alabilirsiniz; zaman damgalarını; yıl, ay ve gün için gevşek tamsayılar; biçimdeki tek bir sayı yyyyMMdd; 31 Aralık 1899'dan bu yana tam gün ( 428328 Nisan 2017 için olacak); veya başka bir makul girdi biçimi. Tarih if-ifadesi bu zorluğun önemli bir parçası değildir.
  • Giriş tamsayı listesi de isterseniz dizelerin bir listesi olabilir.
  • <sup>...</sup>Etiketleri crossed out ... is still regular ... ;(hatta gerçek meme cevaplarıyla yapıldığı gibi satır eklemek zorunda değilsiniz .
  • Girdi listesinin hiçbir zaman [1, 50000]aralık dışında bayt sayımı içermeyeceğini varsayabilirsiniz (böylece {4, 44, 444, 4444, 44444}endişelenmeniz gereken sadece beş tane vardır ).

Genel kurallar:

  • Bu , bayt en kısa cevap kazanır.
    Kod golf dillerinin, kod yazmayan dillerle yanıt göndermenizi engellemesine izin vermeyin. Herhangi bir programlama dili için mümkün olduğunca kısa bir cevap bulmaya çalışın.
  • Cevabınız için standart kurallar geçerlidir , bu nedenle STDIN / STDOUT, fonksiyon / yöntemi uygun parametreler ve dönüş tipi, tam programlar ile kullanmanıza izin verilir. Çağrınız.
  • Varsayılan Loopholes yasaktır.
  • Mümkünse, lütfen kodunuz için test içeren bir bağlantı ekleyin.
  • Ayrıca, cevabınız için bir açıklama eklemeniz şiddetle tavsiye edilir.

Test senaryoları:

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

Son test vakanızın tarihi eksik mi?
Neil

1
@Neil Ah ayy .. Sabit. Tarih bunun için önemli değil, ne olursa olsun ekledi. Fark ettiğiniz için teşekkürler.
Kevin Cruijssen

1
Kimsenin bu özel amaç için kırılmayan alanı kullandığını fark etmediğimi doğrulayabilirim ve bu yüzden "artık" metnini yazdım.
Jonathan Allan

( 44 ile kullanmadan önce de kullandığımı doğrulayabilirim - Sanırım bunları ilk kullandığım
Jonathan Allan

O günden beri girdi alabildiğimiz için 1889-12-31, o zamandan beri de günler sürebilir miyiz 2017-04-08?
TFeld

Yanıtlar:


6

Jöle ,  444  , 94 , 93 bayt

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

Tam bir program. Girdiler, dizelerin bir listesi ve ilk 1970'in Ocak ayından bu yana tam gün olarak alınan bir tarihtir (sekizinci 2017'yi 17264 Nisan yapıyor)

Çevrimiçi deneyin!

Nasıl?

Ñȧ$“&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
Girişi TIO'nuzdaki başka bir zorluktan kaldırmayı unuttunuz. ;) Ne olursa olsun güzel cevap. Bir açıklama eklemeyi düşünür müsünüz? Ve bu 444 bayt sayımda rofl. Yorum eklemedikçe, bununla başladığınıza bir parça inanmıyorum. ; p
Kevin Cruijssen

Opps, teşekkürler. Kısaca bir açıklama ekleyeceğim.
Jonathan Allan

1
444 sürümü yorum yapılmamış, sıkıştırılmış dizeler yerine sayılar
Jonathan Allan

... ah 444 sürümünde bir hata var - 1969-12-31'den beri golf gününün yaptığı gibi günleri kullanmıyor> _ <(naif düzeltme hala 444)
Jonathan Allan

4

Python 2 , 208 204  203 201 197 bayt

Girdi dizeleri bir listesi ve bir int alır 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)

Çevrimiçi deneyin!


3

Excel VBA, 217 bayt

Giriş dizisini aralıktan [A:A], tarih aralığı [B1]ve çıkışlardan konsola götüren VBE anında pencere işlevi .

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 ve Yorumladı

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

Tarih biçimini şu şekilde değiştirmek için -2 bayt YYYYMMDD

İle karşılaştırmak için -1 bayt 42832(int değeri 07 Apr 2017), Thanks @Neil

-2 çıkarmak için bayt 1,gelen InStr, deyimi sayesinde SeaDoggie01 @


Excel VBA'da For i=1To~-cbunun yerine For i=1To c-1mümkün değil sanırım ? Ben Bitwise değil Doğru hatırlamak Notyerine ~, ya da her ikisi mümkündür? (Excel VBA'nın yanında hiçbir şey bilmediğimi unutmayın, bu yüzden muhtemelen burada aptalca bir şey söylüyorum.; P)
Kevin Cruijssen

@KevinCruijssen Evet, bitsel değil Not , bu yüzden hayır ~:(
Taylor Scott

1
Tarih biçimini tarihe değiştirerek ve 42832(2017-04-07 tamsayı değeri) ile karşılaştırarak daha fazla bayt kaydedebileceğinizi düşünüyorum .
Neil

Ben "1," instr (isteğe bağlı) kaldırarak 2 bayt kaydedebilirsiniz düşünüyorum
seadoggie01

2

Retina 0.8.2 , 130 bayt

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

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

Çevrimiçi deneyin! Bağlantı, test senaryolarını içerir. Excel tarih damgalarını kullanır (1899-12-31'den beri ancak 1900-02-49 dahil olmak üzere günler). ISO tarihlerini alan bir sürüm için 141 bayt:

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

Çevrimiçi deneyin! Bağlantı, test senaryolarını içerir. Açıklama:

$
;2017-04-08

Kesme tarihini girişe ekleyin.

O`;.{10}

Tarihleri ​​sıralayın. Belirtilen tarih kesme tarihinde veya sonrasıysa, ilk tarih kesme tarihidir.

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

Bu durumda, wrap 4+içinde &nbsp;(bir byte kaydeder olarak iki aşamadan kullanarak).

.{22}$

İşlerini yaparken tarihleri ​​silin.

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

Boşluk yoksa 4+ , ekleyin.

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

Tüm eski bayt sayımlarını çıkarın.


Sen edebilirsiniz 5 bayt kaydetmek olmadan tarih-biçimini alarak -.
Kevin Cruijssen

@KevinCruijssen Excel tarihi olarak (1899-12-31'den bu yana geçen günler) bunu sorarak daha fazla bayt tasarruf edebilirim. Bununla ne kadar ileri gidebilirim?
Neil

Hmm .. Biliyor musun, bu benim için de iyi. Tarih için if ifadesinin nasıl April 8th, 2017yapıldığını pek umursamıyorum. Bu zorluğun büyük kısmı değil.
Kevin Cruijssen

Sanırım bu 428328 Nisan 2017 için olurdu ?
Kevin Cruijssen

@KevinCruijssen Excelim bunun 7'inci olduğunu söylüyor.
Neil

1

Yakut, 208 184 180 bayt

TIO-testi

@KevinCruijssen için 2 bayt kaydettiğiniz için teşekkürler!

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

Tarih biçiminde bir sayı listesi ve bir tam sayı alan bir lambda fonksiyonudur YYYYmmdd.


Test kodlu bir TIO bağlantısı eklemek mümkün müdür ? Ve biçimleri değiştirmek için bir tamsayı girdisi gerçekten de bazı bayt tasarruf. :)
Kevin Cruijssen

@KevinCruijssen Ek bağlantı;)
Peter Lenkefi

Teşekkürler! Benden +1. Sonrasındaki boşlukları kaldırarak 2 bayt kaydedebilirsiniz ?. Ayrıca, TIO'nuz için gerçek gönderim kodunuzu ve test kodunu, üstbilgi / altbilgi ile bölebilirsiniz, örneğin . :)
Kevin Cruijssen

1

JavaScript, 194 bayt

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

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

Çevrimiçi deneyin! fListe lve tarih ile çalıştırın d. 42832 değişen tarih.


Test kodlu bir TIO bağlantısı eklemek mümkün müdür ?
Kevin Cruijssen

@KevinCruijssen Rusya'da yasaklandı
Евгений

Oh, bilmiyordum. Haskell'i çok iyi bilmiyorum, aksi takdirde biraz kendim test ederdim. Ancak kodun kendisi mantıklı görünüyor, yine de benden +1.
Kevin Cruijssen

@KevinCruijssen kodu TIO'ya kopyalayabilir, bağlantı kurabilir ve postaya ekleyebilirsiniz
Евгений Новиков

@KevinCruijssen TIO yanlışlıkla yasaklandı, ancak proxy / ISS ile ilgili iletişim kurmak için çok tembelim
Евгений Новиков

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.