Napisz program, który wizualizuje długi podział ze sztuką ASCII. Dane wejściowe składają się z dwóch liczb całkowitych, licznika i mianownika, przy użyciu wybranego formatu wejściowego.
Przykłady:
1234 ÷ 56:
22
----
56|1234
112
---
114
112
---
2
1002012 ÷ 12:
83501
-------
12|1002012
96
---
42
36
--
60
60
--
12
12
--
0 ÷ 35
0
-
35|0
Zasady:
- Używanie operatora podziału języka programowania toDozwolone użycie .
- Dozwolone jest także użycie obsługi dużej liczby całkowitej.
- Dla spójności:
- Jeśli iloraz wynosi zero, wydrukuj jedno zero na końcu trampoliny.
- Jeśli reszta to zero, nie drukuj jej.
- Nie drukuj zer wiodących na żadnych liczbach.
- Dozwolone są nadmierne znaki nowej linii na końcu i końcowe spacje po prawej stronie.
- Rozwiązanie z najmniejszą liczbą postaci wygrywa.
Limity:
- 0 <= licznik <= 10 72 - 1
- 1 <= mianownik <= 9999999
Oznacza to, że wynik nigdy nie będzie szerszy niż 80 kolumn.
Pakiet testowy i przykładowa implementacja:
Możesz użyć long-division.c ( gist ), aby przetestować swój program. W rzeczywistości jest to skrypt bash z programem C. Ulepsz go, aby wywołać program w pakiecie testowym. Spójrz na kod C na dole, aby zobaczyć implementację referencyjną. Daj mi znać, jeśli występują problemy z programem przykładowym lub pakietem testowym.
$ ./long-division.c 10 7
1
--
7|10
7
--
3
$ ./long-division.c
PASS 1234 ÷ 56
PASS 1002012 ÷ 12
PASS 1 ÷ 1
--- snip ---
Score: 35 / 35
All tests passed!
Edycja: Na żądanie umieszczam dane wejściowe zestawu testów i oczekiwane dane wyjściowe w plikach tekstowych ( gist ). Przykładowe użycie (bash):
cat input | while read nd; do
./program $nd |
sed 's/\s*$//' | sed -e :a -e '/^\n*$/{$d;N;};/\n$/ba'
done > output
diff -u expected output
Dziwne polecenia sed odfiltrowują końcowe znaki nowej linii i spacje z wyników programu.
źródło
Odpowiedzi:
Python 3,
284257 znakówdiv.py
Stosowanie:
python3 div.py
Wejście: z klawiatury
test.py
oczekiwane dopasowania wyjściowe
Wersje:
1. 284
2. 257 :
s,z,f=0,0,0
→s=z=f=0
;z and f
→z*f
; lepsze zapętlenie; usunąłem kilka nowych linii.źródło
Haskell, 320 znaków
Przechodzi wszystkie testy. Chociaż jest to dość golfa - myślę, że jest jeszcze wiele do zrobienia ...
read
połączenia, co zmniejsza potrzebę dzwonieniashow
,show
cos
jest wystarczające, jeśli nie warto.źródło
-XUnicodeSyntax
).JavaScript (400
394418)UWAGA: kuszące, jak się wydaje, aby ogolić kilka znaków, zamieniając
c=(c==0)?
je nac=!c?
to nie jest użyteczny, ponieważ powoduje pływających błędy związane punktowych.http://jsfiddle.net/nLzYW/9/
Przykładowe wykonanie:
Edycja 1 : Drobne poprawki błędów, liczne optymalizacje kodu.
Edycja 2 : Napraw błąd z 1/7 generującym dodatkowe wyjście.
źródło
d(1,7)
(i podobne testy) powtórz mianownik, zamiast drukować nic. Jest to błędne, ponieważ liczba ta powinna być cyfrą ilorazową razy mianownik, który wynosi zero.JavaScript: (372)
Wywołaj za pomocą i (dzielnik, liczba). Codegolfed JS: http://jsfiddle.net/puckipedia/EP464/ Ungolfed (holenderski) JS: http://jsfiddle.net/puckipedia/M82VM/
Zwraca długi podział (w formacie holenderskim, gdy się go nauczyłem):
Testcase:
źródło