Ostatnio inżynier elektryk badający czasy na światłach został ukarany grzywną w wysokości 500 dolarów przez stan Oregon za określenie siebie jako inżyniera.
Biorąc pod uwagę 2-literowy ciąg jako dane wejściowe, reprezentujący stan USA, wynik:
I am not an engineer
jeśli stan to Oregon (OR
)I am an engineer
jeśli stan jest jakimkolwiek innym stanem USAWhat is an engineer?
biorąc pod uwagę jakikolwiek inny wkład
Wyjściowy nie może zawierać żadnych wiodącą spacje, ale może zawierać tyle wleczonego spacji, jak chcesz.
Możesz założyć, że zawsze będą to 2 duże litery.
Oto lista wszystkich 50 skrótów stanu USA:
AL, AK, AZ, AR, CA, CO, CT, DE, FL, GA, HI, ID, IL, IN, IA, KS, KY, LA, ME,
MD, MA, MI, MN, MS, MO, MT, NE, NV, NH, NJ, NM, NY, NC, ND, OH, OK, OR, PA,
RI, SC, SD, TN, TX, UT, VT, VA, WA, WV, WI, WY
Punktacja
To jest golf golfowy , więc wygrywa najmniej bajtów w każdym języku !
code-golf
string
kolmogorov-complexity
Skidsdev
źródło
źródło
Odpowiedzi:
C #,
311 309240237222195184183 bajtówWypróbuj online!
Zaoszczędzono 2 bajty, dodając spację wcześniej
an
dob
-69 (huehue)-72 bajty dzięki TheLethalCoder-15 bajtów dzięki ciągowi stanów genialnego TotallyHuman
-38 bajtów więcej kompresji ciągu
Nie golfowany:
źródło
..."+b
zamiast interpolowanych ciągów, zmieńif..else if...else
nareturn s==
„LUB”? ....: System.Arr ... `tzn. Użyj trójki. Użyju.Contains
zamiastArray.Exists
. Myślę, że jeśli użyjesz spacji zamiast przecinków, to.Split()
bez parametrów będzie działać.u
to tablica, a nie ciąg znaków. Można jednak zapisać bajty, ustawiając jeu
jako ciąg i używając.Contains
go.s=>{var b=" an engineer";return s=="OR"?"I am not"+b:"AL AK AZ AR CA CO CT DE FL GA HI ID IL IN IA KS KY LA ME MD MA MI MN MS MO MT NE NV NH NJ NM NY NC ND OH OK PA RI SC SD TN TX UT VT VA WA WV WI WY".Contains(s)?"I am"+b:$"What is{b}?";};
. Myślę, że usunąłem wszystkie odpowiednie białe znaki. (NieJavaScript (ES6), 182 bajty
Próbny
Pokaż fragment kodu
źródło
LA
: /C,
215208190 bajtów-7 dzięki Cool Guy
Używany przez „genus string” @ totalhuman.
Jak to działa:
"string"z
automatycznie łączy się"string"
zz
(" an engineer"
). Tak, C to robi.!strcmp(s,"OR")
porównuje ciąg z „LUB”.?"I am not"z
zwraca „Nie jestem inżynierem”, jeśli to prawda. Inaczej...:strstr(...,s)
sprawdza, czy genialny ciąg @ totalhuman zawiera podany ciąg.?"I am"z
zwraca „Jestem inżynierem”, jeśli tak, i ...:"What is"z"?")
zwraca „Co to jest inżynier?” Inaczej.Wypróbuj online!
źródło
#define z " an engineer" f(char*s){!strcmp(s,"OR")?puts("I am not"z):strstr("MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH RIA UT WVT WIL WY",s)?puts("I am"z):puts("What is"z);}
Python 2 ,
228168 bajtówWypróbuj online!
źródło
Python 2 ,
192186182178176 bajtówPrawdopodobnie mógł bardziej skompresować ciąg stanu.
Wypróbuj online!
źródło
u
wif s in u
można zauważyć go używać bezpośrednio zamiast deklarowania go?VALA WAZ NCA COH CTX SDE FL GA HID WIL MIN IAKSC KY ME MD MA MNMS MOK MTNE NH NJ NY ND PARI UT NVT WV WY
to najmniejszy, jaki potrafię'MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH ORIA UT WVT WIL WY'
Java (JDK 10) , 184 bajty
Wypróbuj online!
Przepraszam za ponowne użycie skompresowanego ciągu: sam nie mogłem znaleźć nic lepszego ... :(
źródło
05AB1E ,
104103101 bajtówWypróbuj online!
Stara 104-bajtowa wersja w przypadku, gdy łatwiej ją poprawić.
Niezadowolony z kompresji ani specjalnego przypadku
?
.źródło
(A=1,C=3 ...)
. Wersja 103-bajtowa robi to samo dla niektórych stanów i łączy niektóre stany, które kończą się tą samą literą, od której zaczyna się nowy stan. Jestem pewien, że można to jeszcze poprawić i dodam lepsze wytłumaczenie, gdy będę więcej grał w golfa..•~Zµ∞/'—¶[@øl•Œ2ù
, których użyłeś w niektórych stanach, zamiast po prostu kompresować wszystkie stany i robić2ô
. I ogólnie dobre podejście. (Cieszę się, że widziałem twoją odpowiedź, zanim spróbowałem czegoś sam, ponieważ zdecydowanie nie byłby tak krótki ..)F # , 222 bajty
Wypróbuj online!
Rozszerzony:
Biorąc pod uwagę dwuliterowy stan v przekazany do funkcji f , zbuduj krotkę (a, b) reprezentującą głowę i ogon zdania „inżynierskiego”.
Możesz swobodnie korzystać z „łańcucha stanu skompresowanego”; jest o cały bajt krótszy niż MINCALA ...
źródło
R ,
10996 bajtówWypróbuj online!
13 bajtów dzięki J.Doe - poprzez użycie wyrażenia regularnego i indeksacji.
źródło
sub
jest znacznie lepszy, dziękuję!Japt ,
136135131129128 bajtówWięcej oszczędności można uzyskać, eksperymentując z kolejnością skrótów państwowych - wrócę do tego za chwilę.
Wypróbuj online
Wyjaśnienie
ò
metody.ø
metody, aby sprawdzić, czy tablica zawieraUv
, czyli łańcuch wejściowy przekonwertowany na małe litery."I am "
¥
(jest równy)"OR"
pozwala nam dołączyć jedną"not "
lub pustą zmienną ciąguP
."an engineer"
."What is an engineer?"
.źródło
Python 3 ,
180179178 bajtówWypróbuj online!
źródło
CJam , 143 bajty
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
Ponieważ Oregon (
OR
) znajduje się na początku ciągu, znalezienie znaku indeksu wejścia będzie wynosić -1, jeśli nie zostanie znalezione, 0 jeśliOR
, 1 jeśli dowolny inny stan. Który ciąg do wydrukowania może w ten sposób zdecydować.źródło
PHP, 188 bajtów
Wypróbuj online!
źródło
in_array(...)
dostrpos(_AKALARAZCACOCTDEFLGAHIIAIDILINKSKYLAMAMDMEMIMNMOMSMTNCNDNENHNJNMNVNYOHOKPARISCSDTNTXUTVAVTWAWIWVWY,$argn)&1
._NMMNINTNRIHIMIWISCNCCTMTUTVTWVNVFLILCAALGAIAMAPAVAWACOLAMOAKARKSMSNHOHOKORAZDEIDKYMEMDNENJNYNDSDTXWY
działaC #, 178 bajtów
Uruchom w C # Pad
Golf oparty na rozwiązaniu Mayube ; nowe tutaj, więc nie mam wystarczającej liczby przedstawicieli, aby móc komentować.
źródło
Haskell ,
220214210209 bajtówWypróbuj online!
źródło
1<2
jest jeszcze krótszyOR
długi ciąg w drugiej definicji iJavaScript 204
źródło
s=>(!(h=/(A[LKZR]|C[AOT]|DE|FL|[GPLV]A|[HR]I|I[DLNA]|K[SY]|M[EDAINSOT]|N[EVHJMYCD]|O[HKR]|S[CD]|T[NX]|[VU]T|W[AVIY])/.test(s))?"What is":"I am"+(s=='OR'?" not":""))+" an engineer"+['?'[+h]]
AWK, 189 bajtów
Jeśli dane wejściowe pasują do wyrażenia regularnego zawierającego wszystkie skróty stanu, wydrukuj „Jestem inżynierem” z „nie” wstawionym na środku, jeśli stan to Oregon, a następnie wyjdź.
Jeśli dane wejściowe nie pasują do wyrażenia regularnego, nie może to być skrót stanu USA.
źródło
Python 3, 238 bajtów
Wyjaśnienie
Nie zastosowano technik kompresji.
źródło
Java, 173 bajty
źródło
s->
do początku.Stax , 100 bajtów
Ten język jest datą na wyzwanie. Ale autor (ja) nie widział tego do tej pory.
Uruchom i debuguj
źródło
JavaScript ES6,
175171 bajtówDołączył wiele dobrych
Lub 152 bajty na kodowaniu ISO
Generator:
źródło
C (gcc) , 0 + 176 bajtów
Wypróbuj online!
czyste tłumaczenie
źródło
PowerShell, 175 bajtów
Skrypt testowy:
Wynik:
źródło
Python 3 ,
236182181 bajtówWypróbuj online!
TIO zawiera przypadki testowe dla wszystkich stanów.
-54 bajty dzięki kompresji łańcucha
źródło
MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH ORIA UT WVT WIL WY
jest lepsza kompresjaq / kdb +, 174 bajty
Rozwiązanie:
Wyjaśnienie:
Uwagi:
Użyłem „skompresowanego” ciągu z innych odpowiedzi, starając się znaleźć sposób, aby umieścić go w jednym wierszu, aby uniknąć przypisania
a
zmiennej (ale nadal dodawać,?
gdy wejście nie jest stanem.źródło
Siatkówka , 175 bajtów
Wypróbuj online! Mam nadzieję, że przywłaszczyłem listę najlepszych stanów. Wyjaśnienie:
Zacznij budować wynik. Wstaw także listę stanów do użycia w następnym etapie.
Jeśli jest to jeden z 49 stanów, usuń stan i listę.
Jeśli jest to Oregon, zamień stan na
not
i usuń listę.Jeśli to cokolwiek innego, zamień wszystko na inne dane wyjściowe.
Dodaj te słowo na końcu, aby uniknąć powtórzeń.
źródło
Kryształ,
232 207205 bajtówWypróbuj online . (nieznacznie zmodyfikowany z powodu problemu ARGV)
źródło
Współczynnik, 135 bajtów
Bardziej czytelny i nazwany:
[ x ] dip
ix swap
są równoważne w efekcie stosu ale pierwsza jest krótsza tylko gdy zagnieżdżone:[ [ [ x ] dip ] dip ] dip
.źródło
Python 2,
213211194 bajtówWypróbuj online
Rzeczy, nad którymi pracuję nad skracaniem:
(i=="OR")
or x[0].lower()+x[1]in c
Aktualizacja:
s=not r
jes=r^1
źródło
Rubin, 164 bajty
Wykorzystuje kodowanie długości przebiegu, dlatego ciąg magiczny ma długość 50 bajtów, po jednym na stan. Aby to zbudować, najpierw konieczne było umieszczenie kodów stanu w kolejności alfabetycznej kodu stanu, a nie nazwy stanu. Niestety potrzeba 7 bajtów, aby przekonwertować reprezentację base36
j
z małego kodu statycznego na duży kod statyczny.Niegolfowany w programie testowym
źródło