คำสั่งลูกสุนัข


20

puppyยูทิลิตี้ต้องใช้ชื่อไฟล์เป็น input และไม่ว่าสิ่งที่คุณคาดว่าจะได้ลูกสุนัขที่จะทำมัน shreds มัน!

ลูกสุนัข

วิธีฉีก

  1. ฉีกหน้าด้วยฟันของคุณแยกไฟล์อินพุตในบรรทัดใหม่
  2. ฉีกขึ้นแต่ละหน้ามีอุ้งเท้าของคุณสำหรับแต่ละบรรทัด (ไม่รวมเลื่อนบรรทัด), การเลือกสุ่มจำนวนเต็มดังกล่าวว่าn 2 <= n <= # of characters in the lineแบ่งบรรทัดออกเป็นnสตริงย่อยที่ไม่ทับซ้อนกันซึ่งมีความยาวแบบสุ่ม
  3. กระจายส่วนย่อยของพื้นกระจายเอาต์พุตย่อยแต่ละบรรทัดของแต่ละบรรทัดไปยังชื่อไฟล์สุ่มที่ไม่ซ้ำกัน ( [a-zA-Z0-9]เฉพาะส่วนขยายที่สอดคล้องกันใด ๆ รวมถึงไม่มีความยาว1 <= n <= 12) ในไดเรกทอรีปัจจุบัน เขียนทับไฟล์ที่มีอยู่แล้วภายในไดเรกทอรีปัจจุบัน (รวมถึงไฟล์อินพุตหากอยู่ในไดเรกทอรีปัจจุบัน) ยอมรับได้ตราบใดที่ไฟล์นั้นไม่รบกวนการส่งข้อมูลของคุณ

ชี้แจง

  • จะไม่มีการป้อนข้อมูลที่เป็นไปได้ที่จะใช้ชื่อไฟล์ที่เป็นไปได้ทั้งหมด
  • ไฟล์จะประกอบด้วย ASCII ที่พิมพ์ได้เท่านั้น (ปกติ 32-127) และ linefeeds และจะใช้ปลายบรรทัดสไตล์ UNIX / Linux (LF ไม่ใช่ CRLF สไตล์ Windows)
  • บรรทัดใหม่ต่อท้ายเดียวในไฟล์เอาต์พุตสามารถยอมรับได้ตราบใดที่ไฟล์เอาต์พุตทุกไฟล์มีบรรทัดขึ้นบรรทัดใหม่ แต่ไม่จำเป็น คุณสามารถเลือกว่าจะให้ไฟล์อินพุตมีบรรทัดใหม่ต่อท้ายหรือไม่
  • แต่ละบรรทัดในอินพุตจะมีอักขระอย่างน้อย 2 ตัว
  • ค่าสุ่มที่เลือกจะต้องเลือกจากการกระจายแบบสุ่มที่สม่ำเสมอในชุดของค่าที่เป็นไปได้

Iff ภาษาของคุณไม่สามารถดำเนินการไฟล์ I / O ได้คุณอาจใช้เนื้อหาของไฟล์อินพุตเป็นอินพุตและคู่สตริงออกแทนสตริงชื่อไฟล์เอาต์พุตและข้อความสำหรับไฟล์นั้น อย่างไรก็ตามการส่งของคุณจะไม่มีสิทธิ์ชนะ

ตัวอย่าง

การใช้งานอ้างอิง:

#!/usr/bin/env python3

import random
import string
import sys

fname = sys.argv[1]
with open(fname) as f:
  txt = f.read().rstrip().split('\n')

for line in txt:
  n = random.randint(2, len(line))-1
  idxs = [0]+random.sample(range(1, len(line)), n)+[len(line)]
  idxs.sort()
  splits = []
  for i in range(0, len(idxs)-1):
    splits.append(line[idxs[i]:idxs[i+1]])
  ofnames = []
  for s in splits:
    flen = random.randint(1, 10)
    ofname = ''
    while ofname == '' or ofname in ofnames:
      ofname = ''
      for i in range(flen):
        ofname += random.choice(string.ascii_letters+string.digits)
    ofnames.append(ofname)
    with open(ofname, 'w') as f:
      f.write(s)

ตัวอย่างการเรียกใช้:

$ cat bestsong.txt
Never gonna give you up
Never gonna let you down
Never gonna run around
And desert you!

$ puppy bestsong.txt

$ ls
8675309
a
bestsong.txt
cSdhg
Dq762
jq7t
ret865
rick4life
weu767g
xyzzy

$ cat 8675309
esert you!

$ cat a
Never gonna let you down

$ cat cSdhg
ive y

$ cat Dq762
And d

$ cat jq7t
Never gonna g

$ cat ret865
run arou

$ cat rick4life
Never gonna 

$ cat weu767g
nd

$ cat xyzzy
ou up

ที่เกี่ยวข้อง , ที่เกี่ยวข้อง
แมว

คำตอบ:


3

PowerShell v2 +, 215 211 ไบต์

nal d Get-Random;gc $args[0]|%{$b=d(0..($l=($t=$_).length)) -C(d(2..$l));$b=$b+0+$l|select -u|sort;0..($b.count-2)|%{-join($t[$b[$_]..($b[$_+1]-1)])}}|%{$_>(-join[char[]](d(48..57+65..90+97..122) -c(d(1..12))))}

ต้องการ v2 หรือใหม่กว่าเนื่องจาก v1 ไม่มีGet-Randomให้ใช้งาน
แก้ไข - บันทึกไว้ 4 ไบต์โดยใช้การหล่อแบบอักขระแทนการชี้ขาดตัวอักษรแต่ละตัว

ค่อนข้าง Ungolfed

Get-Content $args[0]|ForEach-Object{
  $t=$_
  $l=$t.length
  $b=Get-Random(0..$l) -Count(Get-Random(2..$l))
  $b=$b+0+$l|Select-Object -unique|Sort-Object
  0..($b.count-2)|ForEach-Object{
    -join($t[$b[$_]..($b[$_+1]-1)])
  }
}|ForEach-Object{
  $_>(-join[char[]](Get-Random(48..57+65..90+97..122) -count(Get-Random(1..12))))
}

คำอธิบาย

เริ่มต้นด้วยการตั้งค่าdเป็นNew-AliasสำหรับGet-Randomเราจึงไม่ต้องพิมพ์ออกมาGet-Randomทุกครั้งที่เรากำลังใช้มัน (มาก) จากนั้นเราGet-Contentของการป้อนข้อมูลของเราและผู้ที่ผ่านท่อวงด้วย$args |%{...}โปรดทราบว่าGet-Contentโดยค่าเริ่มต้นจะแบ่งเป็นบรรทัดใหม่ (ทั้ง CRLF หรือเพียง LF) ดังนั้นเราจึงไม่จำเป็นต้องทำอะไรเพิ่มเติมที่นั่น

ทวนของแต่ละวงเราเริ่มต้นด้วยการกำหนดชิ้นบรรทัดนี้เป็นไปได้Ginsu'dเข้า ชุด$tเท่ากับเส้นที่เรากำลังทำงานร่วมกับและเท่ากับความยาวของมันแล้วสร้างคอลเลกชันจาก$l (0..$l)สิ่งนี้แสดงถึงดัชนีตัวละครที่เป็นไปได้ทั้งหมดในบรรทัดปัจจุบันของเรา จากนั้นเราจะGet-Randomมาจากระหว่าง(2..$l)การกำหนดวิธีการมากมายที่จะเลือกและจากนั้นได้รับการสุ่มตัวเลขของดัชนีเท่ากับว่า-count $bเก็บดัชนีผู้ที่อยู่ใน

จากนั้นเราจะยังเพิ่มใน0และ$lไป$bเพื่อให้เรามีจุดเริ่มต้นและจุดสิ้นสุดของบรรทัดของเรารับประกันที่จะอยู่ในคอลเลกชันของดัชนี ไพพ์ที่ผ่านไปSelect-Objectด้วย-uแฟล็ก nique จากนั้นไพพ์ไปSort-Objectดังนั้นดัชนีของเราตอนนี้รับประกันว่าจะเริ่มต้นด้วยตัวอักษรตัวแรกและลงท้ายด้วยตัวอักษรตัวสุดท้ายและตัวเลขสุ่มบางตัวระหว่างนั้น

ต่อไปเราจะวนลูปทั้งหมดดัชนีในด้วย$b 0..($b.count-2)|%{...}การวนซ้ำแต่ละครั้งนั้นเรากำลังแบ่ง$t(บรรทัดข้อความปัจจุบันของเรา) จากนั้น-joinรวมเข้าด้วยกันเป็นสตริง (แทนที่จะเป็นอักขระแบบอาร์เรย์) พวกมันถูกรวมเข้าด้วยกันและทิ้งไว้บนไปป์ไลน์แล้วเราก็ปิดลูปด้านนอก

ดังนั้นตอนนี้เรามีคอลเลคชั่นสุ่มของแต่ละบรรทัดของข้อความ (ความหมายที่จุดนี้ถ้าเราเพียง-joined พวกเขากลับมารวมกันเราจะได้รับการขึ้นบรรทัดใหม่เดิมลบข้อความ.) จากนั้นเราท่อคอลเลกชันผ่านห่วงอีกและแต่ละซ้ำที่เรากำลังแสดงผลชิ้นที่ไฟล์ที่มี|%{...} $_>...ไฟล์ที่ถูกสร้างขึ้นโดยการซัก 1-12 จำนวนเต็มสุ่มที่ตรงกับรหัส ASCII [0-9A-Za-z]สำหรับ ไม่มีไฟล์ที่จะมีส่วนขยายและ>คำสั่งจะส่งออกบรรทัดใหม่ต่อท้ายโดยค่าเริ่มต้นในทุกไฟล์

ตัวอย่าง

ตัวอย่างการวิ่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.