Una comunicazione più semplice significa una codifica più veloce significa un minor numero di programmatori significa ...


28

Mio padre, che era un ottimo APLer e mi ha insegnato tutte le basi dell'APL (e molto altro), è morto in questo giorno, cinque anni fa. In preparazione per 50 anni di APL , ho trovato questa lettera di brevetto (tradotta per comodità di chi non legge il danese) per un logo scritto a mano. Spiega un motivo importante per cui APL non guadagna mai una vasta base di utenti, un motivo che ovviamente si applica anche a tutti i fantastici linguaggi golfistici di questa comunità:


A 3497/77 Req. 29 ° agosto 1977 al 13

COMUNICAZIONE PIÙ SEMPLICE SIGNIFICA CODIFICA PIÙ VELOCE SIGNIFICA PIÙ CODICI SIGNIFICA ...

Henri Brudzewsky, società di consulenza ingegneristica, Mindevej 28, Søborg,

classe 9 , compresi i computer, in particolare i computer con codice APL,
classe 42: società di agenzie di servizi IT, in particolare durante l'uso di computer con codice APL.


Compito

Produce un output del testo ripetuto all'infinito EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS senza nuove righe. Puoi iniziare il testo con EASIERo FASTERo FEWER.


Ho frainteso la tua sfida e quello che ho fatto è stato i.imgur.com/qKnTj3q.png !
sergiol,

@sergiol Quasi valido qui .
Adám,

Il collegamento alla lettera di brevetto è morto.
pepery

@pppery Grazie. Aggiornato.
Adám,

Risposte:


14

05AB1E , 25 byte

[‘æƒËRSˆ¾¥ƒŽÁˆ¾¡ŸÂ ‘?

Provalo online!

Spiegazione:

[‘æƒËRSˆ¾¥ƒŽÁˆ¾¡ŸÂ ‘?
[                         Start infinite loop
 ‘æƒËRSˆ¾¥ƒŽÁˆ¾¡ŸÂ ‘   Push the compressed string in uppercase, starting from FEWER, with a trailing space
                        ?  Print without trailing newline

13
Onestamente, non capisco perché le soluzioni Python ottengano spiegazioni e questo no. Cosa sta succedendo qui?
nluigi,

3
@nluigi black magic
Nic Robertson

2
È fisicamente impossibile sapere cosa sta succedendo qui se non conosci la lingua, ti dispiacerebbe dare una spiegazione per favore.
George Willcox

1
@nluigi Il [significato di 'inizio del ciclo infinito', ‘æƒËRSˆ¾¥ƒŽÁˆ¾¡ŸÂ ‘è una versione compressa di EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS e ?significa stampa senza newline.
Okx,

1
@Leo Questo è molto poco spiegato. Innanzitutto, vai a questo file. A destra di alcuni dei caratteri estesi, puoi vedere un numero. Se è a una cifra, pad con uno zero iniziale. Due di questi caratteri formano un numero di 4 cifre con possibili zeri iniziali. Quindi, questo numero viene utilizzato come indice in base zero per questo dizionario. Il comportamento di ogni parola dipende quindi dalle virgolette, che puoi trovare sul primo file che ho collegato cercando compressed.
Erik the Outgolfer

41

SVG (HTML5), 336 byte

<svg width=500 height=500><defs><path id=p d=M49,250a201,201,0,0,1,402,0a201,201,0,0,1,-402,0></defs><text font-size="32"><textPath xlink:href=#p>EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS</textPath><animateTransform attributeName=transform type=rotate from=360,250,250 to=0,250,250 dur=9s repeatCount=indefinite>

Modifica: alcune persone hanno scoperto che il carattere non è adatto a loro, quindi ecco una versione che ti consente alcuni pixel di regolazione:

<p><input type=number value=0 min=0 max=9 oninput=p.setAttribute('d','M250,250m20_,0a20_,20_,0,1,1,-20_,-20_a20_,20_,0,1,1,-20_,20_a20_,20_,0,1,1,20_,20_a20_,20_,0,1,1,20_,-20_'.replace(/_/g,this.value))></p>
<svg width=500 height=500><defs><path id=p d=M250,250m200,0a200,200,0,1,1,-200,-200a200,200,0,1,1,-200,200a200,200,0,1,1,200,200a200,200,0,1,1,200,-200></defs><text font-size="32"><textPath xlink:href=#p>EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS</textPath><animateTransform attributeName=transform type=rotate from=360,250,250 to=0,250,250 dur=9s repeatCount=indefinite>


È bello, ma riesci a capovolgerlo (la parte superiore delle lettere rivolta verso l'esterno dal cerchio) e tutte in maiuscolo?
Adám,

@ Adám Come va? Ho dovuto modificare leggermente le dimensioni ma è lo stesso conteggio dei byte.
Neil,

1
@Adám, dovresti; è quello che pensavo fosse questa sfida quando l'ho letta per la prima volta.
Shaggy,

8
Manca uno spazio in "MEANSEASIER", presente tra le altre parole.
ShreevatsaR

1
@ShreevatsaR Ho aggiunto una seconda versione che include una casella di testo per apportare piccole modifiche, forse questo aiuta.
Neil,

13

PHP, 76 byte

for(;;)echo strtr(EASI0MMUNICATION1FAST0DING1FEW0DERS1,["ER CO"," MEANS "]);

Provalo online!


4
Solo in PHP ....
user253751

@immibis Che vuoi dire?
Jörg Hülsermann

Voglio dire, sei riuscito a dimostrare almeno 3 "stranezze" di progettazione in una riga di codice. Questa riga di codice è un esempio del perché PHP è considerato dannoso.
user253751

1
@immibis "mimimi non piace php" Pensavo di aver superato quel punto per circa un decennio. :-)
Zsolt Szilagy

4
@ Arc676 In primo luogo, si presume che un nome senza segno di dollaro sia una costante. In secondo luogo, si presume che una costante indefinita sia se stessa come una stringa. Quindi in questo codice EASI0MMUNICATION1FAST0DING1FEW0DERS1viene trattata come la stringa "EASI0MMUNICATION1FAST0DING1FEW0DERS1". In terzo luogo, si strtraspetta un array associativo (una "mappa" o "dizionario" in altre lingue), ma questo codice passa in un array normale, quindi tratta l'array normale come un array associativo con le chiavi 0 e 1. Infine, quegli interi 0 e 1 vengono trattati come stringhe "0"e "1"perché, avete indovinato, la funzione ha bisogno di stringhe.
wavemode

11

Vim 69 byte

qqAFEWER CODERS MEANS EASIER COMMUNICATION M<C-n> FASTER CODING M<C-n> <esc>@qq@q

Ho appena piace quando un semplice sequenza di comandi Vim fa per una soluzione di codice di golf decente. :-D
DevSolar

7

HTML, 122 byte.

Scusa, non posso aiutarmi.

<marquee style="width:5em;word-spacing:5em;">EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS </marquee>


perché l'enorme spaziatura delle parole?
Adám,

@ Adám Perché un riquadro di selezione lascia sempre quella quantità di larghezza tra le iterazioni (ovvero la sua larghezza). E non sono riuscito a trovare un modo per comprimerlo, quindi ho dovuto improvvisare e mettere la stessa quantità di spazio tra ogni parola.
Mr Lister,

Non riesci a rimuovere il tag di fine?
NoOneIsHere il

@NoOneIsHere Come sarebbe d'aiuto? O intendevi dire che lo avrebbe ridotto di 10 byte? Non sono sicuro di volerlo fare; il tag end non è effettivamente facoltativo.
Lister,

@MrLister intendevo giocare a golf. Pensavo che i documenti HTML a tag singolo non avessero bisogno del tag end.
NoOneIsHere il

6

Python 2 , 82 81 byte

-1 byte grazie a Leaky Nun.

Probabilmente sto facendo qualcosa di sbagliato ma è davvero tardi, quindi meh. Nota la virgola finale.

while 1:print'FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS',

Provalo online!

Un'altra soluzione, 85 byte

Probabilmente posso continuare a giocare a golf.

while 1:print'%sER CO%s MEANS'*3%('FEW','DERS',' EASI','MMUNICATION',' FAST','DING'),

Provalo online!


1
È possibile eliminare il secondo spazio.
Leaky Nun,

@LeakyNun Come mi sono perso? o0 Grazie!
totalmente umano

Nel secondo, è possibile spostare gli spazi nella stringa di formato.
wizzwizz4,

@ wizzwizz4 Lo spazio bianco principale non è consentito.
totalmente umano

2
@totallyhuman Attualmente, hai un bug in cui verrà visualizzato "FEWER CODERS MEANSEASIER COMUNICAZIONE MEANSFASTER CODIFICAZIONE MEANSFEWER ...". Se cambi la stringa del formato in '%sER CO%s MEANS 'e rimuovi gli spazi dagli elementi del formato, sarà più golfista e funzionerà correttamente.
wizzwizz4,

5

Gelatina , 33 29 byte

4 byte grazie a Erik the Outgolfer.

“©%5ÐƬwȮh¬Þ6.⁷ḷḊḥṫɠlḶṀġß»Œu⁶¢

Provalo online!


1) È possibile utilizzare una stringa compressa migliore: “©%5ÐƬwȮh¬Þ6.⁷ḷḊḥṫɠlḶṀġß»(è ancora necessario utilizzare Œue ;⁶) 2) È possibile utilizzare ßinvece di 1¿.
Erik the Outgolfer

5

Brachylog , 70 byte

"FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS "w↰

Provalo online!

Come funziona

"..."w↰
"..."     generate the string "..."
     w    print to STDOUT without trailing newline
      ↰   do the whole thing all over again

4

HTML / CSS (solo firefox), 179 177 183 176 173 byte

<b id=a>EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS </b>E<a><style>*{margin:0;}a{position:fixed;left:0;right:0;height:1em;background:-moz-element(#a)}

Certamente da nessuna parte vicino ai punteggi più bassi, ho solo pensato che sarebbe stato divertente ottenere una ripetizione infinita in HTML / CSS, senza JS coinvolti :)

changelog:

  • Virgolette rimosse intorno all'attributo id
  • aggiunto "round" background-repeat per allungare il testo in modo che si avvolga correttamente
  • modificato in uscita a linea singola
  • sostituire lo width:100%stile con right:0per salvare 3 byte

Bel tentativo, ma che ricomincia da capo. OP: senza newline.
Adám,

Tutte le risposte che vengono stampate su un terminale verranno inserite alla fine della riga. Prova a ridurre; vedrai che continua all'infinito anche in orizzontale, è semplicemente "nascosto" dalla finestra del browser.
user371366

Inoltre, ho sprecato alcuni byte con l'immagine ripetuta "arrotondata" in modo che si avvolga in modo più convincente, spero che aiuti
user371366

La confezione va bene, ma la tua no. Potrebbe essere visto come "stampare" infinitamente molte linee infinite. Basta limitare lo sfondo a una sola riga.
Adám,

1
sì. ho pensato che avrei dovuto mettere repeat no-repeato ; background-repeat: repeat-x, ma ho capito come evitarlo. Si scopre che obbedire alla specifica salva byte!
user371366



3

LOLCODE , 116 byte

HAI 1
IM IN YR O
VISIBLE "FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS "!
IM OUTTA YR O
KTHXBYE

Provalo online!


Non ho familiarità con LOLCODE. Come funziona questo per sempre?
Esolanging Fruit

@ Challenger5 IM IN YR ...e IM OUTTA YR ...formano un ciclo infinito.
Leaky Nun

1
Puoi rimuovere HAI e KTHXBYE poiché i compilatori non li richiedono. Inoltre, nessuna esclamazione alla fine di VISIBILE.
OldBunny2800

@ OldBunny2800 Quale versione di LOLCODE stai usando? In questa versione, il trailing !sopprime il ritorno del carrello dopo la stampa.
Arc676,

Oh, mi sono dimenticato della regola di non-line-break. Non mi ero reso conto che LOLCODE avesse un modo per farlo!
OldBunny2800,

3

Rubino, 77 byte

assegnando " MEANS "a una variabile salvata tutta 1 byte :-)

loop{$><<"EASIER COMMUNICATION#{m=" MEANS "}FASTER CODING#{m}FEWER CODERS"+m}

3

JavaScript (ES6), 90 87 byte

while(1)console.log`EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS `

Alternativa al funzionamento, 100 byte

"Funzionando" qui significa "non bloccherà il tuo browser" (almeno per un po ')!

setInterval(_=>console.log`EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS `,1)

1
Il tuo codice non funziona: document.write`EASIER COMMUNICATION${m=" MEANS "}FASTER CODING${m}FEWER CODERS`+mequivale a document.write([ 'EASIER COMMUNICATION', 'FASTER CODING', 'FEWER CODERS' ], ' MEANS ', ' MEANS ') + ' MEANS ', quale 1) convertirà tutti gli argomenti in stringhe e concatenerà (stampa EASIER COMMUNICATION,FASTER CODING,FEWER CODERS MEANS MEANS ), e 2) non includerà ' MEANS 'comunque l'ultimo poiché è al di fuori della chiamata di funzione ...
Frxstrem,


2

Ottava, 86 byte

while fprintf('FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS ')end

Spiegazione:

Questo è abbastanza autoesplicativo. L'unico vero "trucco" qui è usare while fprintf. Quando fprintfviene fornito un argomento di ritorno, verrà restituito il numero di caratteri stampati e tutti i numeri diversi da zero vengono considerati truein Octave, quindi la condizione del loop sarà sempre vera.


Ho cercato disperatamente di accorciare l'approccio più interessante, ma sfortunatamente si è rivelato più lungo di 9 byte:

while fprintf('FEW%sDERS%sEASI%sMMUNICATION%sFAST%sDING%s',{'ER CO',' MEANS '}{'ababab'-96})end

Questo tenta di inserire le stringhe 'ER CO'e ' MEANS'nella stringa nelle posizioni corrette, usando l'indicizzazione diretta dove 'ababab'-96c'è una versione più corta di [1 2 1 2 1 2].

Questo era un po 'più breve (93 byte), ma ancora più lungo dell'approccio ingenuo

while fprintf('FEWER CODERS%sEASIER COMMUNICATION%sFASTER CODING%s',{' MEANS '}{[1,1,1]})end

E un altro (89 byte), usando l'approccio di Level River St:

while fprintf(['FEWER CODERS',s=' MEANS ','EASIER COMMUNIDATION',s,'FASTER CODING',s])end

Questo dovrebbe funzionare in teoria, per un byte in meno rispetto alla soluzione originale, ma fallisce per qualche strano motivo:

while fprintf"FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS "
end

Questo utilizza la funzionalità buggy che fprintf('abc def')è equivalente a fprintf"abc def". La enddeve essere sulla riga successiva, ma è ancora un byte più breve dal momento che due parentesi vengono saltati.

E ancora uno per 87:

while fprintf('FEWER CODERS%sEASIER COMMUNICATION%sFASTER CODING%s',k=' MEANS ',k,k)end

Beh, non dire che non ho provato :)


Sai che fprintfricicla gli argomenti, giusto? La tua ultima versione può essere di 6 byte in meno, provala online!
Sanchises,

2

Alice , 70 byte

" SNAEM "k"SREDOC REWEF"e0j"GNIDOC RETSAF"e0j"NOITACINUMMOC REISAE"d&o

Provalo online!

Spiegazione

Sfortunatamente, il riutilizzo di MEANS(con spazi) salva solo un singolo byte rispetto alla sola stampa dell'intero processo in una volta sola. Di conseguenza, l'estrazione del in ER COrealtà costerebbe un byte (o probabilmente più, perché sarebbe leggermente più costoso estrarre un'altra sezione).

" SNAEM "                Push the code points of " MEANS " in reverse.
k                        If there is a return address on the return address stack (which
                         there isn't right now), pop it and jump there.
"SREDOC REWEF"           Push the code points of "FEWER CODERS" in reverse.
e0j                      Jump to the beginning of the line, pushing the location of the
                         j to the return address stack. Hence, we push the code points
                         of " MEANS " again, but then the k pops the return address and
                         jumps back here.
"GNIDOC RETSAF"          Push the code points of "FASTER CODING" in reverse.
e0j                      Jump to the beginning of the line again.
"NOITACINUMMOC REISAE"   Push the code points of "EASIER COMMUNICATION" in reverse.
d                        Push the stack depth.
&o                       Print that many bytes from the top of the stack.
                         Afterwards the IP wraps around to the first column and the
                         program starts over.

2

C #, 102 byte

_=>{for(;;)System.Console.Write("EASIER COMMUNICATION{0}FASTER CODING{0}FEWER CODERS{0}"," MEANS ");};

1

Pyth , 69 byte

Wp"FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS 

Provalo online!

Come funziona

Wp"...
W       while the following is true: (do nothing)
 p      print the following and return the following
  "...


1

Java (OpenJDK 9) , 114 byte

static void f(){while(1>0)System.out.print("FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS ");}

Provalo online! Interrompere l'esecuzione dopo alcuni secondi perché non sa quando interrompere.


Gli invii devono essere programmi o funzioni completi.
Kritixi Lithos

@KritixiLithos Può essere un lambda anonimo?
totalmente umano

@totallyhuman Sì. In altre lingue è permesso; Non vedo perché Java dovrebbe essere un'eccezione.
wizzwizz4,

Perché interrompere l'esecuzione? Deseleziona Disabilita cache di output .
Adám,

3
Ma puoi farlofor(;;)
Brian McCutchon

1

C, 86 byte

f(){printf("FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS ");f();}

Guardalo funzionare online .


Questo dipende dal fatto che il compilatore stia eseguendo l'ottimizzazione della coda, ma credo che la maggior parte lo faccia.
Wayne Conrad,

@WayneConrad È una risposta valida senza tale ottimizzazione. La ricorsione infinita soddisfa il requisito: produrre un output che si ripete all'infinito
2501

Senza l'ottimizzazione delle chiamate di coda, lo stack finirà per traboccare. Prova a compilarlo con gcc(usa le opzioni predefinite, quindi nessuna ottimizzazione delle chiamate di coda) e, quando lo esegui, reindirizza l'output a / dev / null per accelerare il processo. Sarà un errore. Con l'opzione '-O2', che consente l'ottimizzazione delle chiamate in coda, funziona per sempre come previsto.
Wayne Conrad,

@WayneConrad La ricorsione infinita è concettualmente, infinita. La domanda non si limita a una definizione pratica di infinito. Per consenso comune, la ricorsione infinita si ripete all'infinito, in altre parole, nessuna logica all'interno del programma la fermerà ..
2501

Non sto dichiarando che la tua soluzione non è valida. Tutto ciò che intendevo sottolineare è che, per eseguire correttamente, è necessaria una piccola collaborazione da parte del compilatore.
Wayne Conrad,


1

Perl 6 ,  81 80  79 byte

print ('EASIER COMMUNICATION','FASTER CODING','FEWER CODERS'X'MEANS'),' 'for ^Inf

Provalo

loop {print ('EASIER COMMUNICATION','FASTER CODING','FEWER CODERS'X'MEANS'),' '}

Provalo

loop {print [~] 'EASIER COMMUNICATION','FASTER CODING','FEWER CODERS'X'MEANS '}

Provalo


1

MATL , 68 byte

`'EASIER COMMUNICATION*FASTER CODING*FEWER CODERS*'42' MEANS 'Zt&YDT

Provalo online!

Spiegazione

`                                                     % Do...while
  'EASIER COMMUNICATION*FASTER CODING*FEWER CODERS*'  %   Push this string
  42                                                  %   Push 42 (ASCII for '*')
  ' MEANS '                                           %   Push this string  
  Zt                                                  %   String replacement
  &YD                                                 %   printf to STDOUT
  T                                                   %   Push true as loop condition
                                                      % End (implicit)

1

Axiom, 92 89 byte

repeat fortranLiteral"EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS "

inserire in una riga nella finestra di Axiom. È possibile che vi sia una funzione più breve di "fortranLiteral" che non scrive "\ n"


1

Braingolf , 78 byte

"FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS "[!@66<1+>]

o

Braingolf , 77 byte [non competitivo]

"FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS "[!&@<1+>]

Questo non è in competizione poiché ho dovuto correggere 2 bug relativi all'uso del modificatore goloso ( &) con l'operatore char print ( @)


1

Vuoto , 267 byte

[70][69][87][69][82][32][67][79][68][69][82][83][32][77][69][65][78][83][32][69][65][83][73][69][82][32][67][79][77][77][85][78][73][67][65][84][73][79][78][32][77][69][65][78][83][32][70][65][83][84][69][82][32][67][79][68][73][78][71][32][77][69][65][78][83][32]{p}

spinge FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS verso lo stack, quindi lo stampa. Non termina mai come no{@}

Inoltre, ho usato il seguente script Braingolf per generare questo codice

"FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS "l>[<$_<91+2^9-@_ 91+2^7-@l>]"{p}"@3

1

Groovy 79 byte

m=" MEANS";for(;;)print"EASIER COMMUNICATION$m FASTER CODING$m FEWER CODERS$m "

Utilizza l'interpolazione di stringhe di Groovy.


1

PowerShell , 100 97 byte

for(){"EASIER COMMUNICATION","FASTER CODING","FEWER CODERS"|%{Write-Host -NoNewLine "$_ MEANS "}}

Provalo online!


Risposta precedente:

PowerShell , 100 byte

while(1){"EASIER COMMUNICATION","FASTER CODING","FEWER CODERS"|%{Write-Host -NoNewLine "$_ MEANS "}}

Provalo online!

PowerShell è un po 'complicato per questo perché i modi più dignitosi di inviare alla console anche inserire una nuova linea. Write-Hostè richiesto per questo. Tuttavia, dimostra ancora come il pipelining può abbreviare il footprint di codifica.

Dovrai interrompere l'esecuzione dopo poco tempo perché non tornerà poiché è un ciclo infinito.

Modifica: rasato 3 byte modificando un whileloop in un forloop.

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.