Zobacz także: Wykonaj ruch na planszy Go .
Zadanie
Go to gra planszowa, w której dwóch graczy (czarno-biały) umieszcza kamienie na przecięciach linii siatki na planszy 19 × 19. Czarne poruszają się jako pierwsze - na przykład na D4:
W tym wyzwaniu musisz wziąć współrzędną planszy Go D4
jako dane wejściowe i wygenerować reprezentację tablicy ASCII z pierwszym ruchem zagranym w danym punkcie.
Zauważ, że nie ma kolumny I. Historycznie ma to na celu zmniejszenie pomyłek z J i L.
Ten wynik składa się z 19 wierszy, z których każdy zawiera 19 znaków. Punkt z kamieniem jest oznaczony O
. Puste punkty na pokładzie są pokazane jako .
, z wyjątkiem dziewięciu punktów gwiazdy (w D4
, D10
, D16
, K4
, K10
, K16
, Q4
, Q10
, i Q16
), które są zaznaczone *
.
Na przykład podany F5
jako dane wejściowe wynik wyjściowy Twojej odpowiedzi musi wynosić:
...................
...................
...................
...*.....*.....*...
...................
...................
...................
...................
...................
...*.....*.....*...
...................
...................
...................
...................
.....O.............
...*.....*.....*...
...................
...................
...................
I podane Q16
jako dane wejściowe, twój wynik musi być:
...................
...................
...................
...*.....*.....O...
...................
...................
...................
...................
...................
...*.....*.....*...
...................
...................
...................
...................
...................
...*.....*.....*...
...................
...................
...................
Zasady
Możesz napisać funkcję, która przyjmuje współrzędną jako argument, lub program, który odczytuje współrzędne z wiersza poleceń lub z
STDIN
.Możesz zaakceptować wprowadzanie zarówno małymi, jak i dużymi literami, ale twoja odpowiedź nie musi obsługiwać obu.
Dane wejściowe są zawsze pojedynczymi ciągami, takimi jak
a1
lubT19
, nigdy ciągiem + liczbą lub dwoma ciągami.Jeśli piszesz pełny program, twoja odpowiedź musi być wydrukowana
STDOUT
jako ciąg znaków, opcjonalnie po nim końcowy znak nowej linii. Jeśli odpowiedź jest funkcją, można drukowaćSTDOUT
, lub powrócić ciąg, albo zwracają tablicę / listę ciągów (wiersze), lub wrócić dwuwymiarową tablicę lub zagnieżdżony listę znaków.To jest golf golfowy . Najkrótsza odpowiedź w bajtach wygrywa.
f("G", 14)
, prawda?Odpowiedzi:
MATL , 33 bajty
Wypróbuj online!
Wyjaśnienie
źródło
C,
21219519318117113210398 bajtówZapisano 1 bajt dzięki @FryAmTheEggman, 5 bajtów dzięki @orlp
Call
f()
z pozycją do gry (musi być pisane wielkimi literami), a to drukuje wynikową planszę.Wypróbuj na ideone .
źródło
putchar(i%20?i^20*atoi(p+1)+64-*p+(*p>72)?i%6^4|i/20%6^3?46:42:79:10)
C (gcc),
132128109Ideone
Funkcja, która drukuje płytę do STDOUT. Wymaga, aby współrzędna litery była wielka. Drukowanie w jednej pętli wydaje się być nieco krótsze niż w przypadku poprzedniej metody zagnieżdżonej.
źródło
MATLAB, 135 bajtów
Pierwsza próba, nic sprytnego, aby zobaczyć, jak wiele inni mogą zrobić:
Stosowanie:
źródło
a=input('');
); usuń nowe linie; zmienić'*'
na42
i'0'
na48
; zastąpićend
przez19
; odejmij wartość logiczną bezpośrednio zamiastif
gałęzi. W rzeczywistości można zastąpić ostatnie wiersze five przezb(20-a(2),a(1)-64-(a(1)>8))=48
Ruby,
9391 bajtówPobiera dane z wiersza poleceń, np
$ ruby script.rb Q16
.Przetestuj na repl.it (tam zawarty w lambda, ponieważ repl.it nie przyjmuje argumentów wiersza poleceń: https://repl.it/CkvT/1
Bez golfa
źródło
$><<
zamiastputs
. Jednak nie jestem pewien.Udać się,
319286 bajtówPrawdopodobnie rzuciłem trochę golfa, jestem początkujący
źródło
part
nap
?Rubin,
130128121 + 3 (-n
flaga) = 124 bajtyPrzełączono
-p
na,-n
ponieważputs b
jest o jeden bajt krótszy niż$_=b*$/
źródło
Python,
148145136130121119116 bajtów-3 Bajty dzięki @RootTwo
anonimowa funkcja lambda, przyjmuje dane w postaci „A1” (duże litery) i wyświetla listę list znaków (len == 1 ciągi znaków w Pythonie)
źródło
".*oo"[2*(j==ord(x[0])-(x[0]>"I")-65and int(x[1:])==i+1)+(i%6==j%6==3)]
zamiast"o"if...else"*"if...else"."
(x>'I')
zamiast(x[0]>'I')
zaoszczędzić jeszcze 3 bajty.> <> ,
9896 bajtówZauważ, że
0x14
w pierwszym rzędzie jest pierwszy wiersz'
, a0x19
między9
pierwszym^
a ostatnim wierszem.Wypróbuj online!Dane wejściowe są odwzorowywane w taki sposób, że
A-T
stają się1-19
(przy czym 0 oznacza fikcyjną kolumnę „nowej linii”), a liczba wierszy liczb całkowitych jest zmniejszana o 1. Program wykonuje pętlę od 379 do 0, wybierając znak z dolnego wiersza w miarę jak ( przesunięty o 15, aby uwzględnić fakt, że nie można wprowadzić dosłownego nowego wiersza w pudełku kodowym). Nowe linie są sprawdzane przezi % 20 == 0
, a punkty w gwiazdkach sprawdzane przez((i%20-1)%6)*((i/20)%6) == 9
.źródło
F #,
241 237 225 216 214211 bajtówTen podstępny ten ... Zastanawiam się, czy można go skrócić.
Edycja: naprawiono błąd, dodano liczby w niektórych miejscach usunięto liczby w innych, jakoś skończyło się z tą samą liczbą.
Może później spróbować przetasować liczbyGotowe.Edycja2: zapisano więcej bajtów, wypowiadając jeden z warunków, licząc intuicyjnie.
Edycja3: Naprawiono kolejny błąd: powinien działać teraz dla elementów z ostatniej rangi i jakoś udało mi się zaoszczędzić dwa bajty.
Wypróbuj online
źródło
Siatkówka ,
134129122 bajtów11 bajtów dzięki Martinowi Enderowi i za inspirację jeszcze 1.
Wypróbuj online!
źródło
Perl, 132 bajty
-3 bajty dzięki @Dom Hastings
Pobiera dane z wiersza poleceń. Potrzebuje
-M5.010
uruchomienia. Na przykład :Myślę, że może to być krótsze, ale nie mogłem wymyślić, jak ... proszę dać mi znać, jeśli tak!
źródło
@v=([(".")x18])x18;
na inicjalizacji listy ... Może być nawet lepszy sposób, ale nie jestem teraz w terminalu! Myślę, że możesz zastąpić@{...}
rozszerzenie również strzałkami dereferencyjnymi:$v[$_]->[@t]
jeszcze raz niesprawdzone! Mam również nadzieję, że nie masz nic przeciwko sugerowaniu zmian w kodzie ...@v=([(".")x19])x19
nie działa (próbowałem przed btw), ponieważ tworzy tylko jedną tablicę referencji i kopiuje 19 razy ref, a nie tablicę (więc ostatecznie masz tylko 1 linię zduplikowaną 19 razy). Zastąpienie@{..}
zgodnie z sugestią również nie działa. Zgaduję, że to dlatego, że pracuję nad plasterkiem, a nie tylko jednym elementem. Jeśli masz jakieś inne sugestie, możesz je zasugerować! :)eval
do -3 jednak:@v=eval"[('*')x19],"x19;
. I jesteś w 100% poprawny z arrayref ... Czy może jest jednak możliwe użycie tablicy 1D i opracowanie indeksu? Może później z tym pogrywamy!Partia,
322310308 bajtówObjaśnienie: Zaczyna się od pytania o kamień na stdin. Następnie ustawia zmienne dla każdej możliwej kolumny, aby mógł ocenić pierwszy znak kamienia jako zmienną w celu uzyskania
y
współrzędnych. Odejmuje 1 odx
współrzędnej, ponieważ jest indeksowana 1, a my chcemy indeksować 0, a także obliczamy,z=y+1
ponieważ będzie to później potrzebne. Następnie pętler
od 18 w dół do 0 dla każdego wiersza. Bierze ciąg...*.....*.....*...
i wyodrębnia znak zr
pozycji th na później. Wx
wierszuy
th znak th zastępuje się znakiemo
. Wreszcie,.*
s są zamieniane na.
plus poprzednio wyodrębnionego znaku; jest to brak opcji w wierszach 4, 10 i 16, ale jest to najkrótszy sposób na osiągnięcie tego. (Muszę użyć.*
ponieważ wymiana*
jest najwyraźniej nielegalna w partii.)źródło
PowerShell v2 +,
157152 bajtów(Wydaje mi się, że wpadłem na jakąś dziwną usterkę z operatorem przecinka, więc konstrukcja tablicy jest nieco dłuższa niż powinna)
Pobiera dane wejściowe jako ciąg wielkich liter
$args[0]
, rzutuje je jako tablicę znaków , przechowuje pierwszą literę w,$x
a pozostałe litery w$y
. To skutecznie dzieli dane wejściowe na literę / cyfrę.Następnie konstruujemy naszą tablicę wielowymiarową
$a
. My wstępnie wypełnić tablicę wielkości19
z0
S i przecinkami operatora. Następnie zapętlamy,0..18
aby każdy element był$a[$_]
równy tablicy okresów, ponownie używając operatora przecinka. (NB - Teoretycznie powinno się to skondensować$a=,(,'.'*19)*19
, ale wydaje się , że to nie działa poprawnie z przypisaniem indeksowania ... Skończyło się na ustawieniu całych kolumn na*
)Następnie zapętlamy dwa razy,
3,9,15
aby ustawić odpowiednie elementy na*
. Następnie indeksujemy go w odpowiednim miejscu, aby ustawić kamieńO
. Aby to zrobić, odejmujemy65
od$x
(tj. ASCII „A” wynosi 65, a my indeksujemy zero) i odejmujemy dodatkowy za pomocą rzutowania logicznego na int, jeśli$x
jest większy niż73
(tj. ASCII „I” ).Teraz nasze dane wyjściowe są odwrócone (tzn. Lewy górny byłby
A1
), więc musimy odwrócić tablicę za pomocą$a[18..0]
. Na koniec wyprowadzamy każdą linię-join
razem, tworząc ciąg.źródło
> <> , 124 bajty
Używa dokładnie tego samego podejścia, co moja odpowiedź C. Wprowadzanie musi być wielką literą, po której następuje liczba dziesiętna.
Wypróbuj online!
Wyjaśnienie:
źródło
JavaScript, 138 bajtów
Zwraca tablicę ciągów. Wyjaśnienie:
źródło
join
. Również umieszcza o w niewłaściwym wierszu i niewłaściwej kolumnie dla D5 (pierwszy przypadek testowy).R,
169161 bajtówZ wcięciami i znakami nowej linii:
Stosowanie:
źródło
Lua, 187 bajtów
Nie jest mi przykro z powodu 187 tego konkretnego projektu. Lua wciąż wydaje się być niezgrabna dla golfistów, ale jestem dumna z tego, jak daleko mogę się posunąć.
źródło
PHP,
280 268 263 261 255 218216 bajtówMój pierwszy golf.
Sposób użycia:
Zapisz jako plik PHP i wywołaj go
php filename.php coordinate
npphp go.php k13
źródło