перекреслений 44 все ще є регулярним 44; (


18

Вступ

24 березня 2015 року @isaacg переграв свою відповідь Pyth від 44 до 42 байт. Оскільки перекреслений 44 ( 44 ) схожий на звичайний 44, @Optimizer зробив наступний коментар:

викреслений 44 все ще нормальний 44 :(

Після цього, 21 жовтня 2015 року, @ Doorknob пограв у відповідь Рубі з 44 до 40 (а пізніше 38) байт і додав наступну частину до своєї відповіді, посилаючись на цей оригінальний коментар @Optimizer :

перекреслений 44 все ще є регулярним 44; (

Це було початком мему , що відповідає ланцюжкові відповідей , де кожен перекреслений 44 (а в деяких випадках 4 або 444) пов'язаний з попереднім.

Потім 8 квітня 2017 року (я не впевнений, що це була перша відповідь на це, але це найдавніша з них, яку я міг знайти), @JonathanAllan відіграв свою відповідь Python з 44 до 39. Однак він використовував, <s>&nbsp;44&nbsp;</s>щоб 44 виглядає так:  44  , і додав у свою відповідь наступне:

Закреслено & nbsp; 44 & nbsp; вже не 44 :)

І це в основному (початок) кінця мему.

Виклик

Що стосується цього виклику: з огляду на список натуральних чисел та дату, виведіть список, розділений комою та пробілом у списку, де кожне число, крім останнього, розміщене між <s>...</s>тегами.

Крім того, якщо будь-яке перекреслене число знаходиться в послідовності [4, 44, 444, 4444, ...]( A00278 на oeis.org ):

  • Якщо дата закінчується до 8 квітня 2017 року: також виведіть точний (увесь малий регістр та крапку з крапкою із смайлика) текстом crossed out N is still regular N ;(( Nякий є закресленим номером із послідовності) у другому рядку.
  • Якщо дата - 8 квітня 2017 р. Або пізніші: Перекреслене число Nз послідовності повинно бути додано провідний і кінцевий &nbsp;. Не потрібно ніяких додаткових ліній виводу.

Приклади:

Вхід: list = [50, 48, 44, 41], date = January 1st, 2017
вихід:

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

Вхід: list = [500, 475, 444, 301, 248], date = June 2nd, 2018
вихід:

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

Правила виклику:

  • Ви можете припустити, що вхідний список - це відсортований список від найбільшого до найменшого, містить лише додатні цілі числа. Насправді кількість байтів також може збільшитися через виправлення помилок, але заради цього виклику ми робимо вигляд, що він лише знижується.
  • Ви можете припустити, що лише одне число з послідовності [4, 44, 444, 4444, ...]присутнє у вхідному списку (якщо воно є).
  • Формат виводу або друкується в STDOUT, або повертається як рядок (або символьний масив / список / 2D-масив, якщо це бажано). Зрозумілий новий рядок, звичайно, необов’язковий.
  • Формат виводу суворий. <s>...</s>є обов'язковим; &nbsp;...&nbsp;є обов'язковим; ", "(кома та пробіл) є обов’язковим; і \ncrossed out ... is still regular ... ;(точно є обов’язковим (на окремому рядку).
  • Ви можете приймати дату введення як об’єкти дати; часові позначки; вільні цілі числа за рік, місяць та день; єдине число у форматі yyyyMMdd; цілі дні, починаючи з 31 грудня 1899 року (це було б 428328 квітня 2017 року); або будь-який інший розумний формат введення. Заява if-date не є основною частиною цього виклику.
  • Цілий список вхідних даних також може бути списком рядків, якщо ви хочете.
  • Не потрібно додавати <sup>...</sup>теги до crossed out ... is still regular ... ;(рядка, як це зазвичай робиться з фактичними відповідями мема.
  • Ви можете припустити, що список вхідних даних ніколи не буде містити підрахунок байтів за межами [1, 50000]діапазону (тому для вас буде потрібно лише цих п'яти {4, 44, 444, 4444, 44444}).

Загальні правила:

  • Це , тому найкоротша відповідь у байтах виграє.
    Не дозволяйте мовам коду-гольфу відштовхувати вас від публікації відповідей з не кодовими гольф-мовами. Спробуйте придумати якомога коротшу відповідь на "будь-яку" мову програмування.
  • Стандартні правила застосовуються до вашої відповіді, тому вам дозволяється використовувати STDIN / STDOUT, функції / метод із відповідними параметрами та повним програмами типу "повернення". Твій дзвінок.
  • Лазівки за замовчуванням заборонені.
  • Якщо можливо, додайте посилання з тестом для вашого коду.
  • Також настійно рекомендується додавати пояснення до своєї відповіді.

Тестові приклади:

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

У вашому останньому тестовому випадку відсутня дата?
Ніл

1
@Neil Ah ой .. Виправлено. Дата насправді не має значення для цієї, але додана одна незалежно. Дякуємо, що помітили.
Кевін Кройсейсен

1
Я можу підтвердити, що я не помічав, щоб хтось використовував нерозривний простір для цієї конкретної мети, і саме тому я написав текст "більше не".
Джонатан Аллан

(Я також можу підтвердити, що я використовував його до використання з 44 - я вважаю, що це було, коли я вперше їх використав)
Джонатан Аллан

Оскільки ми можемо сприйняти дані як дні з того часу 1889-12-31, чи можемо ми також прийняти дні з того часу 2017-04-08?
TFeld

Відповіді:


6

Желе ,  444  , 94 , 93 байт

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

Повна програма. Вхідні дані - це список рядків та дата, взята як цілі дні з першого січня 1970 року (що становить 17264 квітня восьмого 2017 року)

Спробуйте в Інтернеті!

Як?

Ñȧ$“&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
Ви забули видалити дані з іншого завдання в TIO. ;) Приємна відповідь незалежно. Ви б не хотіли додати пояснення? І rofl при цьому 444-байт. Я не вірю, що ви почали саме з цього, якщо ви не додали коментарів. ; p
Кевін Круїссен

Опс, спасибі. Незабаром додам пояснення.
Джонатан Аллан

1
444 версія без коментарів, цифр, а не стиснених рядків
Джонатан Аллан

... ах 444 версія має помилку - її використовують дні з 1969-12-31, а не з 1970-01-01, як це гольф-версія> _ <(наївне виправлення досі 444)
Джонатан Аллан

4

Python 2 , 208 204  203 201 197 байт

Вводить дані як список рядків та 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)

Спробуйте в Інтернеті!


3

Excel VBA, 217 байт

Функція негайного вікна VBE, яка приймає масив введення з діапазону [A:A], а дата - з діапазону [B1]та виводить на консоль.

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

Безголовний і коментований

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 байти для зміни формату дати на YYYYMMDD

-1 байт для порівняння з 42832(int значення для 07 Apr 2017), Спасибо @Neil

-2 байти для видалення 1,з InStrзаяви, спасибі @ SeaDoggie01


Я думаю, For i=1To~-cзамість цього For i=1To c-1неможливо в Excel VBA? Якщо я пам'ятаю правильно, побітовий варіант не Notзамість цього ~, або вони можливі? (Зверніть увагу , що я нічого НЕ знаю з Excel VBA, так що я , ймовірно , сказати що - то дурне тут, р.)
Кевін Cruijssen

@KevinCruijssen Так, розрядний не є Not , так що ні ~:(
Тейлор Скотт

1
Я думаю, ви можете зберегти більше байтів, змінивши формат дати назад на дату та порівнявши 42832(ціле значення 2017-04-07).
Ніл

Я думаю, ви можете зберегти 2 байти, видаливши "1" з інстру (це необов'язково)
seadoggie01,

2

Сітківка 0,8,2 , 130 байт

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

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

Спробуйте в Інтернеті! Посилання включає тестові випадки. Використовує штампи дати Excel (дні з 1899-12-31, але включаючи 1900-02-49). 141 байт для версії, що приймає дати 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>, 

Спробуйте в Інтернеті! Посилання включає тестові випадки. Пояснення:

$
;2017-04-08

Додайте до вхідної дати дату відключення.

O`;.{10}

Сортуйте дати. Якщо дана дата наступає або після дати відключення, то першою датою буде дата відключення.

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

В цьому випадку, обернути 4+в &nbsp;(використовуючи два етапи , як це економить байти).

.{22}$

Видаліть дати, коли вони виконали свою роботу.

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

Якщо немає пробілу 4+, додайте мем.

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

Викреслити всі застарілі підрахунки байтів.


Ви можете зберегти 5 байт , взявши формат дати без -.
Кевін Круїссен

@KevinCruijssen Я міг би зберегти ще більше байтів, попросивши його як дату Excel (дні з 1899-12-31). Як далеко я можу зайти з цим?
Ніл

Хм .. Ви знаєте що, це теж добре від мене. Як April 8th, 2017зроблено if-заяву на дату , мені дуже не байдуже. Це не головна частина цього виклику.
Кевін Кройсейсен

Це було б 42832на 8 квітня 2017 року?
Kevin Cruijssen

@KevinCruijssen Мій Excel каже, що це 7-е.
Ніл

1

Рубі, 208 184 180 байт

ТІО-тест

Дякуємо @KevinCruijssen за збереження 2 байтів!

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

Це лямбда-функція, яка приймає список чисел та цілого числа як дату у форматі YYYYmmdd.


Чи можна було б додати TIO-посилання з тестовим кодом? І перемикання форматів, так що це ціле введення, дійсно збереже кілька байт. :)
Кевін Круїссен

@KevinCruijssen Додано посилання;)
Пітер Ленкефі

Спасибі! +1 від мене. Ви можете зберегти 2 байти, видаливши пробіли після ?. Також для TIO ви можете розділити фактичний код подання та код тесту з заголовком / колонтитулом, як це . :)
Kevin Cruijssen

1

JavaScript, 194 байти

(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 байт

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

Спробуйте в Інтернеті! Виконати fзі списком lта датою d. 42832 - зміна дати.


Чи можна було б додати TIO-посилання з тестовим кодом?
Кевін Кройсейсен

@KevinCruijssen в Росії заборонено
Евгений Новиков

О, не знав цього. Ну, я не дуже добре знаю Haskell, інакше я би сам це трохи перевірив. Але сам код здається логічним, тому +1 від мене все ж.
Kevin Cruijssen

@KevinCruijssen ви можете скопіювати код у TIO, зробити посилання та додати його до публікації
Евгений Новиков

@KevinCruijssen TIO заборонено помилково, але я лінивий використовувати проксі / зв’язатися з цим провайдером
Євгеній Новиков

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.