Zaimplementuj algorytm podziału w swoim ulubionym języku, który obsługuje dzielenie liczb całkowitych. Musi obsługiwać tylko liczby dodatnie - ale punkty bonusowe, jeśli obsługuje także podział ujemny i znak mieszany. Wyniki są zaokrąglane w dół dla wyników ułamkowych.
Program nie może zawierać /
, \
, div
lub podobne podmioty. Musi to być procedura, która nie korzysta z natywnych możliwości podziału języka w tym języku.
Musisz tylko obsłużyć podział 32-bitowy. Używanie powtarzanego odejmowania nie jest dozwolone.
Wejście
Weź dwa wejścia na standardowe wejście oddzielone nowymi liniami lub spacjami (twój wybór)
740
2
Wynik
W takim przypadku wynik byłby 370
.
Rozwiązanie, które jest najkrótsze, wygrywa.
code-golf
arithmetic
division
Thomas O
źródło
źródło
740,2
również dozwolone dla danych wejściowych? tzn. oddzielone przecinkiem?Odpowiedzi:
Python - 73 znaki
Pobiera dane oddzielone przecinkami, np
740,2
źródło
JavaScript, 61
To sprawia, że łańcuch ma długość dywidendy
,,,,,,
(6) i dzieli się na dzielniku,,,
(3), w wyniku czego powstaje tablica o długości 3['', '', '']
:, której długości następnie odejmuję. Zdecydowanie nie najszybszy, ale mam nadzieję, że mimo to interesujący!źródło
A=Array,P=prompt,P((''+A(+P())).split(','+A(+P())).length)
JavaScript - 36 znaków
źródło
alert
zp
złowi Ci kilka dodatkowych znaków. :)Mathematica: 34 znaki
Rozwiązuje symbolicznie równanie (xa == b)
źródło
Solve[x#==#2]&@@Input[]
Python - 72 znaki
Pobiera dane oddzielone przecinkami, np. 740,2
źródło
Python, 37
Krok 1. Konwertuj na unary.
Krok 2. Algorytm podziału jednostkowego.
źródło
Python - 41 znaków
Pobiera dane oddzielone przecinkami, np
740,2
źródło
Python, 70
Coś szalonego, co właśnie pomyślałem (używając danych oddzielonych przecinkami):
Jeśli zaakceptujesz małe błędy precyzji float,
round
funkcję można usunąć.źródło
Yabasic - 17 znaków
źródło
PHP - 82 znaki (buggy)
Jest to jednak bardzo proste rozwiązanie - nie obsługuje ułamków ani różnych znaków (skoczyłby w nieskończoną pętlę). Nie będę wchodził w szczegóły w tym, jest to dość proste.
Dane wejściowe są w standardowym, oddzielonym nowym wierszu.
PHP - 141 znaków (pełny)
Wejście i wyjście takie same jak poprzednie.
Tak, jest prawie dwa razy większy niż poprzedni, ale:
Ponowne formatowanie i objaśnienie:
źródło
Ruby 1.9, 28 znaków
Reszta podziału, 21 znaków
Próba:
Dla Ruby 1.8:
źródło
('a'*a+'b').split('a'*b).size-1
3 postacie większe.APL (6)
/
nie jest tutaj podział, alefoldr
. tj .F/a b c
jesta F (b F c)
. Jeśli nie mogę użyć,foldr
ponieważ się nazywa/
, można to zrobić za pomocą 9 znaków:Wyjaśnienie:
⎕
:input()
⍟⎕
:map(log, input())
-/⍟⎕
:foldr1(sub, map(log, input()))
*-/⍟⎕
:exp(foldr1(sub, map(log, input())))
⌊*-/⍟⎕
:floor(exp(foldr1(sub, map(log, input()))))
źródło
PHP, 55 znaków
Dane wyjściowe (740/2): http://codepad.viper-7.com/ucTlcq
źródło
<?$a=fgetcsv(STDIN);echo$a[0]*pow($a[1],-1);
prostu użyj przecinka zamiast spacji, aby oddzielić liczby.Scala 77
źródło
Haskell, 96 znaków
Wejście jest w jednym wierszu.
Kod po prostu szuka odpowiedzi, biorąc dzielnik
d
i mnożąc go przez wszystkie liczby całkowiten >= 0
. Niechm
będzie dywidenda. Największyn
taki, żen * d <= m
zostanie wybrany jako odpowiedź. Kod faktycznie wybiera najmniejszą zn
nichn * d > m
i odejmuje 1 od niego, ponieważ mogę wziąć pierwszy element z takiej listy. W innym przypadku musiałbym wziąć ostatni, ale ciężko jest zabrać ostatni element z nieskończonej listy. Cóż, wykaz może być skończony, ale Haskell nie wie lepiej podczas wykonywania filtru, więc kontynuuje filtrowanie w nieskończoność.źródło
Common Lisp, 42 znaki
Akceptuje wejście oddzielone spacją lub wierszem
źródło
Grzmotnąć,
7264 znakówWyjmij nieskończoną liczbę nowych linii, weź pierwsze x, umieść je wszystkie w pliku o nazwie f, a następnie uzyskaj wielkość f w blokach wielkości y. Skorzystał z rady manatworku, aby zgolić osiem postaci.
źródło
read x y
. Po usunięciu kilku dodatkowych spacji można zmniejszyć do 64 znaków: pastebin.com/Y3SfSXWkPython - 45 znaków
Pobiera dane oddzielone przecinkami, np. 740,2
źródło
Python, 94 znaki
Rekurencyjne wyszukiwanie binarne:
źródło
Python, 148
Inne rozwiązania mogą być krótkie, ale czy mają skalę internetową ?
Oto eleganckie, stałe rozwiązanie, które wykorzystuje moc CHMURY.
Czy wspominałem, że używa również Haskell?
źródło
Python, 46 bajtów
Nikt nie opublikował nudnego rozwiązania odejmowania, więc nie mogłem się powstrzymać.
źródło
Smalltalk , pisk 4. smak
zdefiniuj ten komunikat binarny w liczbie całkowitej:
Po zagraniu w golfa ten iloraz jest nadal długi (88 znaków):
Ale jest dość szybki:
-> 127 ms na moim skromnym komputerze Mac mini (8 MOp / s)
W porównaniu do zwykłego podziału:
-> 31 ms, jest tylko 4 razy wolniejszy
Nie liczę znaków, aby czytać standardowe lub pisać standardowe, Squeak nie został zaprojektowany do pisania skryptów.
Oczywiście bardziej głupie powtarzające się odejmowanie
lub zwykłe głupie wyliczenie
może również działać, ale nie są naprawdę interesujące
źródło
źródło
DC: 26 znaków
Przyznaję, że nie jest to najszybsze rozwiązanie na rynku.
źródło
Python 54
Pobiera dane rozdzielane przecinkami.
Słowa, ponieważ markdown umiera wraz z listą, po której następuje kod ?:
źródło
Q, 46
.
źródło
Odniesienie: http://www.forums.hscripts.com/viewtopic.php?f=13&t=1358
źródło
Python, 40 znaków
źródło
Python, 37
Konstruuje ciąg length
x
('0'*x
) i korzysta z rozszerzonego krojenia, aby wybrać coy
dziesiąty znak, zaczynając od indeksuy-1
. Wyświetla długość wynikowego ciągu.Podobnie jak Gnibbler, wymaga to danych oddzielonych przecinkami. Usunięcie go kosztuje
9
znaki:źródło
Retina 0.7.3, 33 bajty (nie konkuruje)
Język jest nowszy niż wyzwanie. Najpierw pobiera separator spacji z dzielnikiem. Dzielenie przez zero jest niezdefiniowane.
Wypróbuj online
źródło