W niektórych krajach istnieją zalecenia lub przepisy dotyczące tworzenia korytarzy ratunkowych na ulicach, które mają wiele pasów ruchu w jednym kierunku. (W dalszej części rozważamy tylko pasy ruchu w kierunku, w którym podróżujemy). Są to zasady obowiązujące w Niemczech:
- Jeśli jest tylko jeden pas, wszyscy powinni jechać w prawo, tak aby pojazdy ratunkowe mogły przejechać po lewej stronie.
- Jeśli są dwa lub więcej pasów, samochody na najbardziej lewym pasie powinny jechać w lewo, a wszyscy inni powinni jechać w prawo.
Wyzwanie
Biorąc pod uwagę liczbę N>0
zwykłych pasów, określ układ pasów po utworzeniu korytarza awaryjnego przy użyciu ciągu znaków N+1
ASCII. Możesz użyć dowolnych dwóch znaków od kodu ASCII 33
, do 126
jednego, oznaczającego korytarz awaryjny, a drugiego oznaczającego samochody. Dopuszczalne są spacje końcowe lub wiodące, łamanie linii itp.
Przykłady
Tutaj korzystamy E
z korytarza awaryjnego i C
samochodów.
N Output
1 EC
2 CEC
3 CECC
4 CECCC
5 CECCCC
6 CECCCCC
etc
C
iE
, ale istnieje wiele fajnych podejść do tego wyzwania! Używanie operacji matematycznych doC=1
/E=2
lubC=2
/E=3
jak robi najlepsza odpowiedź; usingC=0
/E=1
with10^(n-1)
; używającC=0
/E=.
przez format dziesiętny0.0
; korzystanieC=1
/E=-
przez wykorzystanie-1
; itp. itd. Tak wiele unikalnych możliwości wyzwania, które na pierwszy rzut oka wyglądały tak trafnie. Szkoda, że mogę dać +1 tylko raz. ;)Odpowiedzi:
Python 2,
2926 bajtówPrzykład:
źródło
10**n*97/30-1/n*9
oszczędza kolejny bajt, dającf(5) == 323333
itp.Python 3,
3533 bajtówEdycja: upuszczanie,
f=
aby zapisać 2 bajty, dzięki przypomnieniu @dylnan .Wypróbuj online!
Aby to zwizualizować:
Wynik:
Spróbuj 🚔 online!
Python 3, 40 bajtów
Proste rozwiązanie:
Wypróbuj online!
źródło
lambda N:
C (gcc) , 32 bajty
Wypróbuj online!
Zastosowania
0
i.
postacie:źródło
Japt,
54 bajtówZastosowania
q
do samochodów i+
do korytarza.Spróbuj
Podziękowania dla Olivera, który grał o 4 bajty w tym samym czasie, co ja.
Wyjaśnienie
Krótkie rozwiązanie, ale trudne wyjaśnienie!
Najpierw proste:
ç
metoda zastosowana do liczby całkowitej powtarza swój argument łańcuchowy tyle razy.i
Metoda trwa 2 argumenty (s
in
) i wkładkis
na indeksn
łańcucha to zaaplikowana.Rozszerzenie 2 używanych skrótów Unicode daje nam
çq i+1
, co po transpilacji do JS staje sięU.ç("q").i("+",1)
, gdzieU
jest wejście. Powtarzamyq
U
czasy, a następnie wstawiamy wartość+
indeksu 1.Ostateczna Sztuką jest, że dzięki opakowaniu indeksu Japt jest, kiedy
U=1
,i
będzie wstawić+
w indeksie0
, niezależnie od wartości karmić gon
.źródło
ç0 iQ1
za 6 bajtów, ale byłoby lepiej, gdybyś go użył.ç¬iÅ
za 4 bajty;) Nigdy tak bardzo nie wykorzystywałem Japt.Ä
zamiastÅ
:)R, 50 bajtów
-11 dzięki Giuseppe!
Wyjścia 1 dla korytarza awaryjnego i 2 dla normalnych pasów ruchu
Moja próba, 61 bajtów
Nic szczególnego do zobaczenia, ale zdobądźmy R na tablicy wyników =)
Stosowanie:
źródło
Haskell ,
383432 bajtyWypróbuj online!
źródło
Python 2,
302928 bajtówDrukuj
3
zamiastC
i.
zamiastE
.Wyjaśnienie:
Wypróbuj online.
Python 2,
3332312928 bajtówDrukuje
1
zamiastC
i-
zamiastE
.-2 bajty dzięki @ovs .
-1 bajt dzięki @xnor .
Wyjaśnienie:
Wypróbuj online.
źródło
10/3
zawodzi o 17n=16
że wystarczy , jeśli twoja liczba całkowita jest 64-bitowa, lub w tym przypadku,n=16
gdy wartość dziesiętna może „ t domyślnie zawiera więcej niż 15 cyfr dziesiętnych. (To samo dotyczy wielu innych odpowiedzi używających języków o dowolnych rozmiarach liczb, takich jak Java, C # .NET itp.)Pyth,
1098 bajtówUżywa
0
do oznaczenia korytarza awaryjnego i"
.Wypróbuj tutaj
Wyjaśnienie
źródło
pieprzenie mózgu , 42 bajty
Wypróbuj online!
Pobiera dane wejściowe jako kod char, a dane wyjściowe jako
V
normalne linie iW
jako oczyszczony pas. (Aby łatwo przetestować, zalecam zastąpienie go,
liczbą+
s)Jak to działa:
źródło
Oktawa (MATLAB *),
31 30 28 2722 bajtówWypróbuj online!
Program działa w następujący sposób:
Stosowana tutaj sztuczka polega na XNORowaniu tablicy nasion
0:n
za pomocą sprawdzania, czy dane wejściowe są większe niż 1. W wyniku tego dlan>1
nasion zostaje przekonwertowany na logiczną tablicę,[0 1 (0 ...)]
podczas gdy dlan==1
nasion zostaje odwrócony[1 0]
, osiągając niezbędną inwersję.Reszta to po prostu przekształcanie nasion w sznurek z wystarczającą liczbą dołączonych samochodów.
(*) Łącze TIO zawiera w komentarzach w stopce alternatywne rozwiązanie dla tej samej liczby bajtów, które działa zarówno w MATLAB-ie, jak i Octave, ale powoduje sekwencję „0” i „1” zamiast „E” i „ DO'. Dla kompletności alternatywą jest:
Zaoszczędzono 1 bajt, używając
n==1~=0:1
raczej niż0:1~=(n<2)
.~=
ma pierwszeństwo przed<
, stąd oryginalne wsporniki, ale wydaje się, że~=
i==
są obsługiwane w kolejności pojawiania się więc przez porównanie z 1 możemy zapisać bajt.Zaoszczędzono 2 bajty, zmieniając miejsce wykonywania negacji
2:n
. To oszczędza parę nawiasów. Musimy również zmienić na,~=
aby==
uwzględnić fakt, że zostanie to później zanegowane.Zapisano 1 bajt
<
ponownie. Okazuje się, że<
ma taki sam priorytet jak w==
końcu. Umieszczenie<
obliczeń przed==
prawidłową kolejnością wykonania.Zaoszczędzono 5 bajtów, nie tworząc dwóch oddzielnych tablic. Zamiast tego opierając się na fakcie, że porównanie XNOR i tak przekształci pojedynczy zakres w logikę.
źródło
Galaretka ,
119 bajtówWypróbuj online!
Pełny program
Używa
0
zamiastC
.źródło
C (gcc), 39 bajtów
Wypróbuj online!
Pożyczył i dostosował sztuczkę printf z odpowiedzi ErikF .
źródło
Python 3, 32 bajty
Wypróbuj online!
Używa wyrażenia f-ciąg do formatu albo
'E'
lub'CE'
wyściełane na prawo z'C'
tak ma szerokośćn+1
.źródło
Brain-Flak ,
10066 bajtówWypróbuj online!
Wykorzystuje się
"
jako pas awaryjny i!
normalny.źródło
C #, 34 bajty
Wypróbuj online!
źródło
05AB1E , 7 bajtów
Wypróbuj online!
0 oznacza C, a 1 oznacza E.
Wyjaśnienie
źródło
$<×TìsiR
tak myślałem.1I
można grać w golfa$
.APL (Dyalog Unicode) ,
21 1716 bajtówWypróbuj online!
Dzięki Erikowi za zapisanie 4 bajtów i Adámowi za kolejny bajt.
W jaki sposób?
źródło
(⍵>1)
nie musi być w nawiasach. I można zapisać 4 bajty z ukrytej funkcji:(⊢×1<⊢)⌽'E',⍴∘'C'
.(-≠∘1)⌽'E',⍴∘'C'
lub=∘1⌽¯1⌽'E',⍴∘'C'
.'CE'[1(≠=∘⍳+)⎕]
Haskell ,
353332 bajty2 bajty zapisane dzięki Angs, 1 bajt zapisany dzięki Lynn
Wypróbuj online!
Haskell ,
323029 bajtówJest indeksowany na zero, więc nie jest zgodny z wyzwaniem
Wypróbuj online!
Haskell , 30 bajtów
To nie działa, ponieważ dane wyjściowe muszą być ciągiem
Wypróbuj online!
W tym przypadku używamy liczb zamiast ciągów znaków
2
w korytarzu ratunkowym1
w samochodach. Możemy dodać1
do końca, mnożąc przez 10 i dodając1
. Jest to tańsze, ponieważ nie musimy płacić za wszystkie bajty konkatenacji i literałów łańcuchowych.Byłoby tańsze w użyciu
0
zamiast,1
ale potrzebujemy zer wiodących, które ostatecznie zostają usunięte.źródło
((blah)!!)
można(!!)$blah
zapisać bajt w pierwszych dwóch odpowiedziach.Python 3 ,
3029 bajtówWypróbuj online!
OK, jest już wiele odpowiedzi na Python, ale myślę, że jest to pierwszy sub-30 bajtów wśród tych, którzy nadal używają znaków „E” i „C” zamiast liczb.
źródło
JavaScript (Node.js) , 28 bajtów
Wypróbuj online!
źródło
APL (Dyalog Unicode) , 16 bajtów
Wypróbuj online!
źródło
Stax , 7 bajtów
Uruchom i debuguj
Używa to znaków „0” i „1”. Działa to, ponieważ po obróceniu tablicy o rozmiarze 1 nie zmienia się.
Rozpakowane, niepolowane i skomentowane, wygląda to tak.
Uruchom ten
źródło
JavaScript (Node.js) , 19 bajtów
Wypróbuj online!
źródło
Perl 5
-p
,272019 bajtówWypróbuj online!
Zapisano bajt, używając
1
do samochodów iE
do korytarza awaryjnego.źródło
Galaretka , 6 bajtów
Wyświetla pasy samochodu jako 0 , a pas awaryjny jako 1 .
Wypróbuj online!
Jak to działa
źródło
Biała spacja ,
141104103 bajtówLitery
S
(spacja),T
(tab) iN
(nowa linia) dodane tylko jako wyróżnienia.[..._some_action]
dodano tylko jako wyjaśnienie.Drukuje
1
zamiastC
i-
zamiastE
.-1 bajt dzięki @JoKing , sugerując użycie
1
i-1
zamiast0
i1
.Objaśnienie w pseudo-kodzie:
Przykładowe przebiegi:
Wejście:
1
Wypróbuj online (tylko z surowymi spacjami, tabulatorami i nowymi wierszami).
Zatrzymuje się z błędem: nie zdefiniowano wyjścia.
Wejście:
4
Wypróbuj online (tylko z surowymi spacjami, tabulatorami i nowymi wierszami).
Zatrzymuje się z błędem: nie zdefiniowano wyjścia.
źródło
-
nadużywając drukowania-1
?push_0
;print_as_integer
;push_1
;print_as_integer
dopush_-1
;print_as_integer
, ale w zamian dwapush_0
;print_as_integer
są zastąpione przezpush_45
;print_as_character
, gdziepush_0
=SSSN
ipush_45
=SSSTSTTSTN
. Ipush_45
trzeba też dodać dodatkowy, ponieważ dla danych wejściowychn=1
drukuję teraz duplikat,0
który już miałem na stosie, więc nie musiałem0
ponownie naciskać, ponieważ0
był już na stosie.-
jako wymiana1
i1
wymiana0
. Wówczas unikniesz wciskania przycisku 45 i, o ile mogę to stwierdzić, zaoszczędzisz na wydrukowaniu numeru w pierwszej połowie warunkowego, ale nieznacznie zwiększysz koszty po naciśnięciu 1 zamiast 0. Sprawdź moją Gol> <> odpowiedź mam na myśli przykład wyjściaprint_-1
zamiast drukowania0
i1
, aleprint_-1
konieczne jest dodatkowe poza pętlą. EDYCJA: Był w stanie zmniejszyć go do 103 bajtów , zmieniającsubtract_1
;if_0_jump_to_ONE
;push_-1
;print_integer
dosubtract_2
;if_negative_jump_to_ONE
;print_integer
, ponieważ -1 jest już wtedy na stosie. Dzięki za -1 bajt. :)AutoHotkey 32 bajty
Zamienia literę „C” na „EC”, chyba że C> 1, następnie wysyła „CEC” i wychodzi z aplikacji.
C => EC
CC => CEC następnie wychodzi z programu. Wszelkie dalsze Cs zostaną wprowadzone po wyjściu z programu.
źródło
APL + WIN,
2016 bajtów4 bajty zapisane dzięki Adámowi
Monity o liczbę całkowitą n:
1 dla korytarza awaryjnego o dla samochodów.
źródło
(-2≠⍴n)⌽n←1⎕/⍕10
J , 11 bajtów
Wypróbuj online!
Na podstawie komentarza ngn .
🚘 i 🚔:
1&<,~/@A.'🚔',~'🚘'$~,&4
źródło
MathGolf ,
76 bajtówWypróbuj online.
Dane wyjściowe
1
dlaE
i0
dlaC
.Wyjaśnienie:
źródło