Napisz najkrótszy program, który pobiera jedną liczbę całkowitą jako dane wejściowe i wypisuje liczydło Suanpan
Przypadki testowe
Wkład:
314159
Wydajność:
|\======================================/|
|| (__) (__) (__) (__) (__) (__) ||
|| (__) (__) (__) (__) || || ||
|| || || || || || || ||
|| || || || || (__) (__) ||
|<======================================>|
|| (__) (__) (__) (__) || (__) ||
|| (__) || (__) || || (__) ||
|| (__) || (__) || || (__) ||
|| || || (__) || || (__) ||
|| || || || || || || ||
|| || || || || (__) || ||
|| || (__) || (__) (__) || ||
|| || (__) || (__) (__) || ||
|| (__) (__) || (__) (__) || ||
|| (__) (__) (__) (__) (__) (__) ||
|/======================================\|
Wkład:
6302715408
Wydajność:
|\==============================================================/|
|| (__) (__) (__) (__) (__) (__) (__) (__) (__) (__) ||
|| || (__) (__) (__) || (__) || (__) (__) || ||
|| || || || || || || || || || || ||
|| (__) || || || (__) || (__) || || (__) ||
|<==============================================================>|
|| (__) (__) || (__) (__) (__) || (__) || (__) ||
|| || (__) || (__) (__) || || (__) || (__) ||
|| || (__) || || || || || (__) || (__) ||
|| || || || || || || || (__) || || ||
|| || || || || || || || || || || ||
|| || || (__) || || || (__) || (__) || ||
|| (__) || (__) || || (__) (__) || (__) || ||
|| (__) || (__) (__) (__) (__) (__) || (__) || ||
|| (__) (__) (__) (__) (__) (__) (__) || (__) (__) ||
|| (__) (__) (__) (__) (__) (__) (__) (__) (__) (__) ||
|/==============================================================\|
Odpowiedzi:
J,
126124121119116115113105116115112 znakówPobiera dane z klawiatury. Przykład:
Główną sztuczką jest nadużywanie boksu J. poprzez redefiniowanie używanych przez niego znaków. W tym celu wykorzystuje parametr globalny -
9!:7
-. Może być miejsce na dalszą grę w golfa, ale szczerze mówiąc cieszyłem się, że dostałem coś, co zrekompensuje moją ostatnią próbę tego pytania .Pasuje do tweeta z wystarczającą liczbą znaków, by powiedzieć „Gaz to zrobił” :-).
Edycja: 3 postacie oszczędności wynikają z pożyczenia odpowiedzi
2 6$' || (__)'
od Jesse Millikana .Dalsza edycja: Straciłem 11 znaków dodając dodatkowe spacje po obu stronach, których nie zauważyłem, nie były obecne.
Wyjaśnienie:
Kod składa się z trzech głównych części:
1) Konfiguracja
To samo składa się z dwóch części.
9!:7'\=/<=>/=\|='
redefiniuje znaki, których J użyje do wyświetlenia pól. Boks J zwykle wygląda tak:ale po przedefiniowaniu wygląda to tak:
(s=:[,.~,.)
definiuje czasownik, którego zamierzam użyć kilka razy później. To okazuje się najlepszym miejscem do zadeklarowania tego. Pobiera znak po lewej stronie i tablicę znaków po prawej stronie i umieszcza tablicę między postacią. Na przykład:Finał
[
służy jedynie do oddzielenia konfiguracji od następnej części.2) Dane wejściowe i reprezentacja
".,.1!:1[1
pobiera dane z klawiatury i dzieli je na poszczególne cyfry:((i.5)</5|])
tworzy reprezentację zer i jedynek dolnej części liczydła:|:@(1,.<&5)
tworzy reprezentację zer i jedynek górnej części liczydła:Te dwie części są zapakowane razem za pomocą
;
:Następnie pudełka są umieszczane jeden na drugim, tworząc podstawę liczydła, dając:
3) Wyjście
&.>
oznacza, że poniższe elementy będą działać kolejno na obu polach.(,-.)
jest to haczyk, który zaneguje dane wejściowe, a następnie doda je na końcu oryginału:To naprawdę część reprezentacji, ale dla celów golfowych lepiej jest mieć ją w tej sekcji. Zastosowano do poprzedniego wejścia:
[:,.(_6[\' || (__)'){~
Zera i jedynki są teraz używane do wyboru łańcucha reprezentującego koralik lub jego brak:Ale teraz, jak wskazał mi Howard, po jednej stronie kulek jest jedno wolne miejsce. Tak więc używamy predefiniowanego
s
czasownika do umieszczenia zawartości każdego pola między dwiema kolumnami spacji:Po tym, wszystko, co pozostało, to przekonwertować to na ciąg za pomocą
":
, abyśmy mogli umieścić go między dwiema kolumnami|
:źródło
Ruby 1.9, 154 znaków
Zakłada, że wejście nie jest zakończone znakiem nowej linii.
Ciekawostka: Ze względu na sposób, w jaki zamieniam cyfry wejściowe na liczby (
$&.hex
jest o jeden bajt krótszy niż$&.to_i
), liczydło faktycznie działa z cyframi szesnastkowymi doe
:Bo
0xf
w górnej połowie magicznie pojawia się trzeci koralik.Gdy zezwalasz na dodatkowe flagi podczas wywoływania skryptu, można to skrócić do 152 bajtów (kod 149 bajtów + 3 bajty dodatkowych flag wywołania):
Uruchom z
ruby -n suanpan.rb
.źródło
Perl (151 znaków)
(
168163158157156154)Wyjaśnienie
Edycje
\n
s na rzeczywiste znaki nowej linii. Nie mogę uwierzyć, że nie myślałem o tym wcześniej!źródło
Windows PowerShell, 191
Historia:
$l
.%
które tworzą cyfry z cyfr.$r
i$b
. I$a
jest również przestarzały. Jak jest$l
.$OFS
jeśli potrzebuję go tylko raz.$f
.-join
takiej potrzeby, ponieważ możemy właściwie wykorzystać dodatkową przestrzeń, aby uzyskać dobry efekt.źródło
Haskell, 243 znaków
Niezbyt sprytnie. Jestem pewien, że można go jakoś skrócić ...
źródło
interact
z x|x=" (__) "|0<1=" || "
.Delphi, 348
Ta wersja tworzy ciąg, który można zapisać tylko raz; Cyfry są obsługiwane przez osobną funkcję, która działa za pomocą
digit modulo m >= value
konstrukcji (negowane, jeśli wartość <0).Delphi, 565Pierwsze podejscie :
Wykorzystuje 3 tablice; jeden dla 7 łańcuchów, które można rozpoznać, jeden dla linii wyjściowych i jeden do mapowania 7 łańcuchów na 11 kolumn (10 cyfr i 1 kolumna początkowa).źródło
GolfScript, 139 znaków
Jeszcze mało golfa, ale pasuje do tweeta (tylko ASCII). Wypróbuj tutaj .
źródło
J, 225
Przechodzi dwa podane testy, powinien działać do co najmniej kilkuset cyfr.
Po pierwsze: tak, tak, grabarze. Po drugie: to krępująco długie. No cóż. Nie zdecydowałem jeszcze, czy zagrać w golfa dalej, czy zwinąć się w pozycji embrionalnej i płakać. (Lub obydwa!)
Oto kilka wyjaśnień zamiast krótszego programu:
źródło
C,
277274 znakówWiesz, wydaje mi się, że po prostu nie mamy tutaj wystarczająco dużo rozwiązań, które naprawdę wykorzystują preprocesor C. Częściowo
#define
dzieje się tak, ponieważ faktycznie zajmują sporo miejsca. Ale wciąż jest tak duży potencjał. Czuję potrzebę zajęcia się tym problemem.Tak lepiej
źródło
Mathematica 281
Przykład
źródło
C 548
Pierwsza wersja, trochę golfa.
źródło
Scala (489 znaków)
Naprawdę kiepska próba.
źródło
Sclipting , 77 znaków
Nagroda dotyczy tweetów , a Twitter zlicza znaki (nie bajty). :)
Napisałem to wiele lat temu (kiedy opublikowano to wyzwanie), ale nigdy go nie opublikowałem, ponieważ wymyśliłem Sclipting po tym, jak to wyzwanie zostało opublikowane. Rozumiem, że jeśli uważasz, że to czyni go niekwalifikowalnym.
Wyjaśnienie
źródło
Pyton,
309301288 znakówWersja kompaktowa:
Wyczyść wersję:
Zauważ, że w celu zagęszczenia zmieniono nazwy zmiennych na jedną literę, a zmieniono opisy list na generatory, które nie wymagają dodatkowych nawiasów.
źródło