Ada yang dikenal dikenal

45

Mantan Menteri Pertahanan AS, Donald Rumsfeld, terkenal mempopulerkan ungkapan "yang dikenal." Di sini kita akan menyaring komentarnya menjadi bait empat baris.

Secara khusus, tampilkan teks ini:

known knowns
known unknowns
unknown knowns
unknown unknowns

Kapitalisasi tidak penting (misalnya, Known unKnownsbaik-baik saja), dan satu baris baru trailing dapat diterima, tetapi tidak ada perubahan pemformatan lainnya yang diizinkan. Itu berarti satu spasi di antara kata-kata, dan LF(59 byte) atau CR/LF(62 byte) antara baris.

Aturan

  • Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
  • Celah standar dilarang.
  • Ini adalah sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
AdmBorkBork
sumber
1
Adakah yang bisa menjelaskan mengapa ini mendapat banyak downvotes? Bagi saya itu adalah tantangan yang masuk akal dan telah mendorong berbagai jawaban dalam campuran bahasa.
ElPedro
47
@ ElPedro Alasan di balik banyak downvotes adalah diketahui tidak diketahui
Wondercricket
Bisakah kita mengembalikan matriks atau daftar string?
Adám
1
@ Adám Daftar empat string akan baik-baik saja, karena itu masih menjaga jarak antar kata; tetapi, kecuali Anda melakukan matriks dari setiap karakter termasuk spasi, matriks tidak OK.
AdmBorkBork
1
Apakah ruang trailing disengaja?
user202729

Jawaban:

29

Python 2 , 54 52 byte

-2 byte terima kasih kepada xnor

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

Cobalah online!

Hasil dari /dan %akan menjadi [[2, 2], [2, 0], [0, 2], [0, 0]]indeks awal, menghapus unkapan 2, menjaga string tidak berubah saat0

tongkat
sumber
1
Jika Anda membiarkan kmenjadi 'unknowns', Anda dapat memperbaiki dengan k[i/3:7]dan menyimpan dua byte.
xnor
27

Vim 28 25 byte

Ini jawaban Vim pertamaku, segala tip bermain golf dipersilakan.

2iunknown ␛rsY3P2xw.+.jw.

Beraksi

Terima kasih Lynn karena telah menulis skrip python untuk membuat animasi yang fantastis.

Ini juga dapat dijalankan oleh V Coba Online!

Juga 25:

2iknown ␛rsY3pwiun␛+.+.w.
H.Piz
sumber
Saya hanya berhasil menemukan 25: 2iunknown ␛rsYPw2x2YP2xj.atau sedikit variasi 2iunknown ␛rsYPw2x2YPⓋjlx(Ⓥ = Ctrl-V).
Lynn
@ Lynn Bagus, saya mencoba Ctrl-V tetapi mendapatkan sesuatu yang lebih lama.
H.PWiz
23

bash, 36 byte

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

solusi lain

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\;"

jika baris baru dan ruang ekstra diterima 31 byte:

echo '
'{,un}known\ {,un}knowns
Nahuel Fouilleul
sumber
3
bagi mereka yang bertanya-tanya sihir macam apa ini (seperti saya): ini adalah ekspansi bash brace
bolov
... bahkan lebih baik dijelaskan di bash-hackers.org , dan Anda dapat mencobanya online! .
hidangan penutup
Jika ragu, letakkan seluruh jawaban dalam satu blok kode
Stan Strum
reworded, input yang tidak valid di akhir
Nahuel Fouilleul
14

05AB1E , 13 12 byte

Disimpan 1 byte berkat Erik the Outgolfer (hindari string penutup)

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

Cobalah online!

Penjelasan

„Š¢—‚           # push the string "known unknown"
     #          # split on spaces
      D         # duplicate
       's«      # append "s" to each
          â     # cartesian product
           »    # join on newline
Emigna
sumber
2
“Š¢—‚“->„Š¢—‚
Erik the Outgolfer
@EriktheOutgolfer: Oh yeah, hanya 2 kata. Terima kasih!
Emigna
Bahhh ... kenapa aku tidak melihat dulu? Jawaban yang sama
Magic Gurita Guci
11

CJam ( 26 25 byte)

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

Demo online

Dengan produk Cartesian ["known" "unknown"]sendiri, maka masing-masing elemen bergabung dengan ruang dan diakhiri dengan sdan sebuah baris baru.

Terima kasih kepada Erik untuk penghematan satu byte.

Peter Taylor
sumber
8

R , 52 51 50 byte

cat(gsub(1,"known","1 1s
1 un1s
un1 1s
un1 un1s"))

Cobalah online!

Substitusi dan perintah cetak yang sangat singkat menjadikannya jawaban R yang sangat kompetitif dalam tantangan !

Bahkan jika itu sangat membosankan. Agak lebih menarik sekarang, dan dengan satu byte tersimpan berkat Joe .

Menyimpan byte lain berkat jawaban ini, juga oleh J.Doe!

Giuseppe
sumber
6

Haskell , 60 58 53 51 byte

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

Cobalah online!

Menghasilkan daftar garis seperti yang baru-baru ini diizinkan. Terima kasih kepada @firefrorefiddle karena telah menunjukkan.

-2 byte berkat cole .


Versi 58 byte:

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

Cobalah online! Menghasilkan satu string.

Laikoni
sumber
Versi 60 byte Anda sebenarnya adalah versi 53 byte karena Anda dapat menghapus unlineskarena "Daftar empat string tidak apa-apa, karena itu masih mempertahankan ruang di antara kata-kata;" (Komentar untuk pertanyaan asli).
firefrorefiddle
1
51 byte menggabungkan pendekatan Anda dengan @ PeterTaylor's
cole
5

Retina , 33 32 byte


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

Cobalah online! Sunting: Disimpan 1 byte berkat @ovs. Penjelasan: Ini hampir merupakan pendekatan sepele menggunakan placeholder untuk known, kecuali di sini saya cukup menyisipkannya sebelum setiap ruang atau s, yang menghemat 3 4 byte.

Neil
sumber
32 byte
ovs
2
Anda dapat meningkatkan ini dengan mencetak setengah
Leo
2
@ Leo menggunakan itu Anda bahkan tidak memerlukan |spendekatan lagi: tio.run/##K0otycxL/P@fK1shu/jQtmyF0rzsYi6rhGyu7Lz88jyu3IQ4rtK8//…
Martin Ender
5

PHP, 55 51 47 byte

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

coba online

Titus
sumber
Apakah Anda perlu membuka tag untuk entri php?
Josiah
@ Yosia saya butuh sesuatu untuk mencetak hasilnya; <?=adalah pilihan terpendek.
Titus
5

Retina , 33 32 byte

Disimpan 1 byte menggunakan pendekatan pencetakan perantara dari Leo.


 ¶u

knowns
u
 un
:`s 
 
m`^
un

Cobalah online!

Penjelasan


 ¶u

Mengubah input yang tidak ada (yaitu kosong) menjadi string pada baris kedua. Yang satu itu kelihatannya sangat aneh, tetapi karakter-karakter ini adalah kode untuk hal-hal yang terjadi di antara dua contoh known[s]pada dua baris pertama hasilnya. Ruang dan linefeed hanya diri mereka sendiri dan uini un.


knowns

Sekarang kita menyisipkan knownsdi setiap posisi (yaitu di awal, akhir, dan di antara setiap pasangan karakter).

u
 un

Kami memecahkan kode u.

:s 
 

Kemudian kita singkirkan sdi depan spasi, yaitu yang ada di paruh pertama setiap baris, dan cetak hasilnya.

m`^
un

Dan akhirnya kami menambahkan unkedua baris dan mencetak hasilnya lagi.

Ini mengalahkan pendekatan sepele dari hanya menggunakan placeholder knownsebesar 4 byte, tetapi bukan implementasi Neil yang lebih efisien dari pendekatan itu.

Martin Ender
sumber
5

Bahasa Pemrograman Shakespeare , 1021 1012 993 byte

-19 byte, terima kasih kepada 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.

Cobalah online!

JosiahRyanW
sumber
Anda dapat menghapus spasi setelah beberapa operator multi-kata sepertithe sum of
Jo King
Benarkah? Huh, itu banyak representasi-terpendek dari angka yang harus saya hitung ulang. Terima kasih.
JosiahRyanW
4

Perl 6 , 45 byte

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

Cobalah

Diperluas

$_ = '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)

Bagian [X](…)menghasilkan

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

Kemudian menggunakannya X~di dalamnya memaksa daftar dalam menjadi Str (karena &infix:«~»operator), yang melakukan hal itu menambah ruang antara nilai.

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

Kemudian masing-masing digabungkan dengan s

("known knowns", "known unknowns", "unknown knowns", "unknown unknowns").Seq
Brad Gilbert b2gills
sumber
41 byte
Jo King
4

Haskell, 57 52 byte

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

Cobalah online!

nimi
sumber
49 byte dengan output alternatif daftar
cole
@cole: format output sangat ketat, jadi saya pikir daftar string tidak valid.
nimi
jawaban haskell lainnya yang melakukannya, sepertinya OP menyetujui format itu.
cole
4

APL (Dyalog) , 64 47 35 byte

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

Cobalah online!

Bagaimana?

k←'known'- kadalah"known"

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

∘.... - produk luar dengan sendirinya

    {⍺,' ',⍵,'s'} - dengan fungsi yang memformat args sebagai {⍺} {⍵}s

, - hancurkan tabel produk menjadi vektor

- Pisahkan ke kolom

Uriel
sumber
33 byte (+ memperbaiki format keluaran buruk)
dzaima
1
@dzaima 31
Kritixi Lithos
4

Java 8, 56 55 byte

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

-1 byte terima kasih kepada @SuperChafouin .

Penjelasan:

Coba di sini.

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)
Kevin Cruijssen
sumber
Oke, saya harus bertanya ... mengapa \r? ^^ '
Olivier Grégoire
@ OlivierGrégoire Woops ..; p
Kevin Cruijssen
1
Anda dapat memenangkan satu byte denganv->" s\n uns\nun s\nun uns".replaceAll(" |s","known$0")
Arnaud
4

C (gcc),  79  78 76 byte

Terima kasih kepada @Justin Mariner karena bermain golf satu byte!

f(){printf("%s %1$ss\n%1$s un%1$ss\nun%1$s %1$ss\nun%1$s un%1$ss","known");}

Cobalah online!

Steadybox
sumber
Saya pikir ini bisa kurang dari satu byte jika Anda menggunakan %1$sdan menyingkirkan i: Coba online!
Justin Mariner
3

Sekam , 14 byte

OΠṠemhw¨ṅW∫ḟωμ

Cobalah online!

Penjelasan

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
Leo
sumber
3

6502 kode mesin (C64), 48 byte

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

Demo online

Pemakaian: sys49152


Bagaimana itu bekerja

Kuncinya di sini adalah dengan menggunakan "loop counter" untuk 8 iterasi di mana bit 7 sampai 1 dari nilai awal adalah 1untuk unknown(s)dan 0untuk known(s)dalam satu iterasi. Penghitung ini digeser ke kiri setelah setiap iterasi (menggeser bit paling kiri ke bendera carry) dan bit 0awalnya 1jadi kita tahu kita selesai begitu bit terakhir digeser keluar. Pada iterasi pertama, knowndicetak karena saat memanggil program, flag carry jelas.

Di setiap iterasi, ujung string beralih antara <space>dan s<newline>.

Berikut daftar pembongkaran yang dikomentari:

         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
Felix Palmen
sumber
3

Perl 5 , 33 byte

Disclaimer : Saya tidak menyadari bahwa ekspansi penjepit mungkin dalam <...>operator (belajar berkat @ Kotor 's jawaban !) Dan menggunakan trik ekspansi pandai dari @ NahuelFouilleul ' s menakjubkan jawaban pesta , saya bisa membangun solusi ini. Saya dengan senang hati akan menghapus ini atas permintaan mereka.

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

Cobalah online!


Perl 5 , 42 byte

41 byte kode +1 untuk -p.

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

Cobalah online!


Perl 5 , 45 byte

Mencoba mencari alternatif, tapi tidak bisa membuatnya lebih pendek ... Kupikir itu cukup berbeda untuk menjamin penambahan.

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

Cobalah online!

Dom Hastings
sumber
3

Haskell, 71 66 56 54 byte

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

Terima kasih kepada @ Leo untuk -3 byte!

Catatan: Dalam komentar pertanyaan, op mengatakan bahwa mengembalikan daftar string tidak masalah

Coba di sini.

addison
sumber
Ini luar biasa dan saya bahkan tidak dapat memahaminya, tetapi bagian dari yang kedua fmapdan seterusnya dapat disingkat menjadi map(' ':):)
Leo
1
@ Leo, terima kasih! Haha, saya bahkan tidak yakin lagi memahaminya
addison
Tidak perlu memberi nama fungsi, sehingga Anda dapat menjatuhkan f=.
nimi
3

Jelly , 15 byte

“ṿ1“ŒwƘ»pż€⁾ sY

Cobalah online!

Erik the Outgolfer
sumber
:( Versi terkompresi adalah 29 byte
caird coinheringaahing
3

Ruby, 53 50 byte

$><<"a as
a unas
una as
una unas".gsub(?a,"known")
dkudriavtsev
sumber
Ganti \ndengan baris baru literal.
Nilai Tinta
@NilaiInk Selesai.
dkudriavtsev
2

Batch, 66 byte

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

Jawaban alternatif, juga 66 byte:

@for %%a in (k unk)do @for %%b in (k unk) do @echo %%anown %%bnowns
Neil
sumber
Tentu saja, loop bersarang, belum memikirkan itu ... pekerjaan bagus!
schnaader
2

Haxe, 71 byte

(?x)->[for(a in x=["","un"])for(b in x)a+'known ${b}knowns'].join("\n")

Cobalah online!

Aurel Bílý
sumber
2

C (gcc) , 70 66 byte

Berkat @ l4m2 untuk -4 byte!

f(i){for(i=8;i--;)printf("unknown%s"+(i>4|i==2)*2,i%2?" ":"s\n");}

Cobalah online!

gastropner
sumber
1
Secara terbalikf(i){for(i=8;i--;)printf("unknown%s"+(i>4|i==2)*2,i%2?" ":"s\n");}
14m2
Sarankan L"ੳ "+i%2alih-alihi%2?" ":"s\n"
ceilingcat
2

PowerShell , 46 44 byte

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

Cobalah online!

(Hampir) penggantian string sederhana. Menggunakan pendekatan Neil untuk memangkas dua byte. Terima kasih kepada Martin karena menunjukkan hal itu.

Sayangnya, ini lebih pendek daripada metode lintas-produk yang lebih menarik dengan tiga lima tiga byte:

PowerShell , 49 47 byte

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

Cobalah online!

AdmBorkBork
sumber
Pendekatan Neil menghemat 2 byte .
Martin Ender
@ MartinEnder Benar, panggilan bagus. Terima kasih!
AdmBorkBork
2

T-SQL, 56 54 byte

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

SQL mendukung jeda baris di dalam string literal, sangat mirip dengan beberapa bahasa lain yang sudah diposting.

EDIT : Sedikit lagi ( 82 bytes ), tapi sedikit lebih pintar:

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

EDIT 2 : Favorit saya sejauh ini, menggunakan cross-self-join dari tabel turunan ( 79 byte ):

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

EDIT 3 : Mengubah karakter pengganti dari 'x'menjadi 1, yang memungkinkan saya menghapus tanda kutip di sekitarnya dan menghemat 2 byte, karena REPLACEmelakukan konversi implisit ke string.

BradC
sumber
1

ReRegex , 38 byte

a/known/a as\na unas\nuna as\nuna unas

Cobalah online!

ATaco
sumber
Saya melihat bahasa ini untuk pertama kalinya, tetapi a/known / z/s\n/aazaunazunaazunaunaztampaknya berfungsi selama 36 byte.
seseorang
1

Javascript 66 54 53 50 byte

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

Sejarah

  • menyimpan 12 byte berkat @someone (penggunaan eksplisit "un" di string utama)
  • disimpan 1 byte berkat @ThePirateBay (split..join alih-alih ganti)
  • disimpan 3 byte berkat @Neil (ganti yang lebih baik ())
Brian H.
sumber
1
Saya pikir akan lebih pendek untuk menambahkan un dalam string itu sendiri
seseorang
Anda benar-benar benar, memalukan bahwa itu membodohi solusinya.
Brian H.
1
Apakah ruang setelah koma diperlukan?
seseorang
4
Menggunakan split..join alih-alih replacemenghemat satu byte.
2
Maksud saya dengan menghapus 0s dan menggunakan .replace(/ |s/g,'known$&')(yang sekarang hanya menyimpan 3 byte).
Neil