फ्रेंच में समय बता रहे हैं


21

बोनजोर, पीपीसीजी! क्लेयर ह्यूर इस्ट-इल? इसका मतलब है कि यह फ्रेंच में किस समय है, इसके लिए यह चुनौती है।

फ्रेंच में समय बताना (कम से कम औपचारिक रूप से) अंग्रेजी में समय बताने से थोड़ा अलग है। समय बताने से इल इस्ट (यह है) के साथ शुरू होता है। फिर, आप घंटे को उसके बाद (बजे) लगाते हैं । (यदि आप फ्रेंच नंबर नहीं जानते हैं, तो यहां एक सूची है: http://blogs.transparent.com/french/nrench-nearn-how-to-count-from-1-to-1000/ )। यदि 1 बजे हैं, तो इसके लिए ऊनी करें। दोपहर के लिए, मिडी (बिना हेयर्स के) का उपयोग करें, और आधी रात के लिए मिनिट का उपयोग करें ।

जब तक मिनट 00 नहीं है, तब तक आप मिनटों की संख्या के साथ इसका पालन करें। हालाँकि इसके कुछ अपवाद भी हैं। 15 मिनट के लिए, आप एट क्वार्ट कहना चाहते हैं , और 30 मिनट के लिए आप एट डेमी कहना चाहते हैं । 30 मिनट के बाद कुछ भी के लिए, आप एक के बाद घंटे संख्या में वृद्धि, तो शब्द जोड़ने moins और 60 - मिनट। तो 6:40 PM इल इस्ट सेप्ट हेयर्स विन्ग्ट (vingt = 20) है। 45 मिनट में ले क्वार्ट होगा

अंत में, आप इसे दिन के समय के साथ समाप्त करते हैं। सुबह (1 बजे से 12 बजे) के लिए, आप डु मतिन कहते हैं । दोपहर के लिए (व्यक्तिपरक, लेकिन मैं इसे दोपहर 1 बजे से शाम 5 बजे तक परिभाषित करूंगा), आप कहते हैं कि डे लपरेस-मिडी (तकनीकी रूप से ई के ऊपर एक उच्चारण होना चाहिए, लेकिन एह)। और रात के लिए (शाम 5 बजे से 12 बजे तक) आप डु सोइर कहते हैं । ध्यान दें कि आधी रात और दोपहर ( मिंट और मिडी ) के लिए आप इनमें से कोई भी नहीं डालते हैं - दिन का समय निहित है जिसके आधार पर आप उपयोग करते हैं।

जैसा कि आप शायद पहले से ही पता लगा चुके हैं, यहाँ चुनौती इन नियमों का उपयोग करके फ्रेंच में वर्तमान स्थानीय समय को प्रिंट करने की है। यहाँ नमूना आउटपुट को मिश्रित समय पर कैसा दिखना चाहिए। (कोष्ठक में समय स्पष्ट रूप से मुद्रित करने की आवश्यकता नहीं है, यह सिर्फ इतना है कि आप जानते हैं कि समय क्या है):

Il est sept heures du matin. (7:00 A.M)
Il est deux heures de l'apres-midi. (2:00 P.M)
Il est une heure du matin. (1:00 A.M)
Il est huit heures du soir. (8:00 P.M)
Il est midi. (12:00 P.M, Noon)
Il est minuit. (12:00 A.M, Midnight)
Il est cinq heures vingt du soir. (5:20 P.M)
Il est six heures et quart du matin. (6:15 A.M)
Il est neuf heures et demi du matin. (9:30 A.M)
Il est quatre heures moins dix de l'apres-midi. (3:50 P.M, not 4:50!)
Il est midi moins le quart. (11:45 A.M)

यह कोड-गोल्फ है, इसलिए सबसे छोटा कोड जीतता है। सौभाग्य!

EDIT: अवधि की आवश्यकता है।



उदाहरण के लिए, 08:41 पूर्वाह्न के लिए आउटपुट क्या होना चाहिए? Il est huit heures quarante et une du matin(सही) या Il est neuf heures moins dix-neuf du matin(अजीब लगता है)?
ब्लैकहोल

क्या हमें आवश्यक रूप से परिणाम का उत्पादन करना चाहिए, या क्या हम इसे वापस कर सकते हैं? क्या आंतरिक कार्य हैं जो संख्याओं को संख्याओं में परिवर्तित करते हैं?
ब्लैकहोल

क्या हमें इसमें उच्चारण करना चाहिए après-midi? क्या हम?
ब्लैकहोल

अगर तुम चाहो। यह आवश्यक नहीं है।
एक spaghetto

जवाबों:


4

PHP - 521 473 बाइट्स

मैंने पठनीयता के लिए कुछ नए समाचार जोड़े हैं:

$w=split(A,'AuneAdeuxAtroisAquatreAcinqAsixAseptAhuitAneufAdixAonzeAdouzeAtreizeA
quatorzeAAseizeAdix-septAdix-huitAdix-neufAvingtAvingt et une');$h=idate('H');if(
$r=($m=idate('i'))>30){$h=++$h%24;$m=60-$m;}echo'Il est '.($h?$h==12?midi:$w[$h%12]
.' heure'.($h%12<2?'':s):minuit).($r?' moins':'').($m==15?($r?' le ':' et ').quart
:($m==30?' et demi':($m?' '.($m<22?$w[$m]:"$w[20]-".$w[$m%10]):''))).($h%12?($h-=$r
)<12?' du matin':($h<17?" de l'après-midi":' du soir'):'').'.';

फ्रांसीसी में संख्या को उसके अंक में परिवर्तित करने के लिए उपयोग की जाने वाली विधि edc65 द्वारा एक अन्य चुनौती पर इस उत्तर से प्रेरित है ।

यहाँ ungolfed संस्करण है:

/** Define numerals **/
$numerals = [
    '', 'une', 'deux', 'trois', 'quatre',
    'cinq', 'six', 'sept', 'huit', 'neuf',
    'dix', 'onze', 'douze', 'treize', 'quatorze',
    '', 'seize', 'dix-sept', 'dix-huit', 'dix-neuf',
    'vingt', 'vingt et une'
];

/** Get current time **/
$hours = idate('H');
$minutes = idate('i');

/** Check if we need to count in reverse **/
$reverse = $minutes > 30;
if ($reverse) {
    $hours = ($hours + 1) % 24;
    $minutes = 60 - $minutes;
}

echo 'Il est ';

/** Print hours **/
if ($hours === 12) {
    echo 'midi';
}
else if ($hours === 0) {
    echo 'minuit';
}
else
{
    echo $numerals[$hours % 12] .' heure';
    if ($hours % 12 !== 1) {
        echo 's';
    }
}

/** Print minutes **/
if ($reverse) {
    echo ' moins';
}

if ($minutes === 15)
{
    if ($reverse) {
        echo ' le ';
    }
    else {
        echo ' et ';
    }

    echo 'quart';
}
else if ($minutes === 30) {
    echo ' et demi';
}
else if ($minutes !== 0)
{
    echo ' ';

    if ($minutes < 22) {
        echo $numerals[$minutes];
    }
    else {
        echo $numerals[20] .'-'. $numerals[$minutes % 10];
    }
}

/** Print daytime **/
if ($hours % 12 !== 0)
{
    if ($reverse) {
        --$hours;
    }

    if ($hours < 12) {
        echo ' du matin';
    }
    else if ($hours < 17) {
        echo " de l'après-midi";
    }
    else {
        echo ' du soir';
    }
}

echo '.';

4

पायथन 3, 586 547 556 506 505 502 498 497 493 बाइट्स

कुछ भी गोल्फ में मेरा पहला प्रयास। मैं वास्तव में मेरे चुने जाने के तरीके के बारे में निश्चित नहीं हूं, खासकर nसूची। लेकिन मैं इसे आजमाना चाहता था।

from datetime import*;t=datetime.now()
n='/une/deux/trois/quatre/cinq/six/sept/huit/neuf/dix/onze/douze/treize/quatorze/et quart/seize/dix-sept/dix-huit/dix-neuf/vingt//et demi'.split('/')
n[21:22]=['vingt-'+i for i in['et-une']+n[2:10]]
h,m=t.hour,t.minute;s=h//12;h%=12
e=' d'+('u matin',("e l'après-midi","u soir")[h>4])[s]
try:m=' '[:m]+n[m]
except:m=' moins '+(n[60-m],'le quart')[m==45];h+=1
e,h=('',e,('minuit','midi')[h//12^s],n[h]+' heures'[:h+5])[h%12>0::2]
print('Il est',h+m+e+'.')

Ungolfed:

from datetime import datetime

time = datetime.now()
numbers = [
    '', 'une', 'deux', 'trois', 'quatre',
    'cinq', 'six', 'sept', 'huit', 'neuf',
    'dix', 'onze', 'douze', 'treize', 'quatorze',
    'et quart', 'seize', 'dix-sept', 'dix-huit', 'dix-neuf',
    'vingt', 'vingt-et-une', 'vingt-deux', 'vingt-trois', 'vingt-quatre',
    'vingt-cinq', 'vingt-six', 'vingt-sept', 'vingt-huit', 'vingt-neuf',
    'et demi']

status, hour = divmod(time.hour, 12)
if status:
    ending = " du soir" if h>4 else " de l’après-midi"
else:
    ending = " du matin"

try:
    if not time.minute:
        minutes = ""
    else:
        minutes = " " + numbers[time.minute]
except IndexError:
    hour += 1
    if time.minute == 45:
        minutes = " moins le quart"
    else:
        minutes = " moins " + numbers[60 - time.minute]

if hour%12:    # 'whole' hours
    hours = numbers[hour] + " heures"
    if hour == 1:
        # removing extra 's'
        hours = hours[:-1]
else:          # midnight or noon
    ending = ""
    if (hour == 12 and status) or (hour == 0 and status == 0):
        hours = "minuit"
    else:
        hours = "midi"

print('Il est', hours + minutes + ending + '.')

2
आप कुछ 50 बाइट्स बचा सकते हैं 'minuit#une#deux#...#vingt-neuf#et demi'.split('#')। केवल स्ट्रिंग को किसी तरह कम करने के लिए और भी छोटा हो सकता है।
मार्टिन एंडर

@ मॉर्टिन हाँ, बस इसे ब्लैकहोल के उत्तर पर भी देखा। लेकिन मैं "vingt-xxx" के साथ शामिल पुनरावृत्तियों का उपयोग करके इसे छोटा करने की कोशिश करना चाहता था। लेकिन बाद में कुछ नींद के बाद से इल ड्यूक्स हेयर्स ट्राइस डु मतिन से जुड़ जाता है।
409_कॉन्फ्लिक्ट

@MathiasEttinger ने एक-दो सुधार किए, आपके पास vingt के बजाय 'voingt' है, और 21 'vingt et un' है, न कि 'vingt-et-une'
ब्रायन टक

1
Vingt के लिए धन्यवाद । 21 के लिए मिनट - स्त्रीलिंग के बाद से vingt-et-une होना चाहिए , उसी तरह कि 1:01 AM il est une heure une du matin है।
409_ कॉनफ्लिक्ट

@BrianTuck 21 भी vingt-et-un या vingt-et-une है, 1990 के बजाय vingt et un या vingt et une : fr.wiktionary.org/wiki/vingt_et_une
409_Conflict

3

जावास्क्रिप्ट (ईएस 6), 506 495 बाइट्स

संपादित करें: aकुछ बाइट्स को बचाने के लिए संपीड़ित ।

a=`
un
j
k
yre
h
six
w
v
p}
onldoultreilyorl
seize}-w}-v}-p~~ et un{j{k{yre{h{six{w{v{p
et demi`,[...`hjklpvwy{}~`].map((x,w)=>a=a.split(x).join(`cinq|deux|trois|ze
|neuf|huit|sept|quat|~-|
dix|
vingt`.split`|`[w])),a=a.split`
`,alert(`Il est ${(e=(d=((b=(z=new Date).getHours())+(y=(c=z.getMinutes())>30))%24)%12)?a[e]+` heure${e-1?"s":""}`:d?'midi':'minuit'} ${y?"moins ":""}${y?c-45?a[60-c]:'le quart':c-15?a[c]:'et quart'}${e?[' du matin'," de l'apres-midi",' du soir'][(b>12)+(b>16)]:""}.`)

स्पष्टीकरण:

a = 'compressed string of french numbers with 'et demi' for 30 and 15 removed';
a = // code that decompresses a

// a,b,c,d,e,y,z are all inlined into the first expression that uses them
z = new Date();
b = z.getHours();
c = z.getMinutes();
y = c > 30; // true if 60 - minutes, false otherwise
d = (b + y) % 24; // the next hour if y
e = d % 12; // is it not noon and not midnight?

alert(
    "Il est " +
    // add the hour
    // if d is not 0 or 12, add d + 'heure(s)'
    (e ? a[e] + ` heure${e-1?"s":""}` : d ? 'midi' : 'minuit') +
    " " +
    (y ? "moins " : "") + // add 'moins' if necessary

    ( // add the minute
      y? // necessary to subtract from 60?
        c-45?
          a[60-c] // add normal number word
          :'le quart' // handle special case for 45
        :c-15?
          a[c] // add normal word
          :'et quart' // handle special case for 15
    ) +
    ( // select appropriate ending
      e? // is it not noon and not midnight?
        // create array of endings
        [" du matin"," de l'apres-midi"," du soir"]
          // selects item 0 if b in [0, 12], item 1 if b in [13, 16] and item 2 if b > 16
          [(b > 12) + (b > 16)]
        :"" // if it's noon or midnight, no ending is necessary
    ) +
    "." // add period
)

2

सी, 860 835 794 बाइट्स

बिल्कुल भयावह, लेकिन शायद इसे और भी छोटा किया जा सकता है। इस साइट पर फ़ॉर्मेटिंग उद्देश्यों के लिए कई नए लिंक जोड़े गए थे। वास्तविक स्रोत कोड में #includes और #defines के बाद नई सुर्खियाँ हैं, लेकिन सब कुछ चार * से शुरू होकर अंतिम w ("। \ N") तक;} सभी एक पंक्ति में हैं। मैंने इसे स्ट्रिंग एरे में 22, ..., 29 से मानों को हटाकर छोटा कर दिया, इसके बजाय 2, ..., 9 के लिए स्ट्रिंग्स का पुन: उपयोग किया और उपयुक्त होने पर "vingt-" का प्रीपेडिंग किया। (मैं वास्तव में आशा करता हूं कि मैंने बग नहीं पेश किया है!)

#include <sys/time.h>
#define w printf
#define q tm_min
#define r tm_hour
char*a[]={"minuit","une","deux","trois","quatre","cinq","six","sept","huit","neuf","dix",
"onze","douze","treize","quatorze","quart","seize","dix-sept","dix-huit","dix-
neuf","vingt","vingt-et-une",0,0,0,0,0,0,0,0,"demi"};
h=1,s=1,m,e,l,t,p,o,v;struct tm j;
main(){struct timeval i;gettimeofday(&i,0);localtime_r(&i.tv_sec,&j);
j.q>30?m=1,++j.r,j.q=60-j.q:j.q==15||j.q==30?e=1:0;j.q>21&&j.q<30?v=1:0;
j.r%12?j.r<12?t=1:j.r-m<17?p=1:(o=1):0;
j.q==15&&m?l=1:0;j.r%12?j.r%12==1?s=0:0:(h=0,s=0);
w("Il est ");j.r==12?w("midi"):w("%s",a[j.r%12]);h?w(" heure"):0;s?w("s"):0;
m?w(" moins"):0;e?w(" et"):0;l?w(" le"):0;
j.q?v?w(" vingt-"):w(" "),w("%s",a[j.q-20*v]):0;
t?w(" du matin"):p?w(" de l'apres-midi"):o?w(" du soir"):0;w(".\n");}

ऐशे ही:

#include <sys/time.h>
#define w printf
#define q tm_min
#define r tm_hour
char*a[]={"minuit","une","deux","trois","quatre","cinq","six","sept","huit","neuf","dix","onze","douze","treize","quatorze","quart","seize","dix-sept","dix-huit","dix-neuf","vingt","vingt-et-une",0,0,0,0,0,0,0,0,"demi"};h=1,s=1,m,e,l,t,p,o,v;struct tm j;main(){struct timeval i;gettimeofday(&i,0);localtime_r(&i.tv_sec,&j);j.q>30?m=1,++j.r,j.q=60-j.q:j.q==15||j.q==30?e=1:0;j.q>21&&j.q<30?v=1:0;j.r%12?j.r<12?t=1:j.r-m<17?p=1:(o=1):0;j.q==15&&m?l=1:0;j.r%12?j.r%12==1?s=0:0:(h=0,s=0);w("Il est ");j.r==12?w("midi"):w("%s",a[j.r%12]);h?w(" heure"):0;s?w("s"):0;m?w(" moins"):0;e?w(" et"):0;l?w(" le"):0;j.q?v?w(" vingt-"):w(" "),w("%s",a[j.q-20*v]):0;t?w(" du matin"):p?w(" de l'apres-midi"):o?w(" du soir"):0;w(".\n");}

बिना "स्पेस ऑप्टिमाइज़ेशन" (बहुत बदसूरत):

#include <stdio.h>
#include <string.h>
#include <time.h>

#include <sys/time.h>

int main(int argc, char *argv[])
{
        struct timeval tv;
        struct tm local_time;
        char *nums[] = {"minuit", "une", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quart", "seize", "dix-sept", "dix-huit", "dix-neuf", "vingt", "vingt-et-une", "vingt-deux", "vingt-trois", "vingt-quatre", "vingt-cinq", "vingt-six", "vingt-sept", "vingt-huit", "vingt-neuf", "demi"};
        int heure = 1;
        int s = 1;
        int moins = 0;
        int et = 0;
        int le = 0;
        int matin = 0, aprem = 0, soir = 0;

        memset(&local_time, 0, sizeof local_time);
        gettimeofday(&tv, NULL);
        localtime_r(&tv.tv_sec, &local_time);

#if 0
        local_time.tm_min = atoi(argv[1]);
        local_time.tm_hour = atoi(argv[2]);
#endif
        if (local_time.tm_min > 30) {
                moins = 1;
                local_time.tm_hour += 1;
                local_time.tm_min = 60 - local_time.tm_min;
        } else if (local_time.tm_min == 15 || local_time.tm_min == 30) {
                et = 1;
        }

        if (local_time.tm_hour % 12) {
                if (local_time.tm_hour < 12)
                        matin = 1;
                else if (local_time.tm_hour < 17)
                        aprem = 1;
                else if (local_time.tm_hour == 17 && moins)
                        aprem = 1;
                else
                        soir = 1;
        }

        if (local_time.tm_min == 15 && moins)
                le = 1;

        if (local_time.tm_hour % 12 == 0) {
                heure = 0;
                s = 0;
        } else if (local_time.tm_hour % 12 == 1) {
                s = 0;
        }

        printf("Il est ");

        if (local_time.tm_hour == 12)
                printf("midi");
        else
                printf("%s", nums[local_time.tm_hour % 12]);

        if (heure)
                printf(" heure");

        if (s)
                printf("s");

        if (moins)
                printf(" moins");

        if (et)
                printf(" et");

        if (le)
                printf(" le");

        if (local_time.tm_min)
                printf(" %s", nums[local_time.tm_min]);

        if (matin)
                printf(" du matin");
        else if (aprem)
                printf(" de l'apres-midi");
        else if (soir)
                printf(" du soir");

        printf(".\n");
        return 0;
}

(#If 0 सामान कमांड-लाइन के माध्यम से अलग-अलग समय मानों के परीक्षण के लिए था)।


1
C उत्तर देने के प्रयास के लिए प्रॉप्स :) उजले पक्ष को देखें - यह संभवतः जावा की तुलना में छोटा है!
एक spaghetto
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.