रिबूट में एक स्ट्रिंग को बनाए रखने के लिए अपनी भाषा में सबसे छोटा कोड


48

आपके कार्यक्रम:

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

उद्देश्य का उद्देश्य परीक्षण:

आपको अपनी स्थानीय मशीन पर संग्रहण कार्यक्रम चलाने में सक्षम होना चाहिए, फिर अपनी स्थानीय मशीन को पावर-साइकिल करें, फिर स्थानीय मशीन पर पुनर्प्राप्ति कार्यक्रम को कॉल करें। जब तक आप इस रिबूट परीक्षण को पास नहीं कर लेते तब तक आप (वेब ​​पर भी) स्ट्रिंग को स्टैश कर सकते हैं।

परीक्षण के मामलों:

भंडारण फिर पुनर्प्राप्ति:

echo foo | Store
Retrieve
foo

बार-बार स्टोर को अधिलेखित करना चाहिए (एक सेट () विधि की तरह):

echo foo | Store
echo bar | Store
Retrieve
bar

बार-बार पुनर्प्राप्ति गैर-विनाशकारी है (जैसे (प्राप्त) विधि):

echo foo | Store
Retrieve
foo
Retrieve
foo

भंडारण के किसी भी आह्वान से पहले पुनर्प्राप्ति:

आपको इस बारे में चिंता करने की आवश्यकता नहीं है। आपका पुनर्प्राप्ति कार्यक्रम मान सकता है कि स्टोरेज प्रोग्राम पिछले समय किसी बिंदु पर चलाया गया है।

इनपुट / आउटपुट लचीलापन।

लोगों ने मुझे सख्त STDIN / STDOUT से मानक IO नियमों तक इसका विस्तार करने के लिए कहा है। मैं नहीं कर सकता क्योंकि यह बहुत अधिक खामियों को पेश करेगा। कुछ मानक IO विकल्पों में पहले से ही एक स्थिर तरीके से संग्रहीत इनपुट होता है, उदाहरण के लिए "प्रोग्राम फ़ाइल से इनपुट ले सकते हैं"। मैं केवल सख्त STDIN और STDOUT की तुलना में अधिक लचीला होना चाहता हूं, लेकिन बाढ़ के द्वार को खोले बिना।

मानक IO नियमों के धागे से मैं चेरी-चुन रहा हूं जो चुनौती नहीं तोड़ते हैं:

यदि आप एक वैकल्पिक का उपयोग करते हैं तो यह उपयोगकर्ता-इंटरैक्टिव होना चाहिए। उपयोगकर्ता को आपके प्रोग्राम के लिए उनके इनपुट को पाइप करने के अलावा कोई अन्य काम नहीं करना चाहिए, इसे अपने प्रोग्राम के प्रांप्ट में टाइप करना, या अपने प्रोग्राम के कमांड-लाइन-आर्ग के रूप में इनपुट टाइप करना। स्क्रीन पर प्रदर्शित आउटपुट को देखने या STDOUT या STDERR को भेजने के लिए उपयोगकर्ता को आपके पुनः प्राप्त कार्यक्रम को चलाने के अलावा कुछ नहीं करना चाहिए।

अनुमत मान्यताएँ:

  • आपके दो प्रोग्राम एक ही डायरेक्टरी में चलाए जाएंगे
  • आपके कार्यक्रमों में उस निर्देशिका के लिए पढ़ने-लिखने की अनुमति है
  • आपके द्वारा बनाई गई फ़ाइलें रिबूट से बच जाएंगी (टेम्प अस्थायी में नहीं)
  • एक अनुगामी न्यूलाइन जो स्ट्रिंग का हिस्सा नहीं थी, की अनुमति है। कोई अन्य अनुगामी व्हॉट्सएप नहीं

यह कोड-गोल्फ है, और आपका स्कोर दोनों कार्यक्रमों से बाइट्स का योग है।


9
तो बस echo $@>xऔर cat xवैध है?
23

1
आपकी कल्पना में कई बार स्टोर करने की क्षमता का उल्लेख नहीं है, लेकिन आपके पास एक उदाहरण मामला है जो ऐसा करता है। क्या हम प्रत्येक आह्वान के लिए एक स्वच्छ वातावरण मान सकते हैं Store?
Adám

4
@EriktheOutgolfer यह मान्य क्यों नहीं होगा? यहां तक ​​कि अगर मेटा पर चर्चा की गई एक लूपहोल है जो विशेष रूप से अनुमति देने से चुनौती को रोकता नहीं है।
डिलाईन

6
वेब प्रतिबंध आमतौर पर उस सामान को बनाने के काम को करने के लिए एक खामियों के रूप में वेब से सामान खींचने के बारे में होते हैं। इस मामले में, अगर यह वेब पर है, क्योंकि आपने इसे वहां डालने का काम किया है।
जेरेड के

3
किसी को चुंबकीय-कोर मेमोरी वाले कंप्यूटर के लिए उत्तर लिखने की आवश्यकता है।
मार्क

जवाबों:


88

zsh, 4 बाइट्स

स्टोर: >f(एसटीडीआईएन से पढ़ता है और नामक फाइल पर लिखता है f)
प्राप्त करें: <f( fएसटीडी के बारे में सामग्री लिखता है )


8
मुझे लगता है कि हमारे पास एक विजेता है।
एडम जूल 6'18

@ एडम जब तक 1 बाइट में फाइल करने के लिए इनपुट लिखने के लिए एक टोकन नहीं है: P
फ्रीजफेनिक्स

1
@ फ़्रीफ़स्पेनिक्स शायद तब तक कोई नहीं है जब तक आप एक नई भाषा नहीं लिखते हैं, जिसकी अनुमति नहीं है ...
क्रोमियम

4
@ क्रोमियम Z80 उत्तर की जांच करें: कुछ मौजूदा भाषाएं 0 बाइट्स प्रोग्राम से लिख सकती हैं।
C --ur

55

TI-BASIC (Z80), 1 बाइट ?

स्टोर:  (बस स्ट्रिंग दर्ज करें)
पुनः प्राप्त करें: Ans(बाइट 27)

लेकिन अगर यह मान्य नहीं है:

TI-BASIC (Z80), 7 6 बाइट्स

-1 जैकब को धन्यवाद।

स्टोर: Prompt Str0(बाइट्स डीडी एए 09)
प्राप्त करें: disp Str0(बाइट्स ईडी एए 09)


1
क्या आप सुनिश्चित हैं कि 5 बाइट्स हैं?
फ्रीजफेनिक्स

6
@FreezePhoenix TI-Basic टोकन का उपयोग करता है।
एडम जूल 5'18

3
हम्म ... क्यों नहीं के माध्यम से इनपुट ले लो Ansऔर इसे उसी चर में बनाए रखें? एक खाली स्टोर प्रोग्राम और बस Ansपुनः प्राप्त करने के लिए काम करना चाहिए: 1 बाइट!
जैकब

9
@ आर्थर येप, Ansबनी रहती है। वास्तव में, बहुत सारे राज्य बने रहते हैं, जिसमें (मुझे लगता है) सभी उपयोगकर्ता चर, समीकरण और इतिहास शामिल हैं। उपयोगकर्ता के दृष्टिकोण से, संचालित बंद मूल रूप से एक पीसी के लिए नींद की स्थिति के बराबर टीआई कैलकुलेटर है, इसलिए यह बहुत बाधित नहीं करता है।
जैकब

2
@JaredK मैं निश्चित रूप से सहमत हूँ कि 1-बाइट समाधान नियम दुरुपयोग की बू आ रही है (भले ही मैं यह सुझाव देने वाला था)। हालांकि, मैं कहूंगा कि स्टोर प्रोग्राम से बाहर निकलता है, क्योंकि इसके बाद अन्य प्रोग्राम चलाए जा सकते हैं (हालांकि वे समाधान के संचालन में हस्तक्षेप करते हैं)। आपकी "दृढ़ता की वस्तुनिष्ठ परीक्षा" की मेरी व्याख्या यह थी कि कार्यक्रम शक्ति चक्र से पहले और बाद में सीधे चलाए जाएंगे। यदि वह गलत है, तो शायद आपको गैर-सूचीबद्ध होने के लिए 1-बाइट समाधान की आवश्यकता हो सकती है?
जैकब

23

ब्राउज़र जेएस, 44 बाइट्स

स्टोर :

localStorage.a=prompt()

पुनः प्राप्त करें :

alert(localStorage.a)

विल prompt()stdin से पढ़ा है?
पाइप

9
क्या एक ग्राफिकल वेब ब्राउज़र में STDIN होता है? नहीं, prompt()एक चेतावनी है कि आप पाठ दर्ज करने के लिए पूछता है, और परिणाम देता है।
देव

5
@ निश्चित रूप से एक ग्राफिकल वेब ब्राउज़र में हर दूसरी प्रक्रिया की तरह एक STDIN होता है। यदि आप किसी विशिष्ट भाषा से इसका उपयोग नहीं कर सकते हैं, तो यह एक और प्रश्न है और यदि उत्तर "नहीं" है, तो मैं शायद इस चुनौती में उपयोग कर सकता हूं।
पाइप

5
@Dev डिफ़ॉल्ट I / O विधियों में GUI प्रॉम्प्ट और आउटपुट GUI डिस्प्ले के माध्यम से शामिल हैं । जब तक ओपी मानक को ओवरराइड करने का मतलब है, यह मान्य होना चाहिए। मैं स्पष्ट कर दूंगा।
एगलैंगिंग फ्रूट जूल

2
मैंने अधिक IO की अनुमति देने के लिए चुनौती को संपादित किया है, लेकिन मैं इसे केवल डिफ़ॉल्ट IO विधियों के सीमित सबसेट तक विस्तारित कर रहा हूं। यह उत्तर हालांकि मेरे सबसेट के भीतर है। मुझें यह पसंद है।
जारेड के

19

POSIX शेल श / बैश / ... 8 बाइट्स

दुकान:

dd>f

प्राप्त:

dd<f

2
एक अच्छा, यहां तक ​​कि धड़कता है cat...
सेमी जस्टर

12

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

स्टोर, 45 बाइट्स:

open(*'fw').write('print(%r)'%open(0).read())

पुनः प्राप्त कार्यक्रम स्टोर कमांड, एक फ़ाइल नाम से बनाया गया है f। ( फ़ाइल नाम के लिए 1 बाइट )


2
निश्चित रूप से आप उपयोग कर सकते हैं input()?
आर्टेमिस फोवेल

@ArtemisFowl input()केवल पहली नई पंक्ति को प्राप्त करता है। open(0).readएसटीडीआईएन के सभी को पढ़ता है
जो किंग

आप शायद तब पोस्ट करते हैं जब चीजें अभी भी अस्पष्ट थीं, लेकिन जैसा कि यह उत्तर वर्तमान कल्पना से पूरा नहीं होता है। मैंने मूल रूप से STDIN / STDOUT की आवश्यकता को सख्त करने का इरादा किया था, जिसमें चूक की अनुमति नहीं थी। मैंने इसे विस्तारित किया है, लेकिन केवल डिफॉल्ट के सबसेट के लिए। आपका पुनर्प्राप्ति कार्यक्रम, यदि यह STDOUT का उपयोग नहीं करता है, तब भी आउटपुट को स्क्रीन पर प्रदर्शित करने की आवश्यकता है। यदि मैंने पूर्ण चूक की अनुमति दी है, तो हर भाषा का समाधान 'फ़ाइल में इनपुट लेता है', 'फ़ाइल में आउटपुट देता है', शून्य बाइट्स।
जारेड के

@JaredK मुझे नहीं लगता कि आप यह कैसे काम करते हैं। store-Program STDIN से इनपुट पढ़ता है और फिर एक अजगर प्रोग्राम है जो में इस इनपुट प्रिंट संग्रहीत करता है f। उदाहरण: STORE को इनपुट के साथ कहा जाता है abc। यह तब लिखता print('abc')है f। यदि आप अब कॉल करते हैं f(RETRIEVE), तो यह abcSTDOUT पर प्रिंट करता है।
ओव्स

@JaredK मैंने आपसे एक टिप्पणी में पूछा था कि क्या STORE के लिए RETRIEVE को संशोधित करने की अनुमति दी गई थी।
ओव


8

पॉवर्सशेल - 4 बाइट्स

संग्रहण:

ac

(वैकल्पिक भी sc)

बहाली

gc

संपादित करें: मैंने अभी देखा कि आउटपुट को किसी भी उपयोगकर्ता इनपुट की अनुमति नहीं है ... इसलिए यह 4 से 6 या 8 बाइट तक कूदता है

संग्रहण:

ac f

(वैकल्पिक भी sc f) 8 बाइट संस्करण के लिए

ac

(और fपथ के रूप में निर्दिष्ट ) 6 बाइट संस्करण के लिए

बहाली

gc f

8

जंग, 136 बाइट्स

स्टोर (84 बाइट्स)

use std::{fs::*,io::*};

||{let mut v=vec![];stdin().read_to_end(&mut v);write("a",v)}

पुनः प्राप्त (52 बाइट्स)

||print!("{}",std::fs::read_to_string("a").unwrap())

स्वीकृतियाँ


1
आप आयात को बदलकर use std::{io::*,fs::*}और उसके writeबजाय का उपयोग करके एक बाइट बचा सकते हैं std::fs::write
फल जूला

कैसे के बारे में write("a",String::from_iter(stdin().chars()))?
बरगी

@ बरगी नाइस लेकिन स्थिर जंग में charsट्रिगर error[E0658]: use of unstable library feature 'io'
जकॉब

हम्म, ऐसा लगता chars()है कि के पक्ष में पदावनत किया गया है String::from_utf8(stdin().bytes())। (इसके अलावा मैंने रात के डॉक्स का उपयोग किया, यह निश्चित नहीं है कि क्या वह अपराधी है)
बर्गी जूल

@ बर्गी के साथ मैंने कुछ भिन्नताओं की कोशिश की bytes()या chars()उनमें से कोई भी बहुत कम नहीं थी क्योंकि इट्रेटर आइटम में लिपटा हुआ है io::Result
एगलैंगिंग फ्रूट जूल

8

दे घुमा के, १२ ११ 10 बाइट्स

दुकान, 6 ६ 5 बाइट्स

cat ->f# कोई जरूरत नहीं -, स्टड डिफ़ॉल्ट है

cat >f# अंतरिक्ष की कोई आवश्यकता नहीं है, >साथ ही अलग हो जाता है

cat>f

पुनः प्राप्त करें, 5 बाइट्स

cat f

1
-स्टोर कार्यक्रम के लिए कोई ज़रूरत नहीं है ।
कोनराड रूडोल्फ

2
"बिल्ली" और ">" के बीच के स्थान की कोई आवश्यकता नहीं है, या तो!
भजन 11

आपको लिखने और उपयोग करने के लिए zsh पोस्ट की तरह ही सक्षम होना चाहिए >f। मुझे यकीन नहीं है कि अगर <fपढ़ने के लिए मान्य है, हालांकि।
एलो

@allo कम से कम साइग्विन पर, >fकाम करता है echo '' > f(यदि यह मौजूद है तो फ़ाइल को खाली करना, अगर ऐसा नहीं है), जबकि <fयह एक नो-ऑप लगता है।
सूंदर

7

एचपी 49 जी आरपीएल, 48 बाइट्स

बचाने के लिए: :2: A DUP PURGE STO26.5 बाइट्स

बहाल करने के लिए: :2: A RCL21.5 बाइट्स

यदि हम बैकअप बैटरी में छोड़ सकते हैं, तो हमें यह मिलता है:

एचपी 49 जी आरपीएल, 0 बाइट्स

बचाने के लिए: 0 बाइट्स

पुनर्स्थापित करने के लिए: 0 बाइट्स, चूंकि एचपी 49 जी रिबूट के पार स्टैक को अछूता छोड़ देता है।


शून्य-बाइट समाधान को विभिन्न प्रकार के कैलीक्यूलेटर के लिए काम करना चाहिए। जब मैं घर पहुँचूँगी तो मैं अपनी 42 की बस्ट निकाल दूंगी।
SIGSTACKFAULT

मुझे लगता है कि आपका शून्य-बाइट समाधान, और अन्य कैलकुलेटर पर चलाए जा रहे हैं जो गैर-विनाशकारी रूप से रिबूट करते हैं, प्रश्न के दो भागों को पूरा करने में विफल हो रहे हैं: "आप दो कार्यक्रम बनाएंगे।" आपको जो मिला है वह एकल प्रोग्राम है जो रिबूट से बचता है। और "स्टोर STDIN से पढ़ता है और फिर त्रुटि के बिना बाहर निकलता है ।" आपका प्रोग्राम अभी भी प्रतीक्षा कर रहा है कि उपयोगकर्ता किसी कुंजी को दबाए। आपके कार्यक्रम का स्टैक और निष्पादन स्थिति अभी भी परिवर्तनशील है। मुझे लगता है कि इसका मतलब यह अभी भी चल रहा है, और बाहर नहीं निकला है।
जारेड के

@JaredK प्रश्न ने कभी यह निर्धारित नहीं किया कि दोनों कार्यक्रम समान नहीं हो सकते। बाहर निकलने वाले भाग के लिए: पारंपरिक रूप से RPL इनपुट में कार्यक्रमों को स्टैक पर दिया जाता है। यही कारण है कि है मानक इनपुट।
जेसन

1
क्या ढेर एक शक्ति चक्र से बचेगा? हो सकता है कि कैलकुलेटर के बटनों के माध्यम से एक सॉफ्ट पावर-ऑफ, लेकिन मुझे लगता है कि बैटरी को नहीं हटा रहा है। तो शायद यह निर्भर करता है कि एक शक्ति चक्र क्या है।
उपयोगकर्ता

1
@user नहीं, स्टैक सॉफ्ट (ON + C) या हार्ड रिसेट (ON + A + F) (सॉफ्ट-पावर ऑफ से अलग, राइट शिफ्ट + ON) पोर्ट 2 में स्टोर होने के विपरीत नहीं है, जो फ्लैश मेमोरी ( और नरम और कठोर रीसेट से बचे)। चूंकि TI-BASIC जवाब उस परिभाषा का उपयोग करने के लिए लग रहा था जिसमें मैंने पूर्णता के लिए स्टैक उत्तर शामिल किया था।
जेसन

6

एपीएल (एपीएलएक्स) , 5 बाइट्स

स्टोर: ⍞⍈1
पुनः प्राप्त करें:⍇1

 स्टैड
⍈1 राइट से फ़ाइल नंबर 1 के अगले उपलब्ध घटक तक लाइन प्राप्त करें

⍇1फ़ाइल नंबर 1 का पहला * अंतिम घटक  पढ़ें

APLX स्टोर सत्रAPLX सत्र लिया गया

* डॉक्यूमेंटेशन पहले कहता है, लेकिन प्रयोग आखिरी दिखाता है ।


6

बैश, 10 बाइट्स (गैर-प्रतिस्पर्धात्मक)

touch $@
ls

यूनिक्स फाइलनाम में किसी भी वर्ण को छोड़कर NULऔर कोई भी हो सकता है/ , और उनके नाम 255 बाइट तक लंबे हो सकते हैं, इसलिए यह केवल उस लंबाई तक स्ट्रिंग्स को स्टोर करने में सक्षम होगा (यह विचार करें कि भंडारण माध्यम की सीमा), और जिसमें 'शामिल नहीं है /' ' उनमे। यही कारण है कि यह गैर-प्रतिस्पर्धात्मक है, एक और यह है कि यह उस निर्देशिका को मानता है जिस पर इसे चलाया जाता है जो खाली है (या उस से बाहरी उत्पादन lsकी अनुमति है)। मैं अभी भी इसे पोस्ट करना चाहता था क्योंकि यह जानकारी संग्रहीत करने का एक अच्छा और गैर-स्पष्ट तरीका था।

एक समान नस पर, जिसकी लंबाई और चरित्र सीमाएँ समान नहीं होंगी:

35 33 बाइट्स

mkdir -p $@
find|sed '$!d;s/..//'

यह /स्ट्रिंग में चरित्र की अनुमति देता है , और कई और पात्रों का समर्थन करता है (वास्तव में कितने कार्यान्वयन पर निर्भर करता है)।

(इस पर @ बाइस क्वैक के लिए -2 बाइट्स)


1
IIRC, मेरा मानना ​​है कि बर्कले के एक समूह ने एक बार 1990 के दशक में एक डेटाबेस सिस्टम बनाया था जिसमें टेबल कॉलम डेटा को फाइलनाम (255 वर्ण तक) संग्रहीत किया गया था। मुझे लगता है कि पंक्तियाँ और तालिकाएँ मूल निर्देशिका थीं।
डेविड आर ट्रिब्बल

अपने 35 बाइट उत्तर में, आप दूसरे स्टेटमेंट को बदल सकते हैं s/..//। यह $आवश्यक नहीं है क्योंकि अन्य सभी लाइनें हटा दी जाती हैं, इसलिए यह केवल अंतिम पंक्ति पर लागू ^हो सकती है , और इसे गिराया जा सकता है क्योंकि प्रतिस्थापन केवल पहले मैच पर ही लागू होता है।
क्रिति लिथोस

@ कॉक्सकैक किया। यह बताने के लिए धन्यवाद कि परिवर्तन क्यों काम करता है।
सूंदर

आपको व्हॉट्सएप, और , या वर्णों द्वारा जलाए जाने से बचने के लिए उपयोग करने की आवश्यकता है "$@", न $@कि । *?~
एंडर्स कासोर्ग

5

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

स्टोर (33 बाइट्स)

open(*'aw').write(open(0).read())

पुनः प्राप्त (23 बाइट्स)

print(open('a').read())

एक अनुगामी newline के साथ प्रिंट।


क्यों नहीं input()बजाय open(0).read()और छोड़ देते हैं end=से print?
MoxieBall

@MoxieBall का inputउपयोग क्यों नहीं किया गया था, इस बारे में निश्चित नहीं है, लेकिन end=इसके परिणामस्वरूप स्ट्रिंग के अंत में एक नई लाइन जोड़ी जाएगी (यानी, मूल स्ट्रिंग नहीं) (शायद)
NickA

@ निक्का ऐसा लगता है कि प्रश्न में वैसे भी एक नई पंक्ति छपी हुई है, इसलिए मुझे नहीं लगता कि इस पर कोई फर्क नहीं पड़ता ...
MoxieBall

क्या मैं पागल हो गया हूं या 23 + 33 = 56 (54 नहीं)? भी क्यों नहीं उपयोग input()?
आर्टेमिस फॉवल

1
@ArtemisFowl अच्छी पकड़। के रूप में input, मैं मान रहा हूँ कि स्ट्रिंग को बनाए रखने के लिए newlines हो सकता है।
जैकब

4

जाप, 46 30 बाइट्स

-16 बाइट्स शैगी को धन्यवाद ।

पहली बार मैंने जाप का उपयोग करने की कोशिश की है। JS eval कभी-कभी काल्पनिक हो सकता है। ब्राउज़र का उपयोग करता है window.localStorage

स्टोर (16 बाइट्स)

Ox`lo¯lSÈSge.P=U

पुनः प्राप्त (14 बाइट्स)

Ox`lo¯lSÈSge.P

+1 मानक फ़ाइल IO I के अलावा किसी अन्य चीज़ का उपयोग करने वाला पहला व्यक्ति होने के लिए।
जारेड के

1
Japt में आपका स्वागत है! :)
झबरा

1
वैसे, आप बाईपास setItemऔर getItemपूरी तरह से कर सकते हैं localStorage.keyमान सेट करें , मान पुनः प्राप्त
झबरा

@ शगुन थैंक्स! आपका भी अजीब नियंत्रण पात्रों से बचा जाता है।
लेजियन मम्मल 978

4

हास्केल, 46 बाइट्स

स्टोर (26 बाइट्स):

getContents>>=writeFile"t"

प्राप्त करें (20 बाइट्स):

readFile"t">>=putStr

3

रूबी (26 बाइट्स)

सेट (16 बाइट्स)

IO.write'a',gets

जाओ (10 बाइट्स)

IO.read'a'

3

MATLAB (30 बाइट्स)

सेट (22 बाइट्स)

a=input('','s');save a

को बदलकर 4 बाइट्स से दाढ़ी बना सकते हैं input(''), लेकिन इसके लिए सिंगल कोट्स में इनपुट की आवश्यकता होगी:'input string'

प्राप्त करें (8 बाइट्स)

load a;a

3

सी (जीसीसी), 98 बाइट्स

स्टोर (46 बाइट्स)

इनपुट पहली कमांड लाइन तर्क के माध्यम से है।

main(c,v)char**v;{fputs(v[1],fopen("a","w"));}

पुनः प्राप्त (52 बाइट्स)

c,d;r(){for(d=open("a",0);read(d,&c,1);)putchar(c);}

Unportability

  • इसके लिए आवश्यक है कि कई पॉइंटर प्रकार फिट हों int

स्वीकृतियाँ


1
इसके लिए एक C कार्यान्वयन की आवश्यकता होती है जहां काम करने intके int fopen()लिए निहित घोषणा के लिए एक पॉइंटर पकड़ सकता है । (उदाहरण के लिए 32-बिट सिस्टम, या उपयोग करें gcc -m32यदि आप x86-64 पर हैं तो 32-बिट निष्पादित करें।) और BTW, मैंने लिनक्स के sendfileऔर copy_file_range(2)सिस्टम कॉल का उपयोग करने की कोशिश की , लेकिन वे TTY से / के लिए काम नहीं करते हैं।
पीटर कॉर्डेस

1
चूंकि आप फ़ंक्शंस लिख रहे हैं, प्रोग्राम नहीं, शायद आप इनपुट स्ट्रिंग को एक फ़ंक्शन आर्ग की अनुमति के रूप में लेने का औचित्य साबित कर सकते हैं fputs(fopen()), और read(open(),buf,-1)। (प्रश्न अब इनपुट के रूप में कमांड-लाइन आर्ग की अनुमति देता है।)
पीटर कॉर्ड्स

लिनक्स 'स्प्लिस' फ़ंक्शन एक पाइप से एक फ़ाइल (और इसके विपरीत) की प्रतिलिपि बनाता है। यदि स्टडिन / आउट पाइप हैं, तो यह अधिक मापदंडों की कीमत पर, फ़ंक्शन कॉल को बचाएगा।
CSM

2

एपीएल (डायलॉग यूनिकोड) , 18 बाइट्स

स्टोर: ⍞⎕NPUT⎕A 1 इसे ऑनलाइन आज़माएं!
पुनः प्राप्त करें: ⊃⎕NGET⎕A इसे ऑनलाइन आज़माएं!

 स्टैड से लाइन प्राप्त करें
⎕NPUT इसे एक मूल फ़ाइल में डालें जिसे
⎕A अपरकेस वर्णमाला कहा जाता है 1 और यदि फ़ाइल मौजूद है तो अधिलेखित करें

 पहला भाग (डेटा, अगले भाग एन्कोडिंग और लाइन एंडिंग प्रकार हैं)
⎕NGET देशी फ़ाइल
⎕A को अपरकेस वर्णमाला प्राप्त करते हैं


2

आर (27 बाइट्स)

स्टोर (21 बाइट्स)

x=readLines('stdin')

लोड (6 बाइट्स)

cat(x)

इस काम के लिए, पहले स्क्रिप्ट को कमांड लाइन विकल्प के साथ लागू करने की आवश्यकता होती है --save, और दूसरे के साथ --restore(हालांकि इंटरैक्टिव मोड में यह आवश्यक नहीं है: ये विकल्प डिफ़ॉल्ट हैं)।

यह 7 बाइट्स द्वारा छोटा किया जा सकता है यह इस तथ्य के लिए नहीं था कि आर में एक बग readLineगैर-इंटरैक्टिव मोड में काम करने से डिफ़ॉल्ट तर्क को रोकता है। इंटरैक्टिव मोड में, यह आवश्यक नहीं है, और समाधान इसलिए केवल 20 बाइट्स का उपयोग करता है ।


1
मुझे लगता है कि इसका इस्तेमाल करने में बहुत अधिक कुशल होगा qपहला कार्यक्रम होने के साथ, सीधे x=scan(); q("y")और दूसरे या तो xया cat(x)कैसे सख्त हम कैसे तार मुद्रित कर रहे हैं के बारे में होना चाहते हैं पर निर्भर करता है। सामान्य कोड गोल्फ नियमों द्वारा आपको कमांड लाइन के तर्कों को भी गिनना होगा, इसलिए बाइट्स जोड़ें --saveऔर --restore(जो मेरे फॉर्मूलेशन की आवश्यकता नहीं है)
JDL

@JDL scanमनमानी सामग्री के लिए काम नहीं करता है, और इससे scan(w='character')अधिक लंबा है readLines()qअनावश्यक है (लेकिन q('y')काम नहीं करेगा, आपको इसे वर्तनी देना होगा yes)। मैंने सिर्फ xदूसरे कार्यक्रम में उपयोग करने के बारे में सोचा था लेकिन यह आवश्यकताओं का उल्लंघन होगा, जहां तक ​​मैं उन्हें समझता हूं।
कोनराड रुडोल्फ

1
आप उपयोग कर सकते हैं scan(w=""), आपको टाइप करने की आवश्यकता नहीं है, scanइसे निर्दिष्ट तर्क के प्रकार से समझ लेंगे। मेरे लिए, q ("y") एक बचत-उत्प्रेरण के रूप में काम करता है लेकिन शायद यह आपके R के संस्करण पर निर्भर करता है, और संभवतः आप Rstudio का उपयोग कर रहे हैं या नहीं।
JDL

@ जेडएलएल scan: ओह, साफ-सुथरे, दस्तावेज में इस बात का जिक्र नहीं है! दुर्भाग्य scanसे अभी भी कुछ पार्सिंग प्रदर्शन करेंगे ताकि यह सभी इनपुट के साथ काम न करे। वैसे भी, scan('stdin',w='')ठीक उसी लंबाई के रूप में होता है readLines('stdin')q: R 3.4.4 कहता है "त्रुटि में q (" y "): 'सहेजें' का अपरिचित मूल्य।
कोनराड रुडोल्फ

आह, यह एक Rstudio बात है - मैंने इसे Rstudio में और अलग से टर्मिनल पर आज़माया और यह केवल Rstudio में काम किया।
JDL

2

जावा (JDK 10) , 204 बाइट्स

चेतावनी: किसी भी जावा प्रोग्राम को आपके उपयोगकर्ता नाम के लिए संग्रहीत किसी भी प्राथमिकता को अधिलेखित करता है!

स्टोर, 94 बाइट्स:

interface S{static void main(String[]a){java.util.prefs.Preferences.userRoot().put("",a[0]);}}

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

110 बाइट्स प्राप्त करें:

interface R{static void main(String[]a){System.out.print(java.util.prefs.Preferences.userRoot().get("",""));}}

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

java S foo
java R
foo

यह एक arg के रूप में इनपुट लेकर और java.util.prefs द्वारा प्रदान की गई उपयोगकर्ता प्राथमिकताओं में स्टोर करके स्टोर करता है । यह एक नोड का नामकरण करने के लिए उपयोगकर्ता की रूट नोड को अधिलेखित करता है। यदि आप इसे गैर-अविनाशी रूप से परीक्षण करना चाहते हैं, तो इसे या तो एक फेंकने वाले उपयोगकर्ता नाम से चलाएं या कुंजी को नोड नाम से बदलें।


अच्छा विचार! चूंकि आप जावा 10 का उपयोग कर रहे हैं, इसलिए आप उन्हें लैम्ब्डा एक्सप्रेशन बनाकर छोटा कर सकते हैं। इसके अलावा अगर आपकी बाइट गिनती में शामिल नहीं है, zतो आपको इसे कार्यक्रमों और TIO से हटा देना चाहिए। लोगों को चेतावनी देने के बजाय सबमिशन के शीर्ष पर एक चेतावनी देने पर विचार करें। सुनिश्चित करें कि TIO में आपके 94- और 110-बाइट समाधान होने चाहिए।
जकॉब

धन्यवाद! मैंने आपके सुझाए गए संपादन किए। मुझे यकीन नहीं है लेकिन मुझे नहीं लगता कि इस सवाल के लिए लंबो एक्सप्रेशन कस्टम IO नियमों को पूरा कर सकता है।
जेरेड के

डी 'ओह। तुम सही हो, मैं इसके बारे में भूल गया।
जैकब

2

सी #, 157 बाइट्स

सेट, 74 बाइट्स:

class P{static void Main(string[]a){System.IO.File.WriteAllLines("a",a);}}

जाओ, 83 बाइट्स:

class P{static void Main(){System.Console.Write(System.IO.File.ReadAllText("a"));}}

-1 बाइट्स विजुअलमेलन
-2 बाइट्स के लिए धन्यवाद लिफडेवेन के लिए धन्यवाद


बाद में उस स्थान को हटा दें "a",, और मुझे संदेह है कि यह पीटा जाएगा :)
विजुअलमेलन

आप का उपयोग करके एक और बाइट बचा सकता है WriteAllLinesदूसरा परम औरa
LiefdeWen

2

पर्ल 5, 48 26 23 बाइट्स

20 + 1 (-n) बाइट्स लिखें

-3 बाइट्स भीड़ के लिए धन्यवाद

open f,">>f";print f

मैं वास्तव में इस एक अंक-वार के बारे में निश्चित नहीं हूं, लेकिन यह मानदंडों को पूरा करता है। पिछली प्रविष्टियों के लिए, केवल cli विकल्पों को गिना गया था, इसलिए मैं इसके साथ जा रहा हूं।

पढ़ें, 0 + 2 बाइट्स

perl -pe "" f

1
आपने -ne1 के साथ स्कोर क्यों किया (यह भी होना चाहिए e), लेकिन -pe2 के साथ? आप उपयोग कर सकते हैं -Eऔर sayइसके बजाय print
सिमबेक

मुझे इसके बारे में बताने के लिए धन्यवाद -E, मैं उस एक से परिचित नहीं था। जैसा कि मैंने क्यों नहीं जाना -ne, यह उस एक के लिए है, मैं वास्तव में एक फ़ाइल से चल रहा हूं। तो, ऐसा लगेगा कि perl -n w.plअगर यह पीसीजी समुदाय के मानकों के खिलाफ जाता है, तो मैं अपने उत्तर को तदनुसार संपादित कर सकता हूं।
जियोफ्री एच।

नहीं यह ठीक है। हम अतिरिक्त कमांड लाइन तर्कों के लिए एक मेल जोड़ते हैं, इसलिए यह ठीक है।
14

2
">>","f"-> ">>f"बचाता 3 चार
भीड़

1

अटैच , 23 + 16 = 39 बाइट्स

बस लिखने के लिए STDIN लिखता है A, फिर फ़ाइल पढ़ता है A

store.@:

$A&FileWrite!AllInput[]

retrieve.@:

Echo!FileRead!$A

परिक्षण

C:\Users\conorob\Programming\attache (master -> origin)
λ echo testing | attache store.@

C:\Users\conorob\Programming\attache (master -> origin)
λ attache retrieve.@
testing

1

लुआ, 57 53 51 बाइट्स

स्टोर, 27 बाइट्स

io.open("x","w"):write(...)

पुनः प्राप्त, 24 बाइट्स

print(io.open"x":read())

1

माणिक

स्टोर (24 बाइट्स)

File.write('a', ARGV[0])

पुनः प्राप्त (16 बाइट्स)

p File.read('a')

4
सवाल STDIN से इनपुट को संग्रहीत करने के लिए कहता है, न कि तर्कों
फेरीबग

जब से मैंने IO को तर्कों सहित वैकल्पिक अनुमति देने के लिए संपादित किया है।
जारेड के

1
File.write'a',getsऔर p File.read'a'थोड़े छोटे हैं;)
डार्कविलेपायर जूल

1

सी (यूनिक्स / जीएनयू), 23 + 23 = 46 बाइट्स

स्टोर, 27 23 बाइट्स

main(){system("dd>f");}

पुनः प्राप्त, 27 23 बाइट्स

main(){system("dd<f");}

यह मूल रूप से सी प्रोग्राम में जोफेल के उत्तर को लपेटता है ।

नोट: ddकमांड कुछ आंकड़ों को आउटपुट करता है stderr, इसलिए जब आप इसे शेल में भोलेपन से चलाते हैं तो आपको कुछ अतिरिक्त आउटपुट दिखाई देंगे। हालाँकि, चूंकि चुनौती केवल यह कहती है कि संग्रहित स्ट्रिंग को प्रस्तुत किया जाना चाहिए stdout, न stderrकि, मैं इसे लेता हूं कि इसे अतिरिक्त आउटपुट की अनुमति है stderr... वैसे भी, stderrउत्पादन को दबाने के ddसाथ-साथ catबाइट की गिनती में वृद्धि करना आसान है। एक-एक करके दो कार्यक्रम।


अपने संकलक के आधार पर आप intवापसी प्रकार को निकालने में सक्षम हो सकते हैं main। पुरानी एएनएसआई सी शैली intमें डिफ़ॉल्ट रिटर्न प्रकार है।
जैकब

@ जाकोब आह, हाँ, बिल्कुल। मैं अंतर्निहित घोषणा पर सजगता से भरोसा करता था system()और उस main()- ouch के बारे में भूल गया था । उस ओर इशारा करने के लिए धन्यवाद :-)
cmaster

1

PHP, 26 + 1 + 21 = 48 बाइट्स

Store.php:

<?fputs(fopen(s,w),$argn);

के साथ भागो echo <input> | php -nF Store.php

Retrieve.php:

<?=fgets(fopen(s,r));

के साथ भागो php -n Retrieve.php


1

C (gcc) , 77 67 + 25 = 92 बाइट्स

मेरे जीसीसी पर केवल कुछ चेतावनियों के साथ संकलन।

store.c

#include<stdio.h>
main(int c,char**v){fputs(v[1],fopen("f","w"));}

संभवत: गोल्फ को शामिल कर सकते हैं, लेकिन मैं यह पता नहीं लगा सका कि कैसे। Segfaults यदि आप इसे कुछ भी पास नहीं करते हैं, लेकिन जो भी हो।

पीटर कॉर्डेस: -1

read.c

main(){system("cat f");}

int*f=fopenकाम करना चाहिए, यानी पॉइंटर प्रकार के बारे में अपने संकलक से झूठ बोलना चाहिए। लेकिन केवल अगर आप 32-बिट सिस्टम के लिए संकलन करते हैं (यानी एक जहां intएक पॉइंटर को पकड़ सकते हैं, जैसे gcc -m32, या gccपूरी तरह से 32-बिट सिस्टम पर)। आप मुख्य के रूप में भी घोषणा कर सकते हैं main(int c,char**v), या हो सकता है int**vक्योंकि आप डेरेफेरिंग नहीं कर रहे हैं।
पीटर कॉर्डेस

main(int c,char**v)काम करता है। मुझे यह भी एहसास हुआ कि मैं कर सकता हूं fputs(v[1],fopen("f","w"), हालांकि इसे अभी भी किसी कारण से stdio की जरूरत है।
SIGSTACKFAULT

यदि आप 32-बिट निष्पादन योग्य संकलित करते हैं तो यह काम करना चाहिए। X86-64 के लिए, कंपाइलर intरिटर्न मान को 32 बिट तक कम कर देगा , फिर उसे पॉइंटर के रूप में साइन-एक्सटेंशन करें। यदि रिटर्न FILE*कम 32 बिट्स में है, तो यह काम करेगा, लेकिन x86-64 लिनक्स पर ऐसा नहीं है।
पीटर कॉर्डेस

यदि आप एक ऐसी प्रणाली पर हैं जहां सभी संकेत आकार में (समान रूप से) समान हैं, तो आप fopenमैन्युअल रूप से घोषित करके शामिल करने से बच सकते हैं । तर्कों के साथ पुराने स्कूल जाना कुछ बाइट्स को भी बचाता है *fopen();main(c,v)int**v;{fputs(v[1],fopen("f","w"));}:।
गैस्ट्रोपनर

1

बैच - 11 बाइट्स

%12>f
type f

इनपुट को एक कमांड-लाइन तर्क के रूप में प्राप्त किया जाता है और जारी रहता है (सीएमडी द्वारा पैरामीटर को निष्पादित करने के प्रयास के बाद से निष्पादन के प्रयास में उत्पन्न त्रुटि संदेश के साथ) f


बैच - 7 बाइट्स (गैर-प्रतिस्पर्धी)

'>%1
dir

फ़ाइल नाम में अमान्य वर्णों के ढेर सारे हैं, इसलिए यह कुछ तार के लिए काम नहीं करेगा, लेकिन यह अनिवार्य रूप से पैरामीटर द्वारा दिए गए फ़ाइल नाम के लिए एक मनमाना चरित्र बचाता है। इसे पढ़ने के लिए, यह निर्देशिका में सभी फाइलों को सूचीबद्ध करता है, जिसमें हमारा स्ट्रिंग भी शामिल है।


1
आपका समाधान STDOUT पर आउटपुट के लिए प्रकट होता है, जो मान्य है। STDERR एक और विकल्प है, जिसकी आवश्यकता नहीं है। इनपुट के आसपास के उद्धरण इसे प्रतिस्पर्धा से रोकते नहीं हैं। एकमात्र सवाल यह है कि क्या उन्हें आपकी बाइट गिनती में गिना जाना चाहिए। मुझे नहीं लगता, क्योंकि वे सवाल के लिए विशिष्ट नहीं हैं। वे बैच लाइन के लिए एक कमांड लाइन आर्ग लेने के लिए मानक बॉयलरप्लेट की तरह लगते हैं, जो उन भाषाओं से अलग नहीं है जिन्हें मानक कमांड लाइन झंडे की आवश्यकता होती है। हो सकता है कि बैच ज्ञान के साथ कोई और व्यक्ति इसमें झंकार करेगा। फिलहाल उन्हें बाइट की गिनती से बाहर कर दें। कोड गोल्फ में आपका स्वागत है! :)
जारेड के
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.