Zarząd Monopolu
W ramach tego wyzwania golfowego budujemy grę planszową Monopoly.
Zasady:
- Nie wkładaj żadnych danych.
- Wyjmij planszę 11x11, gdzie każda postać ASCII tworząca planszę jest pierwszą literą każdej spacji amerykańskiej wersji planszy Monopoly.
- Znaki muszą być oddzielone spacjami.
Go
powinien zacząć się w prawym dolnym rogu.
Dokładny ciąg do wyprodukowania to
F K C I I B A V W M G
N P
T N
C C
S P
P S
V C
S P
E L
S B
J C V C O R I B C M G
Zauważ, że od dołu z prawej do dołu z lewej strony kwadraty są następujące:
G --> Go
M --> Mediterranean Avenue
C --> Community Chest
B --> Baltic Avenue
I --> Income Tax
...
J --> Jail
Edytuj Wow! na pewno wam się podobało! :)
code-golf
string
ascii-art
kolmogorov-complexity
board-game
jacksonecac
źródło
źródło
Odpowiedzi:
Siatkówka , 74 bajty
Przedostatnie i ostatnie wiersze powinny zawierać pojedynczą spację.
Wypróbuj online!
Wyjaśnienie
Zastępuje to (puste) wejście ciągiem w drugim wierszu.
Jest to etap podzielony, który rozdziela ciąg wokół dopasowań wyrażenia regularnego
(._.)
(to znaczy dowolnych trzech znaków z_
pośrodku). Powodem, dla którego umieściliśmy całe wyrażenie regularne w grupie, jest to, że podzielone etapy zwracają również wyniki przechwytywania grup. Np. Dzielenieabcd
siębc
daje[a, d]
, ale podzielenie gob(c)
daje[a, c, d]
. W ten sposób otrzymujemy wszystkie._.
części w osobnych wierszach, ale także 11-znakowe części na początku i na końcu. Używamy_
opcji pomijania pustych wyników między poszczególnymi._.
dopasowaniami. Wynik byłby następujący:Następnie przetwarzamy podkreślenia:
To zastępuje każdy znak podkreślenia dziewięcioma
1
. Powodem, dla którego używamy1
tutaj s zamiast spacji, jest to, że ułatwia wstawianie spacji w następnej kolejności.Pamiętaj, że w drugiej linii jest spacja. To wstawia spację w każdej pozycji, która nie jest granicą słowa, tj. Wszędzie oprócz początku i końca linii.
I wreszcie, wszystkie te zastępujemy również
1
spacjami.źródło
(._.)
.Galaretki , 44 bajtów
Wypróbuj online!
Pomysł
Jeśli usuniemy co drugą kolumnę i transponujemy wiersze z kolumnami, otrzymamy następującą tablicę.
Teraz możemy obrócić każdą kolumnę o jedną jednostkę w prawo, przesuwając wszystkie pozostałe pola w prawo.
Następnie usuwamy pozostałe przestrzenie i zastąpić karetki z literą D .
Teraz zastępujemy każdą literę indeksem opartym na 1 w alfabecie.
Następnie konwertujemy tę tablicę cyfr z bazy bijective 23 na liczbę całkowitą.
Teraz przekształcamy tę liczbę całkowitą w bazę bijective 250 .
Na koniec używamy tych cyfr do indeksowania strony kodowej Jelly .
Są to zakodowane dane, które uwzględnimy w programie ( 29 bajtów ). Aby uzyskać pożądany wynik, wystarczy odwrócić powyższe kroki.
Kod
źródło
z
) z wypełniaczem.05AB1E ,
4847 bajtówDzięki Emignie za uratowanie bajtu!
Wyjaśnienie:
Najpierw kompresja.
•(K·;“…¬È¦z"9äuŸé;TÞîÕs‡ÓÐV9XÒt\<•
to skompresowana wersja następującego numeru:Następnie jest konwertowany na bazę 33 , co daje następujący ciąg:
Zera są zastępowane 9 spacjami , przy użyciu następującego kodu
¾9ð×:
. NastępnieS
dzielimy ciąg na postacie i kroimy je na 11 elementów (zakończonych11ô
). Otrzymujemy następującą dwuwymiarową tablicę:Mamy gridify tę tablicę
»
i wyjście to pośrednio.Wykorzystuje kodowanie CP-1252 . Wypróbuj online!
źródło
•(K·;“…¬È¦z"9äuŸé;TÞîÕs‡ÓÐV9XÒt\<•33B¾9ð×:S11ô»
Python 2, 89 bajtów
Tworzy szablon
zastępować literami poprzez formatowanie ciągów. Szablon używa dwóch rodzajów linii:
l
11 kopii litery plus spacja, a następnie nowa linia. Jest również używany w pierwszej i ostatniej linii. Ma spację końcową.Python 3.5 może zapisać bajt z rozpakowaniem krotki
(*'...',)
.źródło
PowerShell v2 +,
13112311411099 bajtówTo tylko dosłowny ciąg z nowymi liniami umieszczonymi na rurociągu, z odrobiną
-replace
na końcu, aby zamienić0
w19
spacje. Pierwszy i ostatni wiersz są dosłowne. Mając tylko 10 pól i niewiele powtórzeń, nie było wystarczająco dużo miejsca na grę w golfa. Ciąg ten pozostawia się w potoku, a dane wyjściowe za pośrednictwem niejawnego mająWrite-Output
miejsce po zakończeniu programu.źródło
JavaScript ES6 REPL ,
105102101 bajtówTutaj nie dzieje się nic ciekawego. Wklej w konsoli, aby zobaczyć pożądane wyniki
Zaoszczędzono 3 bajty dzięki @Arnauld
Zaoszczędzono jeszcze 1 bajt dzięki @Neil
Pokaż fragment kodu
źródło
1
s na spacje i użyj tego wyrażenia regularnego:.replace(/.( ?)/g,`$& `+`$1`.repeat(17))
1
s spacjami i użycie tej funkcji:a=>a-1?a.repeat(18):a+' '
/// ,
10098 bajtówWypróbuj online!
Z jakiegoś tajemniczego powodu wydaje się, że po
G
s są spacje końcowe . Bez nich mój kod miałby 96 bajtów.Dzięki 42545 (ETHproductions) i 56258 (daHugLenny) za zmniejszenie 1 bajta każdy!
źródło
G
s w pierwszym i ostatnim wierszu?Turtlèd , 72 bajty
Wypróbuj online
>
obraca żółwia,"foo"
zapisuje struny na siatce. ostatni"
był możliwyźródło
V ,
75, 62, 59 bajtówWypróbuj online!
Ponieważ ten kodel zawiera znaki spoza ASCII, oto zrzut heksowy:
Wyjaśnienie. Najpierw wprowadzamy następujący tekst:
Następnie
<esc>
wracamy do trybu normalnego. W tym momencie kursor znajduje się w trzeciej linii ostatniegoG
. Dogodnie jest polecenie, aby umieścić nas w pierwszej kolumnie linii tuż nad kursorem. To polecenie jest-
. Następnie, gdy skończymy w drugiej linii (wN
), uruchamiamy następującą pętlę:Wyjaśnienie:
Teraz bufor wygląda następująco:
Teraz używamy skompresowanego wyrażenia regularnego, aby zastąpić każdy znak tym znakiem i spacją. To jest ta
Í./&
część. To przekłada się na następujące wyrażenie regularne vim:Co znaczy:
źródło
R,
149146 bajtówNie tak imponujące, ale też nie jestem pewien, jak by to wyglądało. Wykorzystanie
paste
jakoś to moje pierwsze przypuszczenie. Porównaj z surowym tekstem 241 bajtów.Skrzypce R.
źródło
Python 2, 108 bajtów
Nieznacznie różni się od drugiej odpowiedzi w Pythonie, nie używając zamiany, tylko sprzężenia łańcuchowe.
źródło
Perl, 90 bajtów
Bardzo nudne podejście, nie mogę wymyślić lepszego sposobu na zmniejszenie ... Wymaga
-E
bez dodatkowych kosztów. Generuje dodatkową spację na końcu każdego wiersza. -2 bajty dzięki @Dada !Stosowanie
źródło
perl -E 'say"FKCIIBAVWMG\nNZP\nTZN\nCZC\nSZP\nPZS\nVZC\nSZP\nEZL\nSZB\nJCVCORIBCMG"=~s/Z/$"x9/ger=~s/./$& /gr'
. (Zamień\n
na dosłowne znaki nowej linii, aby dostać się do 90).Jolf, 72 bajty
Wymień wszystkie
♣
z\x05
, lub spróbować go tutaj!To daje pożądany ciąg.
źródło
Java 7,
177165142131 bajtów-15 bajtów dzięki @BassdropCumberwubwubwub .
-11 bajtów dzięki @Numberknot .
Kod niepoznany i testowy:
Wypróbuj tutaj.
Wynik:
źródło
String c(){String s=" ";return"FKCIIBAVWMG\nN_P\nT_N\nC_C\nS_P\nP_S\nV_C\nS_P\nE_L\nS_B\nJCVCORIBCMG".replace(""," ").replace("_",s);}
za 150 (zauważ, żes
ale wymiana stosów usunęła je. Oto ideone , teraz nawet w 142 bajtachs=" "
. W takim przypadku jest rzeczywiście krótszy. I.replace(""," ").replace("_",s);
może.replace("_",s).replace(""," ");
zamiast tego być o dodatkowe -8 bajtówString c(){return"FKCIIBAVWMG\nN_P\nT_N\nC_C\nS_P\nP_S\nV_C\nS_P\nE_L\nS_B\nJCVCORIBCMG".replace("_"," ").replace(""," ");}
( 131 bajtów )Befunge, 120 bajtów
Pierwszy wiersz ma ciąg do wydrukowania w odwrotnej kolejności (wygląda na to, że tak nie jest, ale kod przewija się wstecz w tym wierszu). Druga linia drukuje górny i dolny wiersz. Trzecia linia i lewa strona czwartej linii drukują środkowe rzędy, a mały fragment w prawym dolnym rogu robi ciekawą rzecz: przesuwa kursor z powrotem do drugiego rzędu, aby wydrukować ostatni wiersz, ale po jego zakończeniu skwitowany.
Jak widać w pierwszym wierszu, łańcuchy są oddzielone spacjami, aby rozróżnić pierwszy, środkowy i ostatni wiersz. Spacje mogą być dowolne, a gdybym użył znaków ASCII 0–9, mógłbym z łatwością zapisać 4 bajty. $, Który widzisz, to po prostu śmieciowy znak, który musi tam być i można go zastąpić dowolnym spacją.
źródło
J,
7773 bajtówZauważ, że 43 bajty, ponad połowa wszystkich, są używane tylko dla ciągu
' FKCIIBAVWMGNPTNCCSPPSVCSPELSBJCVCORIBCMG'
.Wyjaśnienie
Najpierw utwórz listę
Następnie przygotuj tabelę czasową
Następnie sprawdź równość z zerem
Spłaszcz go, znajdź sumy sumaryczne i pomnóż elementarnie
Następnie połącz z zerami, podziel go na podlisty o długości 22, upuść nagłówek każdej podlisty i użyj wartości jako wskaźników w ciągu
' FKCIIBAVWMGNPTNCCSPPSVCSPELSBJCVCORIBCMG'
źródło
(' ',@,.~]);._1';FKCIIBAVWMG;N_P;T_N;C_C;S_P;P_S;V_C;S_P;E_L;S_B;JCVCORIBCMG'rplc'_';9#' '
_11,@,.&' '\'FKCIIBAVWMGN_PT_NC_CS_PP_SV_CS_PE_LS_BJCVCORIBCMG'rplc'_';9#' '
Właściwie 74 bajty
Wypróbuj online!
Ten program działa na tej samej podstawowej zasadzie, co odpowiedź Python 2 xnor .
Objaśnienie (nowe znaki zastąpiono
\n
dla przejrzystości):źródło
C # 6,
192190 bajtówBez spacji; bez końca nowej linii.
Proste rozwiązanie. Zacznij od literału.
Replace
!
o 9 spacji. NastępnieSplit
na 11 ciągów znaków~
i dalej dochar
(wewnętrznegoSelect
). Dodaj spację do każdej postaci, a następnie zJoin
powrotem do 11 ciągów znaków. Wreszcie kolejnyJoin
znak nowej linii.źródło
Ruby, 92
Pełny program, drukuje na standardowe wyjście za pomocą
$> <<
Do wydrukowania jest 40 liter. Litery od 10 do 28 występują naprzemiennie, po których następuje nowa linia lub
' '*19
. Wcześniejsze i późniejsze litery są oddzielone pojedynczymi spacjami.źródło
Perl,
115112 bajtówDaje następujące dane wyjściowe:
Pierwszy i ostatni wiersz wyniku mają spację końcową. Kod wykorzystuje zamienniki wyrażeń regularnych oraz fakt, że jeśli obiekty nie są zdefiniowane, są one interpretowane jako ciągi znaków (np. FKCIIBAVWMG jest traktowany jako „FKCIIBAVWMG”. Nie można pobrać cudzysłowów z ostatniego wiersza z powodu poprzedzającego nowego wiersza, który Nigdzie indziej nie mogłem finagle.
Edycja 1: Zapisano 3 bajty, zastępując
" "
je$"
, usuwając nawiasy zewnętrzne i wstawiając spację po wydruku, a także usuwając nawiasy wokół$"x19
i dodając spację (aby.
nie były interpretowane jako dziesiętne)źródło
s/(.)/\1 /
można je zastąpićs/./$& /
. Upuść ostatni średnik. Użyjsay
zamiastprint
(do tego trzeba dodać-M5.010
lub użyć-E
zamiast-e
, ale oba są bezpłatne (patrz tutaj )). Dosłowne nowe znaki zamiast\n
.Węgiel drzewny , 66 bajtów
Wypróbuj online!
Box(21, 11, 'F K C I I B A V W M GPNCPSCPLBG M C B I R O C V C JSESVPSCTN')
.Niekonkurencyjne, 36 bajtów
źródło
Python 2, 116 bajtów
Całkiem proste, z jakiegokolwiek powodu, mimo że zamiana sznurka jest tak pełna, to była najlepsza rzecz, jaką mogłem wymyślić. Być
re
może użycie może być krótsze.źródło
print'F K C I I B A V W M G\nN@P\nT@N\nC@C\nS@P\nP@S\nV@C\nS@P\nE@L\nS@B\nJ C V C O R I B C M G'.replace('@',' '*19)
ma również 116 bajtów bez użycia sprzężenia, jeśli chcesz być bardziej bezpośredni. Alternatywnie,print' '.join('FKCIIBAVWMG!N@P!T@N!C@C!S@P!P@S!V@C!S@P!E@L!S@B!JCVCORIBCMG').replace('! ','\n').replace('@',' '*17)
wynosi 115 bajtów, jeśli dozwolone jest końcowe białe znaki. (Argumentem zastępującym jest „!”, Zamiast „!”.)Partia, 171 bajtów
źródło
GameMaker Language, 148 bajtów
Wiem, że to dość proste, ale nie sądzę, że można to pokonać w GML ...
źródło
GDScript
języka zGodot
silnika gry. Ale nie jestem pewien, czy byłoby w porządku :)string_repeat(" ",19)
ma taką samą długość jak" "
.Pip , 64 bajty
63 bajty kodu, +1 dla
-S
flagi.Wypróbuj online!
Wyjaśnienie
Zastosowani operatorzy:
.
(binarne) konkatenuje (działa na pozycjach na listach).X
(binarne) mnoży ciąg. (s
jest zmienną wstępnie zainicjalizowaną" "
).^
(unary) dzieli ciąg na listę znaków..*
jest innym sposobem podziału łańcucha na znaki. Składa się z jedności.
, która nie ma op-stringów, w połączeniu z*
meta-operatorem, który mapuje jednoargumentowy operator na każdy element w (iterowalnym) operandzie. Użycie.*"..."
pozwala nam zaoszczędzić bajt nad(^"...")
- nawiasy byłyby wymagane, ponieważ.
ma wyższy priorytet niż^
.PE
dołącza element do listy.AE
dołącza element do listy.Na tym tle oto kod krok po kroku:
Gdy ten wynik jest automatycznie drukowany,
-S
flaga dołącza do list podrzędnych w spacjach i listy głównej w znakach nowej linii, dając pożądany wynik.źródło
C
171156 bajtówWyprowadza również znak nowej linii ... Prawdopodobnie można go nieco pograć w golfa.
źródło
Perl 5,
9286 bajtówZastosowania
sprintf
, dopełnienie i operator powtarzania łańcuchax
.źródło
\n
z dosłownych znaków nowej linii, nie trzeba spacji międzyx
operatorem a numer, który następuje, i wreszcie wymienićsplit//,xxx
zxxx=~/./g
.Haskell,
128125114 bajtówWypróbuj tutaj
((:" ")=<<)
isconcatMap (\a -> [a,' '])
- wstawia, dodając spację za każdą literą na wejściuźródło
PowerShell, 95 bajtów
Zainspirowany @ AdmBorkBork za odpowiedź .
Wyjaśnienie
Pierwszy operator zastępujący tworzy prostokąt
11x11
.Drugi operator zastępujący wstawia spację po każdym znaku. Wynik ma końcowe spacje.
źródło