Wyzwanie:
Wkład:
Dwa parametry całkowite a
i b
(gdzie a<b
i różnica wynosi co najmniej 2)
Wydajność:
Wpisz lub zwróć ten tekst, gdzie a
i b
są wypełnione:
(a,b) = ]a,b[ = {a<x<b} = {a<x&&x<b} = a+1..b-1
[a,b) = [a,b[ = {a<=x<b} = {a<=x&&x<b} = a..b-1
(a,b] = ]a,b] = {a<x<=b} = {a<x&&x<=b} = a+1..b
[a,b] = [a,b] = {a<=x<=b} = {a<=x&&x<=b} = a..b
Zasady konkursu:
- I / O jest elastyczny. Może być drukowany do STDOUT, zwracany jako ciąg / tablica znaków itp. Może być wprowadzany jako dwie liczby całkowite, dziesiętne, ciągi (nie jestem pewien, dlaczego, skoro musisz obliczyć
a+1
ib-1
, ale bądź moim gościem ...) itp. - Dozwolona jest dowolna liczba wiodących i / lub końcowych nowych wierszy, a także dowolna ilość końcowych i / lub wiodących spacji dla każdej linii.
- Spacje przy znakach równości (w tym te, które służą do wyrównania ich w tej samej kolumnie) są obowiązkowe, spacje między innymi znakami są niedozwolone.
a+1
ib-1
są zastępowane prawidłowymi wartościami po tych obliczeniach.- Nie możesz używać
≤
zamiast<=
. - Nie możesz używać
&
zamiast&&
. - Dozwolone jest wypisywanie liczb za pomocą
.0
(o ile jest to spójne i nie więcej niż jedno zero dziesiętne). - Możesz założyć, że
a
jest co najmniej 2 niższy niżb
((a,b)
aby być poprawnym). - Linie powinny być wyprowadzane w pokazanej kolejności.
Przykład:
Wejście: a=-5, b=10
Wyjście:
(-5,10) = ]-5,10[ = {-5<x<10} = {-5<x&&x<10} = -4..9
[-5,10) = [-5,10[ = {-5<=x<10} = {-5<=x&&x<10} = -5..9
(-5,10] = ]-5,10] = {-5<x<=10} = {-5<x&&x<=10} = -4..10
[-5,10] = [-5,10] = {-5<=x<=10} = {-5<=x&&x<=10} = -5..10
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i zwracanymi typami, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- W razie potrzeby dodaj również wyjaśnienie.
PS: Dla tych, którzy nie widać tego wyzwania w piaskownicy , kiedy był jeszcze Kołmogorowa-złożoność wyzwaniem a
i b
zakodowane, zmieniłem go na wyzwanie wejściowego, aby zapobiec nudny zakodowane i zakodowanych odpowiedzi jak najczęściej widzimy z Wyzwania KC.
a=5, b=6
wciąż produkcji(5,6) = ... = 6...5
?a
ib
zawsze będzie co najmniej 2 osobno. Zmienię wyzwanie.Odpowiedzi:
Stax , 74 bajty
Uruchom i debuguj
To intensywnie wykorzystuje szablony ciągów stax. Rozpakowane, niepolowane i skomentowane, wygląda to tak.
Uruchom ten
źródło
JavaScript (ES6),
184182181180 bajtówPobiera dane wejściowe w składni curry
(a)(b)
. Zwraca tablicę 4 łańcuchów.Wypróbuj online!
W jaki sposób?
Dla każdego wiersza k z 1 ≤ k ≤ 4 zaczynamy od następującego szablonu:
i zamień każdą cyfrę dziesiętną n w pozycji i zgodnie z następującą tabelą:
źródło
Python 2 ,
225203195 bajtówWypróbuj online!
źródło
Python 2 , 187 bajtów
Wypróbuj online!
źródło
Java (JDK 10) , 251 bajtów
Wypróbuj online!
Kredyty
źródło
.replace
.Perl 5 , 181 bajtów
Myślałem, że to zadziałałoby znacznie krócej ...
Wypróbuj online!
Wyjaśnienie
Pierwotnie używano
printf
ciąg formatu, ale po prostu miałs
id
był krótszy w połączeniu zs///
.Pierwszy ciąg format jest wbudowana
$_
i quadruplicated, wszystkies
s są zastępowane odpowiednimi wspornik<
,<=
lub pomieszczenia, w zależności od wskaźnika zastępczego. Miałem nadzieję zaoszczędzić trochę więcej bajtów dzięki duplikacji ostatnich 5 znaków każdego bloku, ale skończyło się to na zapisaniu tylko 2 bajtów. Powstały ciąg jest podzielony na elementy spacji<=
lub pojedyncze znaki.Na koniec wszystkie
d
s są zamieniane na żądaną liczbę, która jest dostosowywana na podstawie indeksu bieżącego zastąpienia za pomocą klawisza skrótu.źródło
JavaScript,
190189 bajtówWypróbuj online
źródło
m4 , 194
Wydaje się, że to zadanie dla makroprocesora. Nie jestem pewien, czy m4 spełnia nasze standardy języka programowania. Ma zdolność zapętlania i ewaluację arytmetyczną, więc zakładam, że jest blisko znaku.
To moje pierwsze nietrywialne spojrzenie na m4, więc podejrzewam, że straciłem więcej okazji do gry w golfa.
Dane wejściowe są przekazywane za pomocą
-D
definicji makr w wierszu polecenia. Nie jestem pewien, czy należy dodać do nich wynik, o ile mogę stwierdzić, że jest to jedyny sposób na znaczące przekazanie parametrów:Wypróbuj online .
Dzięki @Dennis za tak szybkie dodanie m4 do TIO !
źródło
-D
argumenty, jest całkowicie w porządku. W moim opisie wyzwania stwierdziłem, że operacje we / wy są całkowicie elastyczne, więc niezależnie od tego, czy bierzesz dane wejściowe jako STDIN, parametry funkcji, argumenty wiersza poleceń programu, flagi kompilatora, czytanie pliku lub dowolną inną metodę wprowadzania, o której myślisz, jest całkowicie zależy od Ciebie.Python 2 ,
277199193189 bajtówWypróbuj online!
źródło
2*('{%d<%s<%s%d} %s= '%(a,e*x+'%sx',e[y:],b,i/2*' '))%('','x&&')
->2*('{%d<%s%%sx<%s%d} %s= '%(a,e*x,e[y:],b,i/2*' '))%('','x&&')
ratuje dwa :)Excel, 399 bajtów
Nic szczególnie interesującego tutaj.
źródło
C (gcc) , 224
237bajtówWypróbuj online!
Przeniesienie „<[=]” do ciągu formatu pozwoliło mi całkowicie usunąć tablicę. Również przejście
printf()
dofor
pętli uratowało średnik.Oryginalna odpowiedź
Wypróbuj online!
Nie ma tu nic szczególnie godnego uwagi: użyłem zwykłych sztuczek do golenia wielkości funkcji (podnoszenie
int
aut do nagłówka funkcji, używanie stylu K&R, indeksowanie do stałych ciągów.) Przechowywanie {"<=", "<"} w tablica okazała się bardziej wydajna pod względem wielkości niż wstawianie specyfikatora formatu dla tego wyzwania, ponieważ była używana więcej niż jeden raz.źródło
JavaScript,
273258232 bajtyDzięki Kevin Cruijssen za uratowanie mnie 15 bajtów!
Wypróbuj online
Dzięki za TFeld za przekazanie mi tego pomysłu, oszczędzając około 60 bajtów od mojej oryginalnej odpowiedzi.
Nie golfowany:
JavaScript (oryginalna odpowiedź), 340 bajtów
źródło
{a<=x&&\nx<=b}
nie powinna tam być, a brakuje ci pierwszej(a,b) =
. Co do golfa: zamiast alarmu możesz po prostu zwrócić wynik.(m)=>
może byćm=>
.(e,f)=>
może byće=>f=>
. I można go używaćg
bezpośrednio zamiast tworzenialet g=
:m=>{return{a:e,b:f,c:e+1,d:f-1}[m]}
. Wypróbuj online 258 bajtów . I prawdopodobnie więcej można grać w golfa, nie jestem zbyt wykwalifikowany w JS ..(m)->
dom->
;(e,f)->
doe->f->
ivar g=new int[]{...}return g[m]
doreturn new int[]{...}[m]
. ;) Ponadto jestem aktywny na tym SO od ponad dwóch lat, więc widziałem, że odpowiedzi JS również używają tego rodzaju rzeczy.Siatkówka , 216 bajtów
Wypróbuj online! Wyjaśnienie:
Zbuduj główną część wyniku.
Jeśli zmienna bierze udział w luźnej nierówności, wówczas wartość jest włączająca, więc możemy usunąć symbol zastępczy.
Konwertuj wartość na unary i dodaj 2.
Usuń symbol zastępczy dla ścisłej niższej nierówności lub negatywnej ścisłej górnej nierówności. Wciąż dodano 2, ale 1 zostanie odjęta później, dając pożądany wynik.
Odejmij 2 od pozostałych niezerowych ścisłych nierówności, przywracając pierwotną wartość, od której 1 zostanie odjęta później.
Zmień ścisłą górną nierówność
0
na-1
.Odejmij 1 od pozostałych surowych nierówności i przelicz na dziesiętne.
Napraw kolejną skrzynkę na brzeg.
źródło
Python 3, 180 bajtów:
wyjaśnienie
Zasadniczo buduje ciąg f, który jest oceniany na podstawie listy.
%
Interpolacja ciągów w starym stylu służy do opóźniania oceny wyrażeń aż do oceny ciągu f.Pierwsza część łańcucha, „f”, stanie się przedrostkiem dla łańcucha F.
Druga część ciągu buduje ciąg formatu dla pierwszych dwóch wyrażeń przedziałowych.
%r
służy do oszczędzania przed koniecznością umieszczania cudzysłowów w formacie, tzn."{%r[j]}"
jest taki sam jak"{'%s'[j]}"
. Podczas oceny ciągu f wybierany jest właściwy nawias.Trzecia część ciągu buduje kolejne dwa wyrażenia przedziałowe.
Ostatnia część formatuje część „a..b” ciągu f.
Złożony f-string wygląda następująco:
f"{'(['[j]}{a},{b}{')]'[i]} = .... = {a+j}..{b-i}"
Podczas oceny ciągu f wszystkie wyrażenia w nawiasach
{}
są zastępowane ich wartością. Tak więc{a}
zostaje zastąpiony przez wartośća
i{'(['[j]}
zostaje zastąpiony przez,(
jeśli j wynosi 0 lub[
jeśli j wynosi 1.źródło
SOGL V0.12 , 110 bajtów
Wypróbuj tutaj!
źródło
Python 3, 248 bajtów
Wypróbuj online!
źródło