Do ćwiczeń golfowych wykonywałem zadania w Intro mojej dziewczyny do klasy Python. Odkryłem, że przy tym zadaniu było wiele strategii, które były bardzo zbliżone do liczby postaci i jestem pewien, że ludzie tutaj mogą znaleźć jeszcze lepsze sposoby. Chociaż jestem najbardziej zainteresowany sposobami zrobienia tego w Pythonie, chciałbym wiedzieć, jak najbardziej gra w golfa ten program, dlatego jest to golf golfowy i wygrywa najkrótsza odpowiedź.
Zasady:
Zadanie opisano poniżej. Użytkownik powinien zostać poproszony o dwukrotne wprowadzenie danych, chociaż monity nie muszą nic mówić i mogą być w innej kolejności.
Obowiązują standardowe luki.
Zadanie 3: Strzały
Napisz program, który monituje użytkownika o podanie kilku kolumn, a on wydrukuje wzór, jak pokazano poniżej. Możesz założyć, że użytkownik poda liczby dodatnie. Twój program powinien obsługiwać zarówno lewą, jak i prawą strzałkę. Oto kilka przykładowych przebiegów:
How many columns? 3
Direction? (l)eft or (r)ight: r
*
*
*
*
*
How many columns? 5
Direction? (l)eft or (r)ight: l
*
*
*
*
*
*
*
*
*
Odpowiedzi:
Pyth, 23 bajty
Może, ale nie musi być ważny, na podstawie odpowiedzi na ten komentarz . Niezależnie od tego uważam to za schludne, a jeśli jest niepoprawne, inne odpowiedzi w języku Pyth są również nieprawidłowe. ;)Cóż, to jest ważne , ponieważ najwyraźniej przegapiłem rażąco oczywiste. : /EDYCJA: WON !!!! TAK !!!! Pierwszy raz! :RE
Demo na żywo.
źródło
m+*\ d\*Q
zamiast tego wyliczenia. Oszczędza 2 bajty.Pyth, 27
Wypróbuj online
Podstawową ideą jest zbudowanie jednego ciągu, który, powiedzmy 5, wygląda następująco:
A potem odwróć to do góry nogami, jeśli otrzymamy
l
jako nasz wkład. Następnie bierzemy wszystkie oprócz ostatniegoinput-1
wiersza tego ciągu i drukujemy go.źródło
Python 2,
8179 bajtówByć może nadal można grać w golfa, ale zobaczymy :)
źródło
l
ir
. Nie zdawałem sobie sprawy, że dane wejściowe sąeval
edytowane w tym samym środowisku co kod.Pyth,
302827 bajtówWypróbuj online.
Najwyraźniej jestem obecnie związany z FryAmTheEggman z zupełnie innym podejściem. (Myślę, że jeden jest genialny.)
Przykład
Wyjaśnienie
źródło
PowerShell,
9185102 bajtów$c
. Odejmujemy jeden, ponieważ każda kolumna ma również*
i interesuje nas tylko, ile wymaganych jest spacji.1
, wydrukuj*
i wyjdź - reszta skryptu nie robi różnicy. +-eq
przydatnel
, a następnie tworzy tablicę na podstawie indeksowania w tablicę dynamicznie generowanych tablic na podstawie wartości$c
. Magia. Zasadniczo potrzebujemy tyle spacji na linię.5 r
tej kolekcji będzie trzymać(0,1,2,3,4,3,2,1,0)
.%
przesyła ją do pętli Foreach-Object , gdzie wypisujemy ciąg X liczby spacji, a następnie*
Przykładowe użycie:
Edytuj - usunięto zmienną
$e
poprzez bezpośrednie przesłanie kolekcjiEdit2 - teraz poprawnie odpowiada za 1 kolumnę
+ Jeśli nadal obowiązkowe jest przyjmowanie danych wejściowych dla kierunku dla strzałek 1-kolumnowych (twierdzę, że nie jest), możemy zamienić pozycję
Read-Host
i stracić jeszcze kilka bajtów poprzez ponowne wprowadzenie$d
zmiennej, dla 106 :źródło
TI-BASIC,
756557545047 bajtówDzięki @ThomasKwa za prawidłowe obliczenie bajtów i grę w golfa 10 bajtów .
Przetestowane na moim TI-84 + Silver Edition.
Pierwsze zgłoszenie TI-BASIC, mile widziane sugestie dotyczące gry w golfa (nie znam jeszcze wielu lew). Jeśli nazwa odgrywa rolę w wyświetlanej pamięci, to miała ona 3 znaki zamiast 1 (sprawdziłem liczbę bajtów na moim kalkulatorze). Ten program jest ograniczony ograniczeniami
output
funkcji (myślę o strzałkach o długości 4), ale prawdopodobnie mógłbym się przełączyć natext
, który wyświetla się graficznie, jeśli jest zbyt mała.Pamiętaj, że to również nie wyczyści ekranu ani go nie zatrzyma.
Naprawdę czuję, że równanie, którego używam, może być bardziej golfa. Wyłączenie końcowego znaku cudzysłowu jest również błędem.
źródło
Ans
jest bezpłatny, ponieważ nie używasz go do wprowadzania danych iOutput(
nie modyfikujeszAns
. Użyj go i pozbądź się zmiennejA
. Możesz przypisać za pomocą-2(Str1="R
; nie ma potrzeby warunkowego.-2
. Po prostu zróbStr1="R
drugą linię. To czyni czwartą linięOutput(I,(1-2Ans)abs(I-L)+AL+1,"*
, która daje ci 4 dodatkowe bajty. Ale poczekaj, istnieje idiom dla(1-2Ans)
- tocos(πAns)
, co oszczędza jeden bajt, plus jeszcze jeden, ponieważ otrzymujemy otwarty nawias za darmo!Python 2, 89 bajtów
Działa prawie identycznie jak moja odpowiedź w języku Pyth, po prostu obliczając poprawną liczbę spacji w locie.
źródło
PowerShell,
104 10297 bajtówNB. jeśli chcesz go uruchomić ponownie, otwórz nowy PowerShell lub
rv o
zresetuj stan zmiennej.W porównaniu do tego, jak zwięzli są inni, to boli. [Boli mniej w 97 niż w 122]. Dwie części, żadna z nich nie jest bardzo zaskakująca; odczytuje wiele kolumn, korzysta z tablicowego indeksu trójskładnikowego-operatora-zastępcy, aby uzyskać przesunięcie, i przechodzi przez funkcję fali rozpoczynającą się od przesunięcia (i modyfikację, aby się nie przewracała
mod 0
).(A ouch, czy spędziłem wieki na tej funkcji falowej, nie mogąc dostrzec mojego nieporozumienia i wpisując wszystkie to-nie-LISP-, uczciwe pareny).
źródło
Python 2,
9889 bajtówTrochę dłużej.
Stosowanie
źródło
NameError: name 'l' is not defined
,NameError: name 'd' is not defined
.i
id
wcale, po prostu używającrange(P())
iif P()=='l'
...)f=[...][::2*('r'>input())-1]
rzeczywiściePerl, 85 bajtów
Stosowanie:
źródło
simplearrows2.pl
nie wydaje się tak dobre! : PPHP, 156 bajtów
Tworzy dwie tablice, takie jak to:
następnie używa unii tablicowej
$s+$t
lub$t+$s
łączy je iarray_splice
usuwa element na środku. Na koniec użyj<?=join()
źródło
Python 2,
111109104 bajtówCałkiem proste rozwiązanie. Jestem pewien, że można więcej grać w golfa. Dla tych, którzy nie wiedzą,
~x+n
jest taki sam jakn-1-x
.Wypróbuj online
Edycja : To było golfem do ostatniej linii:
źródło
Matlab,
10910596 bajtówDzięki @beaker za uratowanie mnie 9 bajtów .
źródło
x=x*10+32;
Rubin, 118 bajtów
2.times{
- dwa razy oczywiście ...l,d=gets.split;
- uzyskaj dane wejściowel=l.to_i;
- zmień długość na liczbę całkowitąa=(d=="r"?(0..l-1):(l-1).downto(0)).to_a;
- utwórz tablicę z zakresu od 0 do długości(a+a[0..-2].reverse).each{|x| puts "#{' '*x}*"}
- iteruj, obracaj w struny, aby tworzyć strzałyNiezupełnie najlepszy golf w historii, ale, hej.
źródło
PowerShell,
9894 bajtówGdybym mógł znaleźć sposób na umieszczenie Read-Host dla kierunku wewnątrz pętli foreach-object, ale poprosiłbym o to tylko raz, gdybym mógł zapisać kilka bajtów.
Edycja: 94 bajty. Zamiast testować dla lewej, test dla prawej (upraszcza pętlę).
Oryginalny 98 bajtów:
źródło
$_
zmiennej - podstępny Hobbit. Bardzo sprytne i dzisiaj czegoś się nauczyłem.> <> , 60 bajtów
2 zmarnowane bajty w dolnej linii, jak irytujące!
Ze względu na to, jak działa wejście w> <>, nie można „czekać” na wejście -
i
polecenie sprawdza, czy znak wejściowy jest dostępny na STDIN. Jeśli tak, wypycha wartość ASCII tego znaku, a popycha -1, jeśli nie.Oznacza to, że aby móc korzystać z tego programu, numer i kierunek muszą być już gotowe na STDIN, np
3r
Dla strzałki wielkości 3 skierowanej w prawo. Nie jestem pewien, czy to dyskwalifikuje ten wpis, daj mi znać, co myślisz: o)Napiszę też opis, jeśli ktoś tego chce.
źródło
:
10?)PHP, 154 bajty
Wygląda naprawdę powtarzalnie, ale robi pożądane:
Działa z wiersza poleceń, takich jak:
źródło
Python, 88 bajtów
Edytowane
źródło