... Nie tak, prawda? Zadanie jest proste, wypisz następujący tekst:
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
||` |||1 |||2 |||3 |||4 |||5 |||6 |||7 |||8 |||9 |||0 |||- |||= |||BS ||
||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
||TAB |||Q |||W |||E |||R |||T |||Y |||U |||I |||O |||P |||[ |||] |||\ ||
||______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__||
|/______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|
_________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
||CAPS |||A |||S |||D |||F |||G |||H |||J |||K |||L |||; |||' |||ENTER ||
||_______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/_______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
___________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ___________
||SHIFT |||Z |||X |||C |||V |||B |||N |||M |||, |||. |||/ |||SHIFT ||
||_________|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||_________||
|/_________\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/_________\|
To jest klawiatura przyszłości, ponieważ w przyszłości spacje nie mają znaczenia, podobnie jak spacje.
Aby ci było nieco łatwiej:
0123456789ABC...XYZ-=[]\;',./
- Znaki te znajdują się na klawiszach o długości 6 (łącznie z wypełnieniem).TAB / BS / ENTER
- Te klucze mają długość 10 (łącznie z wypełnieniem).CAPS
- Ten klucz ma długość 11 (łącznie z wypełnieniem).SHIFT
- Ten klucz ma długość 13 (w tym obicie z obu stron).
Każdy pojedynczy klucz wygląda mniej więcej tak:
____
||* ||
||__||
|/__\|
Należy jednak pamiętać, że dwa kolejne klucze nie są:
____ ____
||* ||||* ||
||__||||__||
|/__\||/__\|
Ale są „połączone”:
____ ____
||* |||* ||
||__|||__||
|/__\|/__\|
To wyzwanie nie powinno być takie złe, powodzenia; nie przegap nadużywania powtórzeń! Ale nie lekceważ też „specjalnych” kluczy;).
Zwycięski?
Najkrótszy kod wygrywa, ponieważ znasz ten kod-golf .
code-golf
ascii-art
kolmogorov-complexity
Urna Magicznej Ośmiornicy
źródło
źródło
Odpowiedzi:
V ,
189, 179, 175, 164, 161, 157, 155, 149, 145, 141, 135 bajtówWypróbuj online!
Ta odpowiedź jest teraz dostępna na Twitterze!
Zobacz, jak biegnie! Jest to nieco zmodyfikowana wersja, która jest aktualizowana podczas pracy, abyś mógł zobaczyć, jak to działa. To jest przestarzała wersja, ponieważ nie udało mi się jeszcze jej nagrać, ale ogólne podejście jest identyczne.
Jest to prawdopodobnie najdłuższa odpowiedź V, jaką kiedykolwiek napisano. Z pewnością nie pomogło to, że tłumacz V jest bardzo wolny. Napisanie pierwszej wersji zajęło mi około godziny, ale wielokrotnie do niej wracałem, żeby za każdym razem golić kilka bajtów. Ponieważ pełna klawiatura ma 1215 bajtów, obecnie ta odpowiedź jest o 91% krótsza niż wynik, więc jestem całkiem zadowolony z wyników.
Ponieważ zawiera on niektóre niedrukowalne znaki i wiele wulgarnych znaków spoza ASCII, oto zrzut heksowy:
Jak do cholery to działa?
W porządku, to wyjaśnienie będzie kłopotliwe. Jesteś gotowy? Po pierwsze, musimy wprowadzić litery, abyśmy mogli zbudować wokół nich klucze. To jest
Które wstawia:
Wchodzi w to dość prosto, ale istnieje kilka sztuczek, których używamy do ratowania postaci. Na przykład
¬19
wpisuje „123456789”,³
wprowadza trzy spacje i powielamy zmianę, aby nie trzeba było jej wprowadzać wiele razy.Zwróć uwagę, jak litery są tutaj małe. Dzięki temu możemy łatwo odróżnić klawisze wielkich liter, takie jak „ENTER” i pojedyncze litery. Pisanie ich w ten sposób ułatwia stwierdzenie, które postacie wcześniej umieścić pasek, i dodaje tylko jeden bajt, aby później przekonwertować je na małe litery. Dlatego wykonujemy polecenie zastępcze, aby przekonwertować je na wielkie litery i dodawać po jednym spacji po każdym z nich:
Teraz bierzemy każdą sekwencję klawiszy (dowolny ciąg spacji) i umieszczamy trzy paski przed i po nich:
W tym momencie bufor wygląda następująco:
Posiadanie trzech słupków w pierwszej i ostatniej kolumnie jest w rzeczywistości bardzo wygodne i pozwala zaoszczędzić wiele bajtów na dłuższą metę.
I tutaj biegamy jedną gigantyczną pętlą. Spowoduje to konwersję czegoś takiego:
w coś takiego:
Wszystko między dwoma wystąpieniami
ò
będzie działało, dopóki nie wystąpi błąd, co nastąpi, gdy spróbujemy przejść do linii, która jeszcze istnieje. Ponieważ właśnie uruchomiliśmy globalną komendę zastępczą , nasz kursor znajduje się w ostatnim wierszu i zmienimy je, przesuwając się w górę.To jest
linia.
To jest
Linia.
To jest:
Linia.
Teraz mamy pełną klawiaturę, ale każda linia zawiera dodatkowy pasek, dodatkowy ukośnik (do przodu lub do tyłu) lub dodatkowy znak podkreślenia. Bardzo łatwa naprawa
Po całym tym szaleństwie bufor jest domyślnie drukowany.
źródło
Lua 5.3,
416394 bajtów.Bez golfa i z komentarzami.
Wynik
Zostanę zniszczony przez inne języki, ale pomyślałem, że dam temu szansę. Niezła złożoność, a przynajmniej krótsza niż klawiatura!
źródło
Bubblegum , 191 bajtów
Wypróbuj online!
źródło
Haskell, 263 znaków (353 bajtów UTF-8)
Ponieważ dyskutowano o wynikach w świetle tych znaków Unicode ... oto ten sam program, zredukowany do wszystkich ASCII:
Haskell, 263 znaki (263 bajty UTF-8)
źródło
ENTER
są dłuższe niż takie jak znaki↩︎
.ENTER
a↩︎
wypełnienie spacjami sprawia, że ma tę samą długość.PHP, 303 bajty
Leniwy, ale skuteczny. :)
źródło
<?=gzinflate(base64_decode('rdO5DoJAEIDhnqegs/G+jbHA+0QEvDHrg8zDy79EMbTDFF+3m8yfXdek42phHJG3KyItaEMHutCDPgxgCCNoQg0mMI3cdETSu4wRLQx3NYxJtDCJOL9t1cnSFWNvareVE1xhASHEcIczbOAIATzhBck3V7atupuTb6vulucq43XNvCDKenkQwRyWsII1bGEHexhDxcb140X4n6us16XuVXxdulZZrmi9WcbZd5IH3GAGF/vXwIcDVKEODVs3P53nUrUq5FK1sqc/'));
. Kompresor: sandbox.onlinephpfunctions.com/code/… Dekompresor: sandbox.onlinephpfunctions.com/code/…Python 3.5+, 239 bajtów
źródło
"".join(...) + f[0]
w wewnętrznej pętli. Zamianaformat
kolejności argumentów i odpowiednich symboli zastępczych w ciągu również oszczędza dwa kolejne bajty.['{1}__ ','|{} ||','|{1}||','/{1}\\|']
jest krótszy niż użyciesplit
.Partia,
465452 bajtów:c
Podprogram obsługuje linię kluczy. Klucze zawierające dodatkowe spacje muszą być cytowane, jak zrobić=
,;
,,
klucze, prawdopodobnie z powodu błędu wshift
poleceniu. Pierwszy i ostatni parametr to ciągi o_
tej samej długości, co pierwszy i ostatni klucz ułatwiający konkatenację.t
następnie kończy się jako_
s wspólny dla pierwszego, trzeciego i czwartego rzędu, ze#
znakiem s łączenia, które są odpowiednio zamieniane przed dodaniem znaków wiodących i końcowych, podczas gdys
jest drugim rzędem, ale|
s zmienia się na!
s, ponieważ zmniejszają się liczba"
potrzebnych mi. Edycja: Zapisano 1 bajt, drukując wszystkie cztery linie w jednej instrukcji i 12 bajtów, optymalizując sposób, w jaki przypisałems
zmienną.źródło
Rubinowy, 226 bajtów
Ulepszenia w następujący sposób:
1. Brak pustych elementów łańcucha na początku i na końcu tablicy. Zamiast tego tablica jest potrojona, tworząc 3 klawiatury obok siebie. Po konwersji na ciąg mamy 3 klawiatury z brakującymi krawędziami zewnętrznymi. Jest on obcinany, aby wyświetlać tylko środkowy, wraz z krawędziami.
2. Zmieniona wersja Ruby. Użyłem Ideone zamiast 1.9.3 zainstalowanego na moim komputerze. Oznacza to, że
.chars.to_a
można go skrócić do sprawiedliwego.chars
.Rubinowy, 239 bajtów
Jest z tego jeszcze kilka bajtów. Będzie wyglądać jutro.
bez golfa
źródło
C #, 357 bajtów (w jednym wierszu i zawierające większość sugestii)
Lub 353 z interpolacją ciągów znaków i wszystkimi innymi sugestiami
Nie golfowany (bez interpolacji ciągów):
źródło
foreach(var r in q){for(int i=0;i<4;i++){foreach...
==
z<
s+=i<1?$" {u}__":i<2?$"||{k.PadRight(l)}|":i<3?$"||{u}|":$"|/{u}\\";
PowerShell v2 +, 465 bajtów
Jestem w połowie zawstydzony, że mogę opublikować tę odpowiedź, biorąc pod uwagę, jak krótkie są odpowiedzi PHP i Python, bez względu na odpowiedź w języku C #, ale nie jestem w stanie skrócić tej metody. Inne podejścia mogą dać lepsze wyniki.
Zasadniczo jest to po prostu gigantyczny wieloliniowy ciąg znaków, ze zmiennymi (
$a
i podobnymi) zastępującymi różne podciągi i kilkoma-replace
s na końcu, aby je zakończyć. W$(...)
razie potrzeby wstawiane są bloki skryptów w celu wprowadzenia nowych zmiennych.Wypróbuj online!
źródło
Python,
493458 bajtów.Funkcjonalnie równoważny, ale nieco bardziej czytelny:
Niestety jest już dłuższy niż odpowiedź udzielona w Lua.
źródło
p
funkcji na jednym wierszu oddzielonym średnikami. Pomyślałem też, że nie możesz zrobić pierwszego wierszak=[['|']*75]*16
, wiesz dlaczego?'_'
i' '
do zmiennej, aby zapisać niektóre bajty.range(16)
na[0]*16
.for l in k:print ' '.join(l)
nafor l in k:print''.join(l)
.PHP,
316312 bajtówJestem prawie pewien, że tego podejścia nie można dalej grać w golfa. Ale jeśli ktoś znajdzie jeszcze 10 bajtów ...: D
Uruchom z
-r
.awaria
źródło
Bash (w OSX),
128 + 221 + 1 =234230 bajtówTak, wiem, kompresja. Ale to działa, nie?
Wymaga pliku o nazwie „f” w bieżącym katalogu z następującą zawartością (włożony do base64 dla wygody PPCG - można go najpierw zdekodować do pliku „f”.):
źródło
gunzip<f
.zcat f
i 2 bajty, usuwając dwa końcowe bajty zerowe (gzip narzeka, ale generuje pożądane dane wyjściowe).zcat<f
więc. W Linuksie Zcat bez końcowych zer powoduje, że gzip narzeka („gzip: stdin: nieoczekiwany koniec pliku”), ale tylko po wydrukowaniu pożądanego wyniku.JavaScript (ES6), 286
Anonimowa funkcja bez parametrów
Mniej golfa
źródło
Szybki, 777 bajtów
Swift nie jest na ogół
dobrymwyborem do gry w golfa, więc byciemniej niż dwukrotnością obecnej najmniejszej odpowiedzi(która była szybka)jest tutaj dobrym wyzwaniem!Nie golfowany:
źródło
SOGL V0.12 ,
131128127 bajtów ( konkuruje? )SOGL ma
2*2/
i2/2*
dziwactwa, ale te wydają się zbyt wbudowane w to wyzwanie.Wypróbuj tutaj!
źródło
Python 2,
394388380 bajtówPo prostu buduje duży ciąg znaków reprezentujący całą klawiaturę, zamienia * na% s dla klawiszy specjalnych, a następnie używa formatowania łańcucha, aby zaktualizować specjalne.
Edytować
Teraz ma końcowy znak nowej linii na końcu wyniku, ale nie widzę nigdzie niedozwolonego.
Wypróbuj online!
źródło
C #, 376 bajtów (w jednym wierszu)
Jest to całkowicie oparte na odpowiedzi C # Klingera. Nie mam wystarczającej liczby przedstawicieli, aby skomentować jego odpowiedź, inaczej bym to zrobił.
Byłem w stanie zmniejszyć kod Klingera o 5 bajtów, modyfikując początkową pętlę foreach i usuwając zewnętrzne nawiasy klamrowe.
źródło
m4, 456
Nie golfowany:
(Właściwie to po raz pierwszy gram w golfa i próbuję m4.)
źródło
ułożone w stos , 228 bajtów
Wypróbuj tutaj!
Lub, nieco bardziej czytelny:
Działa to poprzez zdefiniowanie funkcji,
p
która tworzy klucz, a następnie wprowadzeniehcat
wielu kluczy.źródło
Haskell, 255
Z perspektywy czasu, podobny w koncepcji do odpowiedzi Haskella , ale produkuje klawiaturę ASCII i nieco różni się golfem.
Sformatowane i przemianowane:
źródło
tcl, 368
Jak policzone przez http://textmechanic.com/text-tools/basic-text-tools/count-characters-words-lines/ z „Policz podziały linii jako spacje”. włączony, zajmuje
505496452451439403401396391388385384382379378377369368Demo: http://rextester.com/live/NTVAV88033
Ungolf:
Współpraca na żywo na stronie http://rextester.com/live/UDO43692
Każdy może bezpłatnie poprawić moją wersję na stronach współpracy na żywo, ale proszę: nie edytuj mojej oryginalnej odpowiedzi tutaj; po prostu powiedz, że edytowałeś w komentarzach, a ludzie odwiedzą linki.
AKTUALIZACJA 1: Zastąpiony
for
przezforeach
, ponieważ ten ostatni tworzy krótszy kodAKTUALIZACJA 2: Zastąpiona
foreach
przezlmap
, ponieważ ta ostatnia wytwarza krótszy kodAKTUALIZACJA 3: Ogoliłem jeden znak, ponieważ zostałem zastąpiony
" "
przez\
AKTUALIZACJA 4: W odniesieniu do pierwszego komentarza zmieniłem wszystkie znaki zastępcze Unicode pierwszego wiersza 2 bajty na 1 bajt ASCII
AKTUALIZACJA 5: wiele
puts
linii utworzonych w jednąAKTUALIZACJA 6: użyj bezpośrednio
split
poleceń zwracających wartościlmap
wywołania zamiast używać zmiennych listy pośredniejAKTUALIZACJA 7: Cytaty wokół
ENTER
nie były potrzebneAKTUALIZACJA 8:
string map
jest wystarczająco długa i kilkakrotnie powtarzana, że warto ją zamknąć w plikuproc
AKTUALIZACJA 9:
split $x \n
jest wystarczająco długa i kilkakrotnie powtarzana, że warto ją zamknąć w plikuproc
AKTUALIZACJA 10: Przy „zamianie” można użyć łańcucha
&
zamiast\1
, ponieważ w tym przypadku oba się pokrywają; kolejną tego konsekwencją jest to, że pozwala pozbyć()
się „pasującego” łańcucha.AKTUALIZACJA 11: Użyj
@
zamiast\n
jako separatora linii do dalszego wykorzystaniasplit
instrukcji. Mimo, że „mecz” ciąg od wydłuża\S
się[^@]
to opłaca, ze względu na liczbę powtórzeńAKTUALIZACJA 12: Zastąpił pierwszy
regsub
ciąg „dopasowujący”{[^@|]}
,\[^@|]
aby zgolić jeden znak. Niestety nie mógł zrobić tego samego z drugimregsub
, ponieważ instrukcja znajduje się w parze[]
:(AKTUALIZACJA 13: Ogolono dwa znaki Enter, koncentrując
lmap
ciało własnym nagłówkiem.AKTUALIZACJA 14: Użyto wywołania
split
proceduryN
bazowej zamiast bezpośredniego wywołaniastring map
procedury bazowej,N
co pozwala skrócić o 3 znakiAKTUALIZACJA 15: Wystąpiła niepotrzebna
postać spacji. Usunąłem go, aby zgolić jeden węgiel.
AKTUALIZACJA 16:
set h
można go osadzić, aby się go pozbyć$h
, aby ogolić jedną postać.AKTUALIZACJA 17:
set h
instrukcję można naprawdę zgolić.AKTUALIZACJA 18:
puts
argument zmieniono z...\n...\n...\n...
formatu naformat.
Dzięki ludziom, którzy pomogli mi go skrócić, szczególnie evilotto i aspekt kanału IRC tcl!
źródło
tcl, 369
Początkowo oparty na wersji sergiol tcl.
(Zauważ, że wiele lewych spacji jest częścią „natury” tcl)
źródło
foreach
wystąpienialmap
!interp alias
podejścia do skrócenia mojej wersji, ale najkrótszy jaki mogłem uzyskać, robiąc to 398 :( rextester.com/live/NTVAV88033lmap z {S R M N} w {set "regsub -all" "string map" split} {interp alias {} $z {} {*}$w};lmap y [N [S b [M [N {||||@|||@$@BS @%@TAB @&@CAPS @? @ENTER @*@SHIFT } @] [R {[^@]} "`1234567890-=$@%QWERTYUIOP\[\]\\@&ASDFGHJKL;'?@*ZXCVBNM,./*" {||& ||}]]] @] z [N [S f [R {[^@|]} $b _]] @] w [N [S g [M {||_ |/_ _|| _\\|} [M {||| \\|/} $f]]] @] x [N [M {\\ _ / _ | \ } $g] @] {puts $x\n$y\n$z\n$w}
C (gcc) ,
378342330 bajtów-10 bajtów dzięki pułapkowi cat.
Pierwsze dźgnięcie w to. Powtarzane g () sugeruje pole do poprawy.
Edycja: Proszę bardzo.
Wypróbuj online!
źródło
Python 2, 672 bajtów
Za pomocą skompresowanego ciągu zlib:
źródło
len("print 'x\x9c...'")
którego usuniesz\x
obraz z s, co spowoduje niepoprawną liczbę bajtów. Możesz uzyskać prawidłową liczbę, licząc za pomocą,len(r"print 'x\x9c...'")
ale najłatwiejszym rozwiązaniem, jak zawsze, jest sprawdzenie, co mówi twój edytor tekstu lub system plików.PowerShell,
249242 bajtówNieskluczone i wyjaśnione
Middot
·
używa zamiast tego spacji do wyjaśnienia ciągu źródłowego.Dodatkowo: klawiatura ze spacją i wyrównanymi do prawej etykietami, 278 bajtów
Dodałem kilka bajtów do wyrażenia regularnego, aby obsłużyć spację (stary regexp
(.[a-z ]*)
, nowy~|(.[a-z ]*)
). To jeden mały krok do wyrażenia regularnego, jeden wielki skok dla rozwiązania: możesz teraz wyświetlać spację i etykiety klawiszy wyrównane do prawej (patrz SHIFT, CTRL i BS po prawej stronie klawiatury).Wynik:
źródło
/// , 360 bajtów
Wypróbuj online!
źródło
Mathematica 323 bajty
Nudne i mało kreatywne. Ciąg jest tylko wynikiem wbudowanego
Compress
polecenia zastosowanego do pożądanego wyniku.źródło
Wolfram Language (Mathematica) , 293 bajty
Wypróbuj online!
Stosunkowo proste: koduje rzędy kluczy jako listy
(key name)|(key width)
źródło
Perl 5
-MList::Util=pairmap
, 313 bajtówWypróbuj online!
źródło