Napisz całą dziurkę, używając nieholed

55

Te znaki ASCII od kodu dziesiętnego 33 do 126 są:

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Zauważ, że w większości czcionek 25 z tych znaków ma „dziury”: ( rodzaj większy niż 0 , można powiedzieć)

#$%&04689@ABDOPQRabdegopq

Pozostałe 68 „nieholowanych” postaci to:

!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~

Twoim zadaniem jest napisanie najkrótszego możliwego programu, używając tylko nieholowanych znaków, które wypisują każdy z otworów dokładnie raz w dowolnej kolejności.

Ponieważ spacja, tabulator i znaki nowej linii (przesunięcie wiersza i / lub powrót karetki) są puste, mogą pojawić się w programie lub jego wynikach. Wciąż liczą się do liczby znaków. Inne znaki ASCII nie mogą być używane (a na pewno nie znaki inne niż ASCII).

Notatki

  • Nie musisz używać wszystkich bezbożnych postaci ani tylko jednej z nich.
  • Dane wyjściowe nie mogą zawierać znaków bez etykiety.
  • Język białe znaki mogą być użyte.
  • Dane wyjściowe powinny przejść do standardowego wyjścia lub do pliku. Nie powinno być żadnych danych wejściowych.

Premia: Dla zabawy spróbuj wydrukować wszystkie bezbożne postacie, używając postaci z otworami. Jestem sceptyczny, że można to zrobić w istniejącym języku.

Hobby Calvina
źródło
9
+1 za tytuł. My kochamy rzeczy jak ta .
Jacob
1
Gdzie jest rozwiązanie Perla ?!
Pierre Arlaud,
4
Cóż, nie ma rozwiązania w Haskell lub C; jeśli jest to program, który chcesz, musisz przeliterować main.
Rhymoid
2
Bonus można uzyskać za pomocą białych znaków.
Joshua
1
Jak nikt nigdy nie zauważył, że zapomniałem ~?
Calvin's Hobbies

Odpowiedzi:

18

Pyth , 43 35 znaków

tTFk"*+,-7;=?GHIKVWXYhiklnvwx"C-Ck7

Wypróbuj tutaj .

Drukuje znaki w kolejności, z wyjątkiem tego, że 9 jest na początku, znak nowej linii jest oddzielony.

Łańcuch zawiera wszystkie znaki o 7 większe od potrzebnych, z wyjątkiem tego, że 9 zamieniłoby się w @, więc jest to specjalny przypadek. Algorytm dzięki @Howard.

Wyjaśnienie:

tT                print(10-1)                T=10, t(x)=x-1 if x is an int.
Fk"<string>"      for k in "<string>":
C-Ck7             print(chr(ord(k)-7))       Note that C is overloaded as ord and chr.
isaacg
źródło
24

GolfScript, 37 36 znaków

[":=<?)-/! YX[]VIHKx{}|~vih"{25^}/]+

Wypróbuj kod tutaj .

Ciąg zawiera niedozwolone znaki xor'owane na 25. Na szczęście wszystkie znaki są odwzorowane na prawidłowe.

Howard
źródło
22

Brainfuck 119

--[------->++<]>-.+.+.+.++++++++++.++++.++.++.+.+++++++.+.+.++.+++++++++++.+.+.+.[------>+<]>--.+.++.+.++.++++++++.+.+.
Teun Pronk
źródło
uh, --na początku ... Czy wracasz do początkowej liczby 254?
WallyWest,
1
Tak :) Skraca pętlę do 36 (aby dostać się do 35)
Teun Pronk
Cóż, z pewnością pokonuje moje 275 ... dobrze zrobione ...
WallyWest,
@ Hobby Calvina Jestem pewien, że żadne dane nie są dozwolone, przepraszam. OP może jednak chcieć wyjaśnić.
isaacg
@isaacg Wiem, dlatego mój główny kod nie wymaga danych wejściowych, a ostatni przykład nie jest poważny :)
Teun Pronk
20

Bonus - dc, 179 znaków

No dobrze, kolejne ograniczone wyzwanie dla zestawu znaków, gdzie Pjest dozwolone.

6A44469PD684P44D4898PDB99P4008D0BP486B48BPA60BPD096P4A68666P460A0D4P690490AP8084088P6B6AB66P6BBB608P80D4BAAPA046PBAD4P60A6668P480DD96P4A040BBP848BP40DD8D0P46840B6P696B48BP48D64BAP

Ponieważ dcjest najwyraźniej na tyle niejasny, że wymaga wyjaśnienia (dziwne dla mnie, biorąc pod uwagę dziwne rzeczy tutaj!), Oto przegląd:

Jest to przede wszystkim kalkulator RPN z arytmetyką o dowolnej precyzji. Ale do tego wyzwania używam Ppolecenia, które interpretuje liczbę jako ciąg znaków w bazie 256 i wypisuje je. Przykłady: 65 Pwydruki A(kod ASCII 65). 16706 Pwydruki AB(16706 = 65 * 256 + 66).

Poza tym jedyną interesującą cechą jest to, że rozpoznaje wszystkie cyfry szesnastkowe, 0-9A-Fnawet jeśli nie są zawarte w liczbie szesnastkowej. Domyślne jest wprowadzanie dziesiętne, więc token wejściowy 999oznacza 9 hundreds + 9 tens + 9i ABCoznacza, 10 hundreds + 11 tens + 12że jest równoważny 1122.

Możliwość używania cyfr ABDdziesiętnych częściowo równoważy brak możliwości używania 12357, a wybór kolejności i grupowania zajmuje resztę. (Jeśli muszę kilka liczb x, y, za oni nie są odwzorowane z dozwolonych cyfr, a następnie staram reprezentujący x*256*256+y*256+zzamiast).

Program można prawdopodobnie nieco skrócić, używając większych grup. Nie przekroczyłem 3 bajtów na liczbę.


źródło
1
@DigitalTrauma na odwrót był Bonus na końcu opisu problemu.
Ha! Tęsknie za tym! Doskonały! +1
Cyfrowa trauma
Czy możesz to wyjaśnić? Czy jest miejsce, w którym możemy to prowadzić?
Calvin's Hobbies
4
Miejsce, w którym możesz to uruchomić? dc nie jest jakimś głupim językiem zaprojektowanym do tworzenia trudnych do odczytania programów, to poważny kalkulator. Uruchom go na dowolnej maszynie uniksowej (lub cygwin). en.wikipedia.org/wiki/Dc_(computer_program)
@ Calvin'sHobbies Jeśli masz dostęp do dowolnej maszyny Linux lub Unix (w tym OSX), po prostu zapisz jako plik tekstowy np. Bonus.dc, a następnie uruchom dc bonus.dc. dc jest jednym z najstarszych dostępnych języków i jest stałym elementem * nix od dziesięcioleci. Nie jest to jednak dobrze znane, prawdopodobnie ze względu na tajemną i niezbyt czytelną składnię RPN. Świetny na niektóre wyzwania związane z golfem ;-)
Digital Trauma
12

Bash + coreutils, 56 bajtów

tr \(-y \!-r<<<'*+,-7;=?GHIKVWXYhiklnvwx'
tr C-F 7-:<<<E

Szczęśliwie, dodanie 7 do wartości ascii znaków z dziurkami daje wszystkie nieholowane postacie (z wyjątkiem „9”). Więc wykonujemy tę transformację w odwrotnej kolejności, a następnie podobną transformację (odejmij 12 z „E”), aby uzyskać „9”.

Wynik:

#$%&0468@ABDOPQRabdegopq
9
Cyfrowa trauma
źródło
7
Podoba mi się, jak pierwszy wiersz odejmuje 7 od grupy znaków i zawiera -7wyraźnie widoczne między znakami interpunkcyjnymi, a te 2 fakty nie mają ze sobą nic wspólnego.
@ WumpusQ.Wumbley Nawet tego nie zauważyłem :)
Digital Trauma
6

Perl - 49 bajtów

symlink".",':=<?)-/! YX[]VIHKx{}|~vih'^chr(25)x25

To w zasadzie wersja Perla rozwiązania Howarda. XORing ciągu za pomocą 25. Dane wyjściowe to plik o nazwie #$%&04689@ABDOPQRabdegopq. Wpadłem na pomysł symlinki nazwę pliku jako format wyjściowy, ponieważ wszystko inne jest zbanowane.

Oto inne rozwiązanie Perla, które wymyśliłem. Prawdopodobnie można go znacznie poprawić i jest dość długi, więc na razie pozostawiam go w czytelnym formacie.

until(y/1/1/>32){s//1/}
until(y/1/1/>125+1){
    if(chr(y/1/1/)!~/[!"'()*+,-.\/12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\\\]^_`cfhijklmnrstuvwxyz{|}~]/) {
        symlink".",chr y/1/1/;
    }
    s/^/1/
}

Ten wyświetla wiele plików, a nazwa każdego z nich to jeden ze znaków. Nie mogłem wymyślić, jak dołączyć ciągi znaków bez użycia zabronionej postaci.

for, while, map, say, print, eval, s///e, A każda nazwa zmiennej nie może być stosowany (zmienne zacząć @lub $w Perlu) co czyniło to trudne.

Mam nadzieję, że nazwy plików są prawidłowe jako format wyjściowy, ponieważ jestem prawie pewien, że każdy inny sposób wyświetlania informacji wykorzystuje jeden z zakazanych znaków.

hmatt1
źródło
Dam Ci +1 za kreatywność! Bardzo sprytne użycie kodu!
WallyWest,
Wiem, że to dość stare, ale możliwe jest wydrukowanie wyniku na ekranie i zapisanie kilku bajtów za pomocą -pflagi i *_=\(... ): Wypróbuj online!
Dom Hastings,
@DomHastings cool! Myślę, że -pflaga zostałaby zbanowana, ponieważ pma dziurę.
hmatt1
5

MATLAB, 36 bajtów

TAK ZAMKNIĘTE .... Tylko 1 bajt więcej niż obecny zwycięzca (isaacg)! Które po dalszej inspekcji zrobiły już to, co postanowiłem zrobić. Cóż, bez szkody przy ponownym opracowaniu koła ...

Wiem, że to stare wyzwanie, ale zdałem sobie sprawę, że dopiero po tym, jak się nim zainteresowałem.

['*+,-7;=?GHIKVWXYhiklnvwx'-7,57,'']

Gdybym tylko mógł przekonać MATLAB do zrozumienia, że ​​chcę ciąg bez osobnych ''... sugestii, ktoś?

Sanchises
źródło
4

Brainfuck 303 275

++++++++[>+>++>+++>++++>+++++>++++++>+++++++>++++++++>+++++++++>++++++++++>+++++++++++>++++++++++++>+++++++++++++>++++++++++++++>+++++++++++++++>++++++++++++++++<<<<<<<<<<<<<<<<-]>>>>+++.--->----.+.+.++>.>----.++.++.+.->.+.+.-->----.++++>-.+.+.+.-->>+.+.-->----.+.++.+>-.+.+.

Brainfuck, najlepszy bezbłędny język ezoteryczny (oprócz Białej Przestrzeni);)

WallyWest
źródło
1
Usuń stare fragmenty, nie przekreślaj.
isaacg
2
Widzę, że użyłeś cytatowych rzeczy (nie znam prawdziwego imienia) do fragmentów kodu. Może być łatwiej wybrać kod i nacisnąć Ctrl+ K:)
Teun Pronk
@isaacg Gotowe. TeunPronk, gotowe!
WallyWest,
6
Lub po prostu wciśnij spację 4 razy, jeśli jest to tylko linia lub dwie. @TeunPronk This? `To zwrot. (Nazywany również poważnym akcentem, chociaż „ cytat rzeczy ” jest dla mnie nowy: P)
Klamka
1
@Doorknob Wtedy oboje nauczyliśmy się czegoś dzisiaj, chociaż to, czego się nauczyliście, jest i tak złe: P
Teun Pronk
4

JS - 196 - spróbuj

h=(c=!1+[])[1];i=c[2*2];j=(f=[]+{})[1];this[i+'v'+h+'l'](h+'l'+i+'rt('+h+'t'+j+f[2]+'("Iy\x51lJj\\x'+2*2+'1\\x3'+~-1+'Nj\\x'+2*3+'75\x51EFC\x52E\\x3'+3*3+'\x51UVJhYm\x52lZ2\\x3'+3*3+'wc\x51=="))')
bebe
źródło
1
Rany, to szalone. Wygląda na to, że Js jest jednym z najbardziej nadużywających języków =)
flawr
Nadużywanie tak, ale to jest tylko drobna plamka w porównaniu do mojego wpisu ... Przepraszam @bebe, ale tym razem cię wyprzedziłem ...
WallyWest
1
@WallyWest Wypowiadam wojnę.
bebe
1
217 : h=1-1;j=3+3;k='\\x';m=!i+k;c=m[1];f=m[i=2+2];l=k+3;n=k+j;r=k+i;this[f+'v'+c+'l'](c+'l'+f+'rt("\\x23\\x2'+i+k+25+k+2+j+l+h+l+i+l+j+l+2*i+l+3*3+r+h+r+1+r+2+r+i+r+'f\\x5'+h+k+51+k+52+c+n+2+n+i+f+n+7+n+'f\\x7'+h+k+'71")')- inline l, skrócone m, zadeklarowane iprzy pierwszym użyciu, stworzyło kilka dodatkowych zmiennych dla powtarzających się wzorów (możesz to poprawić, poprawiając kolejność znaków wyjściowych, ale to jest poza moją cierpliwością: P).
Alconja,
2

GolfScript, 89 znaków

71 22+,{33+}/]''+'!"\'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}'-

Po prostu buduje tablicę wszystkich znaków ASCII i odejmuje od nich znaki „niefunkcjonujące”.

71 22+,  # Builds array of 0..93
{33+}/]  # Converts to 33..126
''+      # Convert ASCII codes to string
'stuff'- # Subtracts "stuff" (the non-holed characters) from the string
Klamka
źródło
2

Befunge 98 - 69 bajtów

"()+ijWI=*">:5j2 ,-5_"157:h">:5j2 ,-1_"=>?LMN^_lmn">:5j2 ,+3_"?"1+s <

Robi to w 3 częściach. Taki, w którym wartości bezholowanych znaków różnią się od postaci z otworami o 5. Następnie te, które różnią się o 1, a na koniec lista bezholowanych znaków, które różnią się o 3 od otworów. Instrukcja programu zakończenia w Befunge to „@” (wartość znakowa 64), więc na końcu ładuję „?” (wartość char 63) dodaj 1, a następnie umieść to w kodzie z instrukcją „s”.

Mógłbym bardziej zagrać w golfa, konsolidując trzy

>:5j2 ,(differ value)_

sekcja, ale prawdopodobnie niewiele.

AndoDaan
źródło
2

JavaScript 240 228

Pierwsze złożenie:

z=(!1+"")[1];y=(!!1+"")[3];x={}+"";w=x[1];v=x[2];u=z+"t"+w+v;1[_="c\157nstruct\157r"][_](z+'l'+y+'rt('+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')()

To dobry początek, oto jak się psuje ...

z=(!1+"")[1];        // assigns "a" to z, !1+"" === "false"
y=(!!1+"")[3];       // assigns "e" to y, !!1 === "true"
x={}+"";             // assigns "[object Object]" to x
w=x[1];v=x[2]        // assigns "o" to w, and "b" to v
u=z+"t"+w+v;         // creates the mystical "atob" command, yes, I'm gonna use it!
1[_="c\157nstruct\157r"][_] // sets up the primitive to a number object... this acts similar to the "window" primitive object so that I can play off functions...
z+'l'+y+'rt(         // starts creating an alert call
'+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')()
// Above line abuses atob command with a couple of nested instances of the command, also using hex and octal equivalents of characters

A potem pomyślałem ... „Musi być prostszy sposób…” i jest…

Zmienione zgłoszenie: z=(!1+"")[1];y=(!!1+"")[3];x={}+"";w=x[1];v=x[2];u=z+"t"+w+v;this[y+"v"+z+"l"](z+'l'+y+'rt('+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')

Widząc mogę korzystać eval (przez składając je razem, inspirację z @bebe, który jest o wiele szybciej niż przy użyciu constructortematyce constructortematyce number...) I wywiercone w dół do 228 ... wiem, że to nie może wygrać tę szczególną Golf Wyzwanie , ale to tylko mój sposób pokazania, jak bardzo możesz nadużywać JavaScript, i nadal uzyskać pożądany wynik ...

WallyWest
źródło
2

Główny - Bezsenność , 50

FFy~~jF~y<={*n<<ztf>={.f=(tHL~k<yf={*n>Lj(FunLn<j~

Wyprowadza:

abdegopq04689@ABDOPQR#$%&

Premia - Bezsenność, 268

ogeeoddp@poe@ggep@oe@opge@gee@%d@p@gqeo@p@ge@e9de49ed9e4dppe@%e@geee@ge@p%ee@%e@dp@%ep@%ee@%d@%eeee@%e@%ee@%e@geee@%e@gee@ggopop@peo@ggep@p@ge@ggeep@ge@gee@%e@geee@ge@gee@ge@ppoep@%ee@%edep@gepe@ge@%ee@%e@geee@ge@%ee@%%eeoe@ge@pep@%gep@p@%e@%%eep@%e@gee@e%e@oe@%gep@p@

Wyprowadza:

!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~

Myślę, że powinno być możliwe skrócenie długości programu, jeśli wyjście zostanie zmienione, ale muszę zmodyfikować mój program wyszukiwania, aby to zrobić.

Aby pokazać przypadek innego języka, który może działać z ograniczoną liczbą znaków. Nawiasem mówiąc, może pisać prawie o każdym wyjściu, mając tylko 3 unikalne znaki w źródle.

Obecnie jest to jedyny język, który może wykonać zarówno główne wyzwanie, jak i bonus wśród wszystkich istniejących odpowiedzi.

Tłumacz na bezsenność .

n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨d̷̰̀ĥ̷̳
źródło
1

Befunge 98 - 46 bajtów

Befunge-ified wersja wpisu Pyth isaacga:

"xwvnlkihYXWVKIHG?=;7-,+*">:5j2 ,-7_"?"1+:,s <
AndoDaan
źródło