Twoim zadaniem jest stworzenie programu lub funkcji, która generuje zamek błyskawiczny o długości 10 linii. Każda linia zamka jest reprezentowana przez dwa myślniki--
:
--
--
--
--
--
--
--
--
--
--
Program / funkcja przyjmie wartość procentową (podzielną przez 10) jako dane wejściowe, a wynikiem będzie suwak „rozpakowany” (kreski oddzielone) od góry o wartość procentową, odsłaniając 1-indeksowany, najniższy poziom powtarzany 2 razy, z wszystkie poprzednie poziomy powtórzone 4, 6, 8, ... itd. razy, jednocześnie utrzymując środek suwaka pośrodku.
Przykłady
>>10%
-11-
--
--
--
--
--
--
--
--
--
>>50%
-1111111111-
-22222222-
-333333-
-4444-
-55-
--
--
--
--
--
>>100%
-11111111111111111111-
-222222222222222222-
-3333333333333333-
-44444444444444-
-555555555555-
-6666666666-
-77777777-
-888888-
-9999-
-10-
Dane wejściowe (procentowe) można sformatować w dowolny sposób (50%, 0,5, 50, 5 [implikowane zero] itp.), I zawsze będą w zakresie od 0 do 100 i podzielne przez 10. Odstęp w przykłady muszą być zachowane w twoich wynikach.
0%
? Czy wolno nam brać wkład podzielony przez 10? np. zamiast50%
dostać5
?5
?Odpowiedzi:
Python 2 -
184151146 bajtówOstatni numer trochę mi pomieszał. Mogę być w stanie usunąć drugą instrukcję if, jeśli popatrzę na nią później.
EDYCJA: Dzięki do mbomb007 za usunięcie 3 bajtów. Dzięki charredgrass za wskazówki dotyczące formatowania, które pomogą usunąć wiele bajtów! :-D Dziękujemy TheBikingViking za pomoc w jeszcze dwóch bajtach!
źródło
i>9
zamiasti==10
i usuń spację wrange(1, 11)
.p=" "*(i-1);print"%s-%s-"%(p,str(i)*2*n);n-=1
.(i-1)
w ostatnim wierszu znakiem~-i
. Wykorzystuje to pierwszeństwo operatora i fakt, że nieco odwrócenie, po którym następuje negacja, jest tym samym, co odejmowanie1
.range(1,11)
i wtedy(i-1)
?Python 2, 74 bajty
Zaoszczędzono dwa bajty dzięki
exec
uaktywnieniu pętli dzięki Dennisowi.EDYCJA: Podjąłem nieco inne podejście i zaoszczędziłem jeszcze dwa bajty.
źródło
'-'+`x+1`*(n-x<<1-x/9)+'-'
wexec
pętli na'-%s-'%`x+1`*(n-x<<1-x/9)
.`x+1`*(n-x<<1-x/9)
.PowerShell v2 +,
130120116110 bajtówEdycja 1 - Grał w golfa 10 bajtów, eliminując
$x
zmienną i nieco przerabiając sposób formułowania łańcucha.Edycja 2 - Grał w golfa o kolejne 4 bajty, powtarzając sposób wprowadzania danych i powtarzając sposób
$i
obliczania każdej pętli.Edycja 3 - Zapisano 6 bajtów przez OP, umożliwiając wprowadzanie jako
0..10
, więc nie trzeba dzielić przez 10.Zaskakująco trudne!
Zajmuje wejście jak
1
,5
itd przechowywane w$n
. Ustawia$i
zmienną pomocniczą (jeden z bardzo rzadkich przypadków, w których zmienna musi zostać zainicjowana0
w PowerShell), a następnie uruchamia pętlę od10
do1
.W każdej iteracji rozpoczynamy ciąg od liczby równych spacji
$i
, po których następuje pseudo-trójka(... , ...)[]
. Wewnątrz pseudo-trójki wybieramy ciąg-
z liczbą cyfr (wyższą$n-10+$_
lub0
pomnożoną przez 2) lub ciąg-10
- wybór zależy od tego, czy jesteśmy na 10 iteracji, a nasze dane wejściowe były100
. Łączymy to z finałem-
. Ten wynikowy ciąg jest umieszczany na rurociągu.Wreszcie zwiększamy
$i
, a to było naprawdę trudne. Skończyliśmy z użyciem sztuczki rzutowania na binarne, aby zwiększać tylko$i
, aż osiągnie$n
, a następnie utrzymywać tę samą wartość później. To gwarantuje, że osiągnęliśmy „koniec” wgłębienia zamka na odpowiednim poziomie.Po zakończeniu pętli wszystkie wynikające łańcuchy są gromadzone w potoku, a dane wyjściowe są niejawne.
Przykłady
źródło
Pyth,
3734 bajtówZestaw testowy.
źródło
Pyton,
9584 bajtówNie wiedziałem, że lambda są legalne, dzięki @Dr Green Eggs i Iron Man
źródło
join
możesz wziąć generator bezpośrednio.lambda p:'\n'.join(' '*min(p,l)+'-'+(2-(l==9))*(p-l)*str(l+1)+'-'for l in range(10))
(84 bajtów)MATL ,
484135 bajtówWypróbuj online!
źródło
Rubinowy, 74 bajty
Używa dorozumiany zero wzoru podanego w pytaniu, tak
40%
jestf[4]
, jeśli funkcja anonimowa jest przypisanyf
. Jeśli potrzebny jest pełny procent, +6 bajtów nan/=10;
Wypróbuj online!
źródło
Python 3,
98, 90, 87, 85 bajtów.Pobiera już podzieloną liczbę przez 10. Prawdopodobnie mogę usunąć niektóre pareny, ale jest to dość zamknięte dla w pełni golfa.
źródło
Haskell, 83 bajty
źródło
++"-"
?JavaScript es7, 105 bajtów
Zadzwoń z
źródło
The program/function ...
- nie urywek\n
rzeczywistą nową linię , możesz zapisać bajt.Python 2.7,
11310877 bajtówn = input ()dla xw zakresie (0,10):
v = str (x + 1) * (nx) 2,
jeśli x n> 89: v = '10 '
print' '* min (x, n) + „-” + v + ”-„
Gra w golfa po raz pierwszy. Idź dalej, spróbuj uzyskać <100.
Zakłada, że dane wejściowe to 1-10.
Edycja: Użyłem kilku sztuczek z odpowiedzi @LeakyNun (dzięki), następnie poderwałem ją nieco dalej i uzyskałem ... w zasadzie tę samą odpowiedź: / Nie wiedziałem o konwersji łańcucha `int`, i 2 - boolean pozwolił mi pozbyłem się instrukcji if, która pozwoliła mi pozbyć się całej zmiennej v. Bardzo fajny.
Moja wersja:
źródło
n=input(); for x in range(0,10):print' '*min(x,n)+'-'+('10'if x*n>89 else str(x+1)*(n-x)*2)+'-'
Python 2, 81 bajtów
Ideone to!
źródło
Python 2.7,
110999591 bajtów:Pełny program, który pobiera dane przez liczbę całkowitą z zakresu obejmującego
[1,10]
, w którym10
środki100%
i1
środki10%
. Prawdopodobnie można go nieco pograć w golfa.Wypróbuj online! (Ideone)
źródło
PHP 5.3,
9291 bajtówregister_globals=1
ishort_open_tags=1
(ierror_reporting=0
)wywołanie w cli z
php-cgi -f <filename> n=<number>
<scriptpath>?n=<number>
: prepend<pre>
?:
z?1:
(+ 1)$n
z($n=$_GET[n])
(+11)niegolfowany jako funkcja (dowolne PHP> = 4.0.1)
pakiet testowy
To dla mnie nowość: PHP pokonuje JavaScript.
Myślę, że to podejście jest do gry w golfa.
źródło
STR_PAD_BOTH
Co to jest, K&R C? Czy my też jesteśmy#define
w PHP? :-)Julia, 73 bajty
Pierwsza odpowiedź Julii! Wskazówki są mile widziane.
Wypróbuj online!
źródło
Perl, 122 bajty
źródło
Common Lisp (Lispworks), 314 bajtów
nie złożony:
Stosowanie:
źródło
APL, 46 bajtów
Argument należy podać jako procent podzielony przez 10 (to znaczy: zwykłą liczbę całkowitą w zakresie [0,10]).
źródło