Twoim zadaniem jest wygenerowanie reprezentacji legendarnego drzewa życia, Yggdrasil .
Musisz napisać program, którego wynik jest dokładnie taki:
/\
/**\
/****\
/******\
/******\
/********\
/**********\
/************\
/**************\
/************\
/**************\
/****************\
/******************\
/********************\
/**********************\
/******************\
/********************\
/**********************\
/************************\
/**************************\
/****************************\
/******************************\
/************************\
/**************************\
/****************************\
/******************************\
/********************************\
/**********************************\
/************************************\
/**************************************\
/******************************\
/********************************\
/**********************************\
/************************************\
/**************************************\
/****************************************\
/******************************************\
/********************************************\
/**********************************************\
/************************************\
/**************************************\
/****************************************\
/******************************************\
/********************************************\
/**********************************************\
/************************************************\
/**************************************************\
/****************************************************\
/******************************************************\
/******************************************\
/********************************************\
/**********************************************\
/************************************************\
/**************************************************\
/****************************************************\
/******************************************************\
/********************************************************\
/**********************************************************\
/************************************************************\
/**************************************************************\
/************************************************\
/**************************************************\
/****************************************************\
/******************************************************\
/********************************************************\
/**********************************************************\
/************************************************************\
/**************************************************************\
/****************************************************************\
/******************************************************************\
/********************************************************************\
/**********************************************************************\
/******************************************************\
/********************************************************\
/**********************************************************\
/************************************************************\
/**************************************************************\
/****************************************************************\
/******************************************************************\
/********************************************************************\
/**********************************************************************\
/************************************************************************\
/**************************************************************************\
/****************************************************************************\
/******************************************************************************\
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|________|
Nie ma końcowych białych znaków. Ostateczna nowa linia może zostać pominięta.
Aby ułatwić sprawdzanie, oto sumy md5 oczekiwanego wyniku:
374899e56bc854d04639c43120642e37
- Brak nowej linii na końcu.03afb81d960b8e130fe2f9e0906f0482
- Koniec nowej linii
Obowiązują standardowe luki. To jest golf golfowy, więc wygrywa najmniejszy wpis w bajtach!
code-golf
ascii-art
kolmogorov-complexity
Cairney Coheringaahing
źródło
źródło
Odpowiedzi:
Golfscript,
8477767572 znakówInne podejście niż Howarda . Kliknij liczbę znaków, aby spróbować.
Dzięki Howard za uratowanie 3 postaci!
Objaśnienie :
Jest to mniej więcej prosty port mojego rozwiązania Python . Biorąc trochę ekspresyjnych swobód (używając nazwanych zmiennych zamiast śledzić pozycje stosu i
print
naprawdę utrzymuję rzeczy na stosie, nie drukując):źródło
'\\'n
ciągnąć nową linię do łańcucha (+/- 0 znaków), a teraz odwrotny ukośnik nie musi już być poprzedzany (-1 znak).4*4+
jest taki sam)4*
i'_-'[=]
może być napisany,'_-'1/=
co sprawia, że ostatni jest+
przestarzały.Haml & Sass
37 + 277 = 314
Haml:
Sass:
* Sass pozwala na sterowanie dyrektywami, konkatenacją i zmiennymi dereferencjami. Wszystko to jest przydatne podczas stylizacji, ale pełne umiejętności podczas gry w golfa.
zostanie wygenerowany w:
HTML:
CSS:
wynikowa strona
źródło
CJam , 62 bajty
Wypróbuj online!
Jak to działa
źródło
GolfScript, 79 znaków
Wypróbuj kod tutaj . Zauważ, że podział linii nie jest opcjonalny w tym kodzie
źródło
Python,
148129126121 121 znakówDzięki Falko za uratowanie 3 postaci i trzęsienie ziemi za genialne uratowanie kolejnych 5!
źródło
'**'*j
aby zapisać 3 znaki. Poza tym moje rozwiązanie jest zbieżne z dokładnie tym samym kodem. :)for c in'-'*11+'_':print' '*35+'|'+c*8+'|'
.Grzmotnąć,
236 19719310 bajtów kodu + 1-bajtowa nazwa pliku + 182-bajtowy plik danych = łącznie 193 bajty
Wyjaśnienie
y
to plik zawierający Yggdrasil, bez nowej linii końcowej, skompresowany algorytmem zopfli (wywoływany jakozopfli --i64
), a następnie usunięty z ostatnich 8 bajtów. zopfli jest kompatybilny z gzip, więc mogę dekompresować plik za pomocą standardowych narzędzi Bash zaprojektowanych dla gzip. Rozmiar pliku danych wynosi 182 bajty (229 bajtów, gdy używany jest zwykły gzip). Rozmiar oryginalnego Yggdrasil, bez nowej linii końcowej, wynosi 5876 bajtów.Usunięcie ostatnich 8 bajtów powoduje komunikaty o błędach, które są tłumione przez wysyłanie standardowego błędu do pliku o nazwie
j
. Jeślij
istnieje, zostanie zastąpione.Base64 z
y
jest (użyj,base64 -d
aby uzyskać oryginalny plik):A md5sum to:
źródło
C, 169
Nie golfowany (i lekko rozplątany):
źródło
Rubin - 100
Automatycznie spłaszcza, dzięki czemu możemy zbierać wszystkie linie nawet w zagnieżdżonych tablicach. Potrzebuje Ruby 1.9
Spróbuj na ideone
źródło
PowerShell
104101źródło
C #
258234 bajtówPodziękowania dla pewnego anonimowego użytkownika za sugerowane zmiany, które dobrze wykorzystują metodę String.PadLeft!
Kod jest dość prosty, niewiele do golfa.
Sformatowany kod:
źródło
\r
jest tutaj bezcelowe. To jest kod golfowy.J,
98 88 8475źródło
Perl, 127
Nie golfowany:
źródło
Rubin -
139129126123121Podniesione „umieszcza” poza tworzeniem tablicy (sugestia bitpwner).
Ungolfed („odkłada” unhoisted):
źródło
PHP
223202181160156Edycja Zorientowałem się, jak dokonać aliasu funkcji ze zmienną i byłem w stanie odciąć jeszcze kilka znaków. Ta
str_repeat
funkcja była naprawdę pełnaEdycja 2: Dziękujemy wszystkim za sugestie!
Gra w golfa:
Czytelny:
Dane wyjściowe: http://brobin.me/yggdrasil.php
źródło
(39-$j)
,($j*2)
i($i==11)
. -2 przez zastąpienie\n
prawdziwymi nowymi znakami wiersza (PHP pozwala na to w literaturze). -5 znaków zastępując (oba)for($i=0;$i<12;$i++)
zfor($i=12;$i-->0;)
i$i==11
z$i==0
.$s(($i==0?'_':'-'),8)
z$s($i?'-':'_',8)
. (==> -5 znaków)$s('*',$j*2)
się$s('**',$j)
. Myślę, że to ostatnia poprawa, jaką mogę znaleźć.($j*2)
się na wewnętrznej do($j++*2)
i wyjmowanie$j++
zfor()
argumentówfor($i=12;$i-->0;)
można skrócić dofor($i=12;$i--;)
- kolejne 2 znaki.Delphi 429
Spróbuję poprawić później.
Grał w golfa
bez golfa
źródło
JavaScript,
288281Chrome ukrywa zduplikowane
console.log
pliki, zamiast tego użyj IE.Nie golfowany:
źródło
for(i=0;i++<39-w;)
zamiastfor(i=0;i<39-w;++i)
i tak dalej. Ponadtop=console.log
zamiastc=console
ip
zamiastc.log
(chociaż testowałem ten ostatni tylko w Node.js, nie działa w Firefoksie). Oszczędza to 12 bajtów.c=console.log
też nie działał w Chrome, więc go nie użyłem. Sztuczki for loop pozwalają jednak zaoszczędzić 7 bajtów.JavaScript (console.log),
168166(Biały znak tylko dla czytelności)
źródło
C (219)
Dziękujemy wszystkim za wskazówki dotyczące gry w golfa - udało się obniżyć do 219. Nie sądzę, że spadnie znacznie poniżej.
Wymagane obejmuje:
źródło
32
zamiast' '
i42
zamiast'*'
:)Haskell,
153148Prosto, bez trików, po prostu gra w golfa:
%
Operator zwraca pojedynczą linię, jej pierwszy argument będącyString
długości 3 zawierający granice i znaki wypełnienia w tej linii (obecnie zakładając dokładnie 3Char
s, oszczędzając 5 bajtów), przy czym drugie,Int
określa połowa liczby znaków wypełnienia. Dopasowywanie wzorów, zużycie i dołączanie jest używane w kombinacji w celu zaoszczędzenia bajtów poprzez dbanie o „klej” pomiędzyChar
iString
. W tej drugiej wersji również ustawiłem#
nieskończoność i wprowadziłem,take 85
aby znów była skończona (niestety nie zapisano żadnych bajtów).#
Operator tworzy sekwencję dlan
argumentu%
wymagana do drzewa:[0..3], [3..7], ...
łączone.&
jest po prostu skrótemreplicate
, który występuje trzy razy.Drzewo jest złożone w ostatnim wierszu, nowe wiersze są dodawane przez
unlines
.źródło
Lua - 164
źródło
Mathematica
191178Na pewno nie najlepsze rozwiązanie:
Nie licząc nowych linii. Mathematica wypacza dane wyjściowe, ponieważ nie przyjmuje takiej samej szerokości dla białych znaków jak dla „*” i „/”. Ale wynik jest poprawny.
źródło
Java - 286
Mój pierwszy golf.
Gra w golfa:
Nie golfowany:
Przetestuj tutaj
źródło
Python 2, 117
Inne wersje, które próbowałem, obejmują:
źródło
Pyth,
101100999081 bajtówWypróbuj online!
Tłumaczenie Python 3:źródło
a
funkcja zdefiniowana w Pythonie nie jest równoważna z+
listami?<list>+<str>
nie jest prawidłową operacją, ale równie łatwo mogę jej użyć["-"]*11+["_"]
. Zdecydowałem się zdefiniować własną funkcję, aby dokładniej tłumaczyć, co faktycznie robi Pyth.PowerShell, 88 bajtów
źródło
Groovy 118
źródło
C 194
Ten kod jest gorącym bałaganem i na pewno można w niego grać więcej. Była to jednak okazja, aby wypróbować kilka rzeczy, których nigdy wcześniej nie robiłem: użycie literału dla ciągu gwiazdek i użycie specyfikatora szerokości
*
z ciągiem wprintf
.źródło
Rakieta
223 220 211 204198Gra w golfa:
Nie golfowany:
źródło
Zestaw (MIPS, SPIM) ,
768671659655654 bajtówWypróbuj online!
Edycja: Zapisano ~ 100 bajtów, kodując na stałe każdy znak w rejestrze i po prostu zapisując na stosie, a następnie nadużywając faktu, że MIPS nie ma typów, więc dozwolone jest niejawne słowo do łańcucha ascii.
Edycja 2: usunięto zduplikowany przydział stosu. (
addi $sp -4
) Ups!Edycja 3: w przepisaniu przypadkowo spowodował, że pień drzewa o 1 znak jest za krótki. (36 zamiast 35). Naprawiony.
Edytuj 4: -4 bajty za pomocą 8 $ i 9 $ zamiast $ t0 i $ t1. oznaczają to samo, ale $ t0 jest łatwiejszy do odczytania. niestety, wszystkie inne rejestry t mają tę samą długość, jeśli są ładnie napisane ($ t2 == 10 $, ale oba mają 3 znaki), więc pozostałe są praniem. Mógłbym (teoretycznie) użyć pozostałych rejestrów „a” (5-7. Print syscall używa 4), ale po zachowaniu nie jest zdefiniowane zachowanie podczas korzystania z syscall.
-1 bajt przez ustawienie t8 na 0 i rozgałęzienie na mniej niż zamiast na równy. wymagał też ode mnie zmiany kolejności dodawania operacji, co niestety wydłużyło czas wykonania aż o 3 dodatkowe kody dłużej.
Nie najlepsze w MIPS, ale po oczyszczeniu sumienia z tego w meta dyskusji, przesyłam je. MIPS nie jest do tego przeznaczony (brak danych wyjściowych, brak pętli), ale mimo to fajnie jest to robić.
Niestety nie stworzyłem skomentowanej wersji tego nowego rozwiązania, ale możesz wyświetlić starą wersję z pełną dokumentacją tutaj
Zachęcam do wzięcia udziału i poprawy tej odpowiedzi, jeśli możesz ją pokonać - prawdopodobnie brakuje mi tu kilku optymalizacji.
źródło
addi $sp -4
tak naprawdę skrótaddi $sp $sp -4
pochodzi od SPIM lub MIPS, więc jeśli ktokolwiek to zrobi, daj mi znać.Kobra - 166
228260źródło