J, 126 124 121 119 116 115 113 105 116 115 112 znaków
'|'s":(' 's[:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1[(s=:[,.~,.)9!:7'\=/<=>/=\|='
Pobiera dane z klawiatury. Przykład:
'|'s":(' 's[:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1[(s=:[,.~,.)9!:7'\=/<=>/=\|='
6302715408
|\==============================================================/|
|| (__) (__) (__) (__) (__) (__) (__) (__) (__) (__) ||
|| || (__) (__) (__) || (__) || (__) (__) || ||
|| || || || || || || || || || || ||
|| (__) || || || (__) || (__) || || (__) ||
|<==============================================================>|
|| (__) (__) || (__) (__) (__) || (__) || (__) ||
|| || (__) || (__) (__) || || (__) || (__) ||
|| || (__) || || || || || (__) || (__) ||
|| || || || || || || || (__) || || ||
|| || || || || || || || || || || ||
|| || || (__) || || || (__) || (__) || ||
|| (__) || (__) || || (__) (__) || (__) || ||
|| (__) || (__) (__) (__) (__) (__) || (__) || ||
|| (__) (__) (__) (__) (__) (__) (__) || (__) (__) ||
|| (__) (__) (__) (__) (__) (__) (__) (__) (__) (__) ||
|/==============================================================\|
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
[(s=:[,.~,.)9!:7'\=/<=>/=\|='
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:
2 2$<"0[1 2 3 4
┌─┬─┐
│1│2│
├─┼─┤
│3│4│
└─┴─┘
ale po przedefiniowaniu wygląda to tak:
2 2$<"0[1 2 3 4
\===/
|1|2|
<===>
|3|4|
/===\
(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:
3 5$'abcdefghijklmno'
abcde
fghij
klmno
'-' s 3 5$'abcdefghijklmno'
-abcde-
-fghij-
-klmno-
Finał [
służy jedynie do oddzielenia konfiguracji od następnej części.
2) Dane wejściowe i reprezentacja
,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
".,.1!:1[1
pobiera dane z klawiatury i dzieli je na poszczególne cyfry:
".,.1!:1[1
314159
3 1 4 1 5 9
((i.5)</5|])
tworzy reprezentację zer i jedynek dolnej części liczydła:
((i.5)</5|]) 3 1 4 1 5 9
1 1 1 1 0 1
1 0 1 0 0 1
1 0 1 0 0 1
0 0 1 0 0 1
0 0 0 0 0 0
|:@(1,.<&5)
tworzy reprezentację zer i jedynek górnej części liczydła:
|:@(1,.<&5) 3 1 4 1 5 9
1 1 1 1 1 1
1 1 1 1 0 0
Te dwie części są zapakowane razem za pomocą ;
:
(|:@(1,.<&5);((i.5)</5|])) 3 1 4 1 5 9
\=======================/
|1 1 1 1 1 1|1 1 1 1 0 1|
|1 1 1 1 0 0|1 0 1 0 0 1|
| |1 0 1 0 0 1|
| |0 0 1 0 0 1|
| |0 0 0 0 0 0|
/=======================\
Następnie pudełka są umieszczane jeden na drugim, tworząc podstawę liczydła, dając:
,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
\===========/
|1 1 1 1 1 1|
|1 1 1 1 0 0|
<===========>
|1 1 1 1 0 1|
|1 0 1 0 0 1|
|1 0 1 0 0 1|
|0 0 1 0 0 1|
|0 0 0 0 0 0|
/===========\
3) Wyjście
'|'s":(' 's[:,.(_6[\' || (__)'){~(,-.))&.>
&.>
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:
2 5$1 0 1 0 1
1 0 1 0 1
1 0 1 0 1
(,-.) 2 5$1 0 1 0 1
1 0 1 0 1
1 0 1 0 1
0 1 0 1 0
0 1 0 1 0
To naprawdę część reprezentacji, ale dla celów golfowych lepiej jest mieć ją w tej sekcji. Zastosowano do poprzedniego wejścia:
(,-.)&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
\===========/
|1 1 1 1 1 1|
|1 1 1 1 0 0|
|0 0 0 0 0 0|
|0 0 0 0 1 1|
<===========>
|1 1 1 1 0 1|
|1 0 1 0 0 1|
|1 0 1 0 0 1|
|0 0 1 0 0 1|
|0 0 0 0 0 0|
|0 0 0 0 1 0|
|0 1 0 1 1 0|
|0 1 0 1 1 0|
|1 1 0 1 1 0|
|1 1 1 1 1 1|
/===========\
[:,.(_6[\' || (__)'){~
Zera i jedynki są teraz używane do wyboru łańcucha reprezentującego koralik lub jego brak:
([:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
\====================================/
| (__) (__) (__) (__) (__) (__) |
| (__) (__) (__) (__) || || |
| || || || || || || |
| || || || || (__) (__) |
<====================================>
| (__) (__) (__) (__) || (__) |
| (__) || (__) || || (__) |
| (__) || (__) || || (__) |
| || || (__) || || (__) |
| || || || || || || |
| || || || || (__) || |
| || (__) || (__) (__) || |
| || (__) || (__) (__) || |
| (__) (__) || (__) (__) || |
| (__) (__) (__) (__) (__) (__) |
/====================================\
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:
(' 's[:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
\======================================/
| (__) (__) (__) (__) (__) (__) |
| (__) (__) (__) (__) || || |
| || || || || || || |
| || || || || (__) (__) |
<======================================>
| (__) (__) (__) (__) || (__) |
| (__) || (__) || || (__) |
| (__) || (__) || || (__) |
| || || (__) || || (__) |
| || || || || || || |
| || || || || (__) || |
| || (__) || (__) (__) || |
| || (__) || (__) (__) || |
| (__) (__) || (__) (__) || |
| (__) (__) (__) (__) (__) (__) |
/======================================\
Po tym, wszystko, co pozostało, to przekonwertować to na ciąg za pomocą ":
, abyśmy mogli umieścić go między dwiema kolumnami |
:
'|'s":(' 's[:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
|\======================================/|
|| (__) (__) (__) (__) (__) (__) ||
|| (__) (__) (__) (__) || || ||
|| || || || || || || ||
|| || || || || (__) (__) ||
|<======================================>|
|| (__) (__) (__) (__) || (__) ||
|| (__) || (__) || || (__) ||
|| (__) || (__) || || (__) ||
|| || || (__) || || (__) ||
|| || || || || || || ||
|| || || || || (__) || ||
|| || (__) || (__) (__) || ||
|| || (__) || (__) (__) || ||
|| (__) (__) || (__) (__) || ||
|| (__) (__) (__) (__) (__) (__) ||
|/======================================\|