Es sind bekannte bekannt


45

Der frühere US-Verteidigungsminister Donald Rumsfeld ist berühmt den Ausdruck "bekannte Bekannte" bekannt gemacht. Hier werden wir seine Bemerkungen in einer vierzeiligen Strophe zusammenfassen.

Speziell diesen Text ausgeben:

known knowns
known unknowns
unknown knowns
unknown unknowns

Die Known unKnownsGroß- und Kleinschreibung spielt keine Rolle (z. B. ist in Ordnung), und eine einzelne nachgestellte Zeile ist zulässig, andere Formatierungsänderungen sind jedoch nicht zulässig. Das bedeutet ein einzelnes Leerzeichen zwischen den Wörtern und entweder LF(59 Byte) oderCR/LF (62 Byte) zwischen den Zeilen.

Regeln

  • Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
  • Standard-Schlupflöcher sind verboten.
  • Dies ist daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.

1
Kann jemand erklären, warum dies so viele Ablehnungen hat? Für mich ist es eine vernünftige Herausforderung und hat eine Vielzahl von Antworten in einer Mischung von Sprachen gefördert.
ElPedro

47
@ ElPedro Der Grund für die vielen Abstimmungen ist ein bekanntes Unbekanntes
Wondercricket

Dürfen wir eine Matrix oder eine Liste von Zeichenketten zurückgeben?
Adám

1
@ Adám Eine Liste mit vier Zeichenfolgen wäre in Ordnung, da dadurch immer noch der Abstand zwischen den Wörtern erhalten bleibt. Aber wenn Sie nicht eine Matrix aus jedem Zeichen einschließlich der Leerzeichen erstellen, sind Matrizen nicht in Ordnung.
AdmBorkBork

1
Sind die nachgestellten Leerzeichen beabsichtigt?
user202729

Antworten:


29

Python 2 , 54 52 Bytes

-2 Bytes dank xnor

k='unknowns'
for i in 8,6,2,0:print k[i/3:7],k[i%3:]

Probieren Sie es online!

Das Ergebnis von /und %ist, [[2, 2], [2, 0], [0, 2], [0, 0]]dass es sich um die Startindizes handelt, wobei das unWann entfernt 2wird und die Zeichenfolge unverändert bleibt, wenn0


1
Wenn Sie lassen Sie ksein 'unknowns', können Sie mit korrigieren k[i/3:7]und zwei Bytes speichern.
16.

27

Vim 28 25 Bytes

Dies ist meine erste Antwort von Vim. Golftipps sind willkommen.

2iunknown ␛rsY3P2xw.+.jw.

In Aktion

Vielen Dank an Lynn für das Schreiben des Python-Skripts , um diese fantastische Animation zu erstellen.

Dies kann auch von V Try it Online ausgeführt werden!

Auch 25:

2iknown ␛rsY3pwiun␛+.+.w.

Es gelang mir nur, weitere 25 zu finden: 2iunknown ␛rsYPw2x2YP2xj.oder eine geringfügige Abweichung 2iunknown ␛rsYPw2x2YPⓋjlx(Ⓥ = Strg-V).
Lynn

@Lynn Schön, ich habe Strg-V ausprobiert, aber etwas länger.
H.PWiz

23

Bash, 36 Bytes

printf %s\\n {,un}known\ {,un}knowns

andere Lösungen

36

eval echo\ {,un}known\ {,un}knowns\;

37

eval printf '%s\\n' \{,un}known{\\,s}

38

eval eval echo\\ \{,un}known{\\,'s\;'}

41

x=\\\ {,un}known;eval "eval echo$x$x\s\;"

45

x='\ {,un}known' e=eval;$e "$e echo$x$x\s\;"
x='\ {,un}known' e=eval\ ;$e"$e\echo$x$x\s\;"

Wenn führende Zeilenumbrüche und zusätzlicher Speicherplatz 31 Byte akzeptiert wurden:

echo '
'{,un}known\ {,un}knowns

3
Für diejenigen, die sich fragen, was für eine Art von Zauberei das ist (wie ich): Dies ist die Erweiterung der Bash Brace
Bolov

… Noch besser erklärt auf bash-hackers.org , und Sie können es online ausprobieren ! .
Dessert

Wenn Sie Zweifel haben, schreiben Sie die gesamte Antwort in einen Codeblock
Stan Strum

umformuliert, die ungültige Eingabe am Ende
Nahuel Fouilleul

14

05AB1E , 13 12 Bytes

Gespeichert 1 Byte dank Erik die Outgolfer (avoid Schluss string)

„Š¢—‚#D's«â»

Probieren Sie es online!

Erläuterung

„Š¢—‚           # push the string "known unknown"
     #          # split on spaces
      D         # duplicate
       's«      # append "s" to each
          â     # cartesian product
           »    # join on newline

2
“Š¢—‚“->„Š¢—‚
Erik der Outgolfer

@EriktheOutgolfer: Oh ja, nur 2 Wörter. Vielen Dank!
Emigna

Bahhh ... warum habe ich nicht zuerst gesucht? Gleiche Antwort.
Magic Octopus Urn

11

CJam ( 26 25 Bytes)

"unknown"_2>\]2m*{S*'sN}%

Online-Demo

Kartesisches Produkt von sich ["known" "unknown"]selbst, dann wird jedes Element mit dem Raum verbunden und mit seiner neuen Zeile versehen.

Vielen Dank an Erik für die Ein-Byte-Speicherung.



6

Haskell , 60 58 53 51 Bytes

f<$>l<*>l
f x y=x++' ':y++"s"
l=["known","unknown"]

Probieren Sie es online!

Gibt eine Liste von Zeilen aus, wie sie kürzlich zulässig waren. Vielen Dank an @firefrorefiddle für den Hinweis.

-2 bytes dank cole .


58-Byte-Version:

f=<<"? ?s\n? un?s\nun? ?s\nun? un?s"
f '?'="known"
f c=[c]

Probieren Sie es online! Ergibt eine einzelne Zeichenfolge.


Ihre 60-Byte-Version ist tatsächlich eine 53-Byte-Version, da Sie sie entfernen können, unlinesweil "Eine Liste mit vier Zeichenfolgen wäre in Ordnung, da dadurch immer noch der Abstand zwischen Wörtern erhalten bleibt." (Kommentar zur ursprünglichen Frage).
firefrorefiddle

1
51 Bytes, die Ihren Ansatz mit @ PeterTaylor's kombinieren
Cole


5

Retina , 33 32 Bytes


 s¶ uns¶un s¶un uns
 |s
known$&

Probieren Sie es online! Bearbeiten: 1 Byte dank @ovs gespeichert. Erläuterung: Dies ist fast der triviale Ansatz, einen Platzhalter für zu verwenden known, mit der Ausnahme, dass ich ihn hier einfach vor jedem Leerzeichen oder seinfüge, wodurch 3 bis 4 Bytes eingespart werden.



2
Sie können dies verbessern, indem Sie auf halber Strecke drucken
Leo

2
@Leo mit diesem brauchen Sie nicht einmal |smehr den Ansatz: tio.run/##K0otycxL/P@fK1shu/jQtmyF0rzsYi6rhGyu7Lz88jyu3IQ4rtK8//…
Martin Ender

5

PHP, 55 51 47 Bytes

<?=strtr("1 1s
1 01s
01 1s
01 01s",[un,known]);

versuche es online


Benötigen Sie Öffnungs-Tags für PHP-Einträge?
Josiah

@Josiah Ich brauche etwas, um das Ergebnis auszudrucken. <?=ist die kürzeste Option.
Titus

5

Retina , 33 32 Bytes

1 Byte mit einem Zwischendruckverfahren von Leo gespeichert.


 ¶u

knowns
u
 un
:`s 
 
m`^
un

Probieren Sie es online!

Erläuterung


 ¶u

Schaltet die nicht vorhandene (dh leere) Eingabe in die Zeichenfolge in der zweiten Zeile. Das scheint ziemlich seltsam, aber diese Zeichen sind Codes für das Material, das zwischen zwei Instanzen von known[s]in den ersten beiden Zeilen des Ergebnisses liegt. Leerzeichen und Zeilenvorschub sind nur sie selbst und sind ues auch un.


knowns

Jetzt fügen wir knownsan jeder Stelle (dh am Anfang, Ende und zwischen jedem Zeichenpaar) ein.

u
 un

Wir entschlüsseln die u.

:s 
 

Dann entfernen wir die ss vor Leerzeichen, dh die in der ersten Hälfte jeder Zeile, und geben das Ergebnis aus.

m`^
un

unZum Schluss stellen wir beide Zeilen voran und drucken das Ergebnis erneut.

Dies übertrifft den trivialen Ansatz, nur einen Platzhalter für known4 Bytes zu verwenden, jedoch nicht Neils effizientere Implementierung dieses Ansatzes.


5

Shakespeare Programming Language , 1021 1012 993 Bytes

-19 Bytes dank Joe King!

,.Ajax,.Ford,.Page,.Act I:.Scene I:.[Exeunt][Enter Ajax and Ford]Ajax:Am I nicer a big cat?If sois the remainder of the quotient betweenI the sum ofa cat a big cat worse a big cat?If notlet usScene V.You be the sum ofa fat fat fat pig the cube ofthe sum ofa cat a big big cat.Speak thy.You be the sum ofyou the sum ofa cat a fat fat fat pig.Speak thy.Scene V:.[Exit Ajax][Enter Page]Page:You be the product ofthe sum ofa cat a big big cat the sum ofa pig a big big big big cat.Speak thy.You be the sum ofyou the sum ofa cat a big cat.Speak thy.Ford:You be the sum ofI a cat.Speak thy.You be the sum ofyou a big big big cat.Speak thy.Page:Speak thy.You be the sum ofyou the sum ofa cat a big big cat.Is the remainder of the quotient betweenAjax a big cat worse a cat?If soyou big big big big big cat.Speak thy.If solet usScene X.You be twice the sum ofa cat a big big cat.Speak thy.Scene X:.[Exit Page][Enter Ajax]Ford:You be the sum ofyou a cat.Be you worse a big big big cat?If solet usAct I.

Probieren Sie es online!


Sie entfernen die Leerzeichen nach einigen Multi-Word-Operatoren wiethe sum of
Jo King

"Ja wirklich?" Huh, das sind viele kürzeste Darstellungen von Zahlen, die ich neu berechnen muss. Vielen Dank.
JosiahRyanW

4

Perl 6 , 45 Bytes

$_='known';.say for [X](($_,"un$_")xx 2)X~'s'

Versuch es

Erweitert

$_ = 'known';

.say                # print with trailing newline the value in topic variable 「$_」

  for               # do that for each of the following

    [X](
      ($_, "un$_")  # ('known','unknown')
        xx 2        # list repeated twice
    ) X~ 's'        # cross using &infix:«~» with 's' (adds 「s」 to the end)

Das [X](…)Teil erzeugt

(("known","known"),("known","unknown"),("unknown","known"),("unknown","unknown")).Seq

Dann mit X~auf sie die inneren Listen zu einer Str (wegen der coerces &infix:«~»Operator), der dabei einen Raum zwischen den Werten hinzufügt.

("known known", "known unknown", "unknown known", "unknown unknown").Seq

Dann wird jeder mit einem verbunden s

("known knowns", "known unknowns", "unknown knowns", "unknown unknowns").Seq


4

Haskell, 57 52 Bytes

id=<<id=<<mapM(\s->[s,"un"++s])["known ","knowns\n"]

Probieren Sie es online!


49 Bytes mit einer alternativen Ausgabe von list
cole

@cole: Das Ausgabeformat ist sehr streng, daher denke ich, dass eine Liste von Strings nicht gültig ist.
Nimi

die andere haskell-antwort macht es so, als hätte das op dieses format akzeptiert.
Cole

4

APL (Dyalog) , 64 47 35 Bytes

⍪,∘.{⍺,' ',⍵,'s'}⍨k('un',k'known')

Probieren Sie es online!

Wie?

k←'known'- kist"known"

k('un',k←'known') - "known" "unknown"

∘.... - äußeres Produkt mit sich selbst

    {⍺,' ',⍵,'s'} - mit der Funktion, die die Argumente als formatiert {⍺} {⍵}s

, - Die Produkttabelle in Vektor zerschlagen

- In Spalten trennen



1
@dzaima 31
Kritixi Lithos

4

Java 8, 56 55 Bytes

v->" s\n uns\nun s\nun uns".replaceAll(" |s","known$0")

-1 Byte dank @SuperChafouin .

Erläuterung:

Probieren Sie es hier aus.

v->                         // Method with empty unused parameter
  " s\n uns\nun s\nun uns"  //  Literal String
   .replaceAll(" |s",       //  Replace all spaces and "s" with:
     "known                 //   Literal "known"
           $0")             //   + the match (the space or "s")
                            // End of method (implicit / single-line return-statement)

Okay, ich muss fragen ... warum \r? ^^ '
Olivier Grégoire

@ OlivierGrégoire Woops ..; p
Kevin Cruijssen

1
Sie können ein Byte mitv->" s\n uns\nun s\nun uns".replaceAll(" |s","known$0")
Arnaud


3

Schale , 14 Bytes

OΠṠemhw¨ṅW∫ḟωμ

Probieren Sie es online!

Erläuterung

OΠṠemhw¨ṅW∫ḟωμ
       ¨ṅW∫ḟωμ    The compressed string "knowns unknowns"
      w           Split on spaces ["knowns","unknowns"]
   e              Make a list with:
    mh             this list with the last letter dropped from each word
  Ṡ                and this same list
                  [["known","unknown"],["knowns","unknowns"]]
 Π                Cartesian product [["known","knowns"],["unknown","knowns"],["known","unknowns"],["unknown","unknowns"]]
O                 Sort the list [["known","knowns"],["known","unknowns"],["unknown","knowns"],["unknown","unknowns"]]
                  Implicitely print joining with spaces and newlines

3

6502 Maschinencode (C64), 48 Bytes

00 C0 A9 37 85 FB A9 73 4D 2B C0 8D 2B C0 A9 0D 4D 2C C0 8D 2C C0 A9 26 90 02
E9 02 A0 C0 20 1E AB 06 FB D0 E1 60 55 4E 4B 4E 4F 57 4E 53 0D 00

Online-Demo

Verwendungszweck: sys49152


Wie es funktioniert

Der Trick besteht hier darin, einen "Schleifenzähler" für 8 Iterationen zu verwenden, wobei die Bits 7 bis 1 des Anfangswerts 1für unknown(s)und 0für known(s)eine Iteration sind. Dieser Zähler wird nach jeder Iteration nach links verschoben (wobei das Bit ganz links in das Übertragsflag verschoben wird ), und das Bit 0ist anfangs 1so, dass wir wissen, dass wir fertig sind, sobald das letzte Bit herausgeschoben wurde. In der ersten Iteration knownwird gedruckt, weil beim Aufrufen des Programms das Übertragsflag gelöscht wird.

In jeder Iteration wird das Ende der Zeichenfolge zwischen <space>und umgeschaltet s<newline>.

Hier ist die kommentierte Auflistung der Demontage:

         00 C0            .WORD $C000    ; load address
.C:c000  A9 37            LDA #$37       ; initialize loop counter ...
.C:c002  85 FB            STA $FB        ; ... as 0011 0111, see description
.C:c004   .loop:
.C:c004  A9 73            LDA #('s'^' ') ; toggle between 's' and space
.C:c006  4D 2B C0         EOR .plural
.C:c009  8D 2B C0         STA .plural
.C:c00c  A9 0D            LDA #$0D       ; toggle between newline and 0
.C:c00e  4D 2C C0         EOR .newline
.C:c011  8D 2C C0         STA .newline
.C:c014  A9 26            LDA #<.knowns  ; start at "known" except
.C:c016  90 02            BCC .noprefix  ; when carry set from shifting $fb:
.C:c018  E9 02            SBC #$02       ; than start at "un"
.C:c01a   .noprefix:
.C:c01a  A0 C0            LDY #>.knowns  ; high-byte of string start
.C:c01c  20 1E AB         JSR $AB1E      ; output 0-terminated string
.C:c01f  06 FB            ASL $FB        ; shift loop counter
.C:c021  D0 E1            BNE .loop      ; repeat if not 0 yet
.C:c023  60               RTS            ; done
.C:c024   .unknowns:
.C:c024  55 4E           .BYTE "un"
.C:c026   .knowns:
.C:c026  4B 4E 4F 57 4E  .BYTE "known"
.C:c02b   .plural:
.C:c02b  53              .BYTE "s"
.C:c02c   .newline
.C:c02c  0D 00           .BYTE $0d, $00

3

Perl 5 , 33 Bytes

Disclaimer : Ich war nicht klar , dass die Verstrebung Expansion innerhalb der möglich war , <...>Operator (gelernt dank @ Grimy ‚s Antwort !) Und die clevere Erweiterung Trick von @ mit NahuelFouilleul ‘ s erstaunlich bash Antwort , ich war in der Lage , diese Lösung zu bauen. Ich werde dies auf Anfrage gerne entfernen.

print<"{,un}known {,un}knowns$/">

Probieren Sie es online!


Perl 5 , 42 Bytes

41 Byte Code + 1 für -p.

s//K Ks
K unKs/;s/K/known/g;$\=s/^/un/gmr

Probieren Sie es online!


Perl 5 , 45 Bytes

Ich habe versucht, eine Alternative zu finden, konnte sie aber nicht kürzer machen ... Ich dachte, sie war anders genug, um es trotzdem zu rechtfertigen, sie hinzuzufügen.

print"un"x/[3467]/,known,$_%2?"s
":$"for 0..7

Probieren Sie es online!


3

Haskell, 71 66 56 54 Bytes

(<*>).map((++).init)<*>map(' ':)$["knowns","unknowns"]

Danke an @Leo für -3 Bytes!

Hinweis: In den Kommentaren der Frage besagte der Befehl, dass das Zurückgeben einer Liste von Zeichenfolgen in Ordnung ist

Probieren Sie es hier aus.


Das ist großartig und ich kann es nicht einmal verstehen, aber der Teil von deiner Sekunde fmapan kann auf gekürzt werden map(' ':):)
Leo

1
@Leo Danke! Haha, ich bin mir nicht mal sicher, ob ich es mehr verstehe
addison

Sie müssen der Funktion keinen Namen geben, damit Sie sie löschen können f=.
nimi



2

Batch, 66 Bytes

@set s= in (known unknown)do @
@for %%a%s%for %%b%s%echo %%a %%bs

Alternative Antwort, auch 66 Bytes:

@for %%a in (k unk)do @for %%b in (k unk) do @echo %%anown %%bnowns

Natürlich, geschachtelte Schleifen, haben nicht daran gedacht ... gute Arbeit!
Schnaader



2

PowerShell , 46 44 Bytes

' s
 uns
un s
un uns'-replace' |s','known$&'

Probieren Sie es online!

(Fast) einfacher Stringwechsel. Verwendet Neils Ansatz zum Trimmen von zwei Bytes. Vielen Dank an Martin für den Hinweis.

Leider ist es drei mal fünf mal drei Bytes kürzer als die interessantere produktübergreifende Methode :

PowerShell , 49 47 Bytes

($a='known','unknown')|%{$i=$_;$a|%{"$i $_`s"}}

Probieren Sie es online!



@ MartinEnder Richtig, guter Anruf. Vielen Dank!
AdmBorkBork

2

T-SQL, 56 54 Bytes

PRINT REPLACE('1 1s
1 un1s
un1 1s
un1 un1s',1,'known')

SQL unterstützt Zeilenumbrüche in Zeichenfolgenliteralen und ähnelt damit einigen anderen bereits veröffentlichten Sprachen.

EDIT : Etwas länger ( 82 Bytes ), aber etwas schlauer:

SELECT k+s+k+p+k+s+u+p+u+s+k+p+u+s+u+p
FROM(SELECT'known'k,' 's,'unknown'u,'s
'p)t

BEARBEITEN 2 : Mein Favorit bisher, mit einem Cross-Self-Join aus einer abgeleiteten Tabelle ( 79 Bytes ):

WITH t AS(SELECT'known'a UNION SELECT'unknown')
SELECT z.a+' '+t.a+'s'FROM t,t z

EDIT 3 : Das Ersetzungszeichen wurde von 'x'in geändert 1, wodurch ich die Anführungszeichen entfernen und 2 Bytes sparen kann, da REPLACEeine implizite Konvertierung in einen String erfolgt.



1

Javascript 66 54 53 50 Bytes

_=>` s
 uns
un s
un uns`.replace(/ |s/g,'known$&')

Geschichte

  • 12 Bytes dank @someone eingespart (explizite Verwendung von "un" im Hauptstring)
  • 1 Byte gespart dank @ThePirateBay (split..join statt replace)
  • 3 Bytes gespart dank @Neil (besser ersetzen ())

1
Ich denke, es wäre kürzer, un in der Zeichenfolge selbst hinzuzufügen
jemand

Sie haben vollkommen recht, eine Schande, dass dies die Lösung so niedergeschlagen macht.
Brian H.

1
Wird das Leerzeichen nach dem Komma benötigt?
Jemand

4
Durch die Verwendung von split..join anstelle von wird replaceein Byte gespeichert .

2
Ich meinte, indem ich das 0s entfernte und verwendete .replace(/ |s/g,'known$&')(was jetzt nur 3 Bytes spart).
Neil
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.