Okej, więc wczoraj był drugi dzień Bożego Narodzenia, a moi (dziadkowie) rodzice i ja mieliśmy grę w „sjoelen”, jak to się nazywa w Holandii. Wewnętrzny programista pojawił się we mnie, ale właśnie gdy otrzymałem odpowiedź, zgubiłem ją. Chcę, żebyś to przerobił.
Zasady:
Masz drewnianą deskę, sjoelbak , z 4 pudełkami, każde z własnym numerem. Kiedy schijf (obiekt przypominający krążek) wejdzie w jedno z pudeł, otrzymasz punkty powyżej tego pudełka.
Kiedy we wszystkich 4 polach jest schijf , nie dostajesz 10, ale dostajesz 20 punktów.
Przykład:
Od lewej do prawej: 3 5 4 3
Każde pudełko ma co najmniej 3 schijven (liczba mnoga schijf ), czyli 20 * 3 = 60 punktów.
Wartości wynikowe: 0 2 1 0
0 * 2 + 2 * 3 + 1 * 4 + 0 * 1 = 10 punktów.
Co daje w sumie 60 + 10 = 70 punktów.
Dane wejściowe:
Ilość schijven od lewej do prawej, tj. „4 5 4 5”, [4,5,4,5], „4 \ n5 \ n4 \ n5”, cokolwiek chcesz.
Wynik:
liczba punktów, tj. 84, jako wynik, zmienna, zwrot lub na szczycie stosu, cokolwiek chcesz.
Jak w każdym kodzie golfowym, nie można używać zewnętrznych skryptów, a kod z najmniejszą liczbą bajtów wygrywa.
PS: Jak zapewne zauważyliście, jestem Holendrem. Edytuj ewentualne błędy gramatyczne.
źródło
Odpowiedzi:
CJam,
23 2120 bajtówMoże uda mi się pograć w golfa kilka bajtów.
Dane wejściowe są jak
Wynik jest wynikiem
Jak to działa
Algorytm
[1 2 3 4]
.1 + 2 + 3 + 4 = 10
, że po prostu dodam do każdego minimalną wspólną schijven, aby uzyskać efekt10
wyniku bonusowego .1
każdego z nich, a następnie mnożę drugi z2
i dodajemy go do pierwszego. W następnej iteracji otrzymuję bieżącą sumę i punktację3
schijven. I tak dalej.Wypróbuj online tutaj
źródło
Piet, 240 (30 * 8) kodeksów, 138 zawierających rzeczywisty kod
Rozmiar kodu 10, dla lepszej widoczności
Przykłady testowe:
Wyświetlanie przepływu:
Używanie własnego skrótu do łatwiejszej obsługi i kompaktowego wyświetlacza. Pokazuje ogólny przebieg programu, a nie dokładne lokalizacje kodów.
Pełne wyjaśnienie:
Zapisz obraz i wypróbuj go w tym internetowym tłumaczu Piet:
PietDev online Tłumacz Piet
źródło
APL (Dyalog Classic) ,
161312 bajtów-3 dzięki @ Adám
Wypróbuj online!
⌽+⌊/
rewers (arg) + min (arg)1⌽
obróć 1 w lewo+\
sumy częściowe+/
sumaźródło
Mathematica,
38322320 bajtów(Z pomocą Swish )
Użyj, przyczepiając dane wejściowe do końca:
Alternatywne (36 bajtów):
źródło
Tr[(# + Min@#) {2, 3, 4, 1}] &
20*Min@#
, możesz się go pozbyć, zastępując minus plusem, bo wygodnie2+3+4+1==10
.R,
4140 znakówStosowanie:
W ostatnim przykładzie,
a
jest wektorem3 5 4 3
,a-b
to0 2 1 0
, które rozmnażają się wektor2 3 4 1
daje zatem0 6 4 0
które przyłączają5*b
dając15 21 19 15
(5*b
zawraca się do każdego elementu dodanego wektora, a tym samym skuteczne dodawanie4*5*b
), który w końcu Podsumowując, dając w ten sposób70
.źródło
b=min(a<-scan());sum(5*b+(a-b)*c(2:4,1))
JavaScript (ES6),
9347 bajtówStosowanie:
s(1, 2, 3, 4)
Jak to działa: funkcja szuka najmniejszej liczby w argumentach i mnoży ją przez
10
(nie za pomocą20
) i dodaje resztę wyniku.20
Aby kontynuować obliczanie , nie jest konieczne pomnożenie i odjęcie części od wyniku.Dzięki edc65 za udostępnianie ulepszeń!
Bez golfa:
źródło
S=(a,b,c,d)=>10*Math.min(a,b,c,d)+a*2+b*3+c*4+d
Pyth , 15 lat
Dane wejściowe powinny być oddzielone przecinkami na STDIN, np
Wykorzystuje tę samą sztuczkę, którą stosowało wiele innych rozwiązań, polegającą na dodawaniu minimum do każdego elementu, aby uwzględnić premię. Minimum znajduje się
hSQ
w powyższym kodzie. Aby uwzględnić mnożenie przez 2, 3, 4 i 1, odwzorowuję d na liście [0,1,2,3] i mnożę element (dl) wejścia przez d + 1. Zatem -1-ty element jest mnożony przez 1, zero przez 2, pierwszy przez 3, a drugi przez 4. Następnie sumuję.źródło
J,
2322 znakówPrzykład:
Wypróbuj tutaj.
(23 długo jednoznaczne określenie funkcji:
v=:3 :'+/+/\.3|.y+<./y'
)źródło
+/2 3 4 1*(+<./)
?2 3 4 1+/ .×]+<./
?Struś v0.1.0 ,
4841 znaków ( zdecydowanie za długo)Jest to po prostu to samo, co stara wersja poniżej, z tym wyjątkiem, że zamiast używać
@
do obracania całego stosu, zamiast tego używa się)\+
(prawych wujów).Stara wersja:
Odkryłem dwa błędy w moim nowo wdrożonym języku, opatrzone adnotacjami w poniższym opisie. (Język jest obecnie bardzo, bardzo podobny do Golfscript, więc jeśli znasz Golfscript, powinien być dość łatwy do odczytania.
Oczekuje danych wejściowych jako tablicy na STDIN, ponieważ jestem klamką i zapomniałem zaimplementować We / Wy w wersji 0.1.0.
Rozwiązanie prawdziwego problemu w Strusiu jest fajne, ponieważ pokazuje mi dokładnie, o ile więcej rzeczy muszę dodać do języka: D
źródło
Python 2, 43 bajty
Zainspirowany odpowiedzią @ user2487951.
źródło
Jagl Alpha 1.2 - 20 bajtów
Dane wejściowe są w formacie standardowym
(3 4 5 6)
, dane wyjściowe pozostają na stosie:Oczekiwanie na odpowiedź oryginalnego plakatu na temat formatu wyjściowego. Ponieważ dane wejściowe są określone jako „cokolwiek chcesz” , założę, że moje dane wejściowe mogą być tablicą na górze stosu.Teraz pobiera dane wejściowe na standardowe wejście.Wyjaśnienie:
źródło
Haskell, 40
zamiast usuwać minimalną liczbę z pozostałych i dodawać dodatkowe
20
s, dodaje to dodatkowe10
dla minimalnej liczby.źródło
..4*c+d..
Matlab, 27
Zajęło mi trochę czasu, aby zrozumieć, że jest to gra dla jednego gracza. Za pomocą anonimowej funkcji
który jest wywoływany za pomocą wektora wiersza
źródło
f=
o 2 mniej bajtów.ans
Zamiast tego funkcja jest zapisywana w zmiennej.[2:4,1]
zgolą 2 bajty, jeśli dane wejściowe to wektor kolumnowy.Java, 84 bajty
Mam pomysł, że można to jeszcze pograć w golfa, ale na razie to tyle.
Wywołaj za pomocą
A(new int[]{3,5,4,3})
, dane wyjściowe są zwracane jako int (PonieważSystem.out.println()
podwoiłoby bajty)Bez golfa
źródło
GolfScript, 22 bajty
Odczytuje dane wejściowe ze standardowego wejścia w formacie
[3 5 4 3]
. Zapisuje wyjście na standardowe wyjście. (Jeśli przyjmowanie danych wejściowych jako tablicy na stosie jest dozwolone, wiodące~
może zostać pominięta dla 21 bajtów).Wykorzystuje to nieco inną strategię niż rozwiązania CJam / Pyth / itp. Najpierw buduję tablicę z 2 kopiami pierwszej wartości wejściowej, 3 drugiej, 4 trzeciej i jednej czwartej. Następnie sortuję tę tablicę, wyciągam najmniejszy element, mnożę go przez 11 i sumuję z innymi elementami.
źródło
Python 2, 51
Nieinspirowane, ale krótkie:
Więcej python:
źródło
Julia,
4835 znakówfunction p(m);sum([2 3 4 1].*m)+10minimum(m);end
w zwartej formie przydziału:
Przykład:
źródło
JavaScript, 97 bajtów
źródło
JavaScript, ES6, 57
Chciałem zobaczyć, jak potoczy się rekurencja i chociaż zdecydowanie nie jest to najkrótsza odpowiedź, czułem, że dobrze się to potoczyło.
a*b*c*d
: Pobiera wartości wejściowe i wyszukuje iloczyn wszystkich z nich, i ocenia to jako wyrażenie boolowskie dla wbudowanej instrukcji if. Zwróci false, jeśli co najmniej jedna z wartości ma wartość 0, a true dla dowolnej innej wartości.20+f(--a,--b,--c,--d)
: Jeśli zwraca true, funkcja zwraca 20 (dla zestawu schijven ) plus rekurencyjne wywołanie funkcji dla wszystkich wartości minus jeden (aby usunąć ten zestaw schijven ). W ten sposób rekurencyjnie przechodzi przez pętlę, aż co najmniej jedno z pudeł będzie puste.a*2+b*3+c*4+d
Po co najmniej jednym polu jest puste, uruchomiona zostanie inna część instrukcji inline if. Zwraca tylko punkty za pozostałe schijven w polach.Tak więc na końcu wszystkie 20-punktowe zestawy schijvenów , a punkty końcowe są sumowane i zwracane z funkcji, dając odpowiedź.
źródło
Haskell 42 znaki
źródło
f l@[a,b,c,d]=10*minimum l+2*a+3*b+4*c+d
- zapisuje 2 znakiHPPPL (język programowania HP Prime),
5857 bajtów* Między 10 a min nie jest konieczne, więc go usunąłem.
HPPPL to język programowania kalkulatora graficznego HP Prime / CAS.
Przykładowe przebiegi:
Jeśli nie musi to być program, to można go zrealizować w
4039 bajtów jednowierszowych:źródło
Staq, 72 znaki
Przykładowy przebieg:
Staq ma dwa ładunki, jeden aktywny, jeden pasywny.
|
Polecenie przełącza aktywnego stosu na bierne i vice versa.Wszystko pomiędzy nawiasami klamrowymi definiuje funkcję, pierwsza litera po nawiasie otwierającym jest nazwą funkcji, reszta do nawiasu zamykającego jest samą funkcją. Możliwe są funkcje zastępujące, rekurencyjne i zagnieżdżone.
{aii}
zdefiniuje funkcję a , która dwukrotnie zwiększy górę stosu. Każde kolejne wystąpieniea
kodu zostanie zastąpione przezii
.Komentarze wewnątrz proramów Staq:
&
dodaje zero na szczycie stosu,[
instruuje wskaźnik, aby przeskoczył do odpowiedniego,]
jeśli wierzchołek stosu wynosi zero,x
usuwa najwyższą wartość na stosie. Tak więc komentarze można zapisać w kodzie w postaci&[here is a comment]x
Objaśnienie (również wykonywalne):
https://esolangs.org/wiki/Staq
Program wykorzystuje jeden stos (początkowo aktywny) do obliczenia 2a + 3b + 4c + d, a drugi stos (początkowo pasywny) do obliczenia 10-krotności minimum wartości wejściowych. Następnie oba wyniki są sumowane i wyświetlane.
źródło
PowerShell dla Windows ,
4847 bajtów-1 bajt dzięki mazzy
Wypróbuj online!
źródło
Powershell for Windows
kiedy używamysort
aliasu? zobacz meta