Zaprogramuj swoją ulubioną frazę


28

Wybierz cytat lub frazę o długości dokładnie 5 słów, np Programming puzzles and code golf!.

Napisz program, który po dodaniu do siebie n razy, wyświetli pierwsze n + 1 słów frazy w kolejności.

Na przykład, jeśli kod Twojego programu był, MYPROGa Twoja fraza była Programming puzzles and code golf!uruchomiona ...

  • MYPROG powinien wyjść Programming
  • MYPROGMYPROG powinien wyjść Programming puzzles
  • MYPROGMYPROGMYPROG powinien wyjść Programming puzzles and
  • MYPROGMYPROGMYPROGMYPROG powinien wyjść Programming puzzles and code
  • MYPROGMYPROGMYPROGMYPROGMYPROG powinien wyjść Programming puzzles and code golf!

Dodanie więcej niż 4 razy jest niezdefiniowane, twój program może zrobić wszystko.

Zasady

  • Twoje zdanie musi być gramatycznie znaczącym angielskim. Najlepiej byłoby, gdyby był odpowiednio pisany wielkimi literami i interpunkcyjny.
  • Twoja fraza może mieć dowolną długość, ale jej entropia, obliczona przez http://www.shannonentropy.netmark.pl/ , nie może być mniejsza niż 3,5 .
    (Wklej frazę, kliknij Oblicz i poszukaj ostatniego H (X) .)
  • Twoja fraza może zawierać tylko drukowalne znaki ASCII (szesnastkowo od 20 do 7E). Twój kod może zawierać tylko ASCII do wydruku oraz tabulatory i znaki nowej linii.
  • Twoja fraza musi zawierać dokładnie 5 unikatowych słów i 4 spacje. Wszystkie spacje liczą się jako części słów. Spacje to granice słów. Mogą nie być wiodące ani końcowe; w końcu powinno być jedno oprócz ostatniego słowa.
  • Wynik powinien również zawierać jedną spację między wyrazami. Dane wyjściowe na każdym dołączanym kroku mogą zawierać spacje końcowe, ale nie spacje wiodące.
  • Wyjście na standardowe wyjście. Brak danych wejściowych.

Punktacja

Twój wynik to długość w bajtach początkowego nieza dołączonego programu. (np. MYPROGwyniki 6)

Ponieważ jest to gra w golfa, wygrywa najniższy wynik.


21
aww, entropia i wymagania dotyczące unikalności zabijają mój pomysł na „buffalo” jako wpis.
Sparr

4
Miałem tyle radości w Piet, że „Twój kod może zawierać tylko ASCII do drukowania oraz tabulatory i znaki nowej linii”. :(
Sp3000,

3
@ Sp3000 Możesz udzielić honorowej odpowiedzi. Chciałbym zobaczyć rozwiązanie Pieta :)
Hobby Calvina

Jest to jedyna sytuacja, w której czystość Haskella jest właśnie problemem ...
Rhymoid

gramatyczny angielski znaczący Zbyt niejasne, co to jest „gramatyczny angielski znaczący” z powodu różnych interpretacji gramatycznych i znaczących.
MilkyWay90

Odpowiedzi:


6

CJam - 24

"TheguywasnotI"Lm3<]S*:L

Wypróbuj na http://cjam.aditsu.net/

Wyjaśnienie:

Lmusuwa litery zawarte w L (początkowo „”) z „TheguywasnotI”
3<bierze pierwsze 3 litery
]zbiera zawartość stosu w tablicy
S*dołącza do tablicy za pomocą spacji, ponieważ separator
:Lprzypisuje wynikowy ciąg L (pozostawiając go również na stosie )

Stara wersja (28 bajtów):

"He is but a dog."S/W):W=]S*

Wyjaśnienie:

S/dzieli według
W):Wprzyrostów miejsca W (początkowo W = -1)
=dostaje W'te słowo
]zbiera zawartość stosu w tablicy
S*łączy się z tablicą używając spacji jako separatora


Ten język jest naprawdę interesujący. Jak mówią: „Codziennie uczysz się nowego języka”… lub coś w tym rodzaju. Dobra robota!
Brobin,

Zaakceptowanie tego zamiast równie krótkiej odpowiedzi Dennisa, jak to zostało opublikowane jako pierwsze.
Calvin's Hobbies

28

Piet (odpowiedź honorowa)

wprowadź opis zdjęcia tutaj

Wije się w dół, biegnie w prawo przez niebieski i ponownie wchodzi przez zielony. Drukuje „Muchy owocowe jak banan”.

Użyłem PietCreatora, aby to zrobić, ale możesz to wypróbować tutaj . Przebudowywanie programów Piet jest uciążliwe, więc zacząłem od 35x35 i kontynuowałem w ten sposób, co oznacza, że ​​użyłem o wiele więcej kodów niż potrzebowałem.

Rzeczywiste wersje wielkości

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj


11

> <> (42)

Ryby są naprawdę największym zwierzakiem. Niektóre osoby trzymają robaki jako zwierzęta domowe z powodu niezrozumiałego braku logiki. Ten program dokłada wszelkich starań, aby rozumować z takimi ludźmi.

!v'?od gub yna nac tahW;'00p!
<<|ov!
voo <

Zauważ, że w programie nie ma końca nowej linii. Pełna moc wyjściowa jest odwracana w pierwszym wierszu; pełna fraza brzmi „Co może zrobić dowolny błąd?” (entropia 3.58418).

Pełne wyjaśnienie:

Jest to jeden z bardziej zabawnych programów, które napisałem, ponieważ jest to pierwszy, który używa refleksji. W pierwszym wierszu znajduje się mięso programu.

!vto brak !operacji , ponieważ powoduje pominięcie następnej instrukcji.

'?od gub yna nac tahW;' przechowuje pełną frazę na stosie (jest odwrócona, ponieważ każda litera jest wypychana na stos w zapisanej kolejności, więc należy ją odwrócić, aby ładnie wyskoczyła).

00ptam zaczyna się prawdziwa magia. Zwróć uwagę, że nie tylko przechował frazę, ale także ;. 00pwstawia górny znak na stosie do programu w pozycji (0, 0), więc teraz pierwszym znakiem programu jest a ;.

Zakończenie !pomija ten średnik i przesuwa kursor na v, co kieruje przepływ programu w dół.

Odtąd wszystko to po prostu procedury drukowania. Ponieważ nie ma końcowego nowego wiersza, kolejne dodatki programu po prostu dodają dwa ostatnie wiersze, ponieważ pierwszy wiersz będzie po prawej stronie voo <, a zatem nigdy nie zostanie wykonany.

Na koniec kursor jest skierowany w lewy dolny róg programu i zawija się do lewego górnego rogu, gdzie ;wstawiono go wcześniej, kończąc program.


Przed chwilą było to technicznie nieprawidłowe, ale właśnie zmieniłem specyfikację, aby znaki nowego wiersza (i tabulatory) były dozwolone w kodzie (czego pierwotnie chciałem).
Calvin's Hobbies

Och, moje złe, całkowicie przegapiłem to, co dotyczyło źródła, nie tylko frazy. Cieszę się, że taka była intencja, ponieważ programy <>> dość mocno polegają na nowej linii.
Mike Precup

Jeśli chcesz trochę pograć w golfa, możesz użyć frazy z 11 literami i bez powtarzających się znaków, takich jak "It is by a rope."Twoja fraza powtarza znaki, więc ma niższą entropię niż mogłaby.
isaacg

Problem polega na tym, że każde wyjście musi mieć zasadniczo tę samą długość, aby ładnie drukować, ponieważ> <> nie może łatwo wykryć spacji. Nie udało mi się znaleźć krótszego.
Mike Precup

2
@isaacg Osobiście wolę zdanie Mike'a;)
Hobby Calvina

10

Python 66

i='i'in dir()and i+1;print("Tfpcfhaialetgny"[i::5],end=" ."[i>3]);

Entropia: 3,61635

Ouput:

The fat pig can fly.

Dzięki @JasonS i @grc za wskazówki dotyczące skrócenia części detekcji zmiennych.

Aktualizacja: zobacz odpowiedź JasonS na nikczemną sztuczkę, która zepchnęła to do 55 bajtów. :)


i=locals().get('i',-1)+1;ma -5 bajtów
Jason S

Pokonaj mnie do tego! Miałem zamiar użyć i='i'in dir()and i+1. Edycja: zasady zmienione.
grc

Cóż, to kolejne -4
Jason S

60 bajtów w Pythonie 2:i='i'in dir()and i+1;print"Tfpcfhaialetgny"[i::5]+" ."[i>3],
nyuszika7h

9

Python 3, 55 (bonus 67)

# 55 bytes, H(X)=3.72, Based on bitpwner's 66. "Mix dog and cat fur."
i=0;print("Mdacfionauxgdtr"[i::5],end=" ."[i>3]);i+=1;i

# 67 bytes, H(X)=4.28. "Thanks for supporting Python development."
q=b"qx!%%0077C";a,b,*q=q;print((str(credits)*2)[49:][a:b],end='');q

# 60 bytes, H(X) = 3.51. "Fix the bed old pal"
s="Fixthebedoldpal";a,b,c,*s=s;print(a+b+c,end='. '[s>[]]);s

Masz na myśli, że to się otacza?

OK, jakieś wyjaśnienie na temat nr 2 (spoilery)

  • creditsjest wbudowanym pytonem zawierającym tekst, którego chciałbym użyć. Jest to specjalny typ ze sformatowanym, reprdzięki czemu możesz po prostu wpisać go w interaktywnym tłumaczu i zobaczyć ładne wyniki, więc muszę to str()zrobić. Spędziłem sporo czasu, szukając wbudowanych narzędzi do tego, a „Dziękuję za wsparcie rozwoju Pythona” jako frazę było zbyt piękne, aby je pominąć.

  • Ponieważ jest dużo tekstu i chcę tylko 5 słów, chcę zapisać pozycje początkową i końcową każdego podłańcucha. To jest w bajtach na początku. bytesobiekty w python3 działają jak tablice liczb całkowitych, gdy używasz na nich operacji sekwencji.

  • Ale kod może zawierać tylko znaki do wydrukowania, więc musiałem znaleźć przesunięcie (49), które sprawi, że wszystkie moje wartości pozycji będą drukowane jako znaki.

  • „Dzięki” znajduje się blisko początku ciągu, podczas gdy inne słowa są bliżej końca, co oznacza, że ​​moje wartości pozycji były zbyt daleko od siebie, aby wszystkie znajdowały się w zakresie do wydrukowania. Mulitplying ciągu o 2 tworzy kolejną kopię „Thanks”, która jest bliższa innym słowom.

  • Pobranie [49:]wycinka ciągu jest o jeden mniej bajtów źródłowych niż dodanie 49 zarówno do a, jak i b.

  • Konstruktem zastosowanym we wszystkich trzech odpowiedziach jest x=<value>;dostuff and increment;x. Trailing xnic nie robi, ale w połączeniu z następną kopią kodu zmienia się w, xx=<value>co zapobiega xnadpisywaniu licznika.

  • a,b,*q=q jest całkowicie normalne rozpakowywanie sekwencji w Pythonie 3.


+1. Zła sztuczka. :) Czy mogę zaktualizować to do mojej odpowiedzi?
Vectorized

Użyłem twojego środkowego
Jason S

Obecnie zastanawiam się nad twoją drugą odpowiedzią. Tyle sztuczek w nim zapakowanych.
Vectorized

2
Czy możesz mi powiedzieć, jak działa druga odpowiedź?
sajas

8

Python 2 (37)

Po tym, jak Sarah została przewodniczącą lokalnego oddziału Mensa, stała się przedmiotem romantycznej uwagi mężczyzn szukających inteligentnego partnera. Za każdym razem Sarah starała się nawiązać osobisty kontakt, ale mężczyźni po prostu badali ją w zawiłych kwestiach filozoficznych. Sfrustrowana, że ​​nikt nie dbał o jej emocjonalną stronę, wykrzyknęła ...

i=4;print"mniIMeosQy!t"[i::5],;i-=1;i

Wydajność:

My
My IQ
My IQ is
My IQ is not
My IQ is not me!

Entropia jest H(x)=3.5dokładnie.

Podziękowania dla Jasona S., którego odpowiedzi w zasadzie użyłem hurtowo. Ta iisztuczka jest cudowna.


Miły! Rekwizyty do znalezienia krótszej frazy z odpowiednią entropią. Poddałem się. Zapomniałem również, że py2 zastępuje printspacje, zamiast je dodawać
Jason S

Jest to niezwykle skrót od odpowiedzi w języku Python! Dobra robota.
isaacg

Możesz usunąć przecinek, który masz w środku programu, aby zejść do 36 znaków.
xleviator,

8

C - 65

Nadużycie komentarzy :)

char*z="Ah, \0the \0good \0ol' \0times!";
for(printf(z);*z++;);//

Z tego powodu nowe linie są ważne, a kod należy dołączyć w następujący sposób:

char *z="Ah, \0the \0good \0ol' \0times!";
for(printf(z);*z++;);//char *z="Ah, \0the \0good \0ol' \0times!";
for(printf(z);*z++;);//...

To miłe rozwiązanie!
MilkyWay90

4

CJam, 24 bajty

"LwOtmiaKoezs"W):W>5%]S*

Jeśli zostanie uruchomiony pięć razy, wydrukuje, że Liz była dla mnie OK . Przepraszam, nie zawiera interpunkcji.

Jak to działa

"LwOtmiaKoezs"  " Push that string. ";
W):W            " Push W (initially -1), increment and save the result in W. ";
>               " Shift that many characters from the string. ";
5%              " Select every fifth character, starting with the first. ";
]S*             " Wrap the stack in an array and join its strings using spaces. ";

Fajny pomysł, chociaż zdanie jest trochę słabe: p
aditsu

Przyznaję się do tego, ale musiał to być xxx xxx xx xx xx , bez powtarzających się liter. To jedyne zdanie, jakie mogłem wymyślić, które miało choć trochę sensu ...
Dennis

Co powiesz na „Słońce było dla mnie OK”? Możesz również zastąpić „Sun” innym słowem lub nazwą.
aditsu

Tak lepiej, dzięki.
Dennis

3

Pyth , 32

p?kqZ4d@P"It is by a rope."dZ~Z1

Fraza: „To przez linę”.

Entropia: 3.5

Jak to działa:

p oznacza wydruk z określonym separatorem.

Pierwszy argument ?kqZ4d, daje separator. ?kqZ4dśrodki k if Z==4 else d. kjest '', podczas gdy djest ' '.

Drugi argument, wartość do wydrukowania, jest generowany przez podział ( P) na spację ( d) i indeksowanie do tej listy ( @) w Z.

Wreszcie, Zktóra jest automatycznie inicjowana na 0, jest zwiększana o 1 ( ~Z1).


2
Nie mogłem wymyślić kontekstu, w którym ta faza naturalnie pasowałaby do ^^
flawr

1
@flawr „Gdzie mieszkałem piłkę?” „To przez linę”.
isaacg

3

Golfscript, 53

Ten był zabawny.

{'1'-print}:puts;.'You; are; not; a; duck.'';'/\,=\1+

Fraza: „Nie jesteś kaczką”. (co jest całkowicie prawdziwe; entropia 3.5110854081804286)

Wyjaśnienie:

Stos rozpocznie się jak ''przy pierwszym „uruchomieniu” (ponieważ nie podano STDIN). '1's są dołączane do tego, aby wskazać, ile razy kod został wklejony.

{'1'-print}:puts;             # Hacky stuff (see below)
.                             # Stack: '' ''
'You; are; not; a; duck.'';'/ # Initialize the array of words
\,                            # Get the length of the string of '1's (0)
                              # Stack: '' [words] 0
=                             # Stack: '' 'You'
\1+                           # Stack: 'You' '1'

Co dzieje się przy drugim uruchomieniu:

{'1'-print}:puts;             # Hacky stuff (see below)
.                             # Stack: 'You' '1' '1'
'You; are; not; a; duck.'';'/ # Initialize the array of words
\,                            # Get the length of the string of '1's (1)
                              # Stack: 'You' '1' [words] 1
=                             # Stack: 'You' '1' ' are'
\1+                           # Stack: 'You' ' are' '11'

I tak dalej.

„Ale”, myślisz, „jak sprawić, by cyfry 1 nie generowały?” Ach, to jest zabawna część hacky. Implementuje Golfscript puts(który jest wywoływany po zakończeniu programu) w następujący sposób:

{print n print}:puts;

Po prostu zmieniłem to na

{'1'-print}:puts;

W ten sposób 1s są pomijane na końcowym wyjściu.


3

J - 42 char

Mógłbym wybrać krótszą frazę, ale dlaczego? To nie byłby mój ulubiony.

(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '

Działa to z powodu dualności monady / dyady J.: każdy czasownik może być przywołany jako monada - z jednym argumentem po prawej stronie - lub jako diada - z argumentem po lewej, a drugi po prawej.

Rozważ następującą sesję z J REPL:

   'You multiplied 6 by 9. '
You multiplied 6 by 9.
   'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '
You multiplied 6 by 9. You multiplied 6 by 9.
   ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '   NB. break into words
+---+----------+-+--+--+---+----------+-+--+--+
|You|multiplied|6|by|9.|You|multiplied|6|by|9.|
+---+----------+-+--+--+---+----------+-+--+--+
   (#\) ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '             NB. count off
1 2 3 4 5 6 7 8 9 10
   (6 | #\) ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '         NB. mod 6
1 2 3 4 5 0 1 2 3 4
   (1 = 6 | #\) ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '
1 0 0 0 0 0 1 0 0 0
   (#~ 1 = 6 | #\) ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '  NB. select
+---+----------+
|You|multiplied|
+---+----------+
   (#~ 1 = 6 | #\)&.;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. ' NB. undo ;:
You multiplied

Tam ,jest traktowany jak diada, ponieważ znajduje się pomiędzy dwoma argumentami i (#~1=6|#\)&.;:jest monadą, ponieważ nie ma żadnego argumentu. Gdybyśmy mieli czasownik, który mógłby zachowywać się tak, jakby był ,dyadyczny i (#~1=6|#\)&.;:monadyczny, bylibyśmy nastawieni.

Jak już zapewne się domyślacie, taka koniunkcja istnieje i wygląda na to :. Monadyczny f :gjest równoważny fi gdy jest gdyadyczny. To rozwiązuje problem.

Przykłady, które możesz wypróbować na stronie tryj.tk :

   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You
   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You multiplied
   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You multiplied 6
   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You multiplied 6 by
   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You multiplied 6 by 9.

I tak, natura odwrotności ;:powoduje, że nie ma żadnych spacji końcowych.

Stosując It is by a rope.jako wyrażenie daje 35 char: (#~1=6|#\)&.;: :,'It is by a rope.'. Nie potrzebujemy tylnego miejsca, jak w przypadku mojego zdania, z tajemniczych ;:powodów.


3

BBC Basic, 40

Obejmuje jedną nową linię. Wyniesie 30, jeśli słowa kluczowe można uznać za tokeny zamiast ASCII.

Przyłapałem swoją dziewczynę śpiącą z mleczarzem, więc ją rzuciłem i śpię z siostrą z zemsty. As my ex do I!(pięć dwuliterowych „słów” z unikatowymi znakami) nie wystarczyło entropii, więc na końcu dodałem wymyślną buźkę, aby entropia miała dokładnie 3,5. W końcu mam dość normalne życie, a nie jakąś dziwną fabułę telenoweli.

  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P

Powtarzamy program 5 razy

  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P
  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P
  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P
  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P
  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P

Wykonywane jest tylko 5 READinstrukcji, a pierwsze 5 elementów danych jest odczytywanych z pierwszej DATAinstrukcji. reszta danych jest zbędna. Wydajność:

  (once)
  As 
  (5 times)
  As my ex do I:-P 

2

Ruby, 50

puts'The fat pig can fly.'[0..File.size($0)/12-1]#

Wykorzystuje własną długość do określenia liczby słów do wydrukowania. Jej powtórzenia są inaczej ignorowane przez kończąc w komentarzu charakteru #. Fraza zapożyczona z bitpwnera : bardzo wygodnie jest mieć krótką frazę z taką samą liczbą liter w każdym słowie.

Ponieważ każde słowo + końcówka ma 4 znaki, formuła byłaby np. Dla programu o długości 56: (File.size($0)/56)*4 - 1ale mogę podzielić z wyprzedzeniem 56/4 = 14, więc File.size($0)/14 - 1oszczędzam kilka znaków. 50nie jest wielokrotnością 4, ale 12jest wystarczająco zbliżony do potrzebnego zasięgu.


2

Chip , 165 + 3 = 168 bajtów

+3 za flagę -w

| ,z `Z`Z  `Z
| |ZZZ>Z>ZZZ>ZZZZ
>((((((((((((((((
|)-)))-)-)))-))))g
|)d)xx-x-)xx-))x)e
||b+))-x-x))-x)xc
|`v))xa(-x(x-((^d
|*`.))d| b | b
|Z~<b( |~Zf|
>~T| | |   |

„Wygrałem czerwony kolor” (3.5) (właściwie nie wygrałem żadnej takiej rzeczy) (... jeszcze)

Zwróć uwagę na końcowy znak nowej linii, więc konkatenowana kopia pojawia się poniżej istniejącego kodu.

Wypróbuj online! (oryginał)
Wypróbuj online! (oryginał plus wszystkie cztery kopie)

To jest trochę splątany bałagan. Okazało się, że najtrudniejszym elementem był warunek zakończenia. (Moja pierwsza iteracja wypisała słowo (a), a następnie niekończący się strumień pustych bajtów ...).

Jak to działa

Pierwsza fraza:
12 unikalnych znaków + 4 spacje = dokładnie 3,5 entropii.

I kod:
Każda kopia drukuje pierwsze słowo, a następnie informuje kopię poniżej, aby wydrukować następne słowo. Jeśli jest tylko jedna instancja, nie ma drugiej kopii, więc nie jest drukowane nic oprócz pierwszego słowa.

Jeśli są dwie kopie, obie wydrukują jednocześnie pierwsze słowo (bajty są LUB połączone razem, więc jest w porządku), to tylko druga kopia wydrukuje drugie słowo.

Jeśli wszystkie pięć kopii jest obecnych, wszystkie wydrukują pierwsze słowo itp., A piąta kopia sama wydrukuje ostatnie słowo.

Obwód zakończenia zakończy program, gdy tylko wszystkie kopie nie zaczną drukować aktywnie.


1

Ruby, 63

+1;puts"See Dick and Jane run!"[/(.*?( |!)){#$.}/]if($.+=1)==$.

1

Perl, 37

print qw(My IQ is not me!)[$i++].' ';

Podobne do tego, co miał wszechstronny, ale wykorzystując qw Perla, aby uratować jeszcze kilka znaków.


1

Długość wiadomości Rebmu + 27

Gdybyśmy poszli z „My IQ to nie ja!” byłoby 43. Ale popieram tę wiadomość:

uV?'s[S[{The}{rebellion}{against}{software}{complexity.}]]proTKsPROsp

Odpowiednik Rebol / Red:

unless value? 's [
    s: [{The}{rebellion}{against}{software}{complexity.}]
]

print/only take s
print/only space

Rebol ma 3 podstawowe warunki: JEŻELI, JESZCZE i UNLESS. JEŻELI jest równoważne JEŻELI NIE, ale może być bardziej jasne: „Zawsze wykonuj następujące czynności, JEŚLI ten warunek jest spełniony”.

W tym przypadku warunkiem jest sprawdzenie, czy symbol S otrzymał wartość w bieżącym kontekście. Musimy użyć cytatu, ponieważ próba użycia niecytowanego S w wyrażeniu warunkowym oceniłaby go i prawdopodobnie spowodowałaby błąd. ( value?domyślnie nie cytuje swojego parametru, ponieważ możesz chcieć, aby sprawdzany symbol był w zmiennej, np. sym: 'swtedy if value? sym [...]faktycznie sprawdziłby, czy S został zdefiniowany, a nie SYM)

Tylko pierwsza pasta programu przypisze serię ciągów do S. Kolejne wklejenie zabierze ciąg z nagłówka szeregu i przekaże go do opcji DRUKUJ / TYLKO, która wypisze swój argument bez dodawania wiersza.

(Uwaga: DRUKUJ / TYLKO to sugerowany sposób zastąpienia powiedzenia PRIN, który jest rozważany w Rebol 3 i Red; zastępowanie wydruku jest obecnie testowane w Rebmu.)


1

AHK , 44 bajty

i++
Send % SubStr("He is an OK ex",i*3-2,3)

Zwróć uwagę na nowy wiersz na końcu. Jedyną sprytną rzeczą jest to, że ciąg składa się z trzech liter, więc nie musimy niczego dzielić. Zamiast tego po prostu pobieramy podciąg na podstawie i. Dane wyjściowe są wyświetlane na aktywnym ekranie, tak jakby zostały wpisane na klawiaturze.


0

JavaScript (53)

Wziąłem tekst z aditsu, ponieważ nie robię z nim nic fantazyjnego, więc wybrane słowa są nieco nieistotne dla rozwiązania (z wyjątkiem liczby bajtów).

var i=i|0;alert("He 0is 0but 0a 0dog".split(0)[i++]);

Czy alertw tym przypadku się liczy? Edycja: Czytanie reguł prawdopodobnie tak nie jest, ponieważ nie łączę ciągów ze spacjami. Dodam spacje, aby było sprawiedliwie.

Należy również pamiętać, że varw tym przypadku koszt jest rzeczywiście istotny.


Czy ktoś może wyjaśnić, dlaczego var i|=0;NIE działa tutaj?
flawr

@flawr Nie możesz zrobić |=ani nic podobnego var. Bez tego vardostaniesz ReferenceError: i is not defined. var i=i|0rozwija się var i=undefined|0i undefined|0najwyraźniej 0.
nyuszika7h

Działa to z powodu podnoszenia. var i=i|0jest równoważne z var i;i=i|0. Dlatego nie pojawia się błąd odniesienia. Powodem, dla którego zostanie ustawiony na 0 za pierwszym razem, jest to, co powiedział @ nyuszika7h.
Ingo Bürk

1
Ale to zaalarmuje słowa osobno.
dumny haskeller

0

Perl, 43 56

print substr'Mine was not Red 5!',4*$i++,4;

Akceptuję, że nie mogę wygrać tego. Moja oryginalna próba wyjaśnia, dlaczego:

@a=('This',' code',' is',' too',' long.');print$a[$i++];

0

Lua, 77

Dość proste rozwiązanie:

i=(i or 0)+1;io.write((i==1 and""or" ")..("Thebigfoxwasup."):sub(3*i-2,3*i))

(H (X) = 4,23)


0

JavaScript, 138

g=this;clearTimeout(g.t);g.i|=0;i++;g.t=setTimeout(
    function(){console.log(["I'll","sleep","when","I'm","dead."].slice(0,i).join(' '))},0);

(dodatkowy znak nowej linii został dodany wyłącznie w celu zapewnienia czytelności)

Wydruki I'll sleep when I'm dead. Używa timera, aby mieć pewność, że wydruk zostanie wydrukowany tylko raz


0

Pure Bash, 51 bajtów

a=(All you need is Love!)
printf "${i:+ }${a[i++]}"

H (X) = 3,59447

Można to nieco pograć w golfa, kłusując jedną z krótszych fraz, ale chętnie trzymam się najsłynniejszego cytatu Kartezjusza Lennona. (Przepraszam @Descartes, ale wszystkie słowa muszą być unikalne).

Wydajność:

$ ./phrase.sh 
All$ cat phrase.sh phrase.sh phrase.sh > phrase3.sh
$ chmod +x phrase3.sh 
$ ./phrase3.sh 
All you need$ 
$ cat phrase.sh phrase.sh phrase.sh phrase.sh phrase.sh > phrase.sh
$ chmod +x phrase5.sh 
$ ./phrase5.sh 
All you need is Love!$ 

Dba o wstawianie spacji między słowami, ale nie ma spacji początkowych ani końcowych.

Opiera się na tym, że w bash zmienne niezdefiniowane, gdy są rozwijane jako łańcuchy, mają wartość „”, ale gdy są interpretowane arytmetycznie, mają wartość 0.


5 słów musi być unikalnych ...
trichoplax

Ponieważ twój kod wydaje się wystarczająco wszechstronny, aby poradzić sobie z dowolną frazą składającą się z 5 słów, jestem pewien, że możesz pomyśleć o takiej, która ma wymaganą entropię wynoszącą 3,5 (zbyt wiele podwójnych liter w tym ...).
trichoplax

@ githubphagocyte Miałem nadzieję, że dasz mi korzyść z zaokrąglania ;-) Ok, naprawiłem to z dodatkowym !teraz - wydaje się, że załatwi sprawę .
Cyfrowa trauma

0

PHP 89 78 char

Jest trochę gadatliwy i zdecydowanie nie wygra, ale i tak było fajnie. Oto co wymyśliłem

Wyrażenie:

code golf is pretty fun

Entropia = 3,82791

Kod:

<?
$i=(isset($i)?$i+1:0);
$w=["code","golf","is","really","fun"];
echo $w[$i].";

Gra w golfa:

<?$i=(isset($i)?$i+1:0);$w=["code","golf","is","really","fun"];echo $w[$i].

0

Python3 - 122 bajty

Otwórz drzwi wnęki na kapsuły [HAL]

Myślę, że zarobię na tym nerd. Gdyby tylko pytanie pozwoliło na jeszcze jedno słowo ...

Mój program pobiera nazwę pliku (p.py jest podstawą) i sprawdza, ile razy nazwa podstawowa jest iterowana. Następnie pobiera plasterki z ciągu znaków n. njest liczbą ps w nazwie pliku.

import sys,re
for i in range(len(re.findall(re.compile('p'),sys.argv[0]))):print('Otpbdphoaoeedyon   r    s'[i::5],end='')

~ $ python p.py
Open

~ $ python pp.py
Open the

~ $ python ppp.py
Open the pod

~ $ python pppp.py
Open the pod bay

~ $ python ppppp.py
Open the pod bay doors

Zaletą wyrażenia regularnego jest to, że program można wywoływać w dowolny sposób i nadal będzie on działał (pod warunkiem zmiany nazwy basename w kodzie): mój oryginalny program nazywał się golfed.py.


0

05AB1E , 21 bajtów (niekonkurencyjny)

“€Œ‰‹€‡Øš‹É.“ª#¾è¼?ð?

Wypróbuj online!

Wykorzystuje:

This works for literally anything. 
H(x) = 4.02086

Wyjaśnienie

“€Œ‰‹€‡Øš‹É.“ª#¾è¼?ð?
“€Œ‰‹€‡Øš‹É.“ª        # Pushes "This works for literally anything."
              #       # Split on spaces
               ¾è     # get element at index of counter_variable (default 0)
                 ¼    # Increment the counter_variable
                  ?   # Print the selected element
                   ð? # Prints a space

Nie widziałem tego, napisane prawie tak samo z “€í€Ü€…‚¿‹·“hehe
Magic Octopus Urn


0

SmileBASIC, 54 bajty

DATA"Does"," anybody"," have"," a"," key?
READ W$?W$;

Wolałbym „Piasek można jeść”. ale to nie udaje się jakoś testu entropii. Oczywiście mogłem wybrać krótszą frazę, ale to jest nudne.

READKluczowe odczytuje wartości z DATAi zapisuje ją w zmiennej. READPonowne użycie dostanie następny element i tak dalej.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.