Scrivi l'intero forato usando il non-oliato


55

I caratteri ASCII dal codice decimale da 33 a 126 sono:

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

Si noti che nella maggior parte dei caratteri, 25 di questi caratteri presentano "buchi": (un genere maggiore di 0 si potrebbe dire)

#$%&04689@ABDOPQRabdegopq

Gli altri 68 personaggi "unholed" sono:

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

Il tuo compito è quello di scrivere il programma più breve possibile usando solo i caratteri non sradicati che emettono ciascuno dei caratteri forati esattamente una volta in qualsiasi ordine.

Poiché spazio, tabulazione e nuove righe (avanzamento riga e / o ritorno a capo) sono spazi vuoti, possono apparire nel programma o nel relativo output. Contano ancora per il numero di personaggi. Non è possibile utilizzare altri caratteri ASCII (e certamente non caratteri non ASCII).

Appunti

  • Non devi usare tutti i personaggi non sgranati né solo uno di ciascuno.
  • L'output potrebbe non contenere caratteri non modificati.
  • È possibile utilizzare la lingua degli spazi bianchi .
  • L'output dovrebbe andare su stdout o su un file. Non ci dovrebbero essere input.

Bonus: solo per divertimento, prova a stampare tutti i personaggi non oliati usando i personaggi forati. Sono scettico sul fatto che possa essere fatto in una lingua esistente.


9
+1 per il titolo. Adoriamo cose come questa .
Jacob,

1
Dov'è la soluzione Perl ?!
Pierre Arlaud,

4
Bene, nessuna soluzione in Haskell o C; se è un programma che vuoi, allora devi scrivere main.
Rhymoid,

2
Il bonus può essere fatto usando spazi bianchi.
Giosuè,

1
Come mai nessuno ha notato che mi ero dimenticato ~??
Calvin's Hobbies,

Risposte:


18

Pyth , 43 35 caratteri

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

Provalo qui .

Stampa i caratteri in ordine, tranne per il fatto che 9 è all'inizio, newline separati.

String contiene tutti i caratteri 7 maggiori di quelli necessari, tranne per il fatto che 9 diventerebbe @, quindi ha un involucro speciale. Algoritmo grazie a @Howard.

Spiegazione:

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.

24

GolfScript, 37 36 caratteri

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

Prova qui il codice .

La stringa contiene i caratteri proibiti xor'ed con 25. Fortunatamente tutti i caratteri sono mappati a quelli validi.


22

Brainfuck 119

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

uh --all'inizio ... Stai tornando al 254 sul registro iniziale lì?
WallyWest,

1
Sì :) Rende il ciclo a 36 più breve (per arrivare a 35)
Teun Pronk,

Bene, certamente batte il mio 275 ... ben fatto ...
WallyWest,

@Calvin's Hobbies Sono abbastanza sicuro che non sia consentito alcun input, mi dispiace. Tuttavia, l'OP potrebbe voler chiarire.
isaacg,

@isaacg Lo so, ecco perché il mio codice principale non accetta input e l'ultimo esempio non è serio :)
Teun Pronk,

20

Bonus - dc, 179 caratteri

Oh bene, un'altra sfida con set di caratteri ristretti Pè consentita.

6A44469PD684P44D4898PDB99P4008D0BP486B48BPA60BPD096P4A68666P460A0D4P690490AP8084088P6B6AB66P6BBB608P80D4BAAPA046PBAD4P60A6668P480DD96P4A040BBP848BP40DD8D0P46840B6P696B48BP48D64BAP

Poiché dcè apparentemente abbastanza oscuro da richiedere spiegazioni (strano per me considerando le cose strane qui intorno!) Ecco una panoramica:

È principalmente un calcolatore RPN con aritmetica di precisione arbitraria. Ma per questa sfida, sto usando il Pcomando, che interpreta un numero come una serie di caratteri nella base 256 e li stampa. Esempi: 65 Pstampe A(codice ASCII 65). 16706 Pstampe AB(16706 = 65 * 256 + 66).

A parte ciò, l'unica altra caratteristica interessante è che riconosce tutte le cifre esadecimali 0-9A-Fanche quando non sono contenute in un numero esadecimale. L'input decimale è il valore predefinito, quindi il token di input 999significa 9 hundreds + 9 tens + 9e ABCsignifica 10 hundreds + 11 tens + 12renderlo equivalente 1122.

La capacità di usare le cifre ABDin decimale compensa in parte l'incapacità di usare 12357, e la scelta di ordinare e raggruppare fa il resto. (Se ho bisogno di alcuni numeri x, y, ze non sono rappresentabili con cifre consentite, poi cerco rappresenta x*256*256+y*256+zinvece.)

Probabilmente il programma può essere leggermente ridotto usando gruppi più grandi. Non ho superato i 3 byte per numero.


1
Al contrario, @DigitalTrauma era il bonus alla fine della dichiarazione del problema.

Ha! Ho perso questo! Eccellente! +1
Trauma digitale,

Puoi spiegarlo? E c'è un posto dove possiamo gestirlo?
Calvin's Hobbies,

4
Un posto dove puoi gestirlo? dc non è un linguaggio sciocco progettato per creare programmi difficili da leggere, è una calcolatrice seria. Eseguilo su qualsiasi macchina unix (o cygwin). en.wikipedia.org/wiki/Dc_(computer_program)

@ Calvin'sHobbies Se hai accesso a qualsiasi macchina Linux o Unix (incluso OSX), salva semplicemente come file di testo, ad esempio bonus.dc, quindi esegui dc bonus.dc. dc è una delle lingue più antiche là fuori ed è stata un appuntamento fisso in * nix per letteralmente decenni. Tuttavia non è molto noto, probabilmente a causa della sua sintassi RPN arcana e poco leggibile. Ottimo per alcune sfide di code-golf ;-)
Digital Trauma,

12

Bash + coreutils, 56 byte

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

Per fortuna, aggiungendo 7 al valore ascii dei personaggi forati si ottengono tutti i personaggi non feriti (ad eccezione di "9"). Quindi facciamo questa trasformazione al contrario, quindi una trasformazione simile (sottrai 12 da "E") per ottenere il "9".

Produzione:

#$%&0468@ABDOPQRabdegopq
9

7
Mi piace il modo in cui la prima riga sottrae 7 da un gruppo di caratteri e contiene un -7elemento ben visibile tra i caratteri di punteggiatura e quei 2 fatti non hanno nulla a che fare l'uno con l'altro.

@ WumpusQ.Wumbley non me ne ero nemmeno accorto :)
Digital Trauma,

6

Perl - 49 byte

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

Questa è praticamente una versione Perl della soluzione di Howard. XORing la stringa con 25. L'output è un file con il nome #$%&04689@ABDOPQRabdegopq. Ho avuto l'idea di usare symlinke il nome del file come formato di output perché tutto il resto è vietato.

Ecco un'altra soluzione Perl che mi è venuta in mente. Probabilmente può essere migliorato molto ed è piuttosto lungo, quindi per ora sto partendo in un formato leggibile.

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/
}

Questo produce molti file, il nome di ognuno è uno dei caratteri. Non riuscivo a capire come aggiungere le stringhe senza usare un carattere proibito.

for, while, map, say, print, eval, s///eE ogni nome di variabile non può essere utilizzato (variabili iniziano con @o $in Perl) che ha reso questo difficile.

Speriamo che i nomi dei file vadano bene come formato di output perché sono abbastanza sicuro che ogni altro modo per produrre informazioni utilizza uno dei caratteri vietati.


Ti darò un +1 per la creatività! Uso molto intelligente del codice!
WallyWest,

So che è piuttosto vecchio, ma è possibile stampare l'output sullo schermo e salvare alcuni byte usando la -pbandiera e *_=\(... ): Provalo online!
Dom Hastings,

@DomHastings cool! Penso che la -pbandiera sarebbe bandita anche se pha un buco.
hmatt1,

5

MATLAB, 36 byte

SO CLOSE .... Solo 1 byte in più rispetto al vincitore attuale (isaacg)! Che, a ulteriore esame, ha già fatto anche quello che mi ero prefissato di fare. Bene, nessun danno nel reinventare la ruota ...

So che questa è una vecchia sfida, ma mi sono reso conto che solo dopo essermi interessato.

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

Se solo potessi convincere MATLAB a capire che voglio una stringa senza ''suggerimenti separati ... qualcuno?


4

Brainfuck 303 275

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

Brainfuck, l'ultimo linguaggio esoterico non alcolizzato (a parte Whitespace);)


1
Elimina vecchi frammenti, non barrare.
isaacg,

2
Vedo che hai usato le cose di citazione (non conosci il vero nome) per i tuoi frammenti di codice. Potrebbe essere più facile selezionare il codice e premere Ctrl+ K:)
Teun Pronk,

@isaacg Fatto. TeunPronk, fatto!
WallyWest,

6
O semplicemente colpisci la barra spaziatrice 4 volte se è solo una linea o due. @TeunPronk Questo? `Questo è un contraccolpo. (Chiamato anche un accento grave, anche se " quote thingies " è nuovo per me: P)
Maniglia della porta

1
@Doorknob Allora entrambi abbiamo imparato qualcosa oggi, anche se quello che hai imparato è sbagliato comunque: P
Teun Pronk,

4

JS - 196 - provalo

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=="))')

1
Accidenti, questo è pazzo. Sembra che Js sia una delle lingue più abusabili =)
flawr

Abusabile sì, ma questo è un semplice granello rispetto alla mia voce ... Mi dispiace @bebe ma stavolta ti ho superato ...
WallyWest,

1
@WallyWest dichiaro guerra.
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, accorciato m, dichiarato ial primo utilizzo, ha creato alcuni vars extra per schemi ripetuti (potresti eventualmente migliorare questo modificando l'ordine dei caratteri emessi, ma questo è al di là della mia pazienza: P).
Alconja,

2

GolfScript, 89 caratteri

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

Crea semplicemente un array di tutti i caratteri ASCII e sottrae da essi i caratteri non "forati".

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

2

Befunge 98 - 69 byte

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

Lo fa in 3 parti. Uno in cui i valori dei personaggi non sgridati differiscono dal carattere forato di 5. Quindi quelli che differiscono per 1, e infine un elenco di personaggi non sgraziati che differiscono di 3 da quelli forati. L'istruzione di fine programma in Befunge è "@" (valore char 64), quindi alla fine carico "?" (valore char 63) aggiungi 1 quindi inseriscilo nel codice con l'istruzione 's'.

Potrei forse giocare a golf più consolidando i tre

>:5j2 ,(differ value)_

sezione, ma probabilmente non di molto.


2

JavaScript 240 228

Presentazione iniziale:

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=="))')()

Ora, questo è un ottimo inizio, ecco come si rompe ...

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

E poi ho pensato ... "Deve esserci un modo più semplice ..." e c'è ...

Presentazione rivista: 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=="))')

Vedendo che posso usare eval (mettendo insieme, ispirazione da @bebe; che è molto più veloce dell'uso constructordi a constructordi a number...) L'ho perforato fino a 228 ... So che potrebbe non vincere questa particolare Sfida di golf , ma questo è solo il mio modo di mostrare quanto puoi abusare di JavaScript e ottenere comunque il risultato desiderato ...


2

Principale - Insonnia , 50

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

Emette:

abdegopq04689@ABDOPQR#$%&

Bonus - Insonnia, 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@

Emette:

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

Penso che dovrebbe essere possibile ridurre la lunghezza del programma se l'output è riorganizzato, ma per fare questo devo modificare il mio programma di ricerca.

Giusto per mostrare il caso in un'altra lingua che è in grado di operare con un numero limitato di caratteri. A proposito, può scrivere praticamente qualsiasi output con solo 3 caratteri univoci nella fonte.

Attualmente, questa è l'unica lingua che può fare sia la sfida principale sia il bonus tra tutte le risposte esistenti.

Interprete dell'insonnia .


1

Befunge 98 - 46 byte

Befunge-ified versione della voce Pyth di isaacg:

"xwvnlkihYXWVKIHG?=;7-,+*">:5j2 ,-7_"?"1+:,s <

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.