Uno dei compiti standard più comuni (specialmente quando si mettono in mostra linguaggi di programmazione esoterici) è implementare un "programma cat" : leggere tutto STDIN e stamparlo su STDOUT. Mentre questo prende il nome dall'utilità della shell Unix cat
è ovviamente molto meno potente di quello reale, che viene normalmente utilizzato per stampare (e concatenare) diversi file letti dal disco.
Compito
È necessario scrivere un programma completo che legge i contenuti del flusso di input standard e li scrive alla lettera nel flusso di output standard. Se e solo se la tua lingua non supporta i flussi di input e / o output standard (come inteso nella maggior parte delle lingue), puoi invece prendere questi termini per indicare il loro equivalente più vicino nella tua lingua (ad esempio JavaScript prompt
e alert
). Questi sono gli unici forme ammissibili di I / O, poiché qualsiasi altra interfaccia cambierebbe in gran parte la natura dell'attività e renderebbe le risposte molto meno comparabili.
L'output dovrebbe contenere esattamente l'input e nient'altro . L'unica eccezione a questa regola è l'output costante dell'interprete della tua lingua che non può essere soppresso, come un saluto, codici colore ANSI o rientro. Questo vale anche per le nuove righe finali. Se l'input non contiene una nuova riga finale, anche l'output non dovrebbe includerne uno! (L'unica eccezione è se la tua lingua stampa sempre una nuova riga finale dopo l'esecuzione.)
L'output al flusso di errore standard viene ignorato, purché il flusso di output standard contenga l'output previsto. In particolare, ciò significa che il programma può terminare con un errore quando si colpisce la fine del flusso (EOF), a condizione che non inquini il flusso di output standard. Se lo fai, ti incoraggio ad aggiungere anche una versione senza errori alla tua risposta (per riferimento).
Poiché ciò è inteso come una sfida all'interno di ciascuna lingua e non tra le lingue, esistono alcune regole specifiche per la lingua:
- Se è possibile nella tua lingua distinguere byte nulli nel flusso di input standard da EOF, il tuo programma deve supportare byte null come qualsiasi altro byte (cioè, devono essere scritti anche nel flusso di output standard).
- Se è assolutamente possibile nella tua lingua supportare un flusso di input infinito arbitrario (ovvero se puoi iniziare a stampare byte sull'output prima di premere EOF nell'input), il tuo programma deve funzionare correttamente in questo caso. Ad esempio,
yes | tr -d \\n | ./my_cat
dovrebbe stampare un flusso infinito diy
s. Spetta a te quanto spesso stampi e svuoti il flusso di output standard, ma deve essere garantito che accada dopo un periodo di tempo limitato, indipendentemente dal flusso (ciò significa, in particolare, che non puoi aspettare un carattere specifico come un avanzamento riga prima della stampa).
Aggiungi una nota alla tua risposta sul comportamento esatto relativo a byte null, flussi infiniti e output estraneo.
Regole aggiuntive
Non si tratta di trovare la lingua con la soluzione più breve per questo (ci sono alcuni in cui il programma vuoto fa il trucco) - si tratta di trovare la soluzione più breve in ogni lingua. Pertanto, nessuna risposta verrà contrassegnata come accettata.
Le iscrizioni nella maggior parte delle lingue verranno classificate in byte in una codifica preesistente appropriata, di solito (ma non necessariamente) UTF-8.
Alcune lingue, come Cartelle , sono un po 'difficili da segnare. In caso di dubbi, si prega di chiedere su Meta .
Sentiti libero di usare una lingua (o versione linguistica) anche se è più recente di questa sfida. Le lingue specificamente scritte per inviare una risposta di 0 byte a questa sfida sono un gioco leale ma non particolarmente interessante.
Si noti che deve essere presente un interprete per poter testare l'invio. È permesso (e persino incoraggiato) di scrivere questo interprete per una lingua precedentemente non implementata.
Si noti inoltre che le lingue non devono soddisfare i nostri criteri abituali per i linguaggi di programmazione .
Se la tua lingua preferita è una banale variante di un'altra lingua (potenzialmente più popolare) che ha già una risposta (pensa a dialetti BASIC o SQL, shell Unix o banali derivati Brainfuck come Headsecks o Unary), considera di aggiungere una nota alla risposta esistente che la stessa soluzione o molto simile è anche la più breve nell'altra lingua.
A meno che non siano stati annullati in precedenza, si applicano tutte le regole standard per il golf di codice , incluso http://meta.codegolf.stackexchange.com/q/1061 .
Come nota a margine, si prega di non sottovalutare le risposte noiose (ma valide) in lingue in cui non c'è molto da golf; questi sono ancora utili a questa domanda in quanto tenta di compilare un catalogo il più completo possibile. Tuttavia, valuta principalmente le risposte nelle lingue in cui l'autore ha dovuto effettivamente sforzarsi di giocare a golf con il codice.
Catalogare
Lo snippet di stack nella parte inferiore di questo post genera il catalogo dalle risposte a) come elenco della soluzione più breve per lingua eb) come classifica generale.
Per assicurarti che la tua risposta venga visualizzata, ti preghiamo di iniziare la risposta con un titolo, utilizzando il seguente modello Markdown:
## Language Name, N bytes
dov'è N
la dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Se si desidera includere più numeri nell'intestazione (ad es. Perché il punteggio è la somma di due file o si desidera elencare separatamente le penalità del flag dell'interprete), assicurarsi che il punteggio effettivo sia l' ultimo numero nell'intestazione:
## Perl, 43 + 2 (-p flag) = 45 bytes
Puoi anche rendere il nome della lingua un collegamento che verrà quindi visualizzato nello snippet:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
sh
risposta utilizzando cat
che contiene anche una soluzione più breve utilizzando dd
.)
cat