Chcę koc, który wygląda tak. Każdy pasek przechodzi, pod, pod, pod, pod. Czy możesz to wydrukować?
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
\\//// \\//// \\//// \\//// \\//// \\////
//// //// //// //// //// ////
////\\ ////\\ ////\\ ////\\ ////\\ ////\\
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\// \\\\// \\\\// \\\\// \\\\// \\\\// \\\
\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\
\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
\\//// \\//// \\//// \\//// \\//// \\////
//// //// //// //// //// ////
////\\ ////\\ ////\\ ////\\ ////\\ ////\\
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\// \\\\// \\\\// \\\\// \\\\// \\\\// \\\
\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\
\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
\\//// \\//// \\//// \\//// \\//// \\////
//// //// //// //// //// ////
////\\ ////\\ ////\\ ////\\ ////\\ ////\\
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\// \\\\// \\\\// \\\\// \\\\// \\\\// \\\
\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\
\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\
Końcowe spacje na końcu każdej linii i końcowe znaki nowej linii są dopuszczalne.
Pamiętaj, to jest kodowanie w golfa , więc wygrywa kod z najmniejszą liczbą bajtów.
Liderów
Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
# Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
# Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
źródło
Odpowiedzi:
Python 2, 84 bajtów
Dzięki Sp3000 za 6 bajtów z zamiany operacji arytmetycznych na bitowe.
źródło
i+~j>>2&1^i+j>>1&2^i&4
, być może?Pyth, 36 bajtów
Wypróbuj online: demonstracja
Wyjaśnienie:
Możemy określić symbol, sprawdzając 3 warunki:
Jeśli interpretujemy
[A,B,C]
jako liczbę binarną, otrzymujemy następujące mapowanie:Możemy również interpretować
[A,B,C]
jako liczbę dziesiętną i wykonywać wyszukiwanie modułowe w indeksie w ciągu. To nie robi różnicy, ponieważ10 mod 8 = 2
.Teraz do kodu:
V24
iterujeN
(id-wiersza)[0, 1, ..., 23]
.sm...48
odwzorowuje liczbyd
(id-kolumny) w[0, 1, ..., 47]
na znaki i drukuje połączony ciąg.++BNd
generuje listę[N, N+d]
,+...t-Nd
dołączaN-d-1
. Mamy więc listę[N, N+d, N-d-1]
.m<3%k8
sprawdza każdą obliczoną liczbęk
, jeśli3 < k % 8
tak, to daje listę z warunkami[A, B, C]
.i...T
konwertuje to do liczby dziesiętnej, a następnie@" \// \/\\"
wykonuje wyszukiwanie w ciągu.Mniej więcej ten sam kod w Python2: 98 bajtów :
źródło
Perl, 209 + 17 = 226 bajtów
Uruchom z
-mList::Util=max -M5.010
(druga flaga jest bezpłatna). Nie wygrywa żadnych konkursów na liczbę bajtów, ale oto moje rozwiązanie.Czytelny:
Proceduralnie generuje każdy segment, następnie powtarza wzór 6 razy, a następnie generuje wynik 3 razy.
źródło
Python 3,
174172138 bajtówZnalazłem najmniejszy wzór, jaki mogłem znaleźć w kocu (wzór „poniżej” i „ponad”), utknąłem na liście i dodałem trochę zrozumienia listy i manipulacji ciągiem, aby rozpakować wszystko. Wszystkie znaki ucieczki odwrócone zamieniono na „b” i zastąpiono je później, aby zaoszczędzić kilka bajtów.
Dzięki Oliver za grę w golfa z 2 bajtów!
Usunięto 34 bajty, zmieniając wzór - cały wzór koca znajduje się teraz na jednej liście, więc do rozpakowania wzoru potrzebny jest tylko jeden dla pętli.
źródło
0*6
iu*6
print((("\n".join(o*6 for o in("bb////"," b//// "," //// "," ////b ",""))+"\n".join(u*6 for u in("////bb","\\// b\\","b b","b\\ //\\","")))*3).replace("b","\\\\"))
Python 2,
171170168 bajtówNie ładna i nie sprytna. Po prostu ustawia zmienne dla najczęściej używanych grup ciągów, a następnie łączy je i drukuje wynik 3 razy. Może spróbuję zagrać w golfa później, jeśli nie znajdę lepszego podejścia.
1 bajt zapisany przy użyciu surowego wejścia w przydziale. Dzięki @ nedla2004
-2 przez przypisanie kilku zmiennych, ale nadal nie jest poważnym konkurentem
źródło
*6
obejściem każdego elementu krotki. Jakieś pomysły?exec r"print'\n'.join(d);"*3
.SOML , 106 bajtów
niekonkurencyjna wersja korzystająca z funkcji, którą niedawno dodałem: (
836766 bajtów)wyjaśnienie:
źródło
Rubinowy, 75 bajtów
Lepiej gra w golfa, używając pojedynczego 8-bajtowego ciągu znaków indeksowanego przez j & 4 oprócz innych parametrów, zamiast modyfikowalnego ciągu 4-bajtowego.
Ruby, 81 bajtów
Drukuje ukośne paski znak po znaku. Właściwy znak jest wybierany z ciągu 4 znaków w zależności od obecności / braku każdej nici. Nakładający się znak jest różny w zależności od tego, która nić jest na górze.
Skomentował
źródło
Perl,
132131113 bajtówNie golfowany:
źródło
05AB1E , 37 bajtów
Wykorzystuje kodowanie CP-1252 .
Wypróbuj online!
Wyjaśnienie
Wykorzystuje sztuczkę mod-8 fachowo wyjaśnioną w pythowej odpowiedzi Jakube .
źródło
Python,
245236234233230216212198195 bajtówOK, dłużej niż moja ostatnia (i jakakolwiek inna) odpowiedź, ale byłbym zainteresowany opiniami na temat tego podejścia.
Edytować
-9 z uwagi na to, że @ nedla2004 jest bardziej na piłce niż ja
-2, biorąc lambda poza pętlę i tracąc w ten sposób 2 wcięcia
-1 używając
in' '*3
zamiast,in 0,1,2
ponieważ nie używamh
. to tylko licznik.-3 Dlaczego, dlaczego, dlaczego zostawiłem znak nowej linii i 2 wcięcia między drugim znakiem a drukiem? Jest późno. Wrócę jutro.
-14 Potrafi całkowicie stracić lambda i po prostu dołączyć dekoder bazowy 3 bezpośrednio po instrukcji print. Wygląda niechlujnie, ale w końcu to kod golfowy :)
-4 Nie ma sensu ustawiać zmiennej dla listy liczb całkowitych. Po prostu użyj go bezpośrednio w drugiej pętli for.
-14 i nie ma sensu używać zewnętrznej pętli. Wystarczy pomnożyć krotkę całkowitą przez 3 (bezwstydnie skradzione z @ nedla2004, aby uzyskać mniej niż 200 :))
-3 Zapisano 3, tworząc \ = 0, / = 1 i spację = 2. To sprawia, że lista liczb całkowitych jest krótsza, ponieważ trzy z podstawowych liczb 3 mają teraz wiodące zera
Jak to działa (i działa)
Ponieważ używane są tylko 3 znaki:
l jest listą 8 powtarzających się wzorców jako całkowitych odpowiedników ich podstawowej reprezentacji 3 przy założeniu, że „” = 0, „\” = 1 i „/” = 2
The lambdaPierwszym kodem po instrukcji print jest lekki konwerter z liczby całkowitej na ciąg 3 bazowyPierwsza pętla zapętla się 3 razy, a druga drukuje każdą linię z podstawowymi 3 znakami pomnożonymi przez 6 i zastępowanymi przez /, \ lub spacją.
Jestem pewien, że mógłbym użyć wyrażenia regularnego zamiast zagnieżdżonego replace (), ale jestem zbyt zmęczony, by spróbować teraz. To był tylko eksperyment i dłuższy niż mój poprzedni wysiłek w Pythonie, ale opublikowałem tylko komentarze na temat tego podejścia (a także dlatego, że nigdy wcześniej nie pracowałem w bazie 3 i bardzo podobało mi się opracowanie konwertera).
źródło
Rubin, 135 bajtów
puts [3320,1212,720,2172,6520,4144,2920,3184].map{|e|(e.to_s(3).rjust(8,"0").gsub("0"," ").gsub("1","\\").gsub("2","/"))*6+"\n"}.join*3
Tablica liczb odpowiada każdemu składnikowi każdej linii, przetłumaczona na podstawę 3:
= 0,
\
= 1,/
= 2, a następnie przekonwertowana na dziesiętną. Jednak wywołania gsub () są zbyt duże.I właśnie teraz widziałem odpowiedź @ ElPedro. :-( Tylko zbieg okoliczności.
źródło
e.to_s(3).rjust(8,"0")
→("%8s"%e.to_s(3))
;gsub("0"," ").gsub("1","\\")..gsub("2","/")
→tr("013"," \\/")
;"\n"
→$/
;.join
→*""
. Możesz także zapisać bajt, dzieląc wszystkie liczby w tablicy przez 4 i zastępujące
je(e*4)
.tr("021"," /\\")
.PHP
157126 bajtówBiorąc zmiany w listach @Titus w komentarzach ... Jestem zirytowany, że przegapiłem punkt 1, który powinienem był złapać, ale nie wiedziałem, że istniała strtr (), gdzie jest większość oszczędności - dobra robota Titus!
NOWY:
STARY:
Ponieważ wszystkie ukośniki odwrotne wymagają ucieczki, oszczędza to sporo miejsca na spakowanie ich jako inny znak i zastąpienie ich danymi wyjściowymi, a następnie, gdy wywołuję str_replace (), warto go używać tak często, jak to możliwe.
źródło
-r
. Skorzystaj z tych pięciu kroków, aby zapisać kolejne 30 bajtów: ideone.com/wt4HGB 1) użyj$a[...]
bezpośrednio jakostr_replace
parametru zamiast przypisywać go. 2)strtr
zamiaststr_replace
. 3) Użyj cyfr zamiast liter. 4) Dołącz przypisanie do echa. 5) Nie przydzielaj$a
, po prostu go używaj.Python 2,
169161165160155154152Na podstawie odpowiedzi @ ElPedro, z niewielkimi ulepszeniami. Aby zobaczyć wyjaśnienie, zobacz ich odpowiedź . To jest Python 2, chociaż wydaje się, że w pobliżu znajdują się nawiasy
print
.Zapisano 8 bajtów, używając zmiennej dlaDziała to tylko w przypadku ciągów, a użycie funkcji byłoby dłuższe.replace
.Zaoszczędziłem 4 bajty, widząc, że @ElPedro zdał sobie sprawę, że nie potrzebują l, a ja też nie.
Zaoszczędzono 5 bajtów, nie odwracając
range(8)
, i zamiast używać+=
dołączenia do r, dodając r na końcu nowej cyfry. Wypróbuj za pomocą repl.itZaoszczędzono 5 bajtów, kradnąc nową listę wartości @ ElPedro.
Zaoszczędzono 1 bajt, usuwając spację między
in
i(
.Zapisano 2 bajty, usuwając zmienną a.
źródło
in
, a(
w pierwszym zaa=3**i
. Wystarczy użyćfor i in range(8):r=
x / 3 ** i% 3,+r
aby zapisać parę. pierwszeństwo operatora dba o resztę :)PHP, 184 bajty
Wynik:
źródło
Partia, 152 bajty
Przetwarzanie łańcucha w Batch jest do bani, więc jest to prawdopodobnie najlepsze podejście. Połączenie zwrotne jest bardzo nieznacznie krótsze niż
for
pętla zagnieżdżona . Przynajmniej nie muszę cytować moich ukośników!źródło
APL, 110 bajtów
Jestem nowy w APL, więc jest to uproszczone rozwiązanie.
Oto moje podejście: zwróć uwagę, że po pierwszych 8 liniach koca wzór się powtarza. Dlatego muszę tylko zdefiniować pierwsze 8 wierszy, a następnie powtórzyć je 3 razy. Zauważ też, że każdy wiersz powtarza się po pierwszych 8 znakach. Dlatego, aby zdefiniować pojedynczy wiersz, muszę tylko zdefiniować pierwsze 8 znaków, a następnie powtórzyć je 8 razy.
Oto rozwiązanie bez golfa:
Zauważyłem powyżej, że D jest odwrotnością B, E jest odwrotnością A, a H jest odwrotnością F. W moim rzeczywistym kodzie korzystam z tego, nie definiując D, F lub H i używając funkcji odwrotnej
⊖
:24 48⍴A,B,C,(⊖B),(⊖A),F,G,⊖F
źródło
Rubin, 132 bajty
bardzo prosta odpowiedź.
źródło
Haskell, 96 bajtów
źródło