Wprowadzenie
Każdego roku Dyalog Ltd. organizuje konkurs studencki. Wyzwanie polega na napisaniu dobrego kodu APL. To jest agnostyczna edycja kodu golfa ósmego tegorocznego problemu.
Mam wyraźną zgodę na opublikowanie tutaj tego wyzwania od pierwotnego autora konkursu. Możesz to zweryfikować, klikając podany link i kontaktując się z autorem.
Problem
Biorąc pod uwagę listę logiczną *, „wyłącz” wszystkie Prawdy po pierwszej Prawdzie.
Żadnych prawd? Nie ma problemu! Po prostu zwróć listę bez zmian.
Przykłady
[falsy,truthy,falsy,truthy,falsy,falsy,truthy]
→ [falsy,truthy,falsy,falsy,falsy,falsy,falsy]
[]
→ []
[falsy,falsy,falsy,falsy]
→ [falsy,falsy,falsy,falsy]
* Wszystkie twoje prawdy muszą być identyczne, a wszystkie twoje kłamstwa muszą być identyczne. Dotyczy to produkcji.
Odpowiedzi:
Python 2 , 35 bajtów
Wypróbuj online! Dane wejściowe i wyjściowe są wierszami True / False.
Na podstawie rozwiązania Dennisa . Redefiniuje zmienną
True
sięFalse
poTrue
wejście jest spotykane. W ten sposób wszelkie dalsze dane wejścioweTrue
zostaną ocenioneFalse
i wydrukowane jako takie.Redefinicja jest
True&=b<1
, tznTrue = True & (b<1)
. Gdy dane wejścioweb
toTrue
, to(b<1)
jest False (odTrue==1
), więcTrue
staje sięFalse
.źródło
True, False = False, True
.APL , 2 bajty
Zwraca się do funkcji „skanuj za pomocą mniej niż”. Wypróbuj online!
Wyjaśnienie
W APL operator
\
(skanowanie) redukuje każdy niepusty prefiks tablicy z prawej strony za pomocą dostarczonej funkcji. Na przykład, biorąc pod uwagę tablicę0 1 0
, oblicza0
(prefiks długości 1),0<1
(prefiks długości 2) i0<(1<0)
(prefiks długości 2) i umieszcza wyniki w nowej tablicy; nawiasy są przypisane do prawej. Zmniejszenie o<
od prawej powoduje1
dokładnie, kiedy ostatni element tablicy jest,1
a reszta jest0
, więc przedrostek odpowiadający skrajnemu lewemu1
jest zredukowany do,1
a pozostałe do0
.źródło
Aceto ,
1917 bajtów niekonkurującychNowa wersja (17 bajtów):
Ta nowa wersja pobiera postacie pojedynczo i najlepiej ją wykonać z
-F
opcją. Działa podobnie, ale nie identycznie jak poprzednie rozwiązanie:Stara odpowiedź (19 bajtów):
(Nie konkuruje, ponieważ musiałem naprawić dwa błędy w tłumaczu)
Jest to pierwsza odpowiedź Aceto, która podkreśla, co może zrobić stosunkowo dobrze, powiedziałbym. „Listy” to strumienie wejściowe, z jednym wejściem na linię, „1” dla wartości true i „0” dla wartości false, z pustym ciągiem oznaczającym koniec listy.
Programy Aceto działają na krzywej Hilberta, zaczynając od lewego dolnego rogu, a kończąc na prawym dolnym rogu. Po pierwsze,
r
wprowadzamy ciąg,d
powielamy i negujemy (!
), zamieniając puste ciągi w True, a wszystko inne w False. Następnie jest warunkowe lustro poziome (|
): Jeśli górny element na stosie jest prawdą, odbij lustro w poziomie. Dzieje się tak, gdy łańcuch jest pusty. Jeśli wykonujemy kopię lustrzaną, lądujemy naX
, co zabija tłumacza.W przeciwnym razie konwertujemy pozostałą kopię na stosie na
i
nteger i wykonujemy kolejne warunkowe lustro poziome: Tym razem, ponieważ 1 jest prawdą, a 0 jest fałszem, odbijamy, jeśli widzimy (pierwszą) prawdziwą wartość. Jeśli nie wykonamy lustra (widzieliśmy 0),p
przeszukujemy zawartość stosu (ponieważ stos jest pusty, zero) i przeskakujemy doO
sztywności krzywej, gdzie zaczęliśmy, rozpoczynając od nowa cały proces.W przeciwnym razie, gdy zobaczymy 1, odbijamy lustro i lądujemy na nim
u
, co odwraca kierunek, w którym poruszamy się po krzywej Hilberta.1p
wypisuje 1, a teraz kontynuujemy to samo,O
co byśmy zrobili, gdybyśmy widzieli 0, ale ponieważ jesteśmy w „trybie odwróconym”, nasze pochodzenie znajduje się w prawym dolnym rogu , więc skaczemy tam.Teraz mamy
r
kolejny ciąg i negujemy go. Jeśli łańcuch był pusty, a zatem element najwyższego stosu jest zgodny z prawdą, nie ujdzie następnej komendy ( ), co`
spowoduje zamknięcie.X
W przeciwnym wypadku (jeśli łańcuch nie był pusty), my nie uciec
X
i zignorować. W takim przypadku przechodzimy do left (<
),p
rint 0 (ponieważ stos jest pusty) i przeskakujemy z powrotem doO
rigina.źródło
Java8,
2419 bajtówMam nadzieję, że to jest legalne; Mam wrażenie, że wejście / wyjście nie musi być oceniane w języku jako prawda / fałsz. Trwa długo jako dane wejściowe i daje jedno jako dane wyjściowe, przy czym te są prawdziwe, a zera są fałszywe w reprezentacji binarnej. Na przykład, binarny 00101 ma wartość 5 i zwraca binarny 00100, który ma wartość 4.
Pięć bajtów dzięki @puhlen
źródło
Long::highestOneBit
co daje identyczny wynik przy krótszej składnijava.lang
Pakiet jest domyślnie importowany. Ze specyfikacji języka „Jednostka kompilująca automatycznie ma dostęp do wszystkich typów zadeklarowanych w swoim pakiecie, a także automatycznie importuje wszystkie typy publiczne zadeklarowane w predefiniowanym pakiecie java.lang.”Siatkówka , 6 bajtów
Wypróbuj online!
Dane wejściowe to lista
0
s (dla False) i1
s (dla True).Dopasowuje wszystkie
1
i zamienia każde z wyjątkiem pierwszego (1>
) na0
.źródło
V , 7 bajtów
Wypróbuj online!
Moje pierwsze V zgłoszenie! \ o /
Jak to działa
źródło
r0
pomocą,<C-x>
aby zmniejszyć te i zapisać bajt.Haskell , 25 bajtów
Anonimowa funkcja przejmująca i zwracająca listę
Bool
s.Użyj jako
(foldr(\x l->x:map(x<)l)[])[False,True,False,False]
.Wypróbuj online!
Jak to działa
x
jest elementem, który należy dołączyć do listy podrzędnejl
.False
porównuje mniej niżTrue
, więcmap(x<)l
okaże żadnychTrue
swl
naFalse
raziex
jestTrue
.źródło
Galaretka , 4 bajty
Wypróbuj online!
Oto nieco inny algorytm niż większość innych rozwiązań w golfa (chociaż po opublikowaniu go zauważyłem, że rozwiązanie R również używa tego algorytmu) i wiąże się z bieżącym rekordzistą Jelly.
Wyjaśnienie
Dopóki wszystkie elementy po lewej stronie elementu mają wartość 0, łączna suma do elementu będzie równa samemu elementowi. Po prawej stronie pierwszego 1 oba są różne (ponieważ teraz dodajemy niezerową sumę elementów po lewej). W ten sposób
+\=
daje nam listę zawierającą 1 (tj. Prawda) do pierwszego elementu prawdy włącznie. Wreszcie, logiczne I z oryginalnej listy dadzą nam 1 dla tylko pierwszego elementu truthy.źródło
JavaScript (ES6),
3326 bajtówI / O ma tablice 0 i 1.
źródło
05AB1E , 6 bajtów
Kod:
Wyjaśnienie:
Wykorzystuje kodowanie 05AB1E . Wypróbuj online!
źródło
1k>sƶ-_
jest inny, gorzej jednak.lift
Pomysł może mieć potencjalny chociaż.Symulator maszyny Turinga , 39 bajtów
Wypróbuj online!
źródło
pieprzenie mózgu , 55 bajtów
Wypróbuj online!
źródło
Galaretka , 4 bajty
Port mojej odpowiedzi 05AB1E.
Objaśnienie (argument α ):
Wypróbuj online!
źródło
R , 24 bajty
Wypróbuj online!
Przykład:
Do
FALSE TRUE TRUE FALSE
cumsum(T<-scan(,F))==T
zwrotów wejściowychTRUE TRUE FALSE FALSE
. F w skanie zapewnia logiczne wprowadzanie danych.FALSE TRUE TRUE FALSE
iTRUE TRUE FALSE FALSE
jestFALSE TRUE FALSE FALSE
. Singiel&
dokonuje porównania elementarnego.źródło
Oktawa, 23 bajty
Wypróbuj online!
Pierwsza różnica skumulowanego maksimum listy.
źródło
J , 3 bajty
Definiuje czasownik monadyczny. To jest trywialny port mojej odpowiedzi APL . Wypróbuj online!
źródło
Python, 58 bajtów
Jeśli
x[i]
jest fałszem, wynikiem jest fałsz; w przeciwnym razie określa, czy element jest pierwszym wystąpieniem w tablicy samego siebie.źródło
PHP, 37 bajtów
źródło
Perl 5, 20 bajtów
Prawda jest
1
i falsey jest''
(pusty ciąg).Wyjaśnienie:
map
pętle nad elementami listy@_
, argumenty przekazywane do podprogramu, ustawiając każdy element lokalnie na $ _ i zwracając tablicę zwracanych wartości, które oblicza z każdego elementu.$_&&!$x++
wypisuje,$_
jeśli$_
jest falsey i!$x++
jeśli to jest prawdą. (Zauważ, że && powoduje zwarcie, więc!$x++
nie jest wykonywane, dopóki nie zostanie osiągnięta pierwsza prawdziwa wartość).$x++
zwraca0
(co jest falsey) przy pierwszym uruchomieniu, a następnie zwiększa za każdym razem (i pozostaje prawdą). W!
neguje$x++
, a więc zwraca truthy po raz pierwszy jego wykrycia i falsey później.źródło
sub{...}
).Pyth - 9 bajtów
Wypróbuj tutaj
źródło
m&!~|Z
.Python 2 ,
4536 bajtówDane wejściowe i wyjściowe mają wartość logiczną ( prawda lub fałsz ) na linię.
Wypróbuj online!
źródło
C #, 77 bajtów
Kompiluje do
Func<bool[], bool[]>
. Naprawdę nic sprytnego, tylko proste rozwiązanie.źródło
sed ,
1619 bajtów1518 bajtów kod źródłowy + 1 bajt dla flagi -r (lub -E flaga dla BSD sed).Wypróbuj online!
Edycja: Dzięki Riley za wskazanie błędu.
źródło
Galaretka , 4 bajty
Wypróbuj online!
W jaki sposób?
Robi to, co zostało zadane w dosłownym sensie:
źródło
c (z wbudowanymi gcc), 40
Nieco inne podejście:
Można to uznać za nieważne - w takim przypadku z radością oznaczę to jako niekonkurujące.
„Tablice” wejściowe i wyjściowe są 32-bitowymi liczbami całkowitymi bez znaku - ogranicza to rozmiar listy wejściowej do dokładnie 32 - może to być dyskwalifikator. Jeśli sygnał wejściowy ma długość mniejszą niż 32 bity, może być wypełniony zerowymi bitami na końcu.
Wypróbuj online .
źródło
Partia,
8573 bajtówPobiera dane wejściowe jako argumenty wiersza poleceń. Na przykład:
1.bat 0 1 0 1 0 0 1
Poprzednia wersja
źródło
Brain-Flak , 230 bajtów
Wyjaśnię to wkrótce, ale moja mama ugotowała mi smażone ziemniakiWypróbuj online!
Szczególne podziękowania
Specjalne podziękowania dla Wheat Wizard i Riley za pomoc w tonowaniu kodu!
źródło
Python 3,
696664605453 bajtówPrzyjmuje tablicę
false
s itrue
s. Jest to zrozumienie listyfalse
s, z wyjątkiem sytuacji, gdy bieżąca iteracja ma wartośćtrue
i jest pierwszatrue
na wejściu.Wydaje się to trochę długie (i to moja pierwsza lambda), więc jeśli możesz znaleźć sposób na grę w golfa, byłoby to bardzo mile widziane!
źródło
0 for
0for
.Brain-Flak ,
146144 bajtówWypróbuj online!
źródło
Perl 5 , 12 bajtów
Kod 10 bajtów + 2 dla
-pl
.Wypróbuj online!
źródło