Itu bukan X saya, Y-nya juga Z

17

Tantangan ini diilhami oleh serangkaian buku anak-anak muda oleh Fiona Watt dan Rachel Wells, yang baru-baru ini saya nikmati bersama putri saya.

Dalam setiap buku mouse (diilustrasikan, tetapi bukan bagian dari teks) mengeluh bahwa suksesi 5 hal dari jenis yang sama bukan hal itu. Ini kemudian mendukung ini dengan menyatakan bahwa beberapa komponen benda tidak memiliki properti yang diharapkan.

Pada waktu bertanya yang keenam, tikus menemukan benda itu dan senang karena ia memiliki properti yang diharapkan.

Berikut ini adalah contoh teks yang khas:

That's not my bunny, its tail is too fluffy.
That's not my bunny, its paws are too rough.
That's not my bunny, its tail is too woolly.
That's not my bunny, its eyes are too shiny.
That's not my bunny, its nose is too wrinkled.
That's my bunny! Its ears are so soft.

Sekarang, kebanyakan orang pemrograman akan menyadari bahwa ini adalah metode yang sangat algoritmik untuk menghasilkan beberapa teks. Karena ini adalah proses yang sangat jelas, kita harus dapat mereproduksi ini dengan menulis beberapa kode.

Mari kita mulai dengan tiga kumpulan kata:

things = ["dinosaur", "lamb", "princess", "reindeer", "train"]
parts = ["back", "bells", "body", "bows", "crown", "dress", "ears",
  "engine", "fan", "flippers", "funnel", "hooves", "horns", "neck",
  "nose", "roof", "sash", "side", "spines", "spots", "tail", "teeth",
  "tiara", "wheels", "windows"]
properties = ["bumpy", "fluffy", "furry", "fuzzy", "glittery", "glossy",
  "hairy", "red", "rough", "rusty", "shiny", "silky", "slippery", 
  "soft", "sparkly", "squashy", "thick", "velvety", "woolly"]
  • Pertama, kami memutuskan hal apa yang akan kami uraikan.
  • Kemudian 5 kali, kita akan menghasilkan baris "Itu bukan [hal] saya, [bagian] nya juga [properti].
  • Akhirnya, kami menghasilkan baris "Itu [benda] saya! [Bagian] nya begitu [properti]!

Tantangan

  • Hasilkan teks cerita "Itu bukan ..."
  • Itu tidak harus secara konsisten mereproduksi teks yang sama.
  • Ini kode golf, jadi cobalah melakukannya dalam jumlah byte terkecil.
  • Silakan gunakan bahasa apa saja.
  • Ruang putih tidak masalah, tetapi harus ada karakter baris baru di antara garis.
  • Daftar kata-kata sumber bukan bagian dari jawaban Anda (dalam TIO mereka dapat ditambahkan ke header).
  • Anda dapat mengubah nama daftar kata sumber.
  • Output dapat berupa output ke terminal atau teks yang dihasilkan menjadi objek.
  • Harap sertakan tautan ke juru bahasa online.
  • Abaikan bentuk jamak, "tanduknya adalah" baik-baik saja.
  • Itu tidak perlu masuk akal. Jika corong puteri Anda terlalu halus, katakan saja.

Output sampel:

That's not my train, its engine is too rusty.
That's not my train, its hooves is too thick.
That's not my train, its sash is too fuzzy.
That's not my train, its tail is too velvety.
That's not my train, its horns is too glittery.
That's my train! Its hooves is so hairy.

Selamat bermain golf!

AJFaraday
sumber
2
@Shaggy Contoh pertama adalah teks sebenarnya dari salah satu buku. Itu bukan jawaban yang valid untuk tantangan ini. Saya telah mengatakan untuk mengabaikan bentuk jamak untuk menyederhanakan tantangan sedikit. Contoh itu pada dasarnya adalah informasi latar belakang.
AJFaraday
1
Terkait
FryAmTheEggman
10
Anda menyatakan "Itu tidak perlu masuk akal.", Apakah itu meluas ke kontraksi dekat? (Yaitu "Itu bukan kelinci saya, matanya terlalu mengkilap ... Itu kelinci saya! Matanya begitu mengkilap." dapat diterima sebagai output yang mungkin?) - Saya kira begitu, hanya berpikir saya akan memeriksa.
Jonathan Allan
13
Bukankah "Itu tidak harus secara konsisten mereproduksi teks yang sama" dan kolmogorov- jenis kompleksitas tidak kompatibel?
Joseph Sible-Reinstate Monica
2
@ Chris Ini adalah kesalahan taksonomi saya. Meskipun keduanya digolongkan sebagai Glires, jadi itu adalah sesuatu yang saya pelajari hari ini.
AJFaraday

Jawaban:

1

05AB1E , 63 byte

ΩU6F€Ω`XN5Qi“€Š's€¯ ÿ!€ç ÿ€ˆ€Ê ÿ.“ë“€Š's€–€¯ ÿ,€ç ÿ€ˆ…« ÿ.“}.ª,

Cobalah online.

Versi 68 byte yang tidak menampilkan bagian atau properti yang digandakan:

ΩUε.r6£}øεXª`N5Qi“€Š's€¯ ÿ!€ç ÿ€ˆ€Ê ÿ.“ë“€Š's€–€¯ ÿ,€ç ÿ€ˆ…« ÿ.“}.ª,

Cobalah online.

Kedua program menganggap daftar hal adalah input pertama, dan daftar yang berisi daftar bagian dan daftar properti adalah input kedua.

Penjelasan:

Ω            # Pop and push a random element of the things-list
 U           # Pop and store it in variable `X`
  6F         # Loop 6 times:
    €Ω       #  Get a random element from both the parts and properties list
      `      #  Push them to the stack
       X     #  And also push variable `X`
             #  (the order on the stack is now: property, part, thing)
    N5Qi     #  If it's the last iteration:
        “€Š's€¯ ÿ!€ç ÿ€ˆ€Ê ÿ.“ 
            '#   Push dictionary string "that's my ÿ! its ÿ is so ÿ."
       ë     #  Else:
        “€Š's€–€¯ ÿ,€ç ÿ€ˆ…« ÿ.“
            '#   Push dictionary string "that's not my ÿ, its ÿ is too ÿ."
             #  (where the `ÿ` are automatically replaced with the words on the stack)
       }.ª   #  After the if-else: sentence-capitalize the strings
             #  (so the "That's " as well as the "! Its")
          ,  #  And output it with trailing newline


ΩU           # Pop and store a random thing in variable `X`
  ε          # Map the list of lists of parts/properties to:
   .r        #  Shuffle the list
     6£      #  And leave the first six elements
           # After the map: zip/transpose to create pairs of part & property
    ε        # Foreach over the pairs:
     `XN5Qi“€Š's€¯ ÿ!€ç ÿ€ˆ€Ê ÿ.“ë“€Š's€–€¯ ÿ,€ç ÿ€ˆ…« ÿ.“}.ª,
             #  And the rest of the code is the same as above

Lihat tip tambang 05AB1E ini (bagian Cara menggunakan kamus? ) Untuk memahami mengapa “€Š's€¯ ÿ!€ç ÿ€ˆ€Ê ÿ.“ini "that's my ÿ! its ÿ is so ÿ."dan “€Š's€–€¯ ÿ,€ç ÿ€ˆ…« ÿ.“itu "that's not my ÿ, its ÿ is too ÿ.".

Kevin Cruijssen
sumber
10

Python 3 , 149 byte

lambda a,*l:shuffle(a)or["That's "+s%(a[0],*map(choice,l))for s in["not my %s, its %s is too %s."]*5+["my %s! Its %s is so %s."]]
from random import*

Cobalah online!

-9 byte berkat movatica

HyperNeutrino
sumber
Kerja bagus! Sintaks tuple yang lebih pendek: 149 byte
movatica
1
@movatica Ooh, bagus. Terima kasih!
HyperNeutrino
"Itu bukan rusa kutubku, telinganya terlalu bergelombang." - Membutuhkan sesuatu untuk beralih antara apa adanya.
John Hunt
1
@ JohnHunt aturan mengatakan untuk mengabaikan bentuk jamak.
HyperNeutrino
Kesalahanku. Ini v.impresif
John Hunt
8

Arang , 72 byte

≔‽θθF⁵«That's not my θ, its ‽η is too ‽ζ.⸿»That's my θ! Its ‽η is so ‽ζ.

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Mengharapkan array hal, bagian, dan properti berada dalam variabelθ , ηdan ζ, yang paling mudah diatur dengan menyediakannya dalam input daripada header. Penjelasan:

≔‽θθ

Pilih hal yang acak.

F⁵«That's not my θ, its ‽η is too ‽ζ.⸿»

Cetak lima kalimat negatif.

That's my θ! Its ‽η is so ‽ζ.

Cetak kalimat positifnya.

Neil
sumber
6

Japt v2.0a0 -R, 73 byte

ö
6Æ`Tt's {`not `pT=Y<5}my {+`!,`gT} {73dT*H}ts {Vö}  {`tÑ?`ë2!T} {Wö}.

Mengambil tiga daftar sebagai U,V , dan W. Itu adalah variabel input default, jadi cukup letakkan ketiga daftar di bagian input.

Cobalah

ö                         Saves the random object in variable U
6Æ                        Range [0..6), and map each to the following string
`That's                   The string "That's " plus
{`not `pT=Y<5}            "not " if the index is less than 5 (and store that in variable T), else ""
my                        Literal "my " plus
{+`!,`gT}                 U plus ',' if T, else '!'
{73dT*H}ts                "its " if T, else "Its "
{Vö}                      Random item from V
is                         
{`tsooo`ë2!T}             "too" if T, else "so"
{Wö}.                     Random item from V, plus a period
Perwujudan Ketidaktahuan
sumber
Trik yang sangat bagus dengan "terlalu / begitu" :)
Shaggy
6

PowerShell , 147 byte

Program utama ini tidak akan mengulangi bagian atau properti apa pun dalam proses, dan memiliki pengacakan yang masuk akal.

$t=$l|Random
$a=$a|Random -c 6
$r=$r|Random -c 6
0..4|%{"That's not my $t, its $($a[$_]) is too "+$r[$_]}
"That's my $t! Its $($a[5]) is so "+$r[5]

Cobalah online!

Menulis get-randomberkali-kali membutuhkan banyak karakter! Namun, kecuali Anda mau membiarkan bagian dan properti diulang, saya tidak bisa melihat cara untuk mengecilkan ini di PowerShell lebih jauh. Kecuali Anda memindahkan 3 pipa baris pertama ke ujung 3 garis penugasan di header. Untuk memiliki sesuatu seperti

# Header
$l = ("dinosaur", "lamb", "princess", "reindeer", "train")|Get-Random
$a = ("back", "bells", "body", "bows", "crown", "dress", "ears",
  "engine", "fan", "flippers", "funnel", "hooves", "horns", "neck",
  "nose", "roof", "sash", "side", "spines", "spots", "tail", "teeth",
  "tiara", "wheels", "windows")|sort{Get-Random}
$r = ("bumpy", "fluffy", "furry", "fuzzy", "glittery", "glossy",
  "hairy", "red", "rough", "rusty", "shiny", "silky", "slippery", 
  "soft", "sparkly", "squashy", "thick", "velvety", "woolly")|sort{Get-Random}

# Main
(1..5)|%{echo("That's not my $t, its "+$a[$_]+" is too "+$r[$_])}
"That's my $t! Its "+$a[6]+" is so "+$r[6]

Tapi sepertinya itu curang, dan masih belum mengalahkan jawaban Neil.

Sunting: Terima kasih atas tipnya Matt, dan terima kasih AdmBorkBork untuk menyempurnakannya, menghapus 3 set get-teks, menguranginya menjadi 159 byte, kemudian beberapa lagi golf dari Adm turun menjadi 147. Kode yang saya pikirkan memungkinkan duplikat dan pernyataan kontradiktif adalah 144 karakter setelah menerapkan kiat golf yang sama.

function n{(random 18)+1}
$t=$l[(n)%5]
0..4|%{"That's not my $t, its $($a[(n)]) is too "+$r[(n)]}
"That's my $t! Its $($a[$(n)]) is so "+$r[(n)]

Cobalah online!

Namun, tidak hanya memiliki kecenderungan untuk mengatakan hal yang sama beberapa kali, tetapi cukup banyak mengharuskan input Anda menjadi jumlah elemen yang sama. Saya percaya generator angka acak semu yang digunakan sangat tergantung pada jam, dan panggilan berulang yang cepat sering dapat menghasilkan hasil yang sama. Maka ia memiliki syarat bahwa ia hanya menggunakan seluruh daftar jika semua daftar memiliki panjang yang sama. Dengan hanya menyimpan 3 ~ 5 karakter dan memiliki begitu banyak peringatan, saya lebih suka kode pada awal posting ini.

BeowulfNode42
sumber
1
Selamat datang di PPCG! Bagian dan properti dapat diulang sehingga akan menghemat beberapa byte.
Shaggy
2
Anda dapat menjatuhkan Get-dari Get-Random. Ini kata kerja default yang diuji saat mengevaluasi perintah.
Matt
2
Selamat datang! Beberapa golf mudah membuat Anda turun hingga 147 byte
AdmBorkBork
4

Jelly , 72 byte

XWWẋ6;X€}⁶pʋ€s5“ʠĖµʋb⁵J¥\¢wBD®-Ƥd(CḤ!²kT“Ø!1ẆÑ⁹ṁṾƤṛḄėÄṂMƓṾṖ¿O*½»Ỵ€¤żⱮ"ẎY

Cobalah online!

Erik the Outgolfer
sumber
2

JavaScript, 129

(a,b,c)=>(z='',a.forEach((f,i)=>z+=`That's ${q=i!=5?"not ":""}my ${f}${q?", i":"! I"}ts ${b[i]} is ${q?"to":"s"}o ${c[i]}.\n`),z)

input adalah tiga array, mengembalikan string

vityavv
sumber
2

Ruby , 128 byte

->a,*l{t=a.sample;6.times{|i|puts"That's#{' not'if i<5} my #{t}#{i<5?', i':'! I'}ts %s is #{i<5?'to':?s}o %s."%l.map(&:sample)}}

Cobalah online!

Nilai Tinta
sumber
2

C # , 204 203 byte

()=>{int a(int x)=>new Random().Next(x);var j=t[a(5)];string s()=>$"That's not my {j}, its {p[a(25)]} is too {o[a(19)]}.\n";return s()+s()+s()+s()+s()+$"That's my {j}! Its {p[a(25)]} is so {o[a(19)]}.";};

Ini adalah jawaban pertama saya di situs ini, jadi saya harap ini berfungsi dengan baik. Itu juga membutuhkan ketiga hal itu, tetapi menurut pertanyaan itu tidak masuk hitungan:

   var t = new[] { "dinosaur", "lamb", "princess", "reindeer", "train" };
   var p = new[] {"back", "bells", "body", "bows", "crown", "dress", "ears",
          "engine", "fan", "flippers", "funnel", "hooves", "horns", "neck",
          "nose", "roof", "sash", "side", "spines", "spots", "tail", "teeth",
          "tiara", "wheels", "windows" };
   var o = new[] {"bumpy", "fluffy", "furry", "fuzzy", "glittery", "glossy",
          "hairy", "red", "rough", "rusty", "shiny", "silky", "slippery",
          "soft", "sparkly", "squashy", "thick", "velvety", "woolly"};

Cobalah online!

Satu byte lebih sedikit berkat Sok.

Paweł Mach
sumber
1
Selamat datang di PPCG! Saya telah mengambil kebebasan mengedit tautan ke TIO ke dalam jawaban Anda, sehingga orang lain dapat dengan mudah mencoba kode Anda sendiri - Saya akan memberi Anda tautan ke sana dalam komentar ini, tetapi sayangnya URI terlalu lama! Saya harap Anda menikmati masa tinggal Anda: o)
Sok
1
Satu golf kecil untuk Anda juga - \rtidak diperlukan, yang akan menghemat 2 byte.
Sok
1

APL (Dyalog Unicode) , 117 byte SBCS

↑('That''s not my ',(tT⊃⍨?5),', its ')∘,¨P[5?25],¨' is too '∘,¨V[5?19]
'That''s my ',t,'! Its',P[?25],'is so',V[?19]

Cobalah online!

?N menghasilkan indeks acak di antara indeks N pertama.

M?N menghasilkan indeks acak M (tanpa penggantian) di antara indeks N pertama.

, adalah gabungan

t←T⊃⍨... mengambil sesuatu yang acak dan menyebutnya tuntuk digunakan kembali di baris terakhir.

∘,¨ menyatukan string di sebelah kiri untuk setiap string di sebelah kanan.

menyatukan setiap string di sebelah kiri ke setiap string di sebelah kanan.

 mengubah daftar string menjadi matriks karakter sehingga tercetak dengan benar.

Adm
sumber
1

Pyth , 88 78 76 byte

JONj_ms.ic"That's
 my 

ts 
 is 
o 
."b[?d" not"kJ?d", i""! I"OG?d\s"to"OH)6

Cobalah online!

Kode yang disajikan di atas memerlukan tajuk berikut:

=N["dinosaur""lamb""princess""reindeer""train")=G["back""bells""body""bows""crown""dress""ears""engine""fan""flippers""funnel""hooves""horns""neck""nose""roof""sash""side""spines""spots""tail""teeth""tiara""wheels""windows")=H["bumpy""fluffy""furry""fuzzy""glittery""glossy""hairy""red""rough""rusty""shiny""silky""slippery""soft""sparkly""squashy""thick""velvety""woolly")

Ada masalah kecil dengan menggunakan fitur 'Header' di TIO dengan Pyth, karena sepertinya TIO bergabung dengan blok kode pada baris baru, dan baris baru signifikan di Pyth. Berikut ini tautannya ke kode yang sama menggunakan blok 'Header', dengan garis sampah di output.

JONj_ms.ic"That's¶ my ¶¶ts ¶ is ¶o ¶."b[?d" not"kJ?d", i""! I"OG?d"to"\sOH)6   Newlines replaced with ¶
                                                                               Implicit: k="", b=newline
                                                                               From header: N=things, G=parts, H=properties
JON                                                                            Choose a random element from N, store in J
     m                                                                     6   Map [0-6), as d, using:
                                        ?d" not"k                                If d is truthy (i.e. not 0), yield " not", else ""
                                                 J                               J (the chosen thing)
                                                  ?d", i""! I"                   ", i" if d else "! I"
                                                              OG                 Random element from G
                                                                ?d"to"\s         "to" if d else "s"
                                                                        OH       Random element from H
                                       [                                  )      Wrap the previous 6 results in an array
         c"That's¶ my ¶¶ts ¶ is ¶o ¶."b                                          Split the template string on newlines
       .i                                                                        Interleave the template string elements with the previous list
      s                                                                          Concatenate
    _                                                                          Reverse lines
   j                                                                           Join on newlines, implicit print

Sunting: Tulis ulang ke golf 10 byte, versi sebelumnya: J+" my "ONV5%"That's not%s, its %s is too %s."[JOGOH;%"That's%s! Its %s is so %s."[JOGOH

Sok
sumber
1

Perl 5.10, 127 byte

Jalankan dengan perl -M5.010 -f filename.pl.

my @t = qw(dinosaur lamb princess reindeer train);
my @r = qw(back bells body bows crown dress ears engine fan flippers funnel
           hooves horns neck nose roof sash side spines spots tail teeth tiara
           wheels windows);
my @p = qw(bumpy fluffy furry fuzzy glittery glossy hairy red rough rusty shiny
           silky slippery soft sparkly squashy thick velvety woolly);

sub r{rand@_}$a=" my $t[r@t]";say"That's not$a, its $r[r@r] is too $p[r@p]."for(1..5);say"That's$a! Its $r[r@r] is so $p[r@p]."
Silvio Mayolo
sumber
1

JavaScript ES6, 149 (+15?) Byte

a = ["dinosaur", "lamb", "princess", "reindeer", "train"]
b = ["back", "bells", "body", "bows", "crown", "dress", "ears",
  "engine", "fan", "flippers", "funnel", "hooves", "horns", "neck",
  "nose", "roof", "sash", "side", "spines", "spots", "tail", "teeth",
  "tiara", "wheels", "windows"]
c = ["bumpy", "fluffy", "furry", "fuzzy", "glittery", "glossy",
  "hairy", "red", "rough", "rusty", "shiny", "silky", "slippery", 
  "soft", "sparkly", "squashy", "thick", "velvety", "woolly"]

// r=x=>x[parseInt(Math.random()*x.length)] 164 for better random on fast pc

r=x=>x[new Date%x.length]
s=r(a)
g=j=>console.log(`That's ${j?`not my ${s}, its ${r(b)} is to`:`my ${s}! Its ${r(b)} is s`}o ${r(c)}.`)
a.map(g) 
g()

Onitz
sumber
Selamat datang di Golf Code! Kerja bagus!
AJFaraday
1
Terima kasih AJ! Menghargai sambutan :)
Onitz
1

File Batch, 434 424 + 7 byte

Dieksekusi melalui cmd/q/c.

Kode tidak dihitung

set a=dinosaur lamb princess reindeer train
set b=back bells body bows crown dress ears engine fan flippers funnel hoobes horns neck nose roof sash side spines spots tail teeth tiara wheels windows
set c=bumpy fluffy furry fizzy glittery glossy hair red rough rusty shiny silky slippery soft sparkly squashy thick velvety woolly

Kode dihitung

set q=random
set m=set/ar=1+%%%q%%%%%%%
call %m%5
for /f "tokens=%r%" %%x in ("%a%")do set x=%%x
:a
set/ad+=1
call %m%25
for /f "tokens=%r%" %%y in ("%b%")do set y=%%y
call %m%19
for /f "tokens=%r%" %%z in ("%c%")do echo That's not my %x%, its %y% is too %%z.
if %d% neq 5 goto a
call %m%25
for /f "tokens=%r%" %%y in ("%b%")do set y=%%y
call %m%19
for /f "tokens=%r%" %%z in ("%c%")do echo That's my %x%! Its %y% is so %%z.

Saya akan melewati beberapa tantangan yang harus Anda hadapi dan menjelaskan / membenarkan apa yang saya lakukan agar orang lain dapat meningkat.

Pilih elemen acak dari array yang
saya lakukan ini dengan menghasilkan angka acak antara 1dan di nmana njumlah elemen dalam array itu. Saya kemudian menggunakan nomor acak ini sebagai token untuk meraih di setiap forloop ( tokens=%r%). Karena saya melakukannya dengan cara ini, saya tidak bisa membuat sarang ini forlagi, karena tokens=!r!tidak berfungsi untuk saya (dengan ekspansi yang tertunda). Ini akan menyimpan beberapa byte karena akan menghapus kebutuhan untuk menyimpan token sebagai variabel (set x=%%x ).

Pembuatan angka acak
m adalah makro pembuatan angka acak saya. Melakukannya dengan cara ini menghemat 32 byte daripada melakukannya seperti set/ar=%random%%%n+1setiap baris. Anda bisa semi-cheat dan memutuskan token itu ydan zharus menjadi elemen yang sama:

call %m%19
for /f "tokens=%r%" %%y in ("%b%")do set y=%%y
for /f "tokens=%r%" %%z in ("%c%")do echo That's not my %x%, its %y% is too %%z.

Ini akan, sementara masih mempertahankan beberapa keacakan, mengecualikan 6 elemen terakhir dari c . Ini akan menghemat minimal 20 byte, tetapi saya tidak berpikir ini benar untuk persyaratan op.

Perbaikan Teoritis
Saya menghabiskan cukup banyak waktu untuk mencoba membuat "pseudo-code" ini bekerja, sambil tetap menghemat byte:

set 1-5=echo That's not my %x%, its %y% is too %%z.
set 6=echo That's my %x%! Its %y% is so %%z.
...
set/ad+=1
for /f "tokens=%r%" %%z in ("%c%")do call %%d%%

Sayangnya setup untuk ini terbukti mengambil terlalu banyak byte untuk dapat diuntungkan (harus diimplementasikan dalam <144 bytes) tetapi saya tidak dapat menghilangkan perasaan bahwa menambahkan 4 baris terakhir dari kode adalah berlebihan dan janky.

BDM
sumber
Anda tidak diizinkan mengambil input melalui variabel yang telah ditentukan sebelumnya. Anda harus menerimanya sebagai input aktual melalui salah satu metode IO standar
Jo King
1
@JoKing Dari tantangan:The lists of source words are not part of your answer (in TIO they can be added to the header).
AdmBorkBork
Saya tidak yakin apakah itu diizinkan atau tidak karena saya telah melihatnya melakukan dua cara dalam jawaban lain, tetapi bagi Anda yang penasaran itu akan menambah 29 byte jawaban saya dalam bentuk set a=%~1, dll.
BDM
1

tinta , 119 byte

~a=LIST_RANDOM(a)
-(l)That's{l<6: not} my {a}{l<6:, i|! I}ts {LIST_RANDOM(b)} is {l<6:to|s}o {LIST_RANDOM(c)}
{l<6:->l}

Dengan daftar yang didefinisikan sebagai

LIST a=(dinosaur),(lamb),(princess),(reindeer),(train)
LIST b=(back),(bells),(body),(bows),(crown),(dress),(ears),(engine),(fan),(flippers),(funnel),(hooves),(horns),(neck),(nose),(roof),(sash),(side),(spines),(spots),(tail),(teeth),(tiara),(wheels),(windows)
LIST c=(bumpy),(fluffy),(furry),(fuzzy),(glittery),(glossy),(hairy),(red),(rough),(rusty),(shiny),(silky),(slippery),(soft),(sparkly),(squashy),(thick),(velvety),(woolly)

Cobalah online!


Meskipun tergantung pada apa yang dianggap sebagai daftar, ada pendekatan lain. Jika daftar bisa menjadi fungsi yang secara acak mengembalikan item daftar, pendekatan berikut ini hanya 91 byte:

~temp t=u()
-(l)That's{l<6: not} my {t}{l<6:, i|! I}ts {p()} is {l<6:to|s}o {q()}
{l<6:->l}

(dengan "daftar" didefinisikan sebagai berikut)

==function u
~return "{~dinosaur|lamb|princess|reindeer|train}"
==function p
~return "{~back|bells|body|bows|crown|dress|ears|engine|fan|flippers|funnel|hooves|horns|neck|nose|roof|sash|side|spines|spots|tail|teeth|tiara|wheels|windows}"
==function q
~return " {~bumpy|fluffy|furry|fuzzy|glittery|glossy|hairy|red|rough|rusty|shiny|silky|slippery|soft|sparkly|squashy|thick|velvety|woolly}."

Cobalah online!


Ada juga pendekatan berikut.

~temp t="{~dinosaur|lamb|princess|reindeer|train}"
-(l)That's{l<6: not} my {t}{l<6:, i|! I}ts {~back|bells|body|bows|crown|dress|ears|engine|fan|flippers|funnel|hooves|horns|neck|nose|roof|sash|side|spines|spots|tail|teeth|tiara|wheels|windows} is {l<6:to|s}o {~bumpy|fluffy|furry|fuzzy|glittery|glossy|hairy|red|rough|rusty|shiny|silky|slippery|soft|sparkly|squashy|thick|velvety|woolly}
{l<6:->l}

Cobalah online!

Solusi ini adalah 389 byte, tetapi jika shuffle literals (yang dalam skenario ini tidak dapat dipindahkan) dihitung sebagai definisi daftar dan dapat dikecualikan dari jumlah byte, ini turun menjadi 80 byte.

Sara J
sumber
0

Bash + awk, 209 byte

T=$(shuf $1|head -1)
join <(sed "s/.*/$T\t&/" $2) <(sed "s/.*/$T\t&/" $3)|shuf|awk 'NR<6{printf "That'\''s not my %s, its %s is too %s.\n",$1,$2,$3}NR==6{printf "That'\''s my %s! Its %s is so %s.\n",$1,$2,$3}'

Cobalah online!

Menerima input sebagai things parts properties setiap file dengan satu item per baris dari tipe yang diinginkan.

Ini adalah pendekatan yang berpusat pada file. Dapat mencoba pendekatan yang berpusat pada array nanti untuk melihat apakah itu dapat ditingkatkan.

LambdaBeta
sumber
-2

Python 3, 130 byte

Mengambil persyaratan Anda secara harfiah, dan mengambil carriage return menjadi masing-masing satu byte:

y=0
def x():
    global y
    y=1-y 
    print(("That's not my lamb, it's "+b[0:1][y]+" is too red\n")*5+"That's my lamb! Its fan is so red")
Akumulasi
sumber
"Itu tidak boleh mereproduksi teks yang sama secara konsisten." Dari apa yang saya tahu, kode Anda akan selalu bergantian antara satu dari dua opsi, yang sepertinya merupakan keluaran yang konsisten bagi saya. Juga, kasus ini selalu menggunakan properti yang sama pada setiap baris telah secara eksplisit dilarang dalam klarifikasi komentar.
Value Ink