Koniecznie zobacz inne wyzwanie, odwróć mapę znaków ASCII !
Zestaw znaków ASCII (American Standard Code for Information Interchange) jest najczęściej stosowanym standardem kodowania znaków. Kody ASCII reprezentują tekst w komputerach, sprzęcie telekomunikacyjnym i innych urządzeniach.
Wyzwanie
Wyzwanie polega na wydrukowaniu odwzorowania zestawu znaków ASCII podczas wprowadzania ich przez użytkownika. GIF:
Po wprowadzeniu przez użytkownika każdego znaku ASCII dane wyjściowe powinny wyglądać następująco:
Mapowanie
Każdy znak ma przypisaną pozycję na siatce logicznej 16x6, zaczynając od znaku spacji w lewym górnym rogu i zawijając, tak aby cyfra 0 pojawiła się pod nim.
Po odebraniu wejściowego wydruku ASCII wydrukuj ten znak ASCII w przypisanej lokalizacji na ekranie, nie usuwając żadnych znaków aktualnie wyświetlanych na ekranie.
Zasady
- Twój program musi jedynie zmapować drukowalne znaki ASCII,
0x20
na0x7E
. - Twój program nie może zakończyć i kontynuować mapowania znaków na ekranie, dopóki nie zostaną wprowadzone wszystkie drukowalne znaki ASCII. Odtąd twój program może zakończyć się lub uruchomić w Nibylandii.
- Twój program może mapować znaki w dowolny sposób, np. W arkuszu kalkulacyjnym, tabeli, oknie konsoli lub oknie graficznym.
- Bez względu na to, jak wyświetlasz odwzorowanie, musi ono zostać zaktualizowane w czasie rzeczywistym (jak tylko otrzyma dane wejściowe od użytkownika).
- Jeśli twój program nie odczytuje danych po cichu, musi odsunąć kursor, aby tekst nie przeszkadzał na mapie.
Wsparcie
Oto algorytm pseudokodu, którego użyłem do wygenerowania GIF:
loop forever
c = input
y_coord = c / 16
x_coord = c - y * 16
if c is printable
print c at (x_coord * 2 + 1, y_coord + 1)
end if
end loop
Może być inny sposób na osiągnięcie wymaganej wydajności. Możesz wybrać użycie mojego algorytmu lub własnego, ale wynik musi być taki sam, niezależnie od tego.
Oto przydatne odniesienie do tabeli ASCII.
Punktacja
Odpowiedź z najmniej bajtami w każdym języku wygrywa. Baw się dobrze!
Odpowiedzi:
QBIC ,
5357 bajtówDodano 4 bajty dla odstępów.
QBIC zaczął opracowywać jako skrót dla QBasic, więc pomyślałem, że przetłumaczenie mojej odpowiedzi QBasic dobrze to zademonstruje. Mamy zapisane jakieś 40% w bajcie-count dla funkcjonalnie identyczny program - i to nawet kiedy
LOCATE
,ASC
iCHR
mieć jeszcze QBic-funkcje. Na szczęście QBIC może przekazać kod bezpośrednio do QBasic, aby to zrekompensować. Obok siebie:źródło
JavaScript (ES6) + HTML, 114 + 16 = 130 bajtów
Zaoszczędź 16 bajtów dzięki @Shaggy
To niewiarygodnie satysfakcjonujące po prostu zacierać klawiaturę ...
źródło
prompt()
w pętli? Pozwoli ci to zaoszczędzić na obsłudze zdarzeń i HTML. OP wydaje się na to pozwalać. Zobacz komentarze do wpisu Mathematica.onkeypress
go samodzielnie, co pozwala upuścićbody
tag. Ponadto,pre
znacznik może być skrócony do zaledwie<pre id=O
. Musisz jednak dołączyć zamknięcie>
, aby działało we fragmencie.QBasic 4.5,
8185 bajtówDodano 4 bajty, aby zachować zgodność z regułą odstępu.
Wyjście będzie wyglądać tak (UWAGA: stary zrzut ekranu, teraz każda postać jest oddzielona spacją):
QBasic ma
LOCATE
polecenie, które przydaje się tutaj. Podział tego kodu:źródło
Java 8 , 143 bajty
Używa kodu sterującego ANSI,
CSI n ; m f
aby ustawić pozycję kursora iConsole.readPassword()
odczytywać dane wejściowe użytkownika w ciszy. Wyjście niektórych znaków:źródło
readPassword()
używane w ten sposób. Aha, i wydaje się, że brakuje ci średnika po wydrukowaniu. Ponadto, czy nie można wSystem.out.printf
jakiś sposób użyć zamiastSystem.out.println(String.format(
? Można zmienić()->
, abyo->
za pomocą nieużywany pusty parametr .BrainFuck , 355 bajtów
Opcje BrainFuck są dość ograniczone, więc wyjście jest w terminalu, a ekran jest „wyczyszczony” z 20 nowymi liniami. Dane wejściowe powinny być znakami ASCII, oddzielonymi znakami nowej linii.
Wypróbuj online!
Sformatowane i udokumentowane
Są to notatki debugowania, których użyłem do napisania programu. Użyłem mojego interpretera, który może opcjonalnie wydrukować stan taśmy przy każdym znaku ~ do debugowania.
źródło
Mathematica, 108 bajtów
Wypróbuj online na https://sandbox.open.wolframcloud.com/
Kiedy wkleisz kod i naciśniesz
Shift+Enter
, pojawi się okno dialogowe, w którym wpisz"a"
npa
. Znak . Program działa wiecznie.Uwaga: W piaskownicy Wolfram czcionka jest sformatowana inaczej niż w Mathematica na moim komputerze. Tak więc odstępy między wierszami / kolumnami mogą wyglądać dziwnie.
źródło
OK
pole wprowadzania, pojawi się kolejne pole wprowadzania danych.Python 2 , 115 bajtów
Wypróbuj online!
Wymaga cudzysłowu (pojedynczego lub podwójnego) wokół wprowadzanych znaków (wersja TIO nie).
źródło
raw_input
na,input
ponieważ jest to spis powszechny, w którym można założyć, że dane wejściowe zawierają cudzysłowy w razie potrzeby.{
bez dopasowania}
.str , niekonkurujące, 18 bajtów
Przedstawiam mój nowy, na wpół ezoteryczny język.
źródło
Haskell, 133 bajty
Wymaga terminala, który rozumie sekwencje specjalne ANSI.
Krótsze jest trzymanie listy wszystkich wciśniętych do tej pory klawiszy i czyszczenie ekranu przed wydrukowaniem ich w każdej rundzie, niż wyłączenie echa w sesji terminalu. Ten ostatni potrzebuje
import System.IO
ihSetEcho stdin(2<1)
kosztuje zbyt wiele bajtów.źródło
C, 101 bajtów
To był program, którego użyłem do stworzenia grafiki. Dane wyjściowe są pokazane w pliku GIF. ;)
źródło
QBasic,
6258 bajtówTestowane z QB64 . Powinien również działać dobrze na zwykłym QBasic, chociaż możesz chcieć go zmodyfikować, aby wykonać
CLS
przy pierwszym uruchomieniu.Podobna do odpowiedzi Steenbergha , ale używa
INPUT$(1)
do odczytywania znaków pojedynczo. To podejście jest krótsze i nie wyświetla monitu. Wykorzystuje równieżRUN
pętlę nieskończoną, ponieważ nie musimy przechowywać żadnego stanu między iteracjami oprócz stanu ekranu.źródło
input$()
. Za bardzo podoba mi się temat WSKAZÓWEK.Pascal, 112 znaków
Ponieważ moje rozwiązanie Mathematica zajmuje wiele bajtów
div
,mod
iToCharacterCode[Input[]]
próbuję udzielić innej odpowiedzi z Pascalem. Ale bezClrScr
mojego kompilatora (FPC) pozostawiłem pewne informacje o kompilacji na ekranie.ClrScr;
zajmuje 7 bajtów.Zastosowane
*2
do właściwego odstępu zajmuje kolejne 2 bajty.źródło
LOGO, 90 bajtów
Wypróbuj na FMSLogo.
W końcu moje logo jest najkrótsze w porównaniu z moją odpowiedzią Mathematica i Pascal.
Dodaj 3 bajty, jeśli żółw musi być ukryty.
źródło
Kod maszynowy 6502 + ROM // e ROM, 31 bajtów
Zrzut szesnastkowy:
Skomentowany montaż:
Jeśli kursor je unieważnia, oto 36-bajtowa wersja bez kursora:
źródło
Rubin,
797571 + 13 = 84 bajtów+13 bajtów dla
-rio/console
flagi.Bez golfa
źródło
SmileBASIC 3, 82 bajty
W zestawie znaków SmileBASIC
¥
znajduje się tam, gdzie\
normalnie by się znajdowało; mam nadzieję, że nie unieważnia to całkowicie tej odpowiedzi.źródło
Applesoft BASIC , 134 bajty
To jest wersja gry w golfa w Apple] [test klawiatury, program, który zainspirował to wyzwanie.
źródło