W tym wyzwaniu musisz wziąć dwie liczby (oddzielone spacją) jako dane wejściowe i wyjściowe prostokąta ASCII, złożonego z x
s.
Pierwsza liczba będzie szerokością i wysokością trójkąta, który powinieneś wyprowadzić. Drugi numer będzie tym, w którym rogu będzie kąt prosty. Rogi są ponumerowane od 1 do 4, zaczynając od lewego górnego rogu i idąc w kolejności czytania w języku angielskim:
1 2
3 4
Na przykład (dane wejściowe i odpowiadające im wyjścia trójkątne):
INPUT | 3 1 | 3 2 | 3 3 | 3 4
------+-----+-----+-----+----
OUT- | xxx | xxx | x | x
PUT | xx | xx | xx | xx
| x | x | xxx | xxx
Dane wyjściowe programu muszą dokładnie odpowiadać tym przykładom dla odpowiednich danych wejściowych.
Dane wejściowe zawsze będą ważne: pierwsza liczba będzie liczbą całkowitą ≥1, a druga liczba będzie wynosić 1, 2, 3 lub 4.
To jest golf golfowy ; najkrótszy kod (pod względem liczby znaków) wygrywa.
źródło
(⍎⍵⌷'functions')
części, zanim zdecyduje, jak interpretować całe stwierdzenie? Rozważ na przykład1+(⍵⌷'12+')|40
. Nie wiedziałby nawet, czy|
jest monadyczny czy dyadyczny przed wejściem w⍎
tę nawiasową część. Całe abstrakcyjne drzewo składniowe zmienia się w zależności od oceny.1+(⍎⍵⌷'12+')|40
... nie pozwolę mi edytować.f ← { [ }
nie daje błędu!f 1÷0
daje ... błąd domeny ! (z powodu podziału przez zero). Tylko wtedy, gdy wywołasz funkcję tak,f 123
jakbyś miał błąd składniowy . Oto: imgur.com/jtmdi4BRuby,
11611510996Zacznę od własnego rozwiązania.
Wiem tylko, że prawie natychmiast pokonają mnie 30-znakowe rozwiązanie GolfScript: P
Dzięki Minitech za golenie 19 znaków (wow)!
źródło
==0
możesz użyć<1
.?x*x
ratuje inną postać. Ponadto,puts i[1]%2<1?t.rjust(s):t}
by rade, prawda??
? Czy to konieczne? Myślę też, że możesz zrobić to samo zr=
.1?
jako pojedynczy token, a spacja końcowa, ponieważ w przeciwnym razie jest analizowany jako?t
(co jest równoważne't'
). Jak proponujesz restrukturyzacjęr
części?GolfScript (
3433 znaków)Szkoda, że narożniki nie są ponumerowane obrotowo, ponieważ pozwoliłoby to na bardziej eleganckie podejście do budowania jednej tablicy, a następnie obracania jej
n
razy:źródło
C # - 195
Sformatowany:
źródło
Skrypt golfowy,
39 3635 znakówdemo na żywo: http://golfscript.apphb.com/?c=OyczIDInCn5cOnkseycgJyoneCd5Kit5PC0xIDIkPyV9JS0xQDI%2BPyVuKgo%3D
szkoda, że nie ma 30 znaków zgodnie z życzeniem
źródło
1${-1%}*
z-1 2$?%
i\2>{-1%}*
z\2>-1\?%
złowi Ci 2 znaki.-1 2
można napisać0~2
~(\:y,{{>'x '=}+y,%0~2$?%}%\2&(%n*
Mathematica 122 (104?)
Zgodnie z liberalną interpretacją „wyjścia”, następujące (104 znaki) będą działać.
Jeśli wprowadzanie danych w formie listy jest dozwolone, wystarczy (75 znaków):
źródło
J,
595542383736 znakówJeśli dozwolone jest wprowadzanie danych na końcu programu:
Jeśli nie (dodatkowe 3 znaki):
Stosowanie:
lub
Myślę, że może to być nieco krótsze, ponieważ większość znaków to nawiasy kwadratowe i wielkie litery, aby zachować ukryty styl.
Edytuj
Używając gerunda, a czasownik programu odciął kilka znaków, ale wciąż jest tam zbyt wiele wielkich liter dla moich upodobań.
Edycja 2
To trochę bardziej. Zrzucenie porządku dziennego, aby uzyskać listę wymaganych obrotów, pozwala pozbyć się większości dodatkowych nawiasów i kilku wielkich liter.
Edycja 3
Pozbyłem się w tym czasie ostatniej obcej czapki i pary wsporników. Musisz znaleźć tańszy sposób kodowania wymaganej liczby obrotów.
Edycja 4 Użyj prefiksu zamiast sufiksu, aby odciąć znak. Umożliwia inny sposób tworzenia listy, który nie zapisuje żadnych znaków. Facet.
Edytuj 5
Używając formuły, aby odciąć inną postać. Nadal uważam, że ten kawałek może być krótszy.
źródło
Python 106 znaków
źródło
Python 3, 91
Na podstawie odpowiedzi Abhijita.
Zmodyfikowano tworzenie ciągu wyjściowego, aby uniknąć sumy ciągów i brzydkich
1
s wrange
. Python 3 pozbywa sięraw_
wraw_input
, ale sprawia, że należy użyć//
do całkowitej Division, aby dodać do nawiasówprint
, dzięki czemu oszczędza tylko jeden znak.źródło
Kociak , 140
Nie golfowany:
Dowód, że muszę wdrożyć przeciążenie i rozwinąć standardową bibliotekę.
źródło