นั่นไม่ใช่ X ของฉันมันคือ Y เกินไป Z


17

ความท้าทายนี้ได้รับแรงบันดาลใจจากหนังสือเด็กชุดหนึ่งโดย Fiona Watt และ Rachel Wells ซึ่งฉันเพิ่งสนุกกับลูกสาวของฉัน

ในหนังสือแต่ละเล่มหนู (ภาพประกอบ แต่ไม่ได้เป็นส่วนหนึ่งของข้อความ) บ่นว่าการสืบเนื่องของ 5 สิ่งประเภทเดียวกันไม่ใช่สิ่งที่มัน จากนั้นสำรองข้อมูลนี้โดยการประกาศว่าองค์ประกอบบางอย่างของสิ่งนี้ไม่มีคุณสมบัติที่คาดหวัง

ในครั้งที่หกของการถามเมาส์พบสิ่งและยินดีเพราะมันมีคุณสมบัติที่คาดหวัง

นี่คือข้อความตัวอย่างทั่วไป:

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.

ตอนนี้การเขียนโปรแกรมพื้นบ้านส่วนใหญ่จะรู้ว่านี่เป็นวิธีการอัลกอริทึมในการผลิตข้อความบางส่วน เนื่องจากเป็นกระบวนการที่ชัดเจนเราควรสามารถทำซ้ำได้โดยการเขียนโค้ด

มาเริ่มด้วยคำสามชุด:

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"]
  • ก่อนอื่นเราตัดสินใจว่าเราจะอธิบายเรื่องแบบไหน
  • จากนั้น 5 ครั้งเราจะสร้างบรรทัด "นั่นไม่ใช่ [สิ่งของ] ของฉัน [ส่วน] มันเกินไป [คุณสมบัติ]
  • ในที่สุดเราก็สร้างบรรทัด "นั่นคือสิ่งที่ฉัน [!] มัน [ส่วน] มันเป็น [คุณสมบัติ]!

ความท้าทาย

  • สร้างเนื้อหาของเรื่องราว "นั่นไม่ใช่ของฉัน ... "
  • ต้องไม่ทำซ้ำข้อความเดิมอย่างสม่ำเสมอ
  • มันเป็นรหัสกอล์ฟดังนั้นพยายามทำในจำนวนไบต์ที่น้อยที่สุด
  • ใช้ภาษาใดก็ได้ที่คุณต้องการ
  • พื้นที่สีขาวไม่สำคัญ แต่ต้องมีอักขระขึ้นบรรทัดใหม่ระหว่างบรรทัด
  • รายการคำที่มาไม่ได้เป็นส่วนหนึ่งของคำตอบของคุณ (ใน TIO พวกเขาสามารถเพิ่มไปยังส่วนหัว)
  • คุณสามารถเปลี่ยนชื่อรายการของคำต้นฉบับ
  • เอาต์พุตสามารถส่งออกไปยังเทอร์มินัลหรือข้อความที่สร้างเป็นวัตถุ
  • โปรดใส่ลิงค์ไปยังล่ามออนไลน์
  • ไม่สนใจคำพหูพจน์ "เขาของมันคือ" ไม่เป็นไร
  • ไม่จำเป็นต้องสมเหตุสมผล หากช่องทางของเจ้าหญิงของคุณอ่อนนุ่มเกินไป

ตัวอย่างผลลัพธ์:

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.

มีความสุขในการเล่นกอล์ฟ!


2
@Shaggy ตัวอย่างแรกคือข้อความจริงของหนังสือเล่มใดเล่มหนึ่ง มันไม่ใช่คำตอบที่ถูกต้องสำหรับความท้าทายนี้ ฉันบอกว่าจะไม่สนใจคำพหูพจน์เพื่อลดความท้าทายเล็กน้อย ตัวอย่างนั้นเป็นข้อมูลพื้นฐาน
AJFaraday


10
คุณระบุว่า "มันไม่จำเป็นต้องสมเหตุสมผล" นั่นขยายไปถึงการหดตัวหรือไม่? (นั่นคือ "นั่นไม่ใช่กระต่ายของฉันดวงตาของมันแวววาวเกินไป ... นั่นคือกระต่ายของฉัน! ดวงตาของมันเปล่งประกายมาก ๆ " เป็นที่ยอมรับได้ในฐานะเอาท์พุทที่เป็นไปได้หรือไม่) - ฉันเดาว่า
Jonathan Allan

13
ไม่ใช่ "มันจะต้องไม่ทำซ้ำข้อความเดิม" และความซับซ้อนของkolmogorov ที่เข้ากันไม่ได้ใช่ไหม
Joseph Sible-Reinstate Monica

2
@ChrisH นั่นคือข้อผิดพลาดทางภาษีของฉัน แม้ว่าทั้งคู่จะจัดว่าเป็น Glires แต่นั่นเป็นสิ่งที่ฉันได้เรียนรู้ในวันนี้
AJFaraday

คำตอบ:


1

05AB1E , 63 ไบต์

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

ลองออนไลน์

รุ่น68 ไบต์ซึ่งไม่ส่งออกส่วนที่ซ้ำกันหรือคุณสมบัติ:

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

ลองออนไลน์

ทั้งสองโปรแกรมถือว่ารายการของสิ่งต่าง ๆ เป็นอินพุตแรกและรายการที่มีรายการของชิ้นส่วนและรายการคุณสมบัติเป็นอินพุตที่สอง

คำอธิบาย:

Ω            # 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

ดู 05AB1E เคล็ดลับของฉัน (ส่วนวิธีการใช้พจนานุกรม? )เพื่อทำความเข้าใจว่าเพราะ“€Š's€¯ ÿ!€ç ÿ€ˆ€Ê ÿ.“อะไร"that's my ÿ! its ÿ is so ÿ."และ“€Š's€–€¯ ÿ,€ç ÿ€ˆ…« ÿ.“เป็น"that's not my ÿ, its ÿ is too ÿ."อย่างไร


10

Python 3 , 149 ไบต์

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*

ลองออนไลน์!

-9 ไบต์ขอบคุณ movatica


เยี่ยมมาก! ไวยากรณ์ของ tuple ที่สั้นกว่า: 149 ไบต์
movatica

1
@movatica Ooh ดี ขอบคุณ!
HyperNeutrino

“ นั่นไม่ใช่กวางเรนเดียร์ของฉันหูของมันมันกระแทกเกินไป” - ต้องการบางสิ่งบางอย่างเพื่อสลับไปมาระหว่าง / เป็น
John Hunt

1
@JohnHunt กฎบอกว่าไม่สนใจคำพหูพจน์
HyperNeutrino

ความผิดพลาดของฉัน. นี่คือ v.impressive
John Hunt

8

ถ่าน 72 ไบต์

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

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คาดว่าอาร์เรย์ของสิ่งที่ชิ้นส่วนและคุณสมบัติที่จะอยู่ในตัวแปรθ, ηและζซึ่งเป็นส่วนใหญ่จัดได้อย่างง่ายดายโดยการให้พวกเขาในการป้อนข้อมูลมากกว่าส่วนหัว คำอธิบาย:

≔‽θθ

เลือกสิ่งที่สุ่ม

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

พิมพ์ประโยคเชิงลบห้าประโยค

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

พิมพ์ประโยคบวก


6

Japt v2.0a0 -R, 73 ไบต์

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

ใช้เวลาสามรายการเป็นU, และV Wนี่คือตัวแปรอินพุตเริ่มต้นอย่างไรก็ตามโปรดใส่สามรายการในส่วนอินพุต

ลองมัน

ö                         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

กลลวงที่ดีมากกับ "too / so" :)
Shaggy

6

PowerShell , 147 ไบต์

โปรแกรมหลักนี้จะไม่ทำซ้ำส่วนใด ๆ หรือทรัพย์สินในการทำงานและมีการสุ่มที่เหมาะสม

$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]

ลองออนไลน์!

การเขียนget-randomหลายครั้งมีค่าใช้จ่ายหลายตัวละคร! อย่างไรก็ตามถ้าคุณไม่ยอมให้มีการทำซ้ำชิ้นส่วนและคุณสมบัติฉันไม่สามารถมองเห็นวิธีที่จะย่อขนาดลงใน powershell ได้อีก ยกเว้นว่าคุณจะย้ายไพพ์ 3 เส้นแรกไปยังจุดสิ้นสุดของ 3 ไลน์ที่กำหนดในส่วนหัว ที่จะมีสิ่งที่ชอบ

# 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]

แต่นั่นดูเหมือนว่ามันเป็นการโกงและยังไม่เอาชนะคำตอบของนีล

แก้ไข: ขอบคุณสำหรับเคล็ดลับแมตต์และขอบคุณ AdmBorkBork สำหรับการดึงget-ข้อความออกการลบข้อความทั้งสามชุดลดลงเหลือ 159 ไบต์จากนั้นก็มีสนามกอล์ฟอีกจำนวนหนึ่งจาก Adm ลงมาเป็น 147 รหัสที่ฉันคิดว่าอนุญาตให้ซ้ำกันได้ ข้อความที่ขัดแย้งกันคือ144 ตัวอักษรหลังจากใช้เคล็ดลับกอล์ฟเดียวกัน

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)]

ลองออนไลน์!

อย่างไรก็ตามมันไม่เพียง แต่มีแนวโน้มที่จะพูดในสิ่งเดียวกันหลาย ๆ ครั้ง แต่มันค่อนข้างจำเป็นต้องให้อินพุตของคุณมีจำนวนองค์ประกอบเท่ากัน ฉันเชื่อว่าตัวสร้างตัวเลขสุ่มหลอกที่ใช้นั้นขึ้นอยู่กับนาฬิกาอย่างมากและการโทรซ้ำ ๆ อย่างรวดเร็วบ่อยครั้งอาจส่งผลให้เกิดผลลัพธ์เดียวกัน จากนั้นก็มีเงื่อนไขว่าจะใช้เพียงรายการทั้งหมดหากรายการทั้งหมดมีความยาวเท่ากันโดยมีการบันทึกอักขระ 3 ~ 5 ตัวและมีคำเตือนมากมายฉันชอบรหัสตอนเริ่มโพสต์นี้


1
ยินดีต้อนรับสู่ PPCG! ชิ้นส่วนและคุณสมบัติสามารถทำซ้ำได้ดังนั้นควรช่วยคุณประหยัดไบท์ได้
Shaggy

2
คุณสามารถวางจากGet- Get-Randomมันเป็นคำกริยาเริ่มต้นทดสอบเมื่อประเมินคำสั่ง
Matt

2
ยินดีต้อนรับ! สนามกอล์ฟที่ง่ายบางแห่งทำให้คุณลดลงถึง147 ไบต์
AdmBorkBork


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)

อินพุตเป็นสามอาร์เรย์ส่งคืนสตริง



2

C # , 204 203 ไบต์

()=>{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)]}.";};

มันเป็นคำตอบแรกของฉันในเว็บไซต์นี้ดังนั้นฉันหวังว่ามันจะทำงานได้ดี มันต้องการสามสิ่งเหล่านั้นด้วย แต่ตามคำถามที่ไม่นับ:

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

ลองออนไลน์!

หนึ่งไบต์ต้องขอบคุณสก


1
ยินดีต้อนรับสู่ PPCG! ฉันได้นำเสรีภาพในการแก้ไขในลิงก์ไปยังTIOเป็นคำตอบของคุณเพื่อให้ผู้อื่นสามารถลองใช้โค้ดของคุณได้อย่างง่ายดาย - ฉันจะให้ลิงก์ไปยังคุณในความคิดเห็นนี้ แต่ URI นั้นน่าเสียดายมากเกินไป! ฉันหวังว่าคุณจะสนุกกับการเข้าพักของคุณ: o)
Sok

1
หนึ่งสนามกอล์ฟขนาดเล็กสำหรับคุณเช่นกัน - \rไม่จำเป็นต้องใช้ซึ่งจะช่วยให้คุณประหยัด 2 ไบต์
Sok

1

APL (Dyalog Unicode) , 117 ไบต์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]

ลองออนไลน์!

?N สร้างดัชนีแบบสุ่มระหว่างดัชนี N แรก

M?N สร้างดัชนีสุ่ม M (โดยไม่มีการแทนที่) ระหว่างดัชนี N แรก

, เรียงต่อกันคือ

t←T⊃⍨... เลือกสุ่มและเรียกมันtเพื่อนำมาใช้ใหม่ในบรรทัดสุดท้าย

∘,¨ ต่อสตริงด้านซ้ายเข้ากับแต่ละสตริงทางด้านขวา

เชื่อมแต่ละสตริงทางด้านซ้ายกับแต่ละสตริงทางด้านขวา

 เปลี่ยนรายการของสตริงเป็นเมทริกซ์อักขระเพื่อให้พิมพ์ได้ถูกต้อง


1

Pyth , 88 78 76 ไบต์

JONj_ms.ic"That's
 my 

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

ลองออนไลน์!

รหัสที่แสดงด้านบนต้องใช้ส่วนหัวต่อไปนี้:

=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")

มีปัญหาเล็กน้อยเกี่ยวกับการใช้คุณลักษณะ 'ส่วนหัว' ใน TIO กับ Pyth เนื่องจากดูเหมือนว่า TIO จะเข้าร่วมบล็อคโค้ดในการขึ้นบรรทัดใหม่และการขึ้นบรรทัดใหม่มีความสำคัญใน Pyth นี่คือลิงค์ไปยังรหัสเดียวกันโดยใช้บล็อก 'ส่วนหัว' โดยมีบรรทัดขยะในเอาต์พุต

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

แก้ไข: เขียนซ้ำเป็นกอล์ฟ 10 ไบต์รุ่นก่อนหน้า: J+" my "ONV5%"That's not%s, its %s is too %s."[JOGOH;%"That's%s! Its %s is so %s."[JOGOH


1

Perl 5.10, 127 bytes

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]."

1

JavaScript ES6, 149 (+15?) ไบต์

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()


ยินดีต้อนรับสู่ Code Golf! การทำงานที่ดี!
AJFaraday

1
ขอบคุณ AJ! ขอบคุณการต้อนรับ :)
Onitz

1

ไฟล์ชุด, 434 424 + 7 ไบต์

ดำเนินการผ่าน cmd/q/cดำเนินการผ่าน

ไม่นับรหัส

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

รหัสนับ

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.

ฉันจะผ่านความท้าทายที่คุณต้องเผชิญและอธิบาย / พิสูจน์สิ่งที่ฉันทำเพื่อให้ผู้อื่นสามารถปรับปรุงได้

เลือกองค์ประกอบแบบสุ่มจากอาร์เรย์ที่
ฉันทำโดยสร้างตัวเลขสุ่มระหว่าง1และnที่ไหนnคือจำนวนองค์ประกอบในอาร์เรย์นั้น ฉันใช้หมายเลขสุ่มนี้เป็นโทเค็นเพื่อจับในแต่ละforลูป ( tokens=%r%) เพราะฉันทำอย่างนี้ฉันไม่สามารถทำซ้ำforลูปเหล่านี้ได้อีกต่อไปเนื่องจากtokens=!r!ไม่ทำงานสำหรับฉัน (ด้วยการขยายเวลาล่าช้า) สิ่งนี้จะได้รับการบันทึกไว้ไม่กี่ไบต์เนื่องจากมันได้ลบความจำเป็นในการบันทึกโทเค็นเป็นตัวแปร (set x=%%x )

การสร้างตัวเลขสุ่ม
mคือมาโครการสร้างตัวเลขสุ่มของฉัน การทำเช่นนี้จะช่วยประหยัด 32 ไบต์ในการทำเหมือนset/ar=%random%%%n+1ทุกบรรทัด คุณสามารถกึ่งโกงและตัดสินใจโทเค็นนั้นyและzเป็นองค์ประกอบเดียวกัน:

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.

สิ่งนี้จะทำอย่างไรในขณะที่ยังคงมีการสุ่มเลือกอยู่ให้ยกเว้นองค์ประกอบ 6 ประการสุดท้ายของ cองค์ประกอบของ สิ่งนี้จะประหยัดขั้นต่ำ 20 ไบต์ แต่ฉันไม่คิดว่านี่เป็นความจริงตามข้อกำหนดของ op

การปรับปรุงเชิงทฤษฎี
ฉันใช้เวลาสักพักขณะพยายามทำให้ "หลอกรหัส" นี้ทำงานในขณะที่ยังคงบันทึกไบต์:

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%%

น่าเสียดายที่การติดตั้งสำหรับสิ่งนี้พิสูจน์ให้เห็นว่าการทำกำไรมากเกินไปต้องใช้ไบต์ (ต้องนำไปใช้ใน <144 ไบต์) แต่ฉันไม่สามารถสั่นคลอนความรู้สึกว่าการเพิ่มรหัส 4 บรรทัดสุดท้ายนั้นไม่จำเป็นและไม่แน่นอน


คุณไม่ได้รับอนุญาตให้รับอินพุตผ่านตัวแปรที่กำหนดไว้ล่วงหน้า คุณจะต้องใช้มันเป็นข้อมูลจริงผ่านวิธีการมาตรฐาน IO ใด ๆ
Jo King

1
@JoKing จากความท้าทาย:The lists of source words are not part of your answer (in TIO they can be added to the header).
AdmBorkBork

ฉันไม่แน่ใจว่าได้รับอนุญาตหรือไม่ตามที่ฉันได้เห็นมันทำทั้งสองวิธีในคำตอบอื่น ๆ แต่สำหรับคนที่คุณอยากรู้อยากเห็นมันจะเพิ่ม 29 ไบต์ในคำตอบของฉันในรูปแบบของset a=%~1ฯลฯ
BDM

1

หมึก 119 ไบต์

~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}

ด้วยรายการที่กำหนดเป็น

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)

ลองออนไลน์!


แม้ว่าขึ้นอยู่กับสิ่งที่นับเป็นรายการมีวิธีการอื่น หากรายการสามารถเป็นฟังก์ชันที่สุ่มคืนค่ารายการวิธีการต่อไปนี้มีเพียง 91 ไบต์:

~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}

(ด้วย "รายการ" ที่กำหนดไว้ดังต่อไปนี้)

==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}."

ลองออนไลน์!


นอกจากนี้ยังมีวิธีการดังต่อไปนี้

~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}

ลองออนไลน์!

วิธีการแก้ปัญหานี้คือ 389 ไบต์ แต่ถ้านับตัวอักษรสับเปลี่ยน (ซึ่งในสถานการณ์นี้ไม่สามารถย้ายได้) นับเป็นคำจำกัดความของรายการและสามารถแยกออกจากจำนวนไบต์ได้จะลดลงเหลือ 80 ไบต์


0

Bash + awk 209 ไบต์

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}'

ลองออนไลน์!

ยอมรับอินพุตเป็น things parts propertiesที่ไฟล์แต่ละไฟล์มีหนึ่งรายการต่อบรรทัดประเภทที่ต้องการ

นี่เป็นวิธีที่ให้ไฟล์เป็นศูนย์กลาง อาจลองใช้วิธีการที่มีอาร์เรย์เป็นศูนย์กลางในภายหลังเพื่อดูว่าสามารถปรับปรุงได้หรือไม่


-2

Python 3, 130 ไบต์

รับความต้องการของคุณอย่างแท้จริงและรับคืนค่าขนส่งเป็นหนึ่งไบต์ต่อ:

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")

"มันจะต้องไม่ทำซ้ำข้อความเดิมอย่างสม่ำเสมอ" จากสิ่งที่ฉันสามารถบอกได้รหัสของคุณจะสลับกันระหว่างตัวเลือกหนึ่งในสองตัวเลือกซึ่งดูเหมือนจะเป็นผลลัพธ์ที่สอดคล้องกับฉันเสมอ นอกจากนี้กรณีนี้การใช้คุณสมบัติเดียวกันทุกครั้งในทุกบรรทัดจะไม่ได้รับอนุญาตอย่างชัดเจนในการชี้แจงความคิดเห็น
Value Ink
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.