Język angielski i większość języków programowania są pisane i czytane od lewej do prawej, od góry do dołu, ale nie musi tak być .
W rzeczywistości dla bloku tekstu
ABC
DEF
Mogę wymyślić osiem powiązanych sposobów, w jakie można to przeczytać:
- Od lewej do prawej, od góry do dołu (LTR-TTB):
ABCDEF
- Od góry do dołu, od lewej do prawej (TTB-LTR):
ADBECF
- Od lewej do prawej, od dołu do góry (LTR-BTT):
DEFABC
- Od dołu do góry, od lewej do prawej (BTT-LTR):
DAEBFC
- Od prawej do lewej, od góry do dołu (RTL-TTB):
CBAFED
- Od góry do dołu, od prawej do lewej (TTB-RTL):
CFBEAD
- Od prawej do lewej, od dołu do góry (RTL-BTT):
FEDCBA
- Od dołu do góry, od prawej do lewej (BTT-RTL):
FCEBDA
Wyzwanie
Napisz prostokątny blok tekstu, który można odczytać na każdy z ośmiu powyższych sposobów, jako osiem programów jednowierszowych w wybranym języku. Każdy z tych programów powinien wypisywać inną liczbę całkowitą od jednego do ośmiu.
Nie ma znaczenia, który kierunek odczytu generuje numer, nie muszą one odpowiadać powyższym liczbom. Na przykład, jeśli twój blok tekstowy był nadal
ABC
DEF
Następnie program ABCDEF
wyjście potęga 5
i FEDCBA
moc moc 2
, a pozostałe sześć programów byłoby wyjście 1
, 3
, 4
, 6
, 7
, i 8
w pewnym porządku.
Blok tekstowy może zawierać dowolne znaki oprócz terminatorów linii .
Dane wyjściowe powinny przejść do standardowego wyjścia lub podobnej alternatywy, jeśli Twój język nie ma odpowiedniego standardowego wyjścia. Brak danych wejściowych. Możesz założyć, że programy działają w środowisku REPL.
Pietu1998 dobroczynnie napisał JSFiddle, który daje 8 różnym programom jednowierszowym, gdy otrzymuje blok tekstu. Zrobiłem z niego fragment kodu:
<script>function f(n){n=n.split("\n");var e=n.map(function(n){return n.length}).sort()[n.length-1];n=n.map(function(n){return(n+Array(e+1).join(" ")).substring(0,e)});var t=n[0].split("").map(function(e,t){return n.map(function(n){return n[t]}).join("")});n=[n.join(""),n.reverse().join(""),t.join(""),t.reverse().join("")],n=n.concat(n.map(function(n){return n.split("").reverse().join("")})),document.getElementById("a").innerHTML=n.map(function(n,e){return document.getElementById("b").checked?n+" "+"LLTTRRBB"[e]+"T"+"RRBBLLTT"[e]+"-"+"TBLRBTRL"[e]+"T"+"BTRLTBLR"[e]:n}).join("\n")}</script><textarea onkeyup="f(this.value)" id="c" placeholder="Code"></textarea><br/><input type="checkbox" id="b" onchange="f(document.getElementById('c').value)" checked/> <label for="b">Show directions</label><br/><pre id="a"></pre>
Nadal możesz znaleźć wersję Martina CJam tutaj .
Punktacja
Twój wynik to obszar bloku tekstu (szerokość razy wysokość). Zgłoszenie o najniższym wyniku wygrywa. (Zasadniczo wygrywa najmniejszy kod, stąd tag code-golf .) Tiebreaker przechodzi do wcześniej opublikowanego zgłoszenia.
Przykład to 2 na 3, więc jego wynik to 6. Wynik mniejszy niż 4 (2 na 2) jest niemożliwy, ponieważ wtedy niektóre z 8 programów byłyby identyczne i nie byłyby w stanie wyprowadzić dwóch różnych wartości.
String.prototype.repeat()
to, że wciąż jest nowy. Potwierdzono także, że działa teraz w IE. nowe skrzypce