Tallying to prosty system liczenia, który działa w bazie 5. Na całym świecie stosuje się różne różne systemy liczenia, ale ten, który jest używany w większości krajów anglojęzycznych, jest być może najprostszy - zliczanie jednostek poprzez oznaczenie linii pionowych, a następnie każdy piąty znak przekreśla poziomą linię przez poprzedni zbiór czterech. To grupuje znaczniki w grupach po 5 (i ułatwia ich szybkie liczenie).
Zamierzasz napisać program, który wyświetla znaczniki do określonej wartości. Ale liczenie tylko w bazie 5 jest nudne! Dlatego twój program powinien także być w stanie wyświetlać dane statystyczne w różnych bazach.
Wejście
Dane wejściowe będą jedną lub dwie nieujemne wartości całkowite oddzielone przecinkiem (np. 9
Lub 8,4
). Pierwsza liczba to wartość, która powinna być wyświetlana przez licznik. Druga wartość jest podstawą sumy. Jeśli nie podano drugiej wartości, użyj podstawy 5 .
Wynik
Wyjściową wartością będzie wprowadzona wartość reprezentowana jako znaczniki artystyczne ASCII. Oto kilka przykładów, z którymi możesz przetestować swój program - wyniki powinny dokładnie do nich pasować!
Dane wejściowe: 12
lub12,5
| | | | | | | | | |
-+-+-+-+- -+-+-+-+- | |
| | | | | | | | | |
Wejście: 7,3
| | | | |
-+-+- -+-+- |
| | | | |
Wejście: 4,2
| |
-+- -+-
| |
Wejście: 6,1
lub 6,10
(zauważ spacje wiodące)
| | | | | |
| | | | | |
| | | | | |
Należy również zauważyć, że podstawa 1 ma być niespójna - należy stosować tylko pionowe linie.
Jeśli jedna z wprowadzonych wartości wynosi 0, nie powinno być żadnych wyników (a twój program powinien zakończyć się z wdziękiem).
Zasady
- To jest golf golfowy , więc wygrywa najkrótsza poprawna implementacja (w bajtach).
- Wejście / wyjście może być na dowolnym odpowiednim nośniku (np. Stdin / stdout, plik ...).
- Dane wejściowe mogą mieć postać wielu argumentów wiersza polecenia lub być oddzielone spacjami itp., Jeśli są bardziej odpowiednie dla języka docelowego.
- Końcowe znaki nowej linii są dozwolone w danych wyjściowych. Końcowe spacje nie są. Ta reguła ma zastosowanie tylko wtedy, gdy istnieje wyjście (tj. Nie wtedy, gdy wprowadzona wartość wynosi 0).
- Twój kod musi być ustawiony domyślnie na base 5, gdy nie wprowadzono żadnej bazy.
6,1
wyglądać bardziej-+- -+- -+- -+- -+- -+-
?-+-
reprezentowałby dwa, ponieważ istnieje linia pionowa i pozioma ocena przez nią. Baza 1 miałaby tylko pionowe linie. @AndoDaan poprawione.--- --- --- --- --- ---
więc. Aby zachować spójność z innymi bazami, powinieneś uderzaćb-1
poziomo w linie pionowe. Jeśli ma to być niespójne, należy to wyraźnie zaznaczyć.Odpowiedzi:
CJam 103 85 72 znaki
Wypróbuj na http://cjam.aditsu.net/ .
oryginalny
Działa poprzez zdefiniowanie jednego zestawu wysokości ze spacjami, liniami i l dla spacji, które powinny pozostać spacjami. Następnie korzysta z funkcji er (tranliteracji), aby utworzyć drugą linię. Najbardziej nieefektywna część dotyczy przypadków specjalnych 1 i 0. Będę edytować, gdy go poprawię. Wskazówka Za długo zajęłam sobie sprawę: ponieważ drugie wejście to 1 jest takie samo jak nieskończoność lub pierwsze wejście +1, ponowne zdefiniowanie go, gdy jest równe 1, oszczędza dużo pracy.
najbardziej ulepszony jak dotąd z przecinkiem
jak dotąd ulepszony z wprowadzaniem rozdzielanym spacjami
Oczywiście, ponieważ CJam jest naprawdę zaprojektowany do wprowadzania danych rozdzielanych spacjami. Umieszczenie wkładu na 20 3 zamiast 20,3 to ogromna korzyść.
źródło
Python 2 -
111 108 119 144 140 136 135134 134 - SpróbujOk, spróbujmy:
Edycja: Przeoczyłem, że nie powinno być żadnych wyników, jeśli
n==0
lubb==0
. To kosztuje mnie 11 znaków. :(Edycja: Ok, po naprawieniu drugiego problemu wymienionego w komentarzach moje rozwiązanie zasadniczo zbiegło się z rozwiązaniem BeetDemGuise.
źródło
b
w tym przypadku powinna wynosić 5). Wyjaśnię to bardziej w pytaniu. Edycja: och, nieważne, naprawiłeś to tak, jak zrobiłem ten komentarz!n/b
zamiast niejn//b
?Grzmotnąć,
239 228 199 189188Oto moja próba, może być dużo golfa.
Uwaga: drugi wiersz nie odejmuje 5 od 2, ustawia wartość domyślną, jeśli
$2
jest pusty!źródło
{1..$n}
działa zamiast`seq $n`
?h=8;echo {1..$h}
wyjściowe{1..8}
Python -
171143Program jest bardzo prosty:
t,b
. Jeśli to się nie powiedzie, po prostu przypisz prawidłowe wartości.1
, zmień jej wartość na coś, co z łatwością poradzi sobie ze wszystkimi liniami pionowymi (t+1
).t
ib
są niezerowe.EDYCJA 1: Użyj
input
funkcji zamiastraw_input
po zabawie.EDYCJA 2: Dziękuję Falko za wskazanie małego błędu za pomocą mojej kontroli niezerowej. Teraz nasz kod jest w zasadzie identyczny, bez niektórych nazw zmiennych i pewnej małej logiki.
EDYCJA 3: Dzięki temu, jak Python porównuje sekwencje i różne typy , możemy porównać
i
do a,list
aby uzyskać krótszą wersję naszegotry...except
bloku.Oto wersja bez golfa:
źródło
t&b
jestFalse
za 10,5. W przeciwnym razie nasze rozwiązania będą zbieżne! ;)i
jest to skalar, czy lista. Wtedy moglibyśmy upuścićtry ... except
potwora.list
jest zawsze większe niż int. Równieżlist
są porównywane w porządku leksykograficznym. Więc jeśli porównamy,[0]<i
to zawsze zwróci,False
jeślii
jest liczbą, aTrue
jeślii
jest listą (z niezerowym pierwszym elementem).Java, 343
Mniej golfa:
źródło
i
long
i++%b>0
i++<n%b
b=b<2?(int)2e9:b
Perl -
167165156bez golfa
źródło
C - 193
Tak mi przykro. Radzenie sobie ze specjalnym przypadkiem dla 1 było trochę kiepskim hackem, więc myślę, że można by to pograć w golfa przy lepszym podejściu. Ponadto ten kod zawiera nowy wiersz na początku danych wyjściowych, więc jeśli nie jest to dozwolone, daj mi znać.
Oczywiście bardzo brzydkie definicje zawsze pomagają :)
Liczba znaków obejmuje tylko niezbędne spacje i nowe linie.
źródło
printf
zputs
, i zastępowaniereturn
z operatora potrójnego.puts
polega na tym, że dodaje za każdym razem nową linię :(. A dla operatora trójskładnikowego nie jest możliwe dodanie w nichreturn
s lubfor
s !. Twój komentarz dał mi pomysł, aby zapisać kilka dodatkowych znaków bardzo łatwo usuwającreturn
chociaż. Dzięki!C # 271 bajtów
Nie najkrócej, nie mogłem odczytywać odczytu wejściowego, ponieważ musiał zaakceptować 0 jako wejście.
Sformatowany kod:
źródło
Lua -
219203 bajtówPoszedłem zrobić make d kopii b kopii „|”, a następnie dodać r kopii „|” na końcu. Czuję, że może powinienem był pójść z „podsumowaniem” „|” po strunie pojedynczo.
bez golfa:
Próba:
źródło
JavaScript (193)
To może być zbyt skomplikowane.
Skomentowana wersja
źródło
Python -
127123122Po prostu wkradam się z nieco krótszą wersją Pythona.
edycja: Naprawiono 0, że nic się nie drukowało i rejestrator, skończyło się na tej samej długości
źródło
C (207 znaków)
Nowa linia tuż przed nią
exit
służy wyłącznie czytelności.scanf
bezwstydne użycie skradzione Allbeertowi. Zauważ, że to rozwiązanie nie kompiluje się z gcc, ponieważ próbuje wymusić nieistniejący prototypexit
. Skompiluj za pomocą działającego kompilatora C.tcc
. Ponadto ta funkcja może, ale nie musi działać na platformach 64-bitowych. Używaj ostrożnie.Oto oryginalna nie golfowa implementacja oparta na:
źródło
Python 2 ,
134126123114 bajtówWypróbuj online!
Stare pytanie, które znam, ale i tak fajnie jest spróbować. Szansa na wypróbowanie kilku sztuczek, których nauczyłem się od czasu dołączenia.
źródło