Powielam drugą część pierwszego dnia Adwentu Kodeksu, za zgodą twórcy.
Święty Mikołaj próbuje dostarczyć prezenty w dużym budynku mieszkalnym, ale nie może znaleźć właściwej podłogi - wskazówki, które otrzymał, są nieco mylące. Zaczyna na parterze (piętro 0), a następnie postępuje zgodnie z instrukcjami jedna postać na raz.
Nawias otwierający (
oznacza, że powinien wejść na jedno piętro, i nawias zamykający )
, oznacza, że powinien zejść o jedno piętro.
Budynek mieszkalny jest bardzo wysoki, a piwnica bardzo głęboka; nigdy nie znajdzie górnej ani dolnej podłogi.
Biorąc pod uwagę zestaw instrukcji, znajdź pozycję pierwszego znaku, który powoduje, że wchodzi on do piwnicy (piętro -1).
Jako przykłady:
wejście )
powoduje, że wchodzi on do piwnicy na pozycji postaci 1.
wejście ()())
powoduje, że wchodzi on do piwnicy na pozycji postaci 5.
Podano tutaj długi wkład , który powinien dać rozwiązanie 1797.
To jest golf golfowy, więc wygrywa najkrótsze rozwiązanie!
Odpowiedzi:
Galaretka,
87 bajtówDzięki @ Sp3000 za grę w golfa przy 1 bajcie!
Wypróbuj online!
Jak to działa
źródło
Python 2, 44 bajty
To sprytne rozwiązanie zostało znalezione przez hallvabo, xsot, mitchs i whatisgolf w sprawie tego problemu na Anarchy Golf . Jeśli ktoś z was zechce go zamiast tego opublikować, usunę to.
Sztuką jest pozwolić parserowi Pythona na wykonanie pracy. Funkcja
input()
próbuje oszacować ciąg wejściowy i zgłasza błąd przy pierwszym niedopasowanym paren. Ten błąd, gdy zostanie złapany, ma formęktóry zawiera numer znaku, w którym wystąpił błąd.
źródło
Python,
7977 bajtówPrawdopodobnie jest na to lepszy sposób, ale nie mam pomysłów. To także mój pierwszy post na codegolf.
Dzięki @Erwan. do gry w golfa poza 2 bajtami.
źródło
[0:g]
przez[:g]
-2*ord(z)+81
o2*(z<')')-1
Python 3, 59
Zaoszczędzono 3 bajty dzięki grc.
Naprawdę nie lubię ręcznego indeksowania ciągów w Pythonie. Czuje się tak źle.
źródło
C, 55 bajtów
Wypróbuj tutaj .
Edycja: Nie jestem pewien, dlaczego zostawiłem tam nieużywaną zmienną ...
źródło
CJam, 10 bajtów
lub
lub (kredyty dla Dennisa)
Sprawdź to tutaj.
Wyjaśnienie
Jak już zauważył A Simmons,
()
jest to szczęśliwy wybór dla CJam, ponieważ są to odpowiednio operatory zmniejszania / zwiększania. Oznacza to, że jeśli zaczynamy od zera, szukamy kroku, w którym Święty Mikołaj osiągnie piętro 1.źródło
Labirynt , 18 bajtów
Wypróbuj online! Ta odpowiedź była wynikiem współpracy z @ MartinBüttner.
Wyjaśnienie
Zwykły podkład do labiryntu (mówię „zwykły”, ale tak naprawdę przepisuję to za każdym razem):
n*10 + <digit>
. Pozwala to na łatwe budowanie dużych liczb. Aby rozpocząć nowy numer, użyj_
, który wypycha zero.Ten kod jest nieco dziwny, ponieważ do celów golfowych główna pętla łączy dwa zadania w jedno. W pierwszej połowie pierwszego przejścia oto, co się dzieje:
Teraz, gdy stos został zainicjowany z -1 na górze, można rozpocząć przetwarzanie. Oto, co robi główna pętla.
Ostatni duplikat dodaje element do stosu dla każdej wykonywanej iteracji. Jest to ważne, ponieważ kiedy osiągamy zero i idziemy do przodu w NOP, robimy:
źródło
Oracle SQL 11.2,
160159 bajtówNie grał w golfa
źródło
Siatkówka ,
2221Wypróbuj online lub wypróbuj duży przypadek testowy. (Adres URL jest duży dla dużego przypadku testowego, daj mi znać, jeśli się zepsuje, wydaje się OK w chrome).
1 bajt zapisany dzięki Martinowi!
Dopasowujemy pierwszy zestaw zrównoważonych nawiasów i wyodrębniamy go, a następnie zliczamy liczbę przypadków, gdy pusty ciąg dopasuje ten wynik. Nie jestem pewien, czy jest to najładniejszy sposób na to w Retinie, szczególnie jeśli tryb PCRE sprawia, że jest on krótszy, ale korzystanie z
$#_
zastępowania wydawało się dłuższe z powodu jednego błędu i problemu z więcej niż jednym dopasowaniem.Algorytm ten powoduje dziwne zachowanie w przypadku nieprawidłowych danych wejściowych, zasadniczo zakłada, że jeśli Mikołaj nie dotrze do piwnicy, w tajemniczy sposób teleportuje się tam po innych ruchach.
źródło
Grep + AWK, 51 bajtów
grep
Komenda umieszcza na każdy znak nowej linii.źródło
Pyth, 13 bajtów
Wyjaśnienie
Wypróbuj tutaj
Stary algorytm, 15 bajtów
Wyjaśnienie:
Wypróbuj tutaj
Lub jeśli wolno używać znaków innych niż
(
i)
, 9 bajtów (przenoszenie przetwarzania wstępnego na dane wejściowe)Wyjaśnienie
Wypróbuj tutaj
źródło
JavaScript (ES6), 58 bajtów
Działa poprzez rekurencyjne usuwanie pary pasujących
()
s, aż pierwszy znak to)
. Ostrzeżenie: nie próbuj tego na ciągach, które nie mają wystarczającej liczby)
s. Przykład:W tym momencie widzi, że w sumie usunięto 12 znaków, więc odpowiedź to 13.
źródło
MATL ,
1211 bajtów1 bajt zapisany przy użyciu pomysłu Dennisa obliczenia -1 podniesionego do ciągu wejściowego
Wypróbuj online!
źródło
CJam,
1210 bajtówWypróbuj tutaj.
Dwa bajty zapisane dzięki Martinowi.
Wyjaśnienie:
źródło
JavaScript, 117 bajtów
Ignoruje inne postacie. Używa
prompt
ialert
.źródło
Perl, 34 + 1 = 35 bajtów
Dzięki Dennisowi za wskazówki.
Uruchom z
-p
flagą. Działa w Perlu 5.10, ale późniejsze wersje potrzebują tutaj miejsca:++ while
Starsza, nie golfowa wersja:
źródło
Python, 44 bajty
Piętro
i
zaczyna się od,1
więc kończymy nai
wartości falsey0
. Jeśli nie zostanie zakończone, rekurencyjnie dodaj jeden, aby uzyskać wynik po usunięciu pierwszego znaku i zaktualizowaniu numeru podłogi na podstawie tego znaku.źródło
JavaScript, 57 bajtów
Całkiem proste, po prostu iteruje po danych wejściowych, incs if '(' decs if ')'. Zwraca pierwszy negatywny.
źródło
Ruby, 47 bajtów
Funkcja anonimowa.
źródło
C, 73 bajty
Oczekuje danych wejściowych na STDIN; żadne znaki inne niż
(
i)
mogą pojawiać się na wejściu (przynajmniej dopóki nie osiągniemy odpowiedzi). Dane wejściowe muszą być ASCII.Emituje odpowiedź na STDOUT.
Używa 1-bitowej różnicy między ASCII dla
(
i)
.Ładnie sformatowana wersja:
źródło
f=c=0
do inicjalizacji pętli,for(f=c=0;f!=...
aby zapisać bajt?PowerShell,
756562 bajtówWykorzystuje podobną techniką jak na Parenthifiable liczb binarnych pętli wszystkich znaków wejściowych, utrzymując prowadzenie
$c
ounter stanowi+1
dla siebie(
i-1
dla siebie)
, a następnie sprawdzić czy mamy uderzyć ujemny (czyli jesteśmy w piwnicy).Edytuj - zapisano 10 bajtów przez iterację rzeczywistych znaków zamiast ich indeksów
Edytuj 2 - zapisano 3 dodatkowe bajty przez zamianę kontroli równości dla modulo, więc rzutowanie jest niejawne
źródło
Mathematica,
6255 bajtówWszystkie długie nazwy funkcji! Działa podobnie do odpowiedzi Simmonsa na CJam.
źródło
Befunge 25 bajtów
Wyjścia jednostkowe. To rozpocznie cię na pierwszym piętrze i potrwa do 0.
źródło
Rakieta (102)
Nie golfił
źródło
APL, 18 znaków
Po angielsku:
¯1*')'=⍵
: -1 gdzie input = ")", 1 w przeciwnym razie;+\
: suma bieżąca;1⍳⍨¯1=
: znajdź indeks pierwszego -1.źródło
Lua,
928987 bajtówPrzyjmuje argument wiersza poleceń.
Edycja: Zapisano 3 bajty
Edycja: Zapisano 2 bajty i poprawiono błąd, który mógł się zdarzyć w przypadkach na krawędziach, teraz wyświetla dane wyjściowe za pomocą kodu wyjścia
Nie golfił
źródło
k / kona ,
2321 bajtów2 bajty zapisane przez usunięcie niepotrzebnych nawiasów.
Stosowanie:
źródło
Perl, 40 + 1 = 41 bajtów
Wymaga
-p
flagi:Zakłada prawidłowe dane wejściowe.
Jak to działa:
źródło
JavaScript (ES6),
6867 bajtówPobiera dane wejściowe jako pierwszy argument
Wyjaśnienie
źródło
Python (3.5),
787162 bajtówrozwiązanie rekurencyjne
jest podobny do tego rozwiązania dla minigolfa
możemy założyć, że Święty Mikołaj zawsze dotrze do piwnicy
źródło