आपको एक तार दिया जाएगा। इसमें 0-9 से 9 अद्वितीय पूर्णांक होंगे। आपको लापता पूर्णांक वापस करना होगा। स्ट्रिंग इस तरह दिखेगा:
123456789
> 0
134567890
> 2
867953120
> 4
आपको एक तार दिया जाएगा। इसमें 0-9 से 9 अद्वितीय पूर्णांक होंगे। आपको लापता पूर्णांक वापस करना होगा। स्ट्रिंग इस तरह दिखेगा:
123456789
> 0
134567890
> 2
867953120
> 4
जवाबों:
@ सौंदर्य बोर्सच को धन्यवाद
`99066**2`.strip
99066**2
एक स्ट्रिंग उत्पन्न करने का एक छोटा तरीका है जिसमें 0 ~ 9 होता है
764**4
दो बाइट्स बचा सकता है।
764**4
गायब है 5
, 8
और9
763**4
=338920744561
lambda s:-int(s,16)%15
एक अंकगणित समाधान। इनपुट स्ट्रिंग को हेक्स के रूप में व्याख्या करता है, इसे नकारता है, और परिणाम modulo 15 लेता है।
⎕D∘~
⎕D
डी इगिट्स
∘
(एक मोनडिक फ़ंक्शन बनाने के लिए निम्न डायडिक फ़ंक्शन के लिए एक बाएं तर्क रखता है)
~
सिवाय [तर्क]
⎕D~⊢
⎕D
डी इगिट्स
~
के सिवाय
⊢
सही तर्क
⎕D~⍞
⎕D
डी इगिट्स
~
के सिवाय
⍞
चरित्र इनपुट
DJMcMayhem की बदौलत 10 बाइट बच गईं!
((([]())[]{}){()()({}[()])}{}[{{}}])
Ascii में सभी अंकों का योग 525 है। यह कार्यक्रम इनपुट को समेटता है और लापता अंक प्राप्त करने के लिए इसे 525 से घटाता है।
((([]())[]{}){()()({}[()])}{} )
525 को आगे बढ़ाएगा। यह इस तथ्य का लाभ उठाता है कि हम जानते हैं कि इनपुट के 9 तत्वों के साथ शुरू होगा। इस का मतलब है कि[]
evaluates to 9 which allows us to get to large numbers like 525 quickly.
अगला हमारे पास है:
[{{}}]
जो इनपुट को सम्मिलित करेगा और उसे कुल से घटाएगा।
negative(sum(input()))
अंत तक चले जाते हैं , तो आप 525 की ऊँचाई तक पहुँचाने के लिए स्टैक-ऊँचाई के निलाद का दुरुपयोग कर सकते हैं। (([][][]()()()){()()({}[()])}{}[{{}}])
आप 10 बाइट्स बचाने चाहिए
(477-).sum.map fromEnum
इसे ऑनलाइन आज़माएं! उपयोग: (477-).sum.map fromEnum $ "123456890"
। 477 अंक 1 से 9 तक के वर्ण कोडों का योग है, जिसमें से 0. को छोड़कर। यह अनाम फ़ंक्शन 477 शून्य से गणना करता है कि लापता होने वाले को खोजने के लिए सभी अंकों के वर्ण कोडों का योग है।
Turning the char digits to ints is one byte longer:
(45-).sum.map(read.pure)
foldl(\a b->a-read[b])45
ḟ
.
Ø
=⎕
, D
=D
, ḟ
=~
, as in ⎕D~'867953120'
.
Sums the ascii codes and subtracts from 48*9+45
->s{477-s.sum}
Use like this
f=->s{477-s.sum}
puts f["123456789"]
Edit 1 byte save thx @Neil, with a much more smarter trick
Xoring all the values from 1 to 9 gives 1. Xor 1 one more time and the result is 0. So, if any single value is missing, the result will be the missing value.
s=>eval([1,...s].join`^`)
Test
f=s=>eval([1,...s].join`^`)
function go() {
var i=I.value;
O.textContent = f(i)
}
go()
<input oninput='go()' value='012987653' id=I>
<pre id=O></pre>
s=>eval([1,...s].join`^`)
saves a byte.
-6 Thanks to Basic Sunset
-2 Thanks to Martin Ender
.
$*_5$*
+`_1|1_
1
Replace every digit with that many _
s and 5 1
s:
.
$*_5$*
Remove all of the _
s and a 1
for each:
+`_1|1_
Count the number of 1
s left:
1
.
.
^
5
^.
$*9¶
.
$*_
+`_¶_
¶
_
_
to 1
to save a byte.)
s=>(15-`0x${s}`%15)%15
पोर्ट ऑफ @ xnor के पाइथन उत्तर, सिवाय इसके कि जावास्क्रिप्ट में केवल एक modulo ऑपरेटर के बजाय एक शेष ऑपरेटर है, इसलिए मैं इसे एक ही चरण में नहीं कर सकता। संपादित करें: @Annauld के लिए 6 बाइट्स सहेजे गए।
s=>[...s].map(c=>r-=c,r=45)|r
;-)
reduce
। वैसे भी +1
s[0]!='0'
, लेकिन पहले से ही एक जवाब है जो उपयोग करता है eval
।
s=>(15-`0x${s}`%15)%15
?
-[-[->-<],]>++.
Try it out here. This solution works on standard Brainfuck (8-bit cells) only, as it relies on wrapping.
It's a rare day when Brainfuck can actually compete, but this challenge just happened to line up with the BF spec pretty well!
Instead of straight-up breaking down this answer, I'd like to step through the iterations I took, because I think it would be more understandable (and more interesting).
Note: this solution is inspired largely by Wheat Wizard's Brain-Flak answer.
In his answer, Wheat Wizard pointed out that the sum of the ASCII values from 0-9 sum to 525. And since standard Brainfuck only has a notion of [0,255], this makes the value 525 % 256 = 13. That is to say, subtracting the ASCII values of the input from 13 nets you the missing digit.
इस कार्यक्रम का पहला संस्करण था:
1. पहली सेल में 13 रखो
। दूसरी सेल में इनपुट ले लो
। दूसरी सेल को पहली सेल से घटाएं
4. यदि इनपुट शेष हैं तो 2 पर जाएं
। पहली सेल प्रिंट करें
और यहाँ सरल समाधान के लिए कोड है:
+++++++++++++ #Set the first cell to 13
>, #Take inputs into the second cell
[[<->-],] #Subtract the second cell from the first cell and repeat until inputs are over
<. #Print the first cell
जैसा कि उनके उत्तर में बताया गया है, क्योंकि हम जानते हैं कि इनपुट की लंबाई 9 होगी, हम उस मान को एक स्थिरांक के रूप में उपयोग कर सकते हैं, और शुरुआत में + के सही लंबे स्ट्रिंग को समाप्त कर सकते हैं।
यह भी कोई फर्क नहीं पड़ता कि हम किस बिंदु पर 13 जोड़ते हैं (धन्यवाद, सराहनीय संपत्ति!), इसलिए हम इसे घटाव और मुद्रण चरणों के साथ मिलाएंगे।
, #Take input to enter the loop
[[->-<], #Subtract the first cell from the second cell
>+<] #Add 1 for each input; totaling 9
>++++ #Add the missing 4 to make 13
. #And print
इस समस्या का मूल जवाब यही था, लेकिन हम बेहतर कर सकते हैं।
दिलचस्प रूप से पर्याप्त है, पिछला उत्तर तब भी काम करता है जब हम एक के बजाय + से शुरू करते हैं,
+[[->-<],>+<]>++++.
लूप शुरू करने के लिए एक सेल में ब्रेनफक को कुछ आवश्यक था । हमने भोलेपन से उस अतिरिक्त 4 को अंत में जोड़ा, जब वह अन्य स्थानों पर जा सकता था।
-[[->-<],>+<]>++.
कुछ पूरी तरह से जानबूझकर (पढ़ें: परीक्षण और त्रुटि) लूप प्रवंचना, के साथ कार्यक्रम शुरू - एक दो दिलचस्प परिणाम की ओर जाता है:
1 + 10 + 2 = 13, और हम मूल उत्तर के साथ समाप्त होते हैं।
इस पर पीछे मुड़कर देखें, तो इस तरह के एक सरल ब्रेनफैक कार्यक्रम के लिए यह एक अत्यधिक लेखन है।
इस समाधान के बारे में थोड़ा और सोचने के बाद, मैं 2 बाइट्स काटने में सक्षम था।
मैं पिछले चरण के बारे में कुछ स्पष्ट करना चाहता था:
लूप में प्रवेश करने के लिए माइनस प्रभावी रूप से 1 जोड़ता है, लेकिन वास्तव में यह क्या कर रहा है दूसरे सेल से 255 घटा रहा है (परिणामस्वरूप 1)।
यह पूर्वव्यापी में स्पष्ट है, लेकिन पहली सेल से 1 घटाना 1 है दूसरे सेल में 1 जोड़ना (क्योंकि पहली सेल में सब कुछ दूसरे सेल से घटाया जाता है।)
-[-[->-<],]>++.
मैं पहले लूप की शुरुआत में "-" जोड़कर "> + <" निकालने में सक्षम था। इसे वहां जाना है, न कि जहां "> + <" था, क्योंकि कार्यक्रम अन्यथा लूप होगा।
477-Tr@ToCharacterCode@#&
शुद्ध कार्य इनपुट के रूप में एक स्ट्रिंग ले रहा है और एक पूर्णांक लौटा रहा है। मैथेमेटिका के पास लंबे समय से कमांड नाम हैं और तार और पूर्णांक के बीच कनवर्ट करने के लिए अनिच्छुक हैं, जो इस चुनौती पर विशेष रूप से बुरा बनाता है। मुझे सबसे अच्छा मिल सकता था लेवल रिवर सेंट के रूबी उत्तर से एल्गोरिथ्म , जो इनपुट स्ट्रिंग के एएससीआईआई कोड के कुल के आधार पर एक संगणना करता है; गणित में, यह केवल एक लंबे कमांड नाम का उपयोग करता है।
<?=trim(32043**2,$argv[1]);
रॉड के उत्तर से चाल का उपयोग करता है ताकि सभी अंकों से युक्त एक स्ट्रिंग उत्पन्न हो और फिर लापता एक को छोड़कर सभी अंकों को हटा दिया जाए।
PHP, 41
for($b=1;$i<9;$b^=$argv[1][$i++]);echo$b;
यह एक xor का उपयोग करता है क्योंकि मैंने इसे अभी तक नहीं देखा है।
32043,32286,33144,35172,35337,35757,35853,37176,37905,38772,39147,39336,40545,42744,43902,44016,45567,45624,46587,48852,49314,49353,50706,53976,54918,55446,55524,55581,55626,56532,57321,58413,58455,58554,59403,60984,61575,61866,62679,62961,63051,63129,65634,65637,66105,66276,67677,68763,68781,69513,71433,72621,75759,76047,76182,77346,78072,78453,80361,80445,81222,81945,83919,84648,85353,85743,85803,86073,87639,88623,89079,89145,89355,89523,90144,90153,90198,91248,91605,92214,94695,95154,96702,97779,98055,98802,99066
मुझे एक छोटा सा बैश समाधान मिला , जो एक दिलचस्प चेकसम दृष्टिकोण का उपयोग करता है:
sum -s|dc -e524?--P
स्पष्टीकरण:
sum
आदेश चेकसम और एक ब्लॉक गिनती प्रिंट करता है। मैं कई विवरण नहीं जानता, लेकिन विकल्प का उपयोग करना-s
(सिस्टम वी एल्गोरिथ्म) का उपयोग करके चेकसम को प्रत्येक इनपुट वर्ण कोड के ASCII योग के बराबर बना देगा। जैसे, समान इनपुट वर्णों का क्रम बदलने पर चेकसम स्थिर रहता है।
यह देखते हुए 867953120
परीक्षण का मामला (पिछले उदाहरण) के रूप में, यहाँ है कैसे स्क्रिप्ट काम करता है:
sum -s
आउटपुट 473 1
। यदि कोई पूर्णांक अनुपलब्ध था, तो चेकसम 525 होगा।dc -e524?
524 और फिर पाइप इनपुट को धक्का देता है। स्टैक है 1 473 524
:। 525 से चेकसम को घटाना है, लेकिन जब से 1 आउटपुट के साथ ही मुझे इसके साथ काम करने की आवश्यकता है।--P
। दो घटाव (524- (473-1)) को लागू करने के बाद, स्टैक है 52
:। 'P' के साथ, मैं उस ASCII कोड के साथ चरित्र को प्रिंट करता हूं: 4
लापता अंक।function m(s)
character(len=10)::s,t
t='0123456789'
do j=1,10
k=0
do i=1,9
if(s(i:i)==t(j:j))k=1
end do
if(k==0)m=j-1
end do
end
बहुत कम नहीं, मुझे डर है।
Ungolfed:
integer function m(s)
implicit none
character(len=9)::s
character(len=10)::t
integer:: i, j, k
t='0123456789'
do j=1,10
k=0
do i=1,9
if (s(i:i) == t(j:j)) k=1
end do
if (k==0) m=j-1
end do
end function m
A,sq-
A, e# The range from 0 to 9: [0 1 2 3 4 5 6 7 8 9]
s e# Cast to a string: "0123456789"
q e# The input
- e# Remove all characters from the range that are in the input
e# Implicit output
के लिए +1 शामिल है -r
s/$/0123456789/
:
s/(.)(.*)\1/\2/
t
s/$/0123456789/ # Append 0123456789
: # Start loop
s/(.)(.*)\1/\2/ # remove a duplicate character
t # loop if something changed
ẹ:Ị↔x
यकीनन कम होना चाहिए (मैं अभी भी उलझन में हूं कि यह क्यों ẹ
आवश्यक है), लेकिन यह सबसे अच्छा है जो मैं कर सकता था।
ẹ:Ị↔x
ẹ Split the input into a list of characters
:Ị Pair that list with the string "0123456789"
↔x Remove all elements of the list from the string
x
कार्यान्वयन पुरानी और बहुत छोटी गाड़ी है, जिसके कारण आपको आवश्यकता है ẹ
।
¬∋ℕ
होना चाहिए जो केवल 3 वर्णों में काम करे - यही मैंने पहले प्रयास किया था - लेकिन इसके कई कारण हैं कि ऐसा क्यों नहीं होता है, और मुझे नहीं लगता कि ब्राचीलॉग को बदलने का कोई प्रशंसनीय तरीका है ताकि यह हो।
¬∋ℕ
काम करना भी संभव नहीं है, जब तक कि विशेष रूप से प्रोग्रामिंग न करें कि आपका क्या मतलब है not in
। ¬
ब्रेजलॉग में प्रोलॉग के बराबर है \+
, और इसका अर्थ "बंद-दुनिया की धारणा के तहत साबित नहीं होने वाला" है, इसके बजाय "मुझे हर चीज के लिए पसंद अंक दें जो इसे सत्यापित नहीं करता है" (जो लगभग हमेशा एक अनंत संख्या में है )
(lambda(s)(- 45(reduce'+ s :key'digit-char-p)))
Ungolfed:
(lambda (s) (- 45 (reduce '+ s :key 'digit-char-p)))
explaination:
(reduce '+ s :key 'digit-char-p)
यह वर्णों के माध्यम से छोरों s
, उन्हें अंकों में परिवर्तित करता है, और उन्हें जोड़ता है। डिजिट-चार-पी, सुविधापूर्वक, चार्ट की संख्या को उसके "सही" मान के रूप में लौटाएं, इसलिए इसका उपयोग परीक्षण या रूपांतरण के रूप में किया जा सकता है।
(- 45 ...)
45 से घटाना उस अंक को वापस देता है जो इनपुट से गायब था।
5v&;52/ni?@.>!&oW+
विस्तारित
5 v
& ;
5 2 / n i ? @ .
> ! & o W + . .
. .
. .
इस तरह की विधि का उपयोग करता है मस्तिष्क-फ्लैक उत्तर ।
स्टैक पर मान 525 बनाएँ 5, 2, समसामयिकी, 5 धक्का, समतल और नकारात्मक को धक्का देकर।
फिर लगातार इनपुट प्राप्त करें और इनपुट के अंत तक जोड़ दें।
अंतिम इनपुट निकालें, नकारात्मक जोड़ें (सकारात्मक बनाएं) अंतिम परिणाम जोड़ें, चरित्र और पड़ाव का उत्पादन करें।
-525 अप से काम करने का कारण यह है कि प्रत्येक इनपुट पुनरावृति के लिए वर्ण आउटपुट हिट होता है। चूंकि मान ऋणात्मक है, इसलिए कुछ भी आउटपुट नहीं है जब तक कि लूप बाहर नहीं निकलता है और नकारात्मक मूल्य को सकारात्मक बनाया जाता है।
इनपुट सेल में दर्ज किया गया है
A1
।
कोड:
=REGEXEXTRACT(4&2^29,"[^"&A1&"]")
स्टीव कैस की बदौलत 6 बाइट्स बचाए।
पिछला कोड:
=REGEXEXTRACT("0123456789","[^"&A1&"]")
परिणाम:
=REGEXEXTRACT(0&49^9,"[^"&A1&"]")
इसी तरह का तर्क देते हुए, एक वैध समाधान भी है। अद्यतन उत्तर।
मैंने कुछ बेहतर गणित करके कार्यक्रम को 1 पंक्ति और 1 बाइट पर ले जाकर 1 बाइट को बचाया
~+;@.%a--7;#
एएससीआईआई मानों का योग 477 से 468 तक होता है, जिसके आधार पर संख्या गायब है। 7 से इसे घटाकर, हमें -470 से -461 रेंज मिलती है। इस संख्या को 10 तक संशोधित करके, हमें 0 - 9 की सीमा मिलती है, जिसे हम बाद में प्रिंट कर सकते हैं।
~+; ;# Sums the ASCII values of all characters to stdIn
~ # The # doesn't skip over the ~ because it's on the end of a line
~ Once EOF is hit, the ~ reverses the IP's direction
;# Jump the ; that was used before
--7 Subtract the sum from 7 (really just 0 - (sum - 7))
%a Mod it by 10
@. Print and exit
पूर्णांक इनपुट लेने के बजाय ASCII मानों का उपयोग करने का कारण यह है क्योंकि &
यह कोशिश में आदेश EOF पर ऑनलाइन रुकता है (भले ही इसे आईपी को उलट देना चाहिए)। ~
सही ढंग से, हालांकि काम करता है।
#v~+
@>'i5*--,
सभी 10 अंकों के ASCII मानों का योग 525 है। 525 से दिए गए अंकों के योग को घटाकर, हमें गायब चरित्र का ASCII मान मिलता है।
#v~+ Sums the ASCII values of all characters on stdIn
Moves to the next line when this is done
>'i5* Pushes 525 (105 * 5)
-- Subtracts the sum from 525
@ , Prints and exits
param($n)0..9|?{$n-notmatch$_}
इनपुट लेता है $n
, एक सीमा 0..9
(यानी 0, 1, 2 ... 9
) का निर्माण करता है, फिर उस संख्या को निकालने के लिए एक Where-Object
खंड ( |?{...}
) का उपयोग करता है जो रेगेक्स करता है -notmatch
। यह पाइपलाइन पर छोड़ दिया गया है, आउटपुट निहित है।
-jkUT
-jkUT
T # 10
U # The unary range of ten: [0,1,..,9]
jk # join that on the empty string
- # set minus
"-jUT" भी थोड़े काम करता है लेकिन हर इंट के लिए नयापन पैदा करता है।