Oto pikselowa czcionka 5 na 7 dla cyfr od 0 do 9:
.███.
█...█
█...█
█...█
█...█
█...█
.███.
..█..
███..
..█..
..█..
..█..
..█..
█████
.███.
█...█
....█
...█.
..█..
.█...
█████
.███.
█...█
....█
..██.
....█
█...█
.███.
█..█.
█..█.
█..█.
█████
...█.
...█.
...█.
█████
█....
█....
.███.
....█
█...█
.███.
.███.
█...█
█....
████.
█...█
█...█
.███.
█████
....█
....█
...█.
...█.
..█..
..█..
.███.
█...█
█...█
.███.
█...█
█...█
.███.
.███.
█...█
█...█
.████
....█
█...█
.███.
(Ta czcionka i ta strona będzie prawdopodobnie wyglądać lepiej, jeśli uruchomić ten kod w konsoli JavaScipt przeglądarek lub w pasku adresu URL z prefiksem javascript:
: $('#question pre,.answer pre').css('line-height',1)
).
Napisz dwa prostokątne bloki tekstu o równej wielkości, jeden reprezentujący puste spacje ( .
) w powyższej czcionce, a drugi reprezentujący wypełnione spacje ( █
).
Kiedy te dwa bloki tekstowe są ułożone w ten sam wzór 5 × 7, co jedna z powyższych cyfr, powstały duży blok tekstowy powinien być programem, który wypisuje tę cyfrę na standardowe wyjście. Powinno to działać dla wszystkich 10 cyfr.
Na przykład, jeśli .
blok tekstu był
---
'''
a twój █
blok tekstowy był
ABC
123
następnie program
---ABCABCABC---
'''123123123'''
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
---ABCABCABC---
'''123123123'''
powinien wyjść 0
. Podobnie program
------ABC------
''''''123''''''
ABCABCABC------
123123123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
ABCABCABCABCABC
123123123123123
powinien wypisywać 1
i tak dalej aż do programu dla 9
.
Za pomocą tego fragmentu stosu możesz tworzyć programy w kształcie cyfr:
<style>textarea{font-family:monospace;}</style><script>function go(){var t=parseInt(document.getElementById("digit").value[0]);if(isNaN(t))return void alert("Invalid digit.");for(var e=document.getElementById("empty").value.split("\n"),n=document.getElementById("filled").value.split("\n"),l=[],o=0;o<7*e.length;o++){l[o]="";for(var d=0;5>d;d++)l[o]+=font[t][Math.floor(o/e.length)][d]?n[o%n.length]:e[o%e.length]}document.getElementById("output").value=l.join("\n")}font=[[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[1,0,0,0,1],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[0,0,1,0,0],[1,1,1,0,0],[0,0,1,0,0],[0,0,1,0,0],[0,0,1,0,0],[0,0,1,0,0],[1,1,1,1,1]],[[0,1,1,1,0],[1,0,0,0,1],[0,0,0,0,1],[0,0,0,1,0],[0,0,1,0,0],[0,1,0,0,0],[1,1,1,1,1]],[[0,1,1,1,0],[1,0,0,0,1],[0,0,0,0,1],[0,0,1,1,0],[0,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[1,0,0,1,0],[1,0,0,1,0],[1,0,0,1,0],[1,1,1,1,1],[0,0,0,1,0],[0,0,0,1,0],[0,0,0,1,0]],[[1,1,1,1,1],[1,0,0,0,0],[1,0,0,0,0],[0,1,1,1,0],[0,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,0],[1,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[1,1,1,1,1],[0,0,0,0,1],[0,0,0,0,1],[0,0,0,1,0],[0,0,0,1,0],[0,0,1,0,0],[0,0,1,0,0]],[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,1],[0,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]]]</script><textarea id='empty' rows='8' cols='32' placeholder='empty space text block...'></textarea><textarea id='filled' rows='8' cols='32' placeholder='filled space text block...'></textarea><br>Digit <input id='digit' type='text' value='0'> <button type='button' onclick='go()'>Generate</button><br><br><textarea id='output' rows='16' cols='64' placeholder='output...' style='background-color: #eee;' readonly></textarea>
Detale
- Żaden z 10 dużych programów blokujących tekst nie powinien wymagać wprowadzania danych. Wyprowadzaj tylko jedną cyfrę plus opcjonalny znak nowej linii. Wyjście do standardowego wyjścia lub podobnej alternatywy.
- Żaden z programów nie może czytać ani uzyskiwać dostępu do własnego kodu źródłowego. Traktuj to jak surowe wyzwanie quine .
- Bloki tekstowe mogą nie być identyczne i muszą mieć niezerowe wymiary.
- Bloki tekstowe mogą zawierać dowolne znaki oprócz terminatorów linii .
- 10 programów musi być pełnoprawnymi programami napisanymi w tym samym języku, nie są to fragmenty REPL . Możesz opcjonalnie dodać końcowy znak nowej linii do nich wszystkich lub żadnego z nich.
Punktacja
Twój wynik to obszar (szerokość razy wysokość) jednego z bloków tekstowych. (Są tego samego rozmiaru, więc nie ma sensu liczyć obu bloków.) Obszar przykładu wynosi 3 na 2, co daje wynik 6.
Najniższy wynik wygrywa. W przypadku remisu wygrywa najlepiej głosowana odpowiedź.
text blocks may not be identical
naprawdę? Chcę, aby ktoś złamał tę zasadę, podając dwa identyczne kody, które magicznie zwracają różne cyfry, gdy każda liczba jest dokładnie tym samym kodem ^^
var t=parseInt(document.getElementById("digit").value[0]);if(isNaN(t))return void alert("Invalid digit.");
można zapisać jakovar t=document.getElementById("digit").value[0]/1;if(t!=t)return void alert("Invalid digit.");
, który jest taki sam, ale krótszy. Jest jeszcze kilka rzeczy, które możesz poprawić, ale wygląda świetnie!