Jest to problem z NCPC 2005 . Roy ma mieszkanie z tylko jednym gniazdkiem elektrycznym, ale ma kilka listew zasilających. Oblicz maksymalną liczbę gniazd, jakie może mieć za pomocą listew zasilających, które posiada. Liczba gniazd na listwę zasilającą jest podawana jako dane wejściowe.
Okazuje się, że jeśli odpowiednio liczba wylotów pasków jest
wtedy liczba gniazd wynosi
,
lub
.
Dane wejściowe do programu lub funkcji to niepusta seria dodatnich liczb całkowitych.
Przykłady
2 3 4
> 7
2 4 6
> 10
1 1 1 1 1 1 1 1
> 1
100 1000 10000
> 11098
code-golf
number
arithmetic
Pål GD
źródło
źródło
Odpowiedzi:
Galaretka, 3 bajty
Zmniejszenie (wszystkie), suma, przyrost. Wypróbuj tutaj.
źródło
Siatkówka , 3 bajty
Końcowe podawanie linii jest znaczące.
Dane wejściowe to rozdzielona spacjami lista liczb jednoargumentowych .
Wypróbuj online!
Wyjaśnienie
Kod po prostu usuwa wszystkie
1
ciągi, a także następujące po nich ciąg. Oto dlaczego to działa:Dodawanie jednostkowe jest proste: po prostu połącz liczby, które są takie same jak usunięcie ograniczników. Zmniejszenie o 1 jest również proste: wystarczy usunąć znak
1
z każdej liczby. Chcemy jednak o 1 więcej niż suma zmniejszonych danych wejściowych, więc po prostu usuwamy tylko te,1
które znajdziemy po spacji, a tym samym zmniejszamy wszystko oprócz pierwszego.źródło
Sześciokąt ,
1814 bajtówRozłożony:
Wypróbuj online!
Nie sądzę bok długości 2 jest możliwe, ale nie
musimoże być bardziej wydajny boku długości 3 rozwiązanie tego.Jest to zwykłe podejście „zmniejszaj wszystko, sumuj, zwiększaj”, ale będę musiał później dodać diagramy, aby pokazać, jak dokładnie działa w Hexagony.
źródło
Python, 24 bajty
Wypróbuj online
źródło
Mathematica, 9 bajtów
źródło
Haskell,
1715 bajtówPrzykład użycia:
( foldl1$(+).pred ) [2,4,6]
->10
.Stara wersja, inne podejście, 17 bajtów:
succ.sum.map pred
.źródło
J, 6 bajtów
Suma plus jeden minus długość. Nawiasuj i stosuj go w następujący sposób:
źródło
Labirynt , 9 bajtów
Wypróbuj online!
Zwykły podkład:
Tutaj zaczynamy w lewym górnym rogu
"
, no-op, kierując się w prawo. Następnie?
czytamy liczbę całkowitą ze STDIN (wyrzucając znaki, których nie można parsować jako liczbę całkowitą, np. Spacje). Teraz mamy dwa przypadki:Jeśli dane wejściowe są pozytywne, skręcamy w prawo, wykonując:
Jeśli wartość wejściowa wynosi zero (co występuje w EOF), idziemy prosto, wykonując:
źródło
Pyth, 5 bajtów
inkrement (suma (mapa (dekrementacja, wejście)))
źródło
ES6, 25 bajtów
źródło
l=>l.reduce((a,b)=>a+b-1)
.(,b)
jest to kosztowne, ale lubię też tę wersję.MATL, 3 bajty
Wypróbuj online.
Wyjaśnienie
źródło
05AB1E , 4 bajty
Kod:
Wyjaśnienie:
Pobiera dane wejściowe jak tablicę (np
[3, 4, 5]
.).źródło
Gwiaździsta ,
2624 bajtówOczekuje liczb całkowitych oddzielonych znakiem nowej linii. Wypróbuj online!
Dzięki @ MartinBüttner za -2 bajty.
Pętla jest rozwijana, dzięki czemu pierwsza liczba nie jest zmniejszana, co eliminuje potrzebę zwiększania. Wypychanie liczb jest drogie w Starry ...
źródło
Narzędzia Bash + GNU, 16
Jeśli występują
N
listwy zasilające, naN-1
liście wejściowej oddzielonej przecinkami powinny znajdować się separatory. Wszystko, co musimy zrobić, to wymienić separatory na- 1 +
i ocenić arytmetycznie:Lub używając tej samej sztuczki:
Pure Bash (bez zewnętrznych narzędzi), 19
źródło
APL (NARS 2000),
1310 bajtów{1+(+/⍵)-⍴∊⍵}
Edycja: do 10 z podejściem Lynna (lepszym).
{1++/1-⍨⍵}
źródło
gs2, 5 bajtów
(Kodowane CP437).
To
read-nums dec m1 sum inc
.źródło
CJam, 7 bajtów
Sprawdź to tutaj.
Takie samo podejście jak w przypadku Lynna (zmniejszanie wszystkich, suma, przyrost). Działa to również dla 8 bajtów (i może jest nieco bardziej interesujące):
Spowoduje to złożenie „zmniejszenia, dodania” nad listą. W ten sposób zmniejszenie jest stosowane tylko do wszystkich elementów oprócz pierwszego, tak że nie musimy osobno zajmować się przyrostem.
źródło
C,
605955 bajtówźródło
Perl 6, 14 bajtów
stosowanie
źródło
{.sum-$_+1}
Poważnie, 7 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
Perl 6 , 20 bajtów
(Możesz użyć
<<
zamiast«
)Stosowanie:
źródło
@arraya »+« @arrayb
++«@array
@array».method
@array»++
« a 'space separated' list of words »
Kilka z nich jest tak zwanych operatorów Meta, ponieważ łączą się z innymi operatorami. (Perl 5 obecnie nie ma tych operatorów.)Perl 5 23 + 2 = 25 lub 19 + 2 = 21
Wymaga
-ap
flag:Zapisano w pliku i uruchom jako
EDYCJA: Kolejna odpowiedź, mniejsza (19 + 2), ale w zasadzie skopiowana z odpowiedzi dev-null:
źródło
F #, 25 bajtów
Jest to funkcja, która pobiera tablicę / listę / sekwencję liczb całkowitych i zwraca wymagany wynik.
Jak to działa:
Seq.fold
pozwala zastosować funkcję do każdego elementu sekwencji, jednocześnie przenosząc pewien stan. Wynik działania zastosowany do pierwszego elementu da stan, który zostanie wprowadzony do funkcji dla drugiego elementu i tak dalej. Na przykład, aby podsumować listę[1; 3; 4; 10]
, zapisz ją w następujący sposób:Które można by zastosować tak:
Ostatni stan to wartość zwracana z
Seq.fold
.źródło
𝔼𝕊𝕄𝕚𝕟, 5 znaków / 7 bajtów
Try it here (Firefox only).
Używa niestandardowego kodowania z 10-bitowymi znakami (dzięki @Dennis!). Uruchom
encode('ï⒭+‡_')
w konsoli JS, aby uzyskać zakodowaną formę idecode(/*ENCODED TEXT HERE*/)
dekodować zakodowaną formę.Wyjaśnienie
Tłumaczy na Javascript ES6 jako:
źródło
Mornington Crescent ,
1909 18731839 bajtówWypróbuj online!
źródło
Python 3, 79 bajtów
źródło
Rubinowy, 30 bajtów
To proste - zaczynając od 1, zsumuj podane liczby, każda -1 (argumenty wiersza poleceń są włączone
$*
). Wstydinject
to takie długie słowo.źródło
PowerShell, 19 bajtów
Zauważ, że
1 + p1-1 + p2-1 + ... + pn-1
jest to równoważne zp1-1 + p2-1 + ... + pn
.Pobiera dane wejściowe jako osobne argumenty wiersza polecenia za pomocą
$args
. My-join
razem z-1+
ogranicznikiem, aby utworzyć ciąg, taki jak2-1+3-1+4
. Łańcuch jest następnie przesyłany potokowoInvoke-Expression
(podobnie doeval
) i wyświetla wynik.źródło
Perl, 21 + 2 = 23 bajty
Wymaga
-a
i-E
:źródło
-a
flagi, aby uzyskać@F
zmienną z już podzielonymi elementami, i zamienić -n na -p, abyś nie potrzebowałsay
, zmniejszając ją do 21 + 2:$a+=$_-1for@F;$_=++$a
-p
zamiastsay
jest takie samo, ponieważ i tak muszę go używać$_=
.-a
to dobry pomysł!Brainfuck, 15 bajtów
Założenie: Operator zwraca 0 po wyczerpaniu wszystkich danych wejściowych i nie ma przedłużaczy z 0 wtyczkami. Ponadto IO musi zawierać wartości bajtowe zamiast kodów znaków ASCII.
Objaśnienie: Używa 2 rejestrów. Rejestr akumulatora „Wartość” reprezentujący liczbę urządzeń, które można podłączyć, oraz rejestr „prądu przewodu”, który śledzi wartość bieżącego przewodu. Zaczyna się od zwiększenia wartości o 1 dla istniejącego gniazdka. Następnie dla każdego przedłużacza odejmuje jeden od wartości, ponieważ pobierana jest wtyczka, a następnie zwiększa wartość o liczbę wtyczek.
Większość internetowych tłumaczy nie działa w trybie wprowadzania surowych bajtów. Aby przetestować online, użyj tego kodu:
źródło