Klawisze fortepianu mają 3 znaki szerokości i 7 znaków wysokości. Gdyby jednak każdy klawisz miał 3 znaki szerokości, nie byłoby wystarczającej ilości miejsca dla czarnych klawiszy. Dlatego niektóre białe klucze mają wycięte części. Istnieją 3 rodzaje białych klawiszy.
Klucze z brakującą prawą połówką (R):
____
| |
| |
| |
| |
| |
| |
|___|
Klucze bez lewej połowy (L):
____
| |
| |
| |
| |
| |
| |
|___|
I brakuje klawiszy z lewą i prawą połówką (M):
___
| |
| |
| |
| |
| |
| |
|___|
Na prawdziwej klawiaturze ich wzór wygląda następująco:
RMLRMML, RMLRMML, RMLRMML...
i powtarza się dla 88 kluczy. Teraz nie możesz tego zobaczyć, gdy klawisze są pokazywane indywidualnie, ale kiedy je wepchniesz razem, zobaczysz czarne klawisze.
_________________________________________________________
| | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
|___|___|___|___|___|___|___|___|___|___|___|___|___|___|
Twoje zadanie
Biorąc pod uwagę dodatnią liczbę całkowitą N , wydrukuj tę sztukę ASCII fortepianu z N białymi klawiszami. Powinieneś być w stanie obsłużyć dowolny N od 1 do 52 włącznie (ponieważ prawdziwe 88-klawiszowe fortepiany mają 52 białe klawisze). Oto wynik testu od 1 do 8, a następnie wzorzec rośnie w podobny sposób.
1
____
| |
| |
| |
| |
| |
| |
|___|
2
________
| | | |
| | | |
| | | |
| | | |
| | |
| | |
|___|___|
3
_____________
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | |
| | | |
|___|___|___|
4
________________
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | |
| | | | |
|___|___|___|___|
5
____________________
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | |
| | | | | |
|___|___|___|___|___|
6
________________________
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | |
| | | | | | |
|___|___|___|___|___|___|
7
_____________________________
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | |
| | | | | | | |
|___|___|___|___|___|___|___|
8
________________________________
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | |
| | | | | | | | |
|___|___|___|___|___|___|___|___|
I na koniec, oto pełne 52 kluczowe dane wyjściowe:
_________________________________________________________________________________________________________________________________________________________________________________________________________________
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|
Standardowe luki są zakazane, a najkrótsza odpowiedź w bajtach wygrywa!
Odpowiedzi:
Pyth,
686563 bajtówWypróbuj online!
Zestaw testowy.
W tej wersji właśnie zastąpiłem przypisania (J i K) wewnątrz, aby zaoszczędzić 2 bajty. Dlatego przeczytaj poniższą wersję.
Poprzednia 65-bajtowa wersja z wyjaśnieniem
Wypróbuj online!
Czarna magia
źródło
JavaScript (ES6),
155149147 bajtówGdzie
\n
reprezentuje dosłowny znak nowej linii. Wykorzystuje fakt, że wszystkie linie po pierwszym zaczynają się od|
znaku. Wyjaśnienie:Edycja: Zapisałem 2 bajty, naprawiając moje błędne odczytanie specyfikacji na wysokości klawiszy.
źródło
Ruby, 119 bajtów
Niegolfowany w programie testowym
źródło
> <>,
188182 bajtówLiczba białych klawiszy do wyświetlenia powinna znajdować się na stosie podczas uruchamiania programu.
Edycja : Udało mi się ogolić kilka bajtów, łącząc dane wyjściowe dla linii 5/6 i 7. Poprzednia wersja:
źródło
PHP, 238 bajtów
Jak zwykle, dodaj kod za pomocą
<?php
, umieść go w pliku PHP (nazwijmy gokeyboard.php
) i uruchom za pomocą:Dwa kolejne bajty można zapisać na PHP7, ściskając inicjalizację
$n
i$s
do pierwszego użycia:Niegolfowany kod, zestaw testowy i inne gadżety można znaleźć na github .
źródło
Python
32,191185180182171145144133132 132 bajtówPrzydałoby się trochę gry w golfa, ale już tak dużo bawiłem się kodem, że mogę nie wiedzieć, gdzie są pola do gry w golfa. Wszelkie sugestie dotyczące gry w golfa są mile widziane.
Edycja: źle odczytano specyfikację na wysokości klawiszy. Ten błąd został naprawiony.
Edycja: pożyczył 12 kluczowych pomysłów Neila z odpowiedzi na Javascript, usunął niektóre nawiasy i przeszedł na Python 2, aby zaoszczędzić 11 bajtów.
Edycja: Wiele zmian, aby sprowadzić funkcję do jednej
for
pętli.Edycja: teraz program zamiast funkcji.
Edycja: Teraz używa
print"\n|".join()
zgodnie z sugestią Neila, aby zapisać 11 bajtów. Przekształcił program z powrotem w funkcję zapisywania bajtu.źródło
"\n|".join
sztuczki.print
i"\n|"
!C # 1683 bajtów
Więc .... po zobaczeniu odpowiedzi Neila powyżej jest to dość zawstydzające, ale i tak opublikuję to, ponieważ zajęło mi to trochę czasu (błogosław). Użyłem C # do stworzenia mojego. Wewnątrz klasy „Fncs” stworzyłem tablicę typowej kolejności kluczy. Następnie utworzyłem funkcję, która pozwala użytkownikowi uzyskać odpowiedni indeks dla tej tablicy na podstawie podanej liczby całkowitej. Aby edytować poszczególne linie, stworzyłem klasę „PianoKeyboard”, która zawiera słownik przechowujący wiele ciągów reprezentujących poszczególne linie. Na koniec utworzyłem funkcję „DrawKey”, która dołącza odpowiedni tekst do poszczególnych linii, oraz funkcję „GetKeys”, która zwraca ogólną wartość ciągu.
źródło