Dodawanie bez użycia znaku + lub -

24

Wcześniej było wiele wyzwań „Wykonaj __ bez _ _”, ale mam nadzieję, że jest to jedno z najtrudniejszych.

Wyzwanie

Masz napisać program, który pobiera dwie liczby naturalne (liczby całkowite> 0) ze STDIN i wypisuje sumę dwóch liczb do STDOUT. Wyzwanie polega na tym, że musisz użyć jak najmniej znaków +i -znaków. Nie wolno używać funkcji sumowania ani negacji.

Przykłady

wkład

123
468

wydajność

591

wkład

702
720

wydajność

1422

Tie Breaker: Jeśli dwa programy mają taką samą liczbę +i -znaki, zwycięzcą jest osoba z mniej / * ( ) = . ,i 0-9znaków.

Niedozwolone : języki, w których standardowe operatory dodawania / odejmowania oraz zwiększania / zmniejszania są symbolami innymi niż +lub -są niedozwolone. Oznacza to, że biały znak nie jest dozwolony.

PhiNotPi
źródło
1
Być może to wyzwanie było o wiele łatwiejsze, niż się spodziewałem, zwłaszcza w innych językach, w których istnieją funkcje sum (). Muszę to naprawić.
PhiNotPi
50
Nagroda za 100 powtórzeń dla każdego, kto może to zrobić w Brainfuck.
Peter Olson,
3
@Peter Olson Cóż, myślę BF nie jest kompletna bez turing albo +albo -...
FUZxxl
3
Żeby wyjaśnić, to wyzwanie nie zależy od długości kodu, prawda? Tylko liczba +, -a tie breaker znaków? ... czy musisz ponownie zmienić zasady :-)
Tommy
@Tommy Nie, nie ma.
PhiNotPi,

Odpowiedzi:

29

Perl (brak +/-, brak remisów, 29 znaków)

s!!xx!;s!x!$"x<>!eg;say y!!!c

Jako bonus możesz dodać sumę kodu więcej niż dwie liczby, dodając więcej xs do s!!xx!.

Alternatywnie, tutaj są dwa 21-znakowe rozwiązania z odpowiednio 1 i 3 przerywaczami

say length$"x<>.$"x<>

say log exp(<>)*exp<>

Uwaga: w tych rozwiązaniach używana jest sayfunkcja dostępna od wersji Perla 5.10.0 z -Eprzełącznikiem wiersza polecenia lub przyciskiem use 5.010. Zobacz historię edycji tej odpowiedzi dla wersji, które działają na starszych perlach.


Jak działa rozwiązanie bez przerywników?

  • s!!xx!jest operatorem zastępczym wyrażenia regularnego , działającym domyślnie na $_zmiennej, która zastępuje pusty ciąg ciągiem xx. (Zwykle /jest używany jako ogranicznik wyrażeń regularnych w Perlu, ale tak naprawdę można użyć prawie dowolnej postaci. Wybrałem, !ponieważ nie jest to remis.) To tylko fantazyjny sposób na przygotowanie się "xx"do $_- lub, ponieważ $_zaczyna się od pustego (niezdefiniowanego, tak naprawdę), to naprawdę sposób na pisanie $_ = "xx"bez użycia znaku równości (a także z jednym znakiem mniej).

  • s!x!$"x<>!egto kolejna wymiana regexp, tym razem zastępując każdy xz $_wartością wyrażenia $" x <>. ( gPrzełącznik określa globalną zamianę, eokreśla, że ​​zamiana ma być oceniana jako kod Perla, a nie jako ciąg literalny.) $"Jest specjalną zmienną, której domyślną wartością jest pojedyncza spacja; użycie go zamiast " "oszczędza jeden znak. (Każda inna zmienna, o której wiadomo, że ma wartość jednoznakową, taką jak $&lub $/, działałaby tu równie dobrze, z wyjątkiem tego, że użycie $/kosztowałoby mnie rozstrzygnięcie remisu).

    <> Operator wejście liniowe , w kontekście skalarnym, odczytuje jedną linię ze standardowego wejścia i zwraca go. Poprzednio xjest to operator powtarzania łańcucha Perla i tak naprawdę jest rdzeniem tego rozwiązania: zwraca lewy operand (pojedynczy znak spacji) powtórzony liczbę razy podaną przez jego prawy operand (wiersz, który właśnie czytamy jako dane wejściowe).

  • y!!!cjest po prostu niejasnym sposobem (ab) użycia operatora transliteracji do zliczenia znaków w ciągu ( $_domyślnie znowu). Mógłbym właśnie napisać say length, ale zaciemniona wersja jest o jedną postać krótsza. :)

Ilmari Karonen
źródło
3
+1 - okropne i całkowicie nieczytelne ;-) To wydaje się być idealną odpowiedzią, ponieważ liczba postaci nie ma znaczenia w tym wyzwaniu.
Tommy
@ Tommy, są też inne doskonałe odpowiedzi. Może powinniśmy nalegać, aby liczba postaci była ostatnim rozstrzygającym.
Peter Taylor,
@Peter: Domyślam się, że już tak było.
Ilmari Karonen,
1
jeśli liczba znaków jest ostatnim przerywnikiem remisu, a wiele wpisów jest powiązanych zerowo w innych kategoriach, czy to nie jest po prostu code-golfz pewnymi ograniczeniami źródłowymi?
Sparr
47

R (24 znaki)

length(sequence(scan()))

Co to robi:

  • scan odczytuje dane wejściowe ze STDIN (lub pliku)
  • sequencegeneruje sekwencje całkowite zaczynając od 1 i konkatenuje sekwencje. Na przykład sequence(c(2, 3))wyniki w wektorze1 2 1 2 3
  • length oblicza liczbę elementów w skonkatenowanym wektorze

Przykład 1:

> length(sequence(scan()))
1: 123
2: 468
3:
Read 2 items
[1] 591

Przykład 2:

> length(sequence(scan()))
1: 702
2: 720
3:
Read 2 items
[1] 1422
Andrie
źródło
1
Bardzo sprytna, dobra robota.
Mateusz
To
budzi
+/- i wyżej wymienione remisy są interesujące, a nie postacie.
użytkownik nieznany
Jak oblicza długość? bez żadnego dodatku? Jeśli tak, byłbym zaskoczony.
Tem Pora,
2
@TemPora Pytanie ogranicza tylko kod w odpowiedzi, a nie operacje wykonywane za sceną. Nie ograniczymy tego pytania, więc architektura komputera nie może zwiększyć rejestru.
mbomb007
15

re

main(){
    int a,b;
    readf("%d %d",&a,&b);
    while(b){a^=b;b=((a^b)&b)<<1;}
    write(a);
}

Trochę kręcenie się o zwycięstwo

jako bonus skompilowany kod nie zawiera operacji dodawania (choć nie może mówić o wywołaniu readf)

maniak zapadkowy
źródło
12

Python 2, 43 bajty

print len('%s%s'%(input()*'?',input()*'!'))
Omar
źródło
3
Bardzo pomysłowy, ale możesz chcieć zmienić znak użyty w ciągu na inny niż remis, taki jak „~”
3Doubloons
Dzięki za radę Alex, już zapomniałem o zasadzie rozstrzygania remisów.
Omar,
print sum(input(),input())
razpeitia,
9
razpeitia: Myślę, że suma jest funkcją „sumopodobną” i dlatego nie jest dozwolona.
Omar,
6

GolfScript

Brak wyłączników +/- lub remisów:

# Twiddle some bits to get a few small integers
[]!~abs:two~abs:three!:zero~:minusone;

~[two base minusone%\two base minusone%]zip
zero:c;
{
    # Stack holds [x y] or [x] with implicit y is zero
    # Half adder using x y c: want to end up with sum on stack and carry back in c
    [~c zero]three<zero$
    ~^^\
    $~;:c;;
}%
[~c]minusone%two base

Znacznie prostsza wersja z dwoma znakami rozstrzygającymi, wykorzystująca tę samą sztuczkę łączenia list, z której korzystają inni ludzie:

~[\]{,~}%,

Zakładam, że GolfScript nie jest zdyskwalifikowany )jako operator przyrostowy, ponieważ tak naprawdę go nie używam.

Peter Taylor
źródło
6

C (tylko wersja 32-bitowa)

int main(int ac, char *av) {
    scanf("%d\n%d", &ac, &av);
    return printf("%d\n", &av[ac]);
}

Arytmetyka wskaźnika jest równie dobra.
Jak spełnia wymagania?
* Nie +bądź -
* No /, =, ., 0- 9
* Tylko 3 pary nawiasie, co wydaje mi się minimalne (trzeba main, scanf, printf).
* Jeden *(wymaga tego podejście wskaźnikowe).
* Cztery ,(można zapisać jeden, definiując normalne zmienne, a nie ac,av)

Uri Goren
źródło
6

C ++ 0 +/-, 3 remisy

#include <vector>
#include <iostream>

#define WAX (
#define WANE )
#define SPOT .

int main WAX WANE {
    unsigned x;
    unsigned y;
    std::cin >> x >> y;
    std::vector<int> v WAX x WANE;
    std::vector<int> u WAX y WANE;
    for WAX auto n : u WANE {
        v SPOT push_back WAX n WANE;
    }
    std::cout << v SPOT size WAX WANE;
}
R. Martinho Fernandes
źródło
5

Haskell, 0 + 2

import Monad
main = join $ fmap print $ fmap length $ fmap f $ fmap lines getContents
f x = join $ flip replicate [] `fmap` fmap read x

Używa nie +lub -znaków, a tylko dwa =z zestawu znaków przerywacza remisu, z których jeden jest obowiązkowy do wiązania main. Suma jest wykonywana przez połączenie list o odpowiednich długościach.

hammar
źródło
4

EDYTUJ To zostało opublikowane PRZED zmianą zasad, aby zabronić sum...

Językiem R: Brak wywołania +lub -... i 9 znaków tie-breaker!

sum(as.numeric(readLines(n=2)))

Przykład:

> sum(as.numeric(readLines(n=2)))
123
456
[1] 579

To [1] 579jest odpowiedź 579 ( [1]ma na celu śledzenie, gdzie jesteś w wektorze wynikowym, ponieważ w R wszystkie wartości są wektorami - w tym przypadku o długości 1)

Zauważ, że R ma +operatory tak jak większość języków - tak się składa, że ​​ma sumteż to, co sumuje wiele wektorów.

W takim przypadku readLineszwraca wektor ciągów o długości 2. Następnie zmuszam go do liczbowego (podwójnego) i sumuję ...

Aby pokazać inne funkcje R:

> 11:20 # Generate a sequence
 [1] 11 12 13 14 15 16 17 18 19 20

> sum(1:10, 101:110, pi)
[1] 1113.142
Tommy
źródło
1
+1 Aby zmusić mnie do zmiany zasad, wyjęłam spod prawa funkcję sum ().
PhiNotPi
@PhiNotPi - Zmieniasz zasady ?! To jest oszukiwanie! :-) ... Ale prawdopodobnie powinieneś powiedzieć „funkcje podobne do sumy”, albo po prostu użyję colSumszamiast tego… Może także zakazać „funkcji podobnych do negacji”, gdy jesteś przy tym ...
Tommy
2
Posłucham twojej rady. Z tego, co mogę powiedzieć, wszyscy (w tym ja) na tej stronie uwielbiają wskazywać luki w zasadach.
PhiNotPi
4

Język R.

Nowe zasady, nowa odpowiedź, ten sam język. Brak połączeń z +lub-

AKTUALIZACJA Używając scan, spada do 11 znaków rozstrzygających (łącznie 27 znaków).

as.numeric(scan())%*%c(1,1)

Oryginał: 13 bohaterów!

as.numeric(readLines(n=2)) %*% c(1,1)

Przykład:

> as.numeric(readLines(n=2)) %*% c(1,1)
123
456
     [,1]
[1,]  579

Tym razem wynik osiąga się przez pomnożenie macierzy. Odpowiedź jest wyświetlana jako matryca 1x1.

Tommy
źródło
Nic nie mogę zrobić, aby to zakazać. Być może R jest po prostu dobry w tym wyzwaniu, ponieważ opiera się głównie na matematyce. A może to wyzwanie jest po prostu łatwe.
PhiNotPi
+1 ładne. Możesz zrobić to jeszcze krócej, scan()zamiastreadlines(n=2)
Andrie
@Andrie - Tak, ale wtedy polegać na wprowadzenie dokładnie dwie liczby użytkownika ... co jest OK na to wyzwanie chyba ...
Tommy
4

Haskell, 0 +/ -, 6 2 tie-breakery ( =)

(nie używa sztuczki konkatenacji łańcucha / listy)

main = interact f
f x = show $ log $ product $ map exp $ map read $ lines x
JB
źródło
Możesz wyeliminować wszystkie kropki kosztem dodatkowego =, zastępując kompozycję: zamiast „fgh” napisz „a axe = f $ g $ h x”
Omar
3

JavaScript, 56

p=prompt;alert(Array(~~p()).concat(Array(~~p())).length)

Dzięki @JiminP na końcówce ~~! Idę po najmniej bajtów, więc 1 bajtowy zapis na zachęcie p =; wciąż jest tego warte. Rozumiem twój argument o znakach rozstrzygających, ale szczerze mówiąc, nie wolałbyś najmniej bajtów :-p

Wersja, 69

i=parseInt;p=prompt;alert(Array(i(p())).concat(Array(i(p()))).length)

Dzięki pewnym opiniom @Ilmari i @JiminP ogoliłem 13 bajtów z mojego oryginalnego rozwiązania.

Pierwotnie 82

i=parseInt;p=prompt;a=Array(i(p()));a.push.apply(a, Array(i(p())));alert(a.length)
stephencarmody
źródło
Ta przestrzeń po przecinku jest całkowicie niepotrzebna; usunięcie go sprowadza cię do 81.
Ilmari Karonen
Używanie concati wprowadzanie obliczeń alertjest krótsze. i=parseInt;p=prompt;alert(Array(i(p())).concat(Array(i(p()))).length) BTW, nie wiedziałem, że Array(n)zwraca tablicę o długości n. Konsola Google Chrome dała mi []i pomyślałem, że nie ma nic ...
JiminP
1
Och, skoro ważna jest postawa, w której rozstrzygają remisy, p=promptnie jest dobrze. I parseInt(x)jest prawie równoważne z ~~x. alert(Array(~~prompt())['concat'](Array(~~prompt()))['length'])(12 znaków rozstrzygających) PS. Mógłbym użyć tego jako mojego wpisu, ale to po prostu daje mi poczucie kradzieży.
JiminP
3

do

b[500];i;j;main(){scanf("%d%d",&i,&j);printf("%d\n",sprintf(b,"%*s%*s",i,"",j,""));
Patrick
źródło
3

APL (bez +/-, bez przerywników remisów, 8 lub 10 znaków)

Ten wpis jest podobny do innych, które łączą sekwencje wygenerowane z danych wejściowych i znajdują długość ... ale jest w APL, co może wydawać się mylące nawet w przypadku takiego małego problemu. Użyłem Dyalog APL , który oferuje bezpłatną licencję edukacyjną.

Kod:

⍴⊃⍪⌿⍳¨⎕⎕

Z prawej do lewej:

  • Każda quote-quad ( ) żąda od użytkownika danych wejściowych i ocenia je.
  • Każdy operator ( ¨) stosuje funkcję generatora indeksu ( ) do każdego elementu tablicy po prawej stronie.
  • Spłaszcza to wynikową tablicę tablic w jedną tablicę. Tablica wejściowa jest redukowana do płaskiej listy przez operator redukcji ( /), który składa tablicę za pomocą funkcji konkatenacji ( ,). Ze względu na to wyzwanie stosuje się jednowymiarowy operator redukcji ( ) wraz z operatorem konkatenacji wzdłuż pierwszej osi ( ).
  • W wyniku zastosowania operatora redukcji tablica jest zamknięta , co przypomina umieszczenie jej w torbie; wszystko, co widzimy na zewnątrz, to torba, a nie jej zawartość. Operator ujawnienia ( ) podaje nam zawartość dołączonej tablicy (torby).
  • Wreszcie, funkcja shape-of ( ) podaje nam długości wymiarów tablicy. W tym przypadku mamy tablicę jednowymiarową, więc otrzymujemy liczbę elementów w tablicy, co jest naszym wynikiem.

Jeśli musimy jawnie wyprowadzić wynik, możemy to zrobić w następujący sposób:

⎕←⍴⊃⍪⌿⍳¨⎕⎕

Porównywalny kod Python, z odpowiednimi symbolami APL powyżej:

import operator

⎕←     ⍴    ⌿        ⍪                 ¨              ⍳                ⎕        ⎕         ⊃
print (len (reduce (operator.__add__, [map (lambda n: range (1, n+1), [input(), input()])][0])))

Chciałbym wiedzieć, czy jest krótsza wersja możliwe w APL - inną, prostszą wersją wymyśliłem, że ma więcej wyłączników tie (choć wciąż na 8 znaków) wynosi: ⍴(⍳⎕),⍳⎕.

Dillon Cower
źródło
Czy Twój generator indeksów zaczyna się od 1 czy 0?
MrZander
3

Nie widziałem, żeby ktoś robił to elektrotechnicznie, więc oto moje zdanie (w rubinach):

def please_sum(a, b)
    return (a&b !=0)? please_sum( ((a&b)<<1) , a^b ):a^b
end

Jest to trochę brzydkie, ale wykonuje zadanie. Dwie wartości są porównywane bitowo AND. Jeśli nie mają one żadnych wspólnych bitów, nie ma „przeniesienia” do następnej kolumny binarnej, więc dodawanie może zostać zakończone poprzez bitowe XORich wprowadzenie. Jeśli istnieje przeniesienie, musisz dodać przeniesienie do bitów XOR. Oto mały rubinowy skrypt, za pomocą którego upewniłem się, że moja cyfrowa logika nie jest zbyt zardzewiała:

100.times do
    a=rand 10
    b=rand 10
    c=please_sum(a,b)
    puts "#{a}+#{b}=#{c}"
    end

Twoje zdrowie!

Noah
źródło
3

Seed , 3904 3846 11 bajtów, 0 +/-, 10 wyłączników remisowych

4 141745954
Krzysztof Szewczyk
źródło
2

Shell, 52

read a
read b
(seq 1 $a;seq 1 $b)|wc|awk '{print$1}'

Jest to w zasadzie ta sama odpowiedź, którą podałem w przypadku innego problemu.

Joey Adams
źródło
Podobne: xargs -n1 jot | wc -lktóra przyjmuje tę samą -redukcję, awkale nie widzę, jak tego uniknąć wxargs
Ben Jackson
+/- i wyżej wymienione remisy są interesujące, a nie postacie.
użytkownik nieznany
2

do

a,b;A(int a,int b){return a&b?A(a^b,(a&b)<<1):a^b;}
main(){scanf("%d%d",&a,&b);printf("%d\n",A(a,b));}
saeedn
źródło
Naliczyłem 20 remisów ... Mam rację?
FUZxxl,
2
22 remis: 0 /*=., 7 (, 7 ), 7 ,, 1[0-9]
saeedn
2

DO#

Nie jest najkrótszy pod żadnym względem:

private static int getIntFromBitArray(BitArray bitArray)
{
    int[] array = new int[1];
    bitArray.CopyTo(array, 0);
    return array[0];
}

private static BitArray getBitArrayFromInt32(Int32 a)
{
    byte[] bytes = BitConverter.GetBytes(a);
    return new BitArray(bytes);
}

static void Main(string[] args)
{
    BitArray first = getBitArrayFromInt32(int.Parse(Console.ReadLine()));
    BitArray second = getBitArrayFromInt32(int.Parse(Console.ReadLine()));
    BitArray result = new BitArray(32);

    bool carry = false;
    for (int i = 0; i < result.Length; i++)
    {
        if (first[i] && second[i] && carry)
        {
            result[i] = true;
        }
        else if (first[i] && second[i])
        {
            result[i] = false;
            carry = true;
        }
        else if (carry && (first[i] || second[i]))
        {
            result[i] = false;
            carry = true;
        }
        else
        {
            result[i] = carry || first[i] || second[i];
            carry = false;
        }
    }
    Console.WriteLine(getIntFromBitArray(result));
}
Matthew Steeples
źródło
To męczące, Matthew.
Cary Swoveland,
2

J, 15 7 znaków, 1 remis, niekompletny program

To jest moja próba J. To nie jest pełny program, ponieważ jeszcze nie wymyśliłem, jak go napisać. Wystarczy umieścić tę linię w skrypcie, aby uzyskać funkcję, pktórej można użyć do dodania dowolnej liczby liczb. Jest to monada i wymaga listy liczb do dodania (takich jak p 1 2 3 4):

p=:#@#~

Pomysł jest bardzo prosty. Funkcja jest napisana milczącym aka bezsensownym stylem. Oto precyzyjna definicja:

p=:3 :'##~y'

Czytaj od prawej do lewej. W wersji ukrytej @komponuje części funkcji. (jak ∘ w matematyce [(f∘g) (x) = f (g (x)])

  • yjest parametrem p.
  • ~czyni czasownik zwrotnym. Z jakiegoś czasownika m, m~ ajest równa a m a.
  • #(kopiowanie, a#b): każdy element ajest replikowany iNiekiedy, gdy ijest elementem w tej samej podziałki, dla bieżącego elementu az b. W ten sposób #~replikuje element n nrazy.
  • #(count, #b): Zlicza liczbę elementów w b.

Wniosek: J jest niesamowity i mniej czytelny niż Perl (co czyni go jeszcze bardziej niesamowitym)

Edycje

  • 15 -> 7 za pomocą #zamiast i.. Tak! Mniej znaków niż skrypt golfowy.

Więcej programu

Ten pyta o dane wejściowe, ale wciąż nie jest to pełny program: (13 znaków, 3 przerywacze)

##~".1!:1<#a:
FUZxxl
źródło
J jest zdecydowanie niesamowity, ale wierzcie mi, nie można po prostu pominąć analizowania części problemu, gdy rozwiązuje się z nim wyzwania ;-)
JB
@JB Cóż, możesz użyć wbudowanej funkcji doJ, ale ciągle pojawiają się błędy domeny.
FUZxxl,
2

JavaScript (17 znaków rozstrzygających)

eval('걢갽거걲걯걭거건갨걡갽거걲걯걭거건갨걹갽걦걵걮걣건걩걯걮갨걡갩걻걣갽걮걥걷갠걕걩걮건갸걁걲걲걡걹갨걡갩갻걦걯걲갨걩갠걩걮갠걣갩걩걦갨걩갽갽걾걾걩갩걸갮거걵걳걨갨갱갩걽갬걸갽걛걝갩갩갻걹갨걡갩갻걹갨걢갩갻걡걬걥걲건갨걸갮걬걥걮걧건걨갩갻'['split']('')['map'](function(_){return String['fromCharCode'](_['charCodeAt'](~~[])^0xac00)})['join'](''))

: P („Obfuscated”, aby zmniejszyć liczbę znaków rozstrzygających. Wewnętrznie, to jest b=prompt(a=prompt(y=function(a){c=new Uint8Array(a);for(i in c)if(i==~~i)x.push(1)},x=[]));y(a);y(b);alert(x.length); .)

JiminP
źródło
2

DO#,

Program działa na 1 linii; rozdzielone na wiele linii, aby uniknąć przewijania w poziomie.

using C=System.Console;
class A{
static void Main(){
int a,b,x,y;
a=int.Parse(C.ReadLine());
b=int.Parse(C.ReadLine());
do{x=a&b;y=a^b;a=x<<1;b=y;}while(x>0);
C.WriteLine(y);
}}
sirchristian
źródło
1

Clojure (44 znaki)

(pr(#(count(concat(%)(%)))#(repeat(read)0)))

Edycja: naprawiono, aby drukować na STDOUT zamiast tylko zwracania sumy.

Omar
źródło
+/- i wyżej wymienione remisy są interesujące, a nie postacie.
użytkownik nieznany
1

Scala

  • wynik:
    • + -: 0
    • (). : 5 + 5 + 3 = 13

Kod:

(List.fill (readInt) (1) ::: List.fill (readInt) (2)).size
  • List.fill (4) (7) tworzy List (7, 7, 7, 7)
  • a ::: b łączy 2 listy w jedną
  • Reszta powinna być oczywista
nieznany użytkownik
źródło
1

K, 11

{#,[!x;!y]}

Ta sama sztuczka konkatenacji jak rozwiązanie R. Czytanie od prawej do lewej: Zliczyć dwie zmienne wejściowe, połączyć, a następnie policzyć.

tartin
źródło
1

PowerShell , 27 42 bajtów, 0 +-, 4 1 wtórny

Dzięki mazzy za uratowanie +ai 4 pomocników

$args|%{[int[]]$_*$_}|measure|select count

Wypróbuj online! lub ładny stolik za dodatkowe 3 bajty

-Lub- dodając cztery pomocnicze, aby zapisać 19 bajtów:

32 23 bajty, 1 0 +-, 12 5 sekundników

-9 bajtów dzięki mazzy

($args|%{,$_*$_}).count

Wypróbuj online!

Dla każdego argumentu nwypychamy elementy tablicy (składające się, [n]ale nie jest to ważne) do potoku, które są pogrupowane według parens, a następnie zliczone.

Veskah
źródło
1
23 bajty, 0 + -, 5
sekundników
1
Przepraszam, to NIE jest codegolf. 0 + -, 3 sekundy, 27 bajtów
mazzy
1
@mazzy To 4 według moich obliczeń, ale mimo to dziękuję: D
Veskah
1
masz rację. dzięki. 0 + -, 1 Tie Breaker, 42 bajty . możesz dodać |fldo ładnego formatu Wypróbuj online!
mazzy
1

Keg (SBCS na wiki Keg)

Zasadniczo port odpowiedzi R.

¿¿Ï_"Ï_!.

Wyjaśnienie

¿¿#        Take 2 integer inputs
  Ï_"Ï_#   Generate 2 arrays the length of the integer inputs
       !.# Output the length of the stack
ZA
źródło
1

05AB1E , 2 4 bajty, 0 +/-

F>

Wypróbuj online!

Przepraszam, jeśli źle zrozumiałem to wyzwanie, ale byłem zaskoczony, że nie było odpowiedzi 05AB1E. Najkrótsza odpowiedź w tym języku, którą mogłem wymyślić, która nie używa + ani wbudowanej funkcji sumowania.

Wyjaśnienie:

 F   #Loop A many times
  >  #Increment B
     #(Implicit output)

-2 bajty dzięki Grimy.

Bismarck71
źródło
1
Dzięki! Nadal jestem nowy w 05AB1E.
Bismarck71
1

Python 3

Bez polegania na ukrytych podsumowaniach w innych funkcjach.

h=input;x,y=int(h()),int(h())
while y:c=x&y;x^=y;y=c<<1
print(x)

Wypróbuj online!

Hunaphu
źródło
0

re

main(){
    int a,b;
    readf("%d %d",&a,&b);
    write((new int[a]~new int[b]).length);
}

tym razem przy użyciu długości tablic

maniak zapadkowy
źródło