वहाँ रहो या चले जाओ!


19

हर कोई वाक्यांश "वहाँ हो या वर्ग हो" के बारे में सुना है। इसलिए मैंने सोचा कि यह इसके बारे में एक चुनौती का समय है।

इनपुट

आप STDIN या समकक्ष के माध्यम से एक पूर्ण निरपेक्ष निर्देशिका पते को इनपुट के रूप में पाठ के रूप में लेंगे।

उत्पादन

यदि निर्देशिका पता मौजूद है और मान्य है, तो आपका प्रोग्राम स्वयं आपके कंप्यूटर पर उस फ़ोल्डर में चला जाएगा। यदि नहीं, तो यह STDOUT के माध्यम से आउटपुट या निम्नलिखित वर्ग के बराबर होगा:

+-+
| |
+-+

आवश्यकताएँ

  • मानक खामियों को अस्वीकार कर दिया जाता है।
  • यदि अनुपलब्ध हो तो आप एकल अनुगामी नईलाइन का उत्पादन कर सकते हैं।
  • आपके प्रोग्राम को कोई आउटपुट नहीं देना चाहिए अगर इसे ले जाया गया है।
  • जहाँ भी इसे स्थानांतरित किया गया है, आपका कार्यक्रम फिर से चलने में सक्षम होना चाहिए।

मान्यताओं

  • आप मान सकते हैं कि इनपुट कभी खाली नहीं है।
  • आप मान सकते हैं कि निर्देशिका में कभी भी फ़ाइल नाम अंत तक जोड़ा नहीं गया है।
  • आप मान सकते हैं कि इनपुट डायरेक्टरी कभी चालू नहीं होती है।
  • आप मान सकते हैं कि आपके पास हर जगह लिखने और निष्पादित करने की अनुमति है।

यह , इसलिए बाइट्स जीत में सबसे छोटा जवाब है।


क्या हम फाइलनाम को हार्डकोड कर सकते हैं?
बुकऑल

हां @ बुकलोव आप हो सकते हैं
FinW

क्या पथ में फ़ाइल नाम ( c:\users\Joe\program.txt) या नहीं ( c:\users\Joe\ ) शामिल है? उत्तरार्द्ध मामले में, बनाई गई फ़ाइल का नाम स्रोत के समान होना चाहिए?
लुइस मेंडो

@LuisMendo आपको इनपुट के रूप में केवल एक निर्देशिका के रूप में फाइल नहीं मिलेगी
FinW

@FinW अफसोस की बात है, आपने अभी भी मेरे प्रश्न का उत्तर नहीं दिया है: बनाई गई फ़ाइल का नाम मूल फ़ाइल के समान होना चाहिए?
लुइस मेंडो

जवाबों:


1

बैश + कोरुटिल्स, 43 42 बाइट्स

mv -t $1 $0 2> >(:)||echo -n '+-+
| |
+-+'

यह एक ध्वज से गूंज के माध्यम से अनुगामी newline मुद्रण से बचा जाता है।

अगर यह "अपरिहार्य" है, तो ओपी को एक अनुगामी न्यूलाइन की अनुमति देने से क्या मतलब है, मुझे पूरा यकीन नहीं है।

यदि यह एक अनुगामी newline शामिल करने के लिए स्वीकार्य है, तो परिवर्तन करें

echo -n '+-+

सेवा

echo '+-+

और कुल 39 बाइट्स के लिए 3 बाइट्स बचाएं।


7

पॉवरशेल , 59 62 61 60 बाइट्स

$z=ls($d=$args)-di;('"+-+
| |
+-+"','mv b.ps1 "$d"')[$?]|iex

इसे ऑनलाइन आज़माएं!

व्याख्या

PowerShell का Move-Itemcmdlet ( mv) एक फ़ाइल को भी नाम देता है, इसलिए इसे एक निर्देशिका प्रदान करता है जो गंतव्य के रूप में मौजूद नहीं है, केवल फ़ाइल को उस अंतिम घटक के रूप में बदल देता है (जब तक कि माता-पिता मौजूद हैं), इसलिए यह अच्छा नहीं था।

मैं यह Test-Pathनिर्धारित करने के लिए उपयोग कर सकता हूं कि गंतव्य मौजूद है और एक निर्देशिका है, लेकिन यह बहुत लंबा है Test-Path $d -PathT C

इसलिए इसके बजाय (छोटा) पैरामीटर के साथ Get-ChildItem( ls) का उपयोग कर रहा हूं -Directoryऔर $?यह देखने के लिए जांच कर रहा हूं कि क्या यह सफल रहा है। यदि कोई है तो आउटपुट उसे सौंपा जाता है $zताकि वह दिखाई न दे।

यह 2 तत्वों के साथ एक सरणी के रूप में किया जाता है, फिर बूलियन मान के साथ सरणी में अनुक्रमित होता है $?, जो कि 0या के लिए coalesced हो जाएगा 1, इसलिए पहला सरणी तत्व चुना जाता है यदि गंतव्य निर्देशिका मौजूद नहीं है, और दूसरा यदि यह है कर देता है।

पहला सरणी तत्व एक स्ट्रिंग है जिसमें बॉक्स (उद्धृत) है; जब वे वंशानुगत नहीं होते हैं, तब भी तार में नएपन की अनुमति होती है। दूसरा तत्व एक स्ट्रिंग है जिसमें चाल कमान है।

उस सरणी चयन का परिणाम निष्पादित होने के लिए Invoke-Expression( iex) में पाइप हो जाता है । यह आवश्यक है क्योंकि मैं सरणी में केवल वास्तविक चाल कमांड को छोड़ता हूं, यह कोई फर्क नहीं पड़ता है कि क्या (सरणी को पॉप्युलेट करने के लिए), जो उद्देश्य को हरा देता है।


2
एकमात्र कारण यह TIO पर काम नहीं करता है क्योंकि स्क्रिप्ट कहा जाता है .code.tio.ps1, नहीं b.ps1यह काम करता है। हालांकि STDOUT में कुछ आवारा उत्पादन प्रतीत होता है। निश्चित नहीं है कि क्या कारण हैं।
डेनिस

वाह, बहुत बढ़िया! आवारा उत्पादन था gci, मेरी परीक्षण निर्देशिकाओं ने यह प्रदर्शित नहीं किया कि उनमें कोई बाल वस्तु नहीं थी, इसलिए इसने उस दोष को उजागर किया। यह अब केवल आउटपुट नियत करके तय किया गया है। धन्यवाद @ डेनिस!
b बजे २ b

मुझे लगता है कि lsहै के लिए एक छोटी संक्षिप्त नामgci
dkudriavtsev

1
@wat duh, यह निश्चित है! मैं lsहर समय उपयोग करता हूं और फिर गोल्फ में मैं इसे भूल जाता हूं। धन्यवाद।
रिश्तवादी

अच्छा लगा। मुझे लगता है कि यह पहली बार है जब मैंने $?यहां गोल्फ में इस्तेमाल किया है।
AdmBorkBork

5

ऑक्टेव, 60 57 52 बाइट्स

8 बाइट्स @Stewie की बदौलत बच गए

if~movefile('f.m',input(''))disp("+-+\n| |\n+-+")end

यह एक स्क्रिप्ट है जो एक फ़ाइल के भीतर रहती है जिसे कहा जाता है f.m। जब चलाया जाता है, तो यह फ़ाइल के लिए फ़ोल्डर को स्थानांतरित करने के लिए उपयोगकर्ता को संकेत देगा। यदि फ़ोल्डर मौजूद नहीं है और चाल कार्रवाई विफल हो जाती है, तो movefileरिटर्न false(या 0) अन्यथा यह रिटर्न true(या 1)। यदि यह है false, तो हम स्ट्रिंग प्रदर्शित करते हैं "+-+\n| |\n+-+"



4

बैच, 80 बाइट्स

@if not "%1"=="" move %0 %1\>nul 2>nul&&%1\%~nx0||(echo +-+&echo ^| ^|&echo +-+)

बैच इसे पसंद नहीं करता है यदि आप बैच फ़ाइल को चला रहे हैं जैसा कि वह चल रहा है, इसलिए %1\%~nx0(बैच फ़ाइल का नया नाम है) बैच द्वारा पुरानी बैच फ़ाइल की तलाश करना बंद कर देता है।


4

बैश + कोरुटिल्स, 54 बाइट्स

if [ -d $1 ];then mv $0 $1;else echo "+-+
| |
+-+";fi

काफी सरल। यह देखने के लिए एक परीक्षण करता है कि क्या पहला तर्क मौजूद है, यदि यह मौजूद है तो कार्यक्रम स्वयं तर्क में चला जाता है, अन्यथा वर्ग को प्रिंट करता है।

विंडोज पर काम नहीं करता है, हालांकि यह उबंटू पर विंडोज / डब्लूएसएल पर काम करता है। ड्राइव लेटर नहीं लेता है, हालांकि मुझे लगता है कि ठीक होने के लिए स्पष्ट कर दिया गया है।

यह खाता मेंडेलीव का है।


मुझे लगता है कि आपको आवश्यकता है echo -nताकि आप एक नई रूपरेखा न छापें।
मिशेल स्पेक्टर

1

पायथन 3, 71 बाइट्स

from shutil import*
try:move('f',input())
except:print("+-+\n| |\n+-+")

यह नाम की फ़ाइल में होना चाहिए f

काफी सरल। यह एसटीडीआईएन पर जो भी डायरेक्टरी दी गई है, उसमें खुद को स्थानांतरित करने की कोशिश करता है, और यदि कोई त्रुटि होती है तो यह बॉक्स को प्रिंट करता है।


0

सी 137 बाइट्स

#include<dirent.h> g(char *f,char *z){DIR* d=opendir(z);if(d){strcat(z,f);rename(f,z);}else{puts("+-+");puts("| |");puts("+-+");}}

Ungolfed संस्करण:

#include<dirent.h> 
g(char *f,char *z)
{ 
  DIR* d=opendir(z);
  if(d)
  {
    strcat(z,f);
    rename(f,z);
  }
  else
  {
    puts("+-+");
    puts("| |");
    puts("+-+");
  }
}

fफ़ाइल नाम zस्वीकार करता है और निर्देशिका नाम स्वीकार करता है। गंतव्य तार का एक संयोजन है zऔर frename()फ़ाइल को नए स्थान पर ले जाने के लिए उपयोग किया जाता है।

इस main()तरह दिखेगा:

int main(int argc, char *argv[])
{
    g(argv[0]+2,argv[1]); // 1st arg is the Destination string
    return 0;
},

निश्चित रूप से किसी भी तरह छोटा कर सकते हैं!


0

रूबी, 58 + 12 = 70 बाइट्स

झंडे का उपयोग करता है -nrfileutils। इनपुट फ़ाइल से w / o STDIN में newlines से पाइप किया गया है।

FileUtils.mv$0,File.exist?($_)&&$_ rescue$><<"+-+
| |
+-+"

0

Minecraft ComputerCraft Lua , 74 बाइट्स

if fs.isDir(...)then fs.move("f",... .."f")else print("+-+\n| |\n+-+")end

फ़ाइलनाम को "f" के रूप में हार्ड-कोड किया गया है। यह एक इन-गेम कंप्यूटर पर चलता है और उस कंप्यूटर की निर्देशिका संरचना के सापेक्ष चलता है। सीसी लुआ की बिल्ट fsएपीआई का उपयोग करता है।

Ungolfed:

local tArgs = { ... }      -- '...' is Lua's vararg syntax, similar to python's *args syntax
if fs.isDir(tArgs[1]) then -- Using '...' is like passing all args separately, extra args are usually ignored
    fs.move("file", tArgs[1] .. "file") -- '..' is Lua's string concatenation syntax
else
    print("+-+\n| |\n+-+") -- print the required output if the directory doesn't exist
end
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.