Większość ludzi zna pułapkę polegającą na liczeniu owiec na sen. Jest stado owiec, niektóre skaczą przez płot, a ty liczysz owce, które skaczą. Podobno pomaga to uspokoić umysł i wprawia cię w stan snu, dzięki czemu zasypiasz.
Oto owca ASCII zwrócona w prawo, czekająca na policzenie:
'00^>
||
Oto owca ASCII skacząca przez płot:
'00^>
/\
++
Oto jeden skierowany w lewo, który został już policzony:
<^00'
||
Wyzwanie
Biorąc pod uwagę dwie liczby całkowite wejściowe, n
a m
, z n > 2
opisując Ile łącznie owiec, a m > 0
mówiąc ile owce zostały już policzone, wyjście ASCII Art reprezentacja liczenia owiec zasnąć.
Teraz zwrot akcji:
- Ze względu na wielkość kojców, w których znajdują się owce, górny rząd może pomieścić maksymalnie
10
owce, nie licząc aktualnie skaczących owiec, które również muszą zawsze znajdować się w górnym rzędzie. - Kolejne rzędy nie mogą mieć owiec poza ich kojcami (nie możesz mieć więcej owiec po lewej stronie w drugim rzędzie niż w pierwszym rzędzie, i to samo dla prawej).
- Jeśli jest
11
więcej lub więcej owiec, w górnym rzędzie musi10
znajdować się plus skacząca owca. - Początkowe / końcowe białe znaki i białe znaki między owcami nie mają znaczenia, o ile:
- Między owcami jest co najmniej jedna biała postać
- Wszystkie postacie są odpowiednio ustawione.
Dopóki te zasady są spełnione, rzeczywiste rozmieszczenie owiec zależy od twojego wdrożenia.
Przykłady
Na przykład tutaj jest n=3
i m=1
, w najprostszym przypadku.
'00^>
'00^> /\ <^00'
|| ++ ||
Oto n=11
i m=6
najbardziej owiec, które mogą zmieścić się na jednej linii poziomej.
'00^>
'00^> '00^> '00^> '00^> /\ <^00' <^00' <^00' <^00' <^00' <^00'
|| || || || ++ || || || || || ||
Oto inny przykład tego, z n=11
im=1
'00^>
'00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> /\ <^00'
|| || || || || || || || || ++ ||
Większy przykład z n=30
im=12
'00^>
'00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> /\ <^00' <^00'
|| || || || || || || || ++ || ||
'00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> <^00' <^00'
|| || || || || || || || || ||
'00^> <^00' <^00'
|| || ||
<^00' <^00'
|| ||
<^00' <^00'
|| ||
<^00' <^00'
|| ||
Oto przykład z n=17
im=2
'00^>
'00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> /\ <^00' <^00'
|| || || || || || || || ++ || ||
'00^> '00^> '00^> '00^> '00^> '00^>
|| || || || || ||
Oto przykład z n=19
im=3
'00^>
'00^> '00^> '00^> '00^> '00^> '00^> '00^> /\ <^00' <^00' <^00'
|| || || || || || || ++ || || ||
'00^> '00^> '00^> '00^> '00^> '00^> '00^>
|| || || || || || ||
'00^>
||
Zauważ, że wszystkie są przykładami . W ostatnim przypadku możesz zakończyć tworzenie pionowego zestawu owiec po prawej stronie, co pozwoli dopasować lewą stronę do dwóch rzędów. A może kwadrat owcy 2x2 po prawej stronie, który pasowałby również owce po lewej stronie w dwóch rzędach. Itp.
I / O i reguły
- Dane wejściowe można przyjmować w dowolnym rozsądnym formacie i dowolną dogodną metodą .
- Wiodące / końcowe znaki nowej linii lub inne białe znaki są opcjonalne, pod warunkiem, że znaki są odpowiednio ustawione.
- Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je drukować.
- Dane wyjściowe mogą być wysyłane do konsoli, zwracane jako lista ciągów, zwracane jako pojedynczy ciąg itp.
- Standardowe luki są zabronione.
- To jest golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
n=11
im=9
n=11
takich przypadków0<m<=10
. Zmusza to do posiadania wszystkich owiec w górnym rzędzie i dynamicznej liczby owiec po lewej (n-1-m
) i prawej stronie (m
) ogrodzenia i nie można używać stałych rozmiarów kojców.Odpowiedzi:
APL (Dyalog Unicode) , 118 bajtów SBCS
Anonimowy przyrostek lambda. Przyjmuje
n
jako lewy argument im
prawy argument. Zwraca wynik zagnieżdżonej tablicy, ale domyślny sposób wyświetlania tej zagnieżdżonej tablicy jest zgodny ze specyfikacjami. Wykorzystuje do dziewięciu kolumn dla liczonych owiec i pozostałe kolumny dla oczekujących owiec.Wypróbuj online!
{
…}
Anonimowa lambda;⍺
jest lewy argument,⍵
jest prawy argumentTa funkcja składa się z trzech odrębnych części: oczekiwania , skakania i liczenia . Każdy z nich jest nawiasowany, co powoduje, że wynikiem jest lista trzyelementowa.
Policzone
(r⍴(×/r←9,⍨∘⌈⍵÷9)↑⍵⍴⊂S←⌽↑''(b←'''00^<')' ||')
''(
…)' ||'
Trzy wiersze zwierciadlanej liczonej owcy, środkowa to:b←'''00^<'
ciało i jest przypisany dob
↑
wymieszaj listę ciągów znaków w matrycy znaków (wypełnienie spacjami)⌽
odzwierciedl toS←
przypisać doS
(dużego S heepa)⊂
załącz go, abyśmy mogli poradzić sobie z tym jako całość⍵⍴
użyj liczby zliczonych owiec, aby cyklicznie przekształcać to(
…)↑
Weź z tego następującą liczbę elementów (wypełnienie prototypowymi przedmiotami, tj. Ta sama tablica, ale wszystkie znaki zastąpione spacjami)⍵÷9
dziewiąta liczba policzonych owiec⌈
podsumowanie9,⍨
dołącz 9 do tegor←
przypisaćr
(co zrobimy r eshape z; rzędy i kolumny)×/
produkt z tej listy (tyle elementów potrzebujemy, w tym wypełnień)r⍴
przekształć to w tablicę o długościach wymiarówr
Skoki
(↑(s←'>',⍨¯1↓b)' /\' ' ++')
(
…)' /\' ' ++'
Trzy linie skaczących owiec, pierwsza to:¯1↓b
upuść ostatni znak zb
'>',⍨
dołącz prawą głowęs←
Przechowywać ws
(małe y Heep)↑
wymieszaj listę ciągów znaków w matrycy znaków (wypełnienie spacjami)Czekanie
(r⍴(×/r←d,⍨⌈w÷d←10-⍵⌊⊢/r)↑w⍴(w←⍺-⍵+1)⍴⊂s@2⌽S)
⌽S
lustroS
s@2
wstaws
w drugim wierszu (zastępując tam obecne dane)⊂
załącz go, abyśmy mogli poradzić sobie z tym jako całość(
…)⍴
Cyklicznie przekształcaj to w następujący rozmiar:⍵+1
liczba policzonych owiec plus jeden⍺-
odejmij to od sumyw←
przypisać dow
( w aiting)(
…)↑
Weź z tego następującą liczbę elementów (wypełnienie prototypowymi przedmiotami)⊢/r
najbardziej prawy elementr
(tj. liczba użytych kolumn dla zliczonych owiec)⍵⌊
minimum całości i to10-
odejmij to od dziesięciud←
przypisać dod
( d ifference; brakujące kolumny)w÷
podzielw
przez to⌈
zaokrąglanie w górę (daje liczbę potrzebnych wierszy)d,⍨
dodaćd
r←
przypisaćr
(co zrobimy r eshape z; rzędy i kolumny)×/
produkt z tej listy (tyle elementów potrzebujemy, w tym wypełnień)r⍴
przekształć to w tablicę o długościach wymiarówr
źródło
n=11,m=9
i obowiązuje zasada „w górnym rzędzie musi być 10 plus skacząca owca”?JavaScript,
281,293, 288 bajtówZachowaj ostrożność podczas używania poniższego fragmentu, ponieważ istnieje duże ryzyko nagłej indukowanej narkolepsji.
źródło
m = n
się błąd.C, 392 bajtów
Dzięki @Jonathan Frech za uratowanie bajtu!
Wypróbuj online!
Rozwinięty:
źródło
y+=1+!t
może byćy-=~!t
.Python 2 ,
222277 bajtówWypróbuj online!
źródło
n=11
im=2
.AWK , 293 bajty
Wypróbuj online!
Próbowałem użyć podstawień ciągów, aby uniknąć niektórych pętli, ale wymagało to znacznie więcej kodu.
Wyjaśnienie
Muszę powiedzieć, że sztuka owiec jest raczej urocza. :)
źródło
Węgiel , 98 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Wprowadź liczbę owiec, które zostały już policzone.
Wprowadź całkowitą liczbę owiec i oblicz, ile jeszcze trzeba policzyć.
Utwórz tablicę dwóch tablic. Każda tablica ma następujące elementy:
Odbij płótno i wydrukuj owce w połowie skaczące.
Zapętlaj owce po tej stronie.
Wydrukuj owcę.
Jeśli jest to koniec rzędu, wydrukuj nowe wiersze i spacje, aby przejść do początku następnej owcy.
źródło