To wyzwanie inspirowane matematyką jest faktem. Programowanie nie jest .
Notacja matematyczna dla silni lub faktu jest wykrzyknikiem !
. Wykrzyknik jest również częstym symbolem not
w wielu językach programowania.
Wyzwanie:
Weź ciąg zawierający cyfry i znaki: + !
jako dane wejściowe i wyjściowe wykonaj następujące czynności:
Wszystko przed wykrzyknikiem powinno być ocenione jako wyrażenie matematyczne, tak też 2+2
byłoby 4
.
Wszystko po jednym wykrzykniku powinno być dołączone jako akcesoria do wszystkiego, co jest przed nim, więc: 2+2!5
powinno dać 45
, ponieważ 2+2=4
i 5
jest akcesorium. 2+2!5+5
powinien dać 410
.
Ponieważ !
oznacza to również not
, że nic, co po fakcie nie jest akcesorium, nie powinno być dołączane. Tak więc 2+2!!5
powinienem dać 4
, ponieważ 5
nie jest akcesorium. Teraz not(not(true))==true
, więc 2+2!!!5
powinien dać 45
. 2+2!!5!5+5
powinien dać:, 410
ponieważ 2+2=4
następnie następuje silnia i !5!5+5
. Pierwszy 5
nie jest faktem, ale 5+5
jest po kolejnym wykrzykniku i dlatego jest faktem po raz kolejny.
Wyjaśnienia:
- Wykrzykniki nie będą przylegać do znaku
+
po obu stronach. +
Liczby nie będą prowadzić (to5
nie jest+5
).- Opcjonalnie możesz dołączyć wiodące zero, jeśli jest to wynik wyrażenia przed pierwszym
!
. Zarówno4
i04
są przyjmowane wyjście do wejścia:0+0!4
Streszczenie: oceń każdą sumę (traktując !
jako separatory). Następnie odrzuć wszystkie liczby, które pojawiają się po parzystej liczbie !
(licząc od początku ciągu). Następnie usuń wszystko !
.
Przypadki testowe:
!
<- Empty string
5
5
12!
12
!87
87
!!5
<- Empty string
5+5!2+2
104
5+5!!2+2
10
1!2!3!4!5!6!7!8!9
12468
10+10!!2+2!!3+3!4+4
208
2!!3!5
25
2!!3!5!7
25
10!!!!!!!5
105
To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach (w każdym języku)! Wyjaśnienia są bardzo zalecane!
25
(patrz dodany przypadek testowy). Co ważniejsze2!!3!5!7
, nadal by dawał25
, ponieważ jest parzysta liczba po!
lewej stronie7
(więc nie liczysz tylko biegu tuż przed liczbą, ale całą!
pozostałą część).Row
?Odpowiedzi:
Retina ,
353129 bajtówZaoszczędź 4 bajty, czerpiąc inspirację z produkcji ETH .
Dzięki Leo za uratowanie kolejnych 2 bajtów.
Wypróbuj online!
źródło
JavaScript (ES6),
5856 bajtówZaoszczędzono dwa bajty dzięki Martinowi Enderowi .
Może być jakoś ulepszony ...
źródło
replace
.1+1!5
. Myślę,eval
że trochę zapomniałeś przed!
.Galaretka , 16 bajtów
Wypróbuj online!
Wyjaśnienie
Kluczową obserwacją jest to, że możemy wykonać kroki „poza kolejnością”; zamiast szacować sumy, a następnie ignorować te, które nam się nie podobają, możemy zignorować sumy w nieprawidłowych pozycjach, a następnie ocenić resztę.
Ocenianie suma jak
"10+10"
ocenią go do numeru, na przykład20
, a następnie de-ocenić go na ciąg,"20"
. Powtarzanie tego procesu nie ma dodatkowego efektu (jest idempotentny). Dlatego skutecznie oceniamy każdy element łańcucha, z wyjątkiem łańcucha zerowego, który pozostaje nieoceniony, ponieważ ma zerową długość.źródło
µ
gdzieś wstawić dodatkową wartość (iµ
nie działa wewnątrz pętli, co oznacza, że potrzebujesz czegoś jeszcze bardziej gadatliwy). Udało mi się sprawić, że to działa,ṣ”!µḢW;m2$ȧVṾ$$€
ale nie jest wcale krótsze (i ma charakterystyczny stos znaków dolara, który zdarza się, gdyGalaretka , 18 bajtów
Wypróbuj online!
W jaki sposób?
źródło
0+0
w środku danych wejściowych (w miejscu, gdzie nie jest odrzucane); generuje ciąg zerowy, mimo że powinien dać cyfrę 0.CJam , 20 bajtów
Wypróbuj online! (Pakiet testowy oddzielony od linii).
źródło
Rubinowy ,
5856 + 1 =5957 bajtówUżywa
-p
flagi. -2 bajty od Tutlemana .Wypróbuj online! (Dodano dodatkowy wiersz kodu, aby zabrał wszystkie wiersze wejściowe i wydrukował dane wyjściowe w różnych wierszach.)
źródło
eval$1
, nie?Partia,
192184 bajtyPosługiwanie się pustymi łańcuchami jest niewygodne.
źródło
Pip , 18 bajtów
Wydaje mi się, że jest to najkrótszy możliwy czas ... chociaż powiedziałem to również około trzech iteracji temu.
Pobiera dane wejściowe jako argument wiersza polecenia. Wypróbuj online!
Wyjaśnienie
źródło
R, 95 bajtów
Prawdopodobnie jest miejsce na poprawę, ale w tej chwili jest to najlepsze, co mogę wymyślić.
źródło