यह स्पेनिश समय है!


24

मेरे पास एक सरल कार्य है जिसे कोड के माध्यम से लागू करना अपेक्षाकृत आसान होना चाहिए। आपका लक्ष्य एक प्रोग्राम लिखना है जो स्पेनिश में लिखे गए समय को एचएच: एमएम प्रारूप में दिए गए समय में आउटपुट करेगा। बहुत से लोग यह नहीं जानते कि यह कैसे करना है, इसलिए मैं विस्तार से बताऊंगा।

स्पेनिश में समय काफी तार्किक है। यह आमतौर पर "Es la / Son las (घंटा) y (मिनट) के पैटर्न का अनुसरण करता है।" घंटे 12-घंटे के प्रारूप में होते हैं, और यदि घंटे 1 (यानी एक बजे) है , तो "Es la" का उपयोग किया जाता है। मिनट एक अलग कहानी है। यदि मिनट 30 से कम है, तो इसे ऊपर दिखाए गए अनुसार दर्शाया गया है। यदि मिनट 30 से अधिक है, फिर भी, घंटे को गोल किया जाता है और मिनट घटाया जाता है। उदाहरण के लिए, 7:35 का अनुवाद "8 घंटे शून्य से 25 मिनट" के बराबर किया जाता है। कुछ और उदाहरण नीचे दिए जाएंगे। स्पैनिश नंबरों की सूची जो आवश्यक हैं, उन्हें यहां पाया जा सकता है । कुछ नंबरों पर एक्सेंट हैं, लेकिन ये आवश्यक नहीं हैं।

ध्यान दें: स्रोत "यूनो" कहता है, लेकिन व्याकरणिक रूप से सही होने के लिए इसे "यूएनए" होना चाहिए। यह अब तक किसी भी उत्तर को प्रभावित नहीं करना चाहिए।

नोट 2: इसके अलावा, "सेरो" आवश्यक नहीं है। यदि आपका प्रोग्राम "Es la una" या "Son las tres," है जो मेरे साथ ठीक है। इन नियम परिवर्तनों के लिए क्षमा करें।

नियम

  • इनपुट आपकी भाषा में STDIN या समकक्ष के माध्यम से प्रदान किया जाएगा।
  • बाहरी पुस्तकालयों से कोई पठन नहीं।
  • आपका कोड अमान्य इनपुट के साथ कुछ भी कर सकता है।

बोनस

  • -10 यदि आपका कोड इन अतिरिक्त वाक्यांशों को जोड़ता है - "y cuarto" के लिए: 15, "y मीडिया" के लिए: 30, और "menos cuarto" के लिए: 45 (राउंड अप)।
  • -15 यदि आपका कोड "डे ला मैना" और "डी ला टार्डे" के साथ प्रतिक्रिया कर रहा है, तो तदनुसार एएम और पीएम को संभाल सकते हैं।
  • -15 यदि कोई इनपुट प्रदान नहीं किया जाता है तो आपका कोड वर्तमान समय का अनुवाद कर सकता है।

स्कोरिंग

  • यह एक कोड-गोल्फ चुनौती है, और इसे पात्रों द्वारा नहीं, बाइट्स द्वारा बनाया जाएगा।

उदाहरण

इनपुट: 8:10 आउटपुट:Son las ocho y diez.

इनपुट: 6:45 आउटपुट:Son las siete menos quince (or cuarto).

इनपुट: 1:29 आउटपुट:Es la una y veintinueve.

इनपुट: 12:55 आउटपुट:Es la una menos cinco.

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


आपकी जानकारी के लिए, आप सैंडबॉक्स में पोस्ट करने से पहले प्रतिक्रिया प्राप्त कर सकते हैं ।
स्ट्रैच

1
@ शेपर मुझे इसमें शक है। संभवतः इसके लिए पर्याप्त संख्याएँ हैं जिन्हें होने के लिए हार्डकोड किया जाना चाहिए - कम से कम 45 अक्षर मूल्य, यहां तक ​​कि पैटर्न के लिए भी।
mdc32

1
@ डेनिस हम्म ... मुझे लगता है कि या तो ठीक होगा। Es la una y ceroबहुत दोहराव है, इसलिए मैं आपकी बात देखता हूं। मैंने इसे निर्दिष्ट नहीं किया, इसलिए मुझे लगता है कि या तो एक ठीक होगा। प्रतिक्रिया के लिए धन्यवाद।
mdc32

1
आपको 01:21एक परीक्षण के मामले के रूप में जोड़ना चाहिए , क्योंकि कम से कम एक उत्तर देने वाले ने यूना बनाम अनो के बारे में जो कुछ भी कहा था, उससे भ्रमित था ।
पीटर टेलर

3
दूसरा बोनस है (लगभग?) इसके लायक कभी नहीं क्योंकि वाक्यांश "डी ला", "मनाना" और "टार्डे" अकेले 16 बाइट्स तक गिने जाते हैं।
ब्रिटिश

जवाबों:


9

जावास्क्रिप्ट (ईएस 6) 308 316

Edit2 बग फिक्स , बोनस का दावा करने के लिए संपादित करें
पॉपअप के माध्यम से I / O के साथ एक कार्यक्रम के रूप में

s='media0uno0dos0tres0cuatro0cinco0seis0siete0ocho0nueve0diez0once0doce0trece0catorce0cuarto0dieci0veint'.split(0),
N=n=>n<16?s[n]:n<20?s[16]+s[n-10]:n>29?s[0]:s[17]+(n>20?'i'+s[n-20]:'e'),
[h,m]=prompt().split(':'),
alert(((h=(10-~h+(m>30))%12)?'Son las '+N(1+h):'Es la una')+(m>30?' menos '+N(60-m):-m?' y '+N(~~m):''))

एक परीक्षण योग्य कार्य के रूप में

F=t=>(
  s='media0uno0dos0tres0cuatro0cinco0seis0siete0ocho0nueve0diez0once0doce0trece0catorce0cuarto0dieci0veint'.split(0),
  N=n=>n<16?s[n]:n<20?s[16]+s[n-10]:n>29?s[0]:s[17]+(n>20?'i'+s[n-20]:'e'),
  [h,m]=t.split(':'),
  ((h=(10-~h+(m>30))%12)?'Son las '+N(1+h):'Es la una')+(m>30?' menos '+N(60-m):-m?' y '+N(~~m):'')
)

फायरफॉक्स / फायरबग कंसोल में टेस्ट

for(i=0;i<13;i++)
{
   console.log(F(i+':'+i)+'. '+F(i+':'+(i+15))+'. '+F(i+':'+(i+30))+'. '+F(i+':'+(i+45)))
}

उत्पादन

Son las doce. Son las doce y cuarto. Son las doce y media. Es la una menos cuarto
Es la una y uno. Es la una y dieciseis. Son las dos menos veintinueve. Son las dos menos catorce
Son las dos y dos. Son las dos y diecisiete. Son las tres menos veintiocho. Son las tres menos trece
Son las tres y tres. Son las tres y dieciocho. Son las cuatro menos veintisiete. Son las cuatro menos doce
Son las cuatro y cuatro. Son las cuatro y diecinueve. Son las cinco menos veintiseis. Son las cinco menos once
Son las cinco y cinco. Son las cinco y veinte. Son las seis menos veinticinco. Son las seis menos diez
Son las seis y seis. Son las seis y veintiuno. Son las siete menos veinticuatro. Son las siete menos nueve
Son las siete y siete. Son las siete y veintidos. Son las ocho menos veintitres. Son las ocho menos ocho
Son las ocho y ocho. Son las ocho y veintitres. Son las nueve menos veintidos. Son las nueve menos siete
Son las nueve y nueve. Son las nueve y veinticuatro. Son las diez menos veintiuno. Son las diez menos seis
Son las diez y diez. Son las diez y veinticinco. Son las once menos veinte. Son las once menos cinco
Son las once y once. Son las once y veintiseis. Son las doce menos diecinueve. Son las doce menos cuatro
Son las doce y doce. Son las doce y veintisiete. Es la una menos dieciocho. Es la una menos tres

8

हां, दुनिया की सबसे बुरी गोल्फर द्वारा कोड की गई गोल्फ प्रतियोगिता में प्रदर्शित होने वाली कम से कम भाषा, वापस आ गई है!

जावा - 676 ​​बाइट्स (716-10-15-15)

golfed:

class A{void main(String[]a){java.util.Calendar c=java.util.Calendar.getInstance();int h,m;String s="";h=c.get(c.HOUR);m=c.get(c.MINUTE);String[]e={"doce","una","dos","tres","quatro","cinco","ses","siete","ocho","nueve","diez","once","doce","trece","catorce","quarto","çseís","çsiete","çocho","çnueve","xe","xiuno","xidós","xitrés","xiquatro","xicinco","xiséis","xisiete","xiocho","xinueve","media"};for(int i=0;++i<30;e[i]=e[i].replace("ç","dieci"),e[i]=e[i].replace("x","vient"));s+=(h==1&m<30|h==12&m>30)?"Es la ":"Son las ";s+=(m<=30)?e[h]:(h==12&m>30)?e[1]:e[h+1];s+=(m==0)?" certas":(m<=30)?" y "+e[m]:" menos "+e[60-m];s+=(c.get(c.AM_PM)==0)?" de la mañana.":" de la tarde.";System.out.println(s);}}

Ungolfed:

public class A {

    public static void main(String[] a) {
        java.util.Calendar c = java.util.Calendar.getInstance();
        int h, m;
        String s = "";
        h = c.get(c.HOUR);
        m = c.get(c.MINUTE);
        String[] e = {"doce", "una", "dos", "tres", "quatro", "cinco", "ses", "siete", "ocho", "nueve", "diez", "once", "doce", "trece", "catorce", "quarto", "çseís", "çsiete", "çocho", "çnueve", "xe", "xiuno", "xidós", "xitrés", "xiquatro", "xicinco", "xiséis", "xisiete", "xiocho", "xinueve", "media"};
        for (int i = 0; ++i < 30; e[i] = e[i].replace("ç", "dieci"), e[i] = e[i].replace("x", "vient"));
        s += (h == 1 & m < 30 | h == 12 & m > 30) ? "Es la " : "Son las ";
        s += (m <= 30) ? e[h] : (h == 12 & m > 30) ? e[1] : e[h + 1];
        s += (m == 0) ? " certas" : (m <= 30) ? " y " + e[m] : " menos " + e[60 - m];
        s += (c.get(c.AM_PM) == 0) ? " de la mañana." : " de la tarde.";
        System.out.println(s);
    }
}

के साथ सौदा quartoऔर media, AM / PM के साथ और कोई इनपुट है। इसलिए मैं सभी बोनस का दावा कर सकता हूं, भले ही, अगर मैंने उन सुविधाओं को लागू नहीं किया, तो मेरे पास कम स्कोर होगा, योग्य। facepalms


6

पायथन 3: 294 वर्ण - 10 = 284

h,m=map(int,input().split(':'))
t="y"
d="yunoydosytresycuatroycincoyseisysieteyochoynueveydiezyonceydoceytreceycatorceycuarto".split(t)*2
if m>30:h=h%12+1;m=60-m;t="menos"
print(["Es la una","Son las "+d[h]][h>1],t,[d[m]or"cero",["dieci","veint"+'ei'[m>20],"media"][m//10-1]+d[m%10]][m>15]+".")

यह "क्यूर्टो" और "मीडिया" का उपयोग करने के लिए दस-बिंदु बोनस प्राप्त करता है

हम घंटों और मिनटों को पढ़ते हैं int एस के । यदि मिनट 30 से ऊपर हैं, तो हम अगले घंटे में चले जाते हैं, 60 से मिनट दूर करते हैं, और संयोजन को "मेनोस" में बदलते हैं।

सूची d15. हम बनाने के लिए ऊपर स्पेनिश संख्याओं का अनुवाद है d[0]हो ''"diecicero" जैसी चीजों को रोकने के लिए। यह अजीब तरह split(' ')से एक प्रारंभिक स्थान के साथ कॉल करके किया जाता है; नियमितsplit इसे अनदेखा करेगा। शून्य मिनट के मामले को बाद में संभाला जाता है।

15 से ऊपर की संख्या प्राप्त करने के लिए, हम दस-अंकीय स्ट्रिंग को उपयुक्त एक-अंकीय स्ट्रिंग के साथ जोड़ते हैं। 15तथा30 बिना किसी कीमत के "मीडिया" और "कुर्तो" के रूप में लिखे गए हैं।

पायथन 3 पायथन 2: -4 के inputबदले एक raw_inputचार्जर देता है, प्रिंट के लिए +2 के बदले +2 //


मुझे यह कहते हुए दुख हो रहा है कि यह उससे कहीं अधिक जटिल है। 01:21 la una y veintiuno होना चाहिए क्योंकि घंटे स्त्रीलिंग होते हैं लेकिन मिनट पुल्लिंग होते हैं।
पीटर टेलर

@PeterTaylor मैं देखता हूं। क्या यूएनओ / यूएएन केवल संख्या प्रभावित है?
xnor

हां, हालांकि अगर यह सैकड़ों की संख्या में चला गया तो अन्य होंगे।
पीटर टेलर

@PeterTaylor फिक्स्ड, 5 वर्णों के लिए।
16

@ edc65 ओह, मैं वास्तविक परिवर्तन में पेस्ट करने की भूल unaकरने के लिए uno, अब काम करना चाहिए।
Xnor

5

PHP, 351 349 360 - 15 = 345 बाइट्स

<?$a=split(~ß,~œšßŠ‘ß›Œß‹šŒßœŠž‹ßœ–‘œßŒš–ŒßŒ–š‹šßœ—ß‘Šš‰šß›–š…ß‘œšß›œšß‹šœšßœž‹œšßŽŠ–‘œšß›–šœ–߉š–‘‹–ß‹š–‘‹ž)?><?=preg_filter(~Ð×ÑÔÖÅ×ÑÔÖК,'(($h=($1-($k=$2<31))%12+1)>1?~¬‘ß“žŒß:~ºŒß“žß).$a[$h].($k?~߆ß:~ß’š‘Œß).(($m=$k?$2+0:60-$2)<16?$a[$m]:($m<20?$a[16].$a[$m%10]:($m<21?viente:($m<30?$a[17].$a[$m%10]:$a[18])))).~Ñ',$_GET[0]?:date(~·Å–));

यह प्रोग्राम कमांड लाइन नहीं है: यह $ _GET [0] के माध्यम से इनपुट लेता है। आपको अपने php.ini में नोटिस को निष्क्रिय करना पड़ सकता है। अब बिना किसी इनपुट के ऑटो समय के साथ आता है, नीट द डार्क एबसोल के लिए धन्यवाद।

उपयोग की गई ट्रिक्स:

~(...) बिटवाइन को एक स्ट्रिंग में इन्वर्ट करके एक बाइट बचाता है, क्योंकि आपको उद्धरण चिह्नों की आवश्यकता नहीं है क्योंकि PHP आमतौर पर सभी ASCII को 0x80 से 0xFF तक मान लेती है।

<?=preg_filter(...,...): <?=लेखन के लिए एक शॉर्टकट है <? echopreg_filter()आमतौर पर एक रेगेक्स का उपयोग करके स्ट्रिंग पर प्रतिस्थापन लागू होता है, लेकिन हम PHP कोड के परिणामस्वरूप परिणामी स्ट्रिंग का मूल्यांकन करने के लिए मूल्यह्रास / ई संशोधक का उपयोग कर सकते हैं। इसलिए, इनपुट स्ट्रिंग को दो अलग-अलग चर में विभाजित करने के बजाय, हम मिलान किए गए इनपुट स्ट्रिंग पर बैकरेफरेंस ($ 1 और $ 2) का उपयोग कर सकते हैं, बड़ी मात्रा में बाइट्स बचाते हैं।


2
यदि आप $_GET[0]?:date(~·Å–)अपने स्कोर से 3 घटाते हैं, तो आप -15 बोनस का दावा कर सकते हैं ।
15:32 बजे नीट द डार्क एबसोल

धन्यवाद। मैंने वह और एक अन्य मामूली सुधार किया है।
1

5

सी ++: 474 ... 422 411 बाइट्स

यह संस्करण क्यूर्टो / मीडिया बोनस (-10) को भुना रहा है।

#include<cstdlib>
#include<cstdio>
int main(int u,char**v){char*b[]={"cero","una","dos","tres","cuatro","cinco","seis","siete","ocho","nueve","diez","once","doce","trece","catorce","cuarto","dieci","veinti","media",0,"veinte"};int h=atoi(v[1]),m=atoi(v[1]+2+(v[1][2]>57)),n=m>30,o;h=n?h%12+1:h;m=o=n?60-m:m;if(u=m>15&m!=20)o=m%10;printf("%s %s %s %s%s",h>1?"Son las":"Es la",b[h],n?"menos":"y",u?b[m/10+15]:"",b[o?o:m]);}

कोड गोल्फिंग में मेरा पहला प्रयास! इस सप्ताह के अंत में इसे बेहतर बनाने की कोशिश करेंगे।

Ungolfed:

#include<cstdlib>
#include<cstdio>
int main(int u,char**v)
{
char*b[]={"cero","una","dos","tres","cuatro","cinco","seis","siete","ocho","nueve","diez","once","doce","trece","catorce","cuarto","dieci","veinti","media",0,"veinte"};
int h=atoi(v[1]),m=atoi(v[1]+2+(v[1][2]>57)),n=m>30,o;
h=n?h%12+1:h;
m=o=n?60-m:m;
if(u=m>15&m!=20)o=m%10;
printf("%s %s %s %s%s",h>1?"Son las":"Es la",b[h],n?"menos":"y",u?b[m/10+15]:"",b[o?o:m]);
}

1
आप नहीं कर सकेm%=10
टिमटेक

अच्छी बात! दुर्भाग्य से मेरे नए संशोधन में मुझे उस मूल्य को एक भिन्न चर पर असाइन करना है, इसलिए मैं नहीं कर सकता।
बीएमएसी

ठीक है, बस सोच रहा था :)
टिमटेक

4

लुआ, ४५० - १० (क्यूर्टो / मीडिया) - १५ (मनाना / तारदे) = ४२५

n={'uno','dos','tres','cuatro','cinco','seis','siete','ocho','nueve','diez','once','doce','trece','catorce','cuarto',[20]='veinte',[30]='media'}for i=1,9 do n[i+10]=n[i+10]or'dieci'..n[i]n[i+20]='veinti'..n[i]end H,M=io.read():match('(%d+):(%d+)')H,M=H+0,M+0 X,Y='tarde',' y 'if H<12 then X='manana'end if M>30 then H,M,Y=H+1,60-M,' menos 'end H=(H-1)%12+1 S=H==1 and'es la una'or'son las '..n[H]if M>0 then S=S..Y..n[M]end S=S..' de la '..X print(S)
  • 21-29 के लिए जनरेटर को फिर से लिखकर 12 बाइट गिराए गए।
  • के H>=12साथ बदलकर H<12और निर्भर अभिव्यक्ति को बदलकर 1 और गिरा दिया गया।
  • एक समारोह (बुराई, लेकिन गोल्फिंग के हित में :) से वैश्विक नाम स्थान को प्रदूषित करके 4 और गिरा।
  • रेगेक्स फिक्स्ड, मैं बृहदान्त्र भूल गया। हालाँकि, बाइट की गिनती नहीं बदलती है।
  • शून्य मिनट के मामले को तय किया, table.concatस्ट्रिंग ऑप्स के लिए स्वैप किया गया, और @ edc65 के सुझाव को जोड़ा, अंततः 22 बाइट्स जोड़े।
  • मैं शर्मिंदा हूं। पुलिंग functionमुख्य हिस्सा में बाहर शरीर एक whopping द्वारा लंबाई कम 15 बाइट्स

घंटों के लिए 'ऊना' का उपयोग करना चाहिए, मिनटों के लिए 'ऊनो' का। तो '01: 01 'देना चाहिएEs la una y uno
edc65

3

डी - 484 बाइट्स

import std.stdio,std.conv,std.string;void main(){auto n="cero una dos tres cuatro cinco seis siete ocho nueve diez once doce trece catorce quince dieciséis diecisiete dieciocho diecinueve e iuno idos itres icuatro icinco iseis isiete iocho inueve treinta".split;auto p=stdin.readln()[0..$-1];int b=to!int(p[0..$-3]),a=to!int(p[$-2..$]);auto c=a;b=a>30?b+1:b;b%=12;a=a>30?60-a:a;writefln("%s %s %s %s", b==1||b==12?"Es la":"Son las",n[b],c>30?"menos":"y",(a/10==2?"vient":"")~n[a]);}

घंटों के लिए 'ऊना' का उपयोग करना चाहिए, मिनटों के लिए 'ऊनो' का। तो '01: 01 'देना चाहिएEs la una y uno
edc65

3

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

d='cero uno dos tres cuatro cinco seis siete ocho nueve diez once doce trece catorce quince dieciseis diecisiete dieciocho diecinueve veinte xuno xdos xtres xcuatro xcinco xseis xsiete xocho xnueve treinta';d=str(d.replace('x','veinti')).split();t=input().split(':');i=int(t[1]);j=int(t[0]);print(["Son las","Es la"][1<(2*j+i/30)%24<=3],[d[[j%12+1,j][i<31]],'una'][j==1],'y'if i<31 else'menos',d[min(i,60-i)])

तार की लंबी सूची को छोटा किया जा सकता है जैसे'string1 string2 string3'.split()
xnor

@xnor ठीक है, धन्यवाद!
होशे 250

@ hosch250 इसके अलावा, सुनिश्चित करें कि आप फिर से मूल पोस्ट में टिप्पणियों का पालन कर रहे हैं। मैं संभवतः कई छोटे नियम परिवर्तन कर रहा हूं, और ये संभवतः आपको गोल्फ में मदद करेंगे।
mdc32

@ mdc32 अभी समायोजन कर रहा है। मुझे वैसे भी कुछ त्रुटियां थीं।
होशे 250

2
आप छोटा कर सकते हैं d[j]if i<31 else d[(j+1)%12]करने के लिए d[(j+(i>30))%12]। सामान्य तौर पर, यदि आपके दो विकल्पों में समान संरचना है, तो आप अक्सर एक सरल अभिव्यक्ति कर सकते हैं जो बूलियन के आधार पर प्रत्येक संबंधित के बराबर होती है।
xnor

3

रूबी, 313 (338 - 15 - 10)

यह समाधान वर्तमान समय का अनुवाद करता है जब कोई इनपुट नहीं दिया गया था और तीन वाक्यांशों को जोड़ता है "y cuarto", "y media" और "menos cuarto"।

require'time'
t,x,s=Time,$*[0],%w[cero una dos tres cuatro cinco seis siete ocho nueve diez once doce trece catorce cuarto]
1.upto(9){|i|i>5?s[10+i]="dieci"+s[i]:0;s[20+i]="veinti"+s[i]}
s[20]="veinte"
s<<"media"
c=x ?t.parse(x):t.new
h,m=c.hour%12,c.min
m<31?(a=" y "):(h,m,a=h+1,60-m," menos ")
$><<(h<2?"Es la ":"Son las ")+s[h]+a+s[m]

क्या यह काम करता है? Ideone में कोशिश की, इनपुट '01: 01 ', वर्तमान समय 20:09, आउटपुट:Son las ocho y diecioch
edc65

सभी परीक्षण मामले मेरे लिए स्थानीय स्तर पर पारित हुए। मुझे लगता है कि संख्याओं की नकल करने में कुछ गड़बड़ हुई, इसलिए मैं इसे ठीक करूंगा।
ब्रिटिश

1
"सीते" को "नीच" होना चाहिए और "नीव" को "न्यूवे" होना चाहिए
जेएमयू

2

बैश 423

(४३३ - १० = ४२३, विकृति विज्ञान और क्यूर्टो को हटाकर हम ३ )१ तक जा सकते हैं)

IFS=: read h m
s=y
m=${m#0}
[ $m -gt 30 ]&&h=$(($h+1))&&s=menos
[ -z ${m%0} ]&&s=en&&m=punto
n[0]=0
o[0]=0
S=" séis siete ocho nueve"
n=(punto una dos trés cuatro cinco $S diez {on,do,tre,cator,quin}ce ${S// / dieci} veinte)
n=($(eval echo "${n[@]}" veinti\$\{n[{1..9}]\}))
n[3]=tres;n[6]=seis
n=(${n[@]} media\  $(tac -s' '<<<${n[@]}))
o=("${n[@]/q*/cuarto}")
a=Son\ las
[ $h = 1 ]&&a=Es\ la
echo $a ${n[$h]/p*/cero} $s ${o[$m]/%a/o}

यह पहले से ही घंटों के लिए 'यूना' और मिनटों के लिए 'यूनो' का उपयोग करता है। अधिक ध्यान से देखें :)
11ngel

क्षमा करें, यह एक नज़र में स्पष्ट नहीं है और बैश खिड़कियों में परीक्षण करना मुश्किल है। फिर +1।
edc65

@ edc66, अध्यादेश स्त्रीलिंग में हैं, तो $ {o [$ m] /% a / o} अनुगामी को मिनटों के लिए o के साथ बदल देता है।
elngel

2

पर्ल - 297 - 10 + 1 = 288 (गिनती के p ध्वज की )

संपादित करें: @guifa के लिए धन्यवाद, अब मैं एक बोनस का दावा कर सकता हूं :)

#!/usr/bin/perl -p
sub n{($_=shift)%10?(once,doce,trece,catorce,cuarto)[$_>9?$_-11:5]||('',dieci,veinti)[$_/10].(0,un.pop,dos,tres,cuatro,cinco,seis,siete,ocho,nueve)[$_%10]:(cero,diez,veinte,media)[$_/10]}/:/;$a=$`%12;$b=$';$c=$b>30?(++$a,$b=60-$b,menos):'y';$_=($a-1?'Son las ':'Es la ').n($a,a)." $c ".n($b,o).'.'

यहाँ पठनीयता के लिए कई लाइनों में एक ही कोड है:

sub n {
        ($_ = shift) % 10
            ? (once, doce, trece, catorce, cuarto)[$_ > 9 ? $_ -11 : 5]
                || ('', dieci, veinti)[$_ / 10]
                . (0, un.pop, dos, tres, cuatro, cinco, seis, siete, ocho, nueve)[$_ % 10]
            : (cero, diez, veinte, media)[$_ / 10]
}
/:/;
$a = $` % 12;
$b = $';
$c = $b > 30 ? (++$a, $b = 60 - $b, menos) : 'y';
$_ = ($a - 1 ? 'Son las ' : 'Es la ') . n($a, a) . " $c " . n($b, o) . '.'

घंटों के लिए 'ऊना' का उपयोग करना चाहिए, मिनटों के लिए 'ऊनो' का। तो '01: 01 '- देना चाहिएEs la una y uno
edc65

यदि आप "क्विंट" को "क्यूर्टो" और "ट्रेइंटा" को "मीडिया" में बदल देते हैं, तो आप एक -10 बोनस करेंगे।
user0721090601

@ edc65 मुझे आशा है कि यह अब ठीक है ...
core1024

0

स्कैला 652 बाइट्स - 25

import java.util.Scanner
object S extends App{val s=new Scanner(System.in).useDelimiter("[:\n]")
var h=s.nextInt
var m=s.nextInt
if(m>30)m-=60 else h-=1
val n=m.abs
h%=24
val p=h%12
val l=List("una","dos","tres","cuatro","cinco","seis","siete","ocho","nueve","diez","once","doce","trece","catorce","cuarto")
val k=List("úno","dós","trés",l(3),l(4),"séis",l(6),"ócho",l(8))
println(s"""${if(p==0)"Es la"else"Son las"} ${l(p)} ${if(m>0)"y "else if(m<0)"menos "}${if(n==1)"uno"else if(n==0)""else if(n<=15)l(n-1) else if(n==30)"media"else if(n<20)"dieci"+k(n-11)else if(n==20)"veinte"else"veinti"+k(n-21)} de la ${if(h<12)"mañana"else"tarde"}.""")}

0

पायथ : 277 एक गुच्छा अधिक 234 - 10 (क्यूर्टो / मीडिया बोनस) = 224 बाइट्स

अब मूल से 50 बाइट्स कम!

=H" y "ANkmsdcz\:Kc"cero uno dos tres cuatro cinco seis siete ocho nueve diez once doce trece catorce cuarto veinte"dI>k30=k-60k=H" menos "=N?1qN12+N1)++?+"Son las "@KN>N1"Es la una"H??eKqk20?@Kk<k16+?"dieci"<k21+PeK\i@K%kT<k30"media"

पागलपन के लिए लंबे समय तक लेकिन ऐसा इसलिए है क्योंकि कुछ कच्चे डेटा हैं। शायद आगे भी गोल्फ हो सकता है। घंटों, y / menos, मिनटों के दसियों अंकों और मिनटों के अंकों के बंटवारे की स्पष्ट तकनीक का उपयोग करता है और फिर अनुवाद सरणी का उपयोग करते हुए संख्याओं का अनुवाद करता है और बाकी सब कुछ ternaries के क्रैप-टन का उपयोग करके।

=H" y "                 Set H to " y "
A                       Double Assignment
 Nk                     The variables N and k (hours and mins)
 m  cz\:                Map input split by ":"
  sd                    Make both int
Kc"..."d                Set K to string split by spaces
I>k30                   If k>30
     =k-60k             Set k to 60-k
     =H" menos "        Set k to menos instead of y
     =N                 Set N
      ?   qN12          If N=12
       1                Go back to one
       +N1              Increment N
)                       Close entire if block 
+                       Concat of hours and minutes
 +                      Concat hours and y/menos
  ?           >N1       If hour greater than one
   +                    Concat of son las and hour
    "Son las "          "Son las "
    @KN                 Index translation array for hour
   "Es la una"          Else es la una
  H                     " y " or " menos "
 ?               <k30   If minutes less than 30
  ?  qk20               If minutes is 20
   ek                   Last element of array (veinte)
   ?   <k16             Else check if minutes<16
    @Kk                 Get minutes directly from array
    +                   Else tens and ones sum
     ?       <k21       If minutes<21
      "dieci"           "dieci"
      +PeK\i            Else get veinti from veinte
     @K%kT              Ones digit of minutes
  "media"               Else get "media"

गोल्फ इतिहास

  • 10 बाइट्स - बोनस, क्वाइंस और ट्राईंटा को केवल ट्रांसलेशन ऐरे में बदला जा सकता है इसलिए ट्रांसलेशन निबंध और उसके समान आकार को छोड़कर किसी भी बदलाव की आवश्यकता नहीं है।
  • 6 बाइट्स - पुनर्गठित टर्नरीज़ - दुर्भाग्य से इसने 4 लगातार टर्नरी ऑपरेटरों को हटा दिया :(
  • 6 बाइट्स - अन्य विभिन्न गोल्फिंग
  • 6 बाइट्स - आरंभिक घंटे / मिनट असाइनमेंट
  • +3 बाइट्स - फिक्स्ड अनो / यूना
  • 3 बाइट्स - शिरा से शिंटी का निर्माण, हार्डकोड नहीं
  • 18 बाइट्स - किशोरावस्था से निकाले गए डिकी <16
  • 2 बाइट्स - बिना किसी कारण के कुछ स्थान हटा दिए
  • 2 बाइट्स - एक चार तार के लिए इस्तेमाल किया

1 वर्ण स्ट्रिंग्स के लिए, जैसे कि ":"और "i", का उपयोग करें \:और \iइसके बजाय।
इसहाक

@isaacg ओह कूल मुझे नहीं पता था कि आप इसे अपडेट कर सकते हैं
माल्टेनसेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.